Object-Oriented Design Principles and Patterns
© 2005, James R. Vallino2 How Do You Design? What principles guide you when you create a design? What considerations are important? When have you done enough design and can begin implementation? Take a piece of paper and write down two principles that guide you - considerations that are important or indicators that you have a good design.
Object-Oriented Design Principles and Patterns © 2005, James R. Vallino3 What Have You Heard About Design? First principles of OOP Find the nouns objects/state Find the verbs behaviors; methods/functions Encapsulation, inheritance Programming Object Interactions Static collaboration diagrams Dynamic sequence diagrams
Object-Oriented Design Principles and Patterns © 2005, James R. Vallino4 What is the Next Level of Design? How do you decide on the class collaborations? Simple: Follow principles of design But there are problems here! What if the principles conflict with each other? –A good class decomposition may have too many connections between classes –Strong encapsulation may lead to performance penalties Does each new design start from first principles? –Abstraction has been our friend –It can help again How can we reliably follow the principles? –Learn from previous designers –Stand on each others' shoulders, not each others' toes.
Object-Oriented Design Principles and Patterns © 2005, James R. Vallino5 Key Design Concepts General Cohesion Coupling Information hiding –Encapsulation –Creation Binding time OO Specific Behaviors follow data Class vs. Interface Inheritance –Class = implementation –Interface = type Inheritance / composition / delegation
Object-Oriented Design Principles and Patterns © 2005, James R. Vallino6 Principles of Successful Design Increase cohesion where possible Separation of concerns Focused experts Decrease coupling where possible Simplify interfaces Reduce connections in number and volume Employ and support reuse Reuse existing designs and code where possible Increase reusability where possible Design for portability
Object-Oriented Design Principles and Patterns © 2005, James R. Vallino7 Principles of Successful Design – 2 Design for Flexibility Orthogonal evolution in many dimensions Anticipate obsolescence Design for testability Use priorities and objectives to decide among alternatives
Object-Oriented Design Principles and Patterns © 2005, James R. Vallino8 Principles of Successful OO Design Prefer type (interface) inheritance over class (implementation) inheritance. Program to the interface, not the implementation. Prefer composition to inheritance: Deferred binding Cost: Performance Use delegation to “simulate” runtime inheritance.
Object-Oriented Design Principles and Patterns © 2005, James R. Vallino9 What Are Patterns? Each pattern describes a problem which occurs over and over again in our environment, and then describes the core of the solution to that problem, in such a way that you can use this solution a million times over, without ever doing it the same way twice. Christopher Alexander A pattern is a general solution to a problem in a context general -- outline of approach only problem -- a recurring issue context -- consider the expected design evolution
Object-Oriented Design Principles and Patterns © 2005, James R. Vallino10 Do You Reinvent the Wheel Each Time? Consider coding idioms! How do you walk through an array in Java? for (i = 0; i < array.length; i++) { // use the array element }
Object-Oriented Design Principles and Patterns © 2005, James R. Vallino11 What Are Design Patterns About? Standard patterns of interactions between classes Design patterns How to apply them to your application Deal with subsystems at the higher level of abstraction provided by the patterns What to do when it does not fit exactly Evaluate options and analyze the trade-offs
Object-Oriented Design Principles and Patterns © 2005, James R. Vallino12 Level for Design Patterns Higher than what you've done before Not specific data structures Not algorithmic approaches Lower than whole architectures or frameworks Not financial systems Not air-traffic control Not J2EE Interactions of 3-10 classes in solution domain, i.e., the small subsystem
Object-Oriented Design Principles and Patterns © 2005, James R. Vallino13 Why Patterns? Design for re-use is difficult Experienced designers: Rarely start from first principles Apply a working "handbook" of approaches Patterns make this ephemeral knowledge available to all Support evaluation of alternatives at higher level of abstraction
Object-Oriented Design Principles and Patterns © 2005, James R. Vallino14 Design Activity Quick design activity This class Individually create a design for the stated problem Collaborate with others, if desired Next class Submit individual design at start of class Groups of students create a consensus design Designs will be presented Designs will be compared and contrasted