UML Bibliography • The Unified Modeling Language User Guide Booch et al, Addison-Wesley • UML Toolkit Hans-Erik Eriksson et al, Wiley • UML in a Nutshell Sinan Si Alhir, O’Reilly
General Bibliography • Design Patterns Erich Gamma et al, Addison-Wesley • Applying UML and Patterns Craig Larman, Prentice-Hall • The Practice of Programming Brian Kernighan et al, Addison-Wesley
C++ References • “C++ for Java Programmers” Mark Allen Weiss, Pearson / Prentice Hall • “C++: How to Program", Deitel & Deitel, Prentice Hall • "C++ Primer” Stanley Lippman, Addison-Wesley • "The C++ Programming Language" Bjarne Stroustrup, Addison-Wesley • "The Annotated C++ Reference Manual“ Bjarne Stroustrup and Margareth Ellis, Addison Wesley
• Hardware Engineering: automated mass production of
standard components. • Software Engineering: treat software development as an engineering process. • CASE : Computer-Aided Software Engineering • CASE Tools: Automation of Software Development • The fundamental software component is an object. • An important goal of OO is code reuse.
The Large Picture Computer Science (http://en.wikipedia.org/wiki/Computer_science) The study of the theoretical foundations of information and computation and their implementation and application in computer systems. Computer Science = Data + Data Manipulation
Objects • concepts, concrete or abstract, with meaning derived from the problem domain “the real world” • promote an understanding of the problem domain • provide a basis for implementation • encapsulation of state (data values) and behavior (operations)
Objects (cont.) • Exhibit behavior by invoking a method in response to a message • instances of classes • an object-oriented program is a collection of autonomous interacting and collaborating objects
Classes • objects sharing common characteristics • dictate the behavior of the object • contain – state: attributes, fields, variables, data member – behavior: functions, methods, function member • access specifiers • instantiation • abstract versus concrete
Encapsulation • combination of state and behavior • implementation details are hidden internally • internal mechanisms can change while public interfaces remain stable • state may be retrieved using public methods • behavior consists of methods activated by receipt of messages
Inheritance • organization of classes into a hierarchical inheritance tree • data and behavior associated with classes higher in the tree are accessible to those classes lower in the tree • terminology – ancestor/descendant – superclass/subclass – generalization/specialization
Multiple Inheritance • classes/objects may have more than one parent • ambiguity (name clashes) can occur • allows abstract classes to be more specific in characteristics (kitchen sink problem) • examples: C++, Eiffel
Polymorphism • polymorphism: many forms • localizes responsibility for behavior • object automatically uses correct implementation for a method • many objects can respond to the same message • minimizes interface parameter passing
Polymorphism • determination of method is done at: – run-time: dynamic binding, late binding – compile-time: static binding, early binding • treat many types (all derived from the same type) as if they were all one type • single piece of interface works on all these types
3 Pillars of Object-Orientation • Encapsulation Combine data structures and algorithm together and insulate internal code and data from their interface. Easily to be reused. • Inheritance Reuse the code of the parents as is. • Polymorphism Objects of similar type have the same interface. Easily to be reused.
Relationships • is-a: code reuse through inheritance – instances of a subclass must be more specialized forms of the superclass – instances of a subclass can be used where quantities of the superclass are expected • has-a: code reuse through inclusion – component or contains – instances of a class possess fields of a given type
OOA: Objects & Methods • write description of problem domain • nouns are candidates for objects • verbs are candidates for methods • designs are implementation-language independent • UML can be used to depict the designs