object-oriented design heuristics · 2011-10-11 · object-oriented design heuristics univ.prof....

48
Object-Oriented Design Heuristics Univ.Prof. Dipl.-Ing. Dr. techn. Harald GALL Universität Zürich Technische Universität Wien

Upload: others

Post on 04-Jul-2020

5 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Object-Oriented Design Heuristics · 2011-10-11 · Object-Oriented Design Heuristics Univ.Prof. Dipl.-Ing. Dr. techn. Harald GALL Universität Zürich Technische Universität Wien

Object-Oriented DesignHeuristics

Univ.Prof. Dipl.-Ing. Dr. techn.

Harald GALL

Universität ZürichTechnische Universität Wien

Page 2: Object-Oriented Design Heuristics · 2011-10-11 · Object-Oriented Design Heuristics Univ.Prof. Dipl.-Ing. Dr. techn. Harald GALL Universität Zürich Technische Universität Wien

(c) 2006, Ducasse, Gall

Design Heuristics

• Object-Oriented Design Heuristics by ArthurRiel, Addison-Wesley, 1996.

Page 3: Object-Oriented Design Heuristics · 2011-10-11 · Object-Oriented Design Heuristics Univ.Prof. Dipl.-Ing. Dr. techn. Harald GALL Universität Zürich Technische Universität Wien

(c) 2006, Ducasse, Gall

Goal

• Insights into oo design improvement.

• More than sixty guidelines are language-independent and allow one to rate theintegrity of a software design.

• The heuristics are not written as hard andfast rules; they are meant to serve aswarning mechanisms which allow theflexibility of ignoring the heuristic asnecessary.

Page 4: Object-Oriented Design Heuristics · 2011-10-11 · Object-Oriented Design Heuristics Univ.Prof. Dipl.-Ing. Dr. techn. Harald GALL Universität Zürich Technische Universität Wien

Classes and Objects: TheBuilding Blocks of theObject-Oriented Paradigm

Page 5: Object-Oriented Design Heuristics · 2011-10-11 · Object-Oriented Design Heuristics Univ.Prof. Dipl.-Ing. Dr. techn. Harald GALL Universität Zürich Technische Universität Wien

(c) 2006, Ducasse, Gall

Hidding Data

• Heuristic #2.1All data should be hidden within its class

Page 6: Object-Oriented Design Heuristics · 2011-10-11 · Object-Oriented Design Heuristics Univ.Prof. Dipl.-Ing. Dr. techn. Harald GALL Universität Zürich Technische Universität Wien

(c) 2006, Ducasse, Gall

No Dependence on Clients

• Heuristic #2.2Users of a class must be dependent on itspublic interface, but a class should not bedependent on its users

Page 7: Object-Oriented Design Heuristics · 2011-10-11 · Object-Oriented Design Heuristics Univ.Prof. Dipl.-Ing. Dr. techn. Harald GALL Universität Zürich Technische Universität Wien

(c) 2006, Ducasse, Gall

Support Class = one ClearResponsibility

• Heuristic #2.3Minimize the number of messages in theprotocol of a class

Page 8: Object-Oriented Design Heuristics · 2011-10-11 · Object-Oriented Design Heuristics Univ.Prof. Dipl.-Ing. Dr. techn. Harald GALL Universität Zürich Technische Universität Wien

(c) 2006, Ducasse, Gall

Supporting Polymorphism andCommunication

• Heuristic #2.4Implement a minimal public interface which allclasses understand (e.g. operations such as copy(deep versus shallow), equality testing, prettyprinting, parsing from a ASCII description, etc.).

• To send the same message to different objects• To be able to substitute them

• Example: Object>>printString, Object>>copy…

Page 9: Object-Oriented Design Heuristics · 2011-10-11 · Object-Oriented Design Heuristics Univ.Prof. Dipl.-Ing. Dr. techn. Harald GALL Universität Zürich Technische Universität Wien

(c) 2006, Ducasse, Gall

Clear Public Interface

• Heuristic #2.5Do not put implementations details such ascommon-code private functions into the publicinterface of a class

• Example:☞ Private/protected in C++☞ Private method categories in Smalltalk

• Do not clutter the public interface of a class withitems that clients are not able to use or are notinterested in using

Page 10: Object-Oriented Design Heuristics · 2011-10-11 · Object-Oriented Design Heuristics Univ.Prof. Dipl.-Ing. Dr. techn. Harald GALL Universität Zürich Technische Universität Wien

(c) 2006, Ducasse, Gall

Minimize Classes Interdependencies

• Heuristic #2.7A class should only use operations in thepublic interface of another class or havenothing to do with that class

Page 11: Object-Oriented Design Heuristics · 2011-10-11 · Object-Oriented Design Heuristics Univ.Prof. Dipl.-Ing. Dr. techn. Harald GALL Universität Zürich Technische Universität Wien

(c) 2006, Ducasse, Gall

Support a Class = one Responsibility

• Heuristic #2.8A class should capture one and only one keyabstraction

Page 12: Object-Oriented Design Heuristics · 2011-10-11 · Object-Oriented Design Heuristics Univ.Prof. Dipl.-Ing. Dr. techn. Harald GALL Universität Zürich Technische Universität Wien

(c) 2006, Ducasse, Gall

Strengthen Encapsulation

• Heuristic #2.9Keep related data and behavior in one place

• Spin off non related information into anotherclass

• -> Move Data Close to Behavior

Page 13: Object-Oriented Design Heuristics · 2011-10-11 · Object-Oriented Design Heuristics Univ.Prof. Dipl.-Ing. Dr. techn. Harald GALL Universität Zürich Technische Universität Wien

(c) 2006, Ducasse, Gall

Object: a Cohesive Entity

• Most of the methods defined on a classshould be using most of the instance variablesmost of the time

Page 14: Object-Oriented Design Heuristics · 2011-10-11 · Object-Oriented Design Heuristics Univ.Prof. Dipl.-Ing. Dr. techn. Harald GALL Universität Zürich Technische Universität Wien

(c) 2006, Ducasse, Gall

Roles vs. Classes

• Heuristic #2.11Be sure the abstractions you model areclasses and not the roles objects play

• Are mother and father classes or role ofPerson?

• No magic answer: Depends on the domain• Do they have different behavior? So they are

more distinct classes

Page 15: Object-Oriented Design Heuristics · 2011-10-11 · Object-Oriented Design Heuristics Univ.Prof. Dipl.-Ing. Dr. techn. Harald GALL Universität Zürich Technische Universität Wien

Topologies of Action-Oriented Vs. Object-Oriented Applications

Page 16: Object-Oriented Design Heuristics · 2011-10-11 · Object-Oriented Design Heuristics Univ.Prof. Dipl.-Ing. Dr. techn. Harald GALL Universität Zürich Technische Universität Wien

(c) 2006, Ducasse, Gall

Support one Class = oneResponsibility

• Heuristic #3.1Distribute system intelligence horizontally asuniformly as possible, i.e., the top-levelclasses in a design should share the work

Page 17: Object-Oriented Design Heuristics · 2011-10-11 · Object-Oriented Design Heuristics Univ.Prof. Dipl.-Ing. Dr. techn. Harald GALL Universität Zürich Technische Universität Wien

(c) 2006, Ducasse, Gall

Support one Class = oneResponsibility

• Heuristic #3.2Do not create god classes/objects (classesthat control all other classes). Be verysuspicious of classes whose name containsDriver, Manager, System, SubSystem

Page 18: Object-Oriented Design Heuristics · 2011-10-11 · Object-Oriented Design Heuristics Univ.Prof. Dipl.-Ing. Dr. techn. Harald GALL Universität Zürich Technische Universität Wien

(c) 2006, Ducasse, Gall

Model and Interfaces

• Heuristic #3.5Model should never be dependent on theinterface that represents it. The interfaceshould be dependent on the model

• What is happening if you want two differentUIs for the same model?

Page 19: Object-Oriented Design Heuristics · 2011-10-11 · Object-Oriented Design Heuristics Univ.Prof. Dipl.-Ing. Dr. techn. Harald GALL Universität Zürich Technische Universität Wien

(c) 2006, Ducasse, Gall

Basic Checks for God Class Detection

• Heuristic #3.3Beware of classes that have many accessor methodsdefined in their public interface. May imply that dataand behavior is not being kept at the same place

• Heuristic #3.4Beware of classes having methods that only operateon a proper subset of the instance variables.

Page 20: Object-Oriented Design Heuristics · 2011-10-11 · Object-Oriented Design Heuristics Univ.Prof. Dipl.-Ing. Dr. techn. Harald GALL Universität Zürich Technische Universität Wien

(c) 2006, Ducasse, Gall

One Class: One Responsibility

• One responsibility: coordinating and usingother objects☞OrderedCollection maintains a list of objects

sorted by arrival order: two indexes and a list

• Class should not contain more objects than adeveloper can fit in his short-term memory.(6 or 7 is the average value)

Page 21: Object-Oriented Design Heuristics · 2011-10-11 · Object-Oriented Design Heuristics Univ.Prof. Dipl.-Ing. Dr. techn. Harald GALL Universität Zürich Technische Universität Wien

(c) 2006, Ducasse, Gall

Classes Evaluation

• Model the real world whenever possible

• Eliminate irrelevant classes

• Eliminate classes that are outside of the system

• A method is not a class. Be suspicious of any classwhose name is a verb or derived from a verb,especially those that only one piece of meaningfulbehavior

Page 22: Object-Oriented Design Heuristics · 2011-10-11 · Object-Oriented Design Heuristics Univ.Prof. Dipl.-Ing. Dr. techn. Harald GALL Universität Zürich Technische Universität Wien

The Relationships BetweenClasses and Objects

Page 23: Object-Oriented Design Heuristics · 2011-10-11 · Object-Oriented Design Heuristics Univ.Prof. Dipl.-Ing. Dr. techn. Harald GALL Universität Zürich Technische Universität Wien

(c) 2006, Ducasse, Gall

Minimizing Coupling between Classes

• Minimize the number of classes with whichanother class collaborates

• Minimize the number of messages sentbetween a class and its collaborators☞Counter example: Visitor pattern

• Minimize the number of different messagessent between a class and its collaborators

Page 24: Object-Oriented Design Heuristics · 2011-10-11 · Object-Oriented Design Heuristics Univ.Prof. Dipl.-Ing. Dr. techn. Harald GALL Universität Zürich Technische Universität Wien

(c) 2006, Ducasse, Gall

About the Use Relationship

• When an object use another one it should get areference on it to interact with it

• Ways to get references☞ (containment) instance variables of the class☞ Passed has argument

☞ Ask to a third party object (mapping…)

☞ Create the object and interact with it (coded in class:kind of DNA)

Page 25: Object-Oriented Design Heuristics · 2011-10-11 · Object-Oriented Design Heuristics Univ.Prof. Dipl.-Ing. Dr. techn. Harald GALL Universität Zürich Technische Universität Wien

(c) 2006, Ducasse, Gall

Containment and Uses

• Heuristic #4.5If a class contains object of another class, then thecontaining class should be sending messages to thecontained objects (the containment relationshipshould always imply a uses relationships)

• A object may know what it contains but it shouldnot know who contains it.

Page 26: Object-Oriented Design Heuristics · 2011-10-11 · Object-Oriented Design Heuristics Univ.Prof. Dipl.-Ing. Dr. techn. Harald GALL Universität Zürich Technische Universität Wien

(c) 2006, Ducasse, Gall

Coherence in Classes

• Heuristic #4.6Most of the methods defined on a class should beusing most of the data members most of the time.

• Heuristic #4.7Classes should not contain more objects than adeveloper can fit in his or her short term memory.A favorite value for this number is six.

• Heuristic #4.8Distribute system intelligence vertically downnarrow and deep containment hierarchies.

Page 27: Object-Oriented Design Heuristics · 2011-10-11 · Object-Oriented Design Heuristics Univ.Prof. Dipl.-Ing. Dr. techn. Harald GALL Universität Zürich Technische Universität Wien

(c) 2006, Ducasse, Gall

Representing Semantics Constraints

• How do we represent possibilities or constraintsbetween classes?☞ Appetizer, entrée, main dish…

☞ No peas and corn together…

• It is best to implement them in terms of classdefinition but this may lead to class proliferation

• => implemented in the creation method

Page 28: Object-Oriented Design Heuristics · 2011-10-11 · Object-Oriented Design Heuristics Univ.Prof. Dipl.-Ing. Dr. techn. Harald GALL Universität Zürich Technische Universität Wien

(c) 2006, Ducasse, Gall

Objects define their logic

• Heuristic #4.9When implementing semantic constraints inthe constructor of a class, place theconstraint definition as far down acontainment hierarchy as the domain allows

=> Objects should contain the semanticconstraints about themselves

Page 29: Object-Oriented Design Heuristics · 2011-10-11 · Object-Oriented Design Heuristics Univ.Prof. Dipl.-Ing. Dr. techn. Harald GALL Universität Zürich Technische Universität Wien

(c) 2006, Ducasse, Gall

Third party constraint holder

• Heuristic #4.11The semantic information on which a constraint isbased is best placed in a central third-party objectwhen that information is volatile.

• Heuristic #4.12The semantic information on which a constraint isbased is best decentralized among the classesinvolved in the constraint when that information isstable.

Page 30: Object-Oriented Design Heuristics · 2011-10-11 · Object-Oriented Design Heuristics Univ.Prof. Dipl.-Ing. Dr. techn. Harald GALL Universität Zürich Technische Universität Wien

The InheritanceRelationship

Page 31: Object-Oriented Design Heuristics · 2011-10-11 · Object-Oriented Design Heuristics Univ.Prof. Dipl.-Ing. Dr. techn. Harald GALL Universität Zürich Technische Universität Wien

(c) 2006, Ducasse, Gall

Classes - Subclasses

• Superclass should not know its subclasses

• Subclasses should not use directly data ofsuperclasses

• If two or more classes have common dataand behavior, they should inherit from acommon class that captures those data andbehavior

Page 32: Object-Oriented Design Heuristics · 2011-10-11 · Object-Oriented Design Heuristics Univ.Prof. Dipl.-Ing. Dr. techn. Harald GALL Universität Zürich Technische Universität Wien

(c) 2006, Ducasse, Gall

Inheritancs for Specialization

• Heuristic #5.1Inheritance should only be used to model aspecialization hierarchy.

• Vererbung ist ein White-box-Entwurf• Aggregation oder Komposition definieren einen

Black-box-Entwurf• Richtiger Einsatz von Vererbung erleichtert das

Programmverständnis enorm!

Page 33: Object-Oriented Design Heuristics · 2011-10-11 · Object-Oriented Design Heuristics Univ.Prof. Dipl.-Ing. Dr. techn. Harald GALL Universität Zürich Technische Universität Wien

(c) 2006, Ducasse, Gall

Base Class Knowledge

• Heuristic #5.2Derived classes must have knowledge oftheir base class by definition, but baseclasses should not know anything about theirderived classes.

Page 34: Object-Oriented Design Heuristics · 2011-10-11 · Object-Oriented Design Heuristics Univ.Prof. Dipl.-Ing. Dr. techn. Harald GALL Universität Zürich Technische Universität Wien

(c) 2006, Ducasse, Gall

Base Class Data is Private

• Heuristic #5.3• All data in a base class should be private, i.e.

do not use protected data.

Page 35: Object-Oriented Design Heuristics · 2011-10-11 · Object-Oriented Design Heuristics Univ.Prof. Dipl.-Ing. Dr. techn. Harald GALL Universität Zürich Technische Universität Wien

(c) 2006, Ducasse, Gall

Inheritance Depth

• Heuristic #5.4Theoretically, inheritance hierarchies shouldbe deep, i.e. the deeper the better.

• Heuristic #5.5Pragmatically, inheritance hierarchies shouldbe no deeper than an average person cankeep in their short term memory. A popularvalue for this depth is six.

Page 36: Object-Oriented Design Heuristics · 2011-10-11 · Object-Oriented Design Heuristics Univ.Prof. Dipl.-Ing. Dr. techn. Harald GALL Universität Zürich Technische Universität Wien

(c) 2006, Ducasse, Gall

Controversial

• All abstract classes must be base classes

• All base classes should be abstract classes☞> Not true they can have default value method

Page 37: Object-Oriented Design Heuristics · 2011-10-11 · Object-Oriented Design Heuristics Univ.Prof. Dipl.-Ing. Dr. techn. Harald GALL Universität Zürich Technische Universität Wien

(c) 2006, Ducasse, Gall

Interfaces

• Heuristic #5.8Factor the commonality of data, behavior, and/orinterface as high as possible in the inheritancehierarchy.

• Heuristic #5.10If two or more classes have common data andbehavior (i.e. methods) then those classes shouldeach inherit from a common base class whichcaptures those data and methods.

Page 38: Object-Oriented Design Heuristics · 2011-10-11 · Object-Oriented Design Heuristics Univ.Prof. Dipl.-Ing. Dr. techn. Harald GALL Universität Zürich Technische Universität Wien

(c) 2006, Ducasse, Gall

Inheritance (2)

• Heuristic #5.9If two or more classes only share common data (nocommon behavior) then that common data shouldbe placed in a class which will be contained by eachsharing class.

• Heuristic #5.11If two or more classes only share common interface(i.e. messages, not methods) then they shouldinherit from a common base class only if they willbe used polymorphically.

Page 39: Object-Oriented Design Heuristics · 2011-10-11 · Object-Oriented Design Heuristics Univ.Prof. Dipl.-Ing. Dr. techn. Harald GALL Universität Zürich Technische Universität Wien

(c) 2006, Ducasse, Gall

Avoid Type Checks

• Explicit case analysis on the type of an objects isusually an error.

• An object is responsible of deciding how to answerto a message

• A client should send message and not discriminatemessages sent based on receiver type

Page 40: Object-Oriented Design Heuristics · 2011-10-11 · Object-Oriented Design Heuristics Univ.Prof. Dipl.-Ing. Dr. techn. Harald GALL Universität Zürich Technische Universität Wien

(c) 2006, Ducasse, Gall

Dynamic semantics

• Heuristic #5.14Do not model the dynamic semantics of a classthrough the use of the inheritance relationship. Anattempt to model dynamic semantics with a staticsemantic relationship will lead to a toggling of typesat runtime.

• Heuristic #5.15Do not turn objects of a class into derived classesof the class. Be very suspicious of any derived classfor which there is only one instance.

Page 41: Object-Oriented Design Heuristics · 2011-10-11 · Object-Oriented Design Heuristics Univ.Prof. Dipl.-Ing. Dr. techn. Harald GALL Universität Zürich Technische Universität Wien

Multiple Inheritance

Page 42: Object-Oriented Design Heuristics · 2011-10-11 · Object-Oriented Design Heuristics Univ.Prof. Dipl.-Ing. Dr. techn. Harald GALL Universität Zürich Technische Universität Wien

(c) 2006, Ducasse, Gall

Prove Multiple Inheritance

• Heuristic #6.1• If you have an example of multiple

inheritance in your design, assume you havemade a mistake and prove otherwise.

Page 43: Object-Oriented Design Heuristics · 2011-10-11 · Object-Oriented Design Heuristics Univ.Prof. Dipl.-Ing. Dr. techn. Harald GALL Universität Zürich Technische Universität Wien

(c) 2006, Ducasse, Gall

Question it

• Heuristic #6.2• Whenever there is inheritance in an object-oriented

design ask yourself two questions: 1) Am I a specialtype of the thing I'm inheriting from? and 2) Is thething I'm inheriting from part of me?

• Heuristic #6.3• Whenever you have found a multiple inheritance

relationship in a object-oriented design be sure thatno base class is actually a derived class of anotherbase class, i.e. accidental multiple inheritance.

Page 44: Object-Oriented Design Heuristics · 2011-10-11 · Object-Oriented Design Heuristics Univ.Prof. Dipl.-Ing. Dr. techn. Harald GALL Universität Zürich Technische Universität Wien

The AssociationRelationship

Page 45: Object-Oriented Design Heuristics · 2011-10-11 · Object-Oriented Design Heuristics Univ.Prof. Dipl.-Ing. Dr. techn. Harald GALL Universität Zürich Technische Universität Wien

(c) 2006, Ducasse, Gall

Containment

• Heuristic #7.1• When given a choice in an object-oriented

design between a containment relationshipand an association relationship, choose thecontainment relationship.

Page 46: Object-Oriented Design Heuristics · 2011-10-11 · Object-Oriented Design Heuristics Univ.Prof. Dipl.-Ing. Dr. techn. Harald GALL Universität Zürich Technische Universität Wien

Class Specific Data andBehavior

Page 47: Object-Oriented Design Heuristics · 2011-10-11 · Object-Oriented Design Heuristics Univ.Prof. Dipl.-Ing. Dr. techn. Harald GALL Universität Zürich Technische Universität Wien

(c) 2006, Ducasse, Gall

Use of Class Variables & Methods

• Heuristic #8.1• Do not use global data or functions to

perform bookkeeping information on theobjects of a class, class variables or methodsshould be used instead.

Page 48: Object-Oriented Design Heuristics · 2011-10-11 · Object-Oriented Design Heuristics Univ.Prof. Dipl.-Ing. Dr. techn. Harald GALL Universität Zürich Technische Universität Wien

(c) 2006, Ducasse, Gall

Summary

• Use the guidelines for☞insightful analysis☞critical reviews☞as guide for better oo design☞to build reusable components and

frameworks