24
Law of Demeter

Law of Demeter

  • Upload
    randi

  • View
    42

  • Download
    0

Embed Size (px)

DESCRIPTION

Law of Demeter. Law of Demeter. What is it: Style Rule for building systems. Proposed by my research group: The Demeter Research Group in 1987, published in 1988. Covered in many major books on OO design and programming. Law of Demeter Principle. - PowerPoint PPT Presentation

Citation preview

Page 1: Law of Demeter

Law of Demeter

Page 2: Law of Demeter

Law of Demeter

• What is it: Style Rule for building systems.

• Proposed by my research group: The Demeter Research Group in 1987, published in 1988.

• Covered in many major books on OO design and programming.

Page 3: Law of Demeter

Law of Demeter Principle

• Each unit should only use a limited set of other units: only units “closely” related to the current unit.

• “Each unit should only talk to its friends.” “Don’t talk to strangers.”

• Main Motivation: Control information overload. We can only keep a limited set of items in short-term memory.

Page 4: Law of Demeter

Law of Demeter

FRIENDS

Page 5: Law of Demeter

“closely related”

Page 6: Law of Demeter

Application to OO

• Unit = method– closely related =

• methods of class of this/self and other argument classes

• methods of immediate part classes (classes that are return types of methods of class of this/self)

• In the following we talk about this application of the Law of Demeter Principle to OO: example follows in a few slides.

Page 7: Law of Demeter

Citibank Quote: Law of Demeter

• The Law of Demeter forms one of the cornerstones of the design approach of the Global Finance Application Architecture (quote from: Global Finance Application Architecture: Business Elements Analysis, Oct. 1991, Citibank confidential document)

• Widely used in big projects, for example, at JPL for the Mars exploration software.

Page 8: Law of Demeter

Jet Propulsion Laboratory(JPL) Quote: Law of Demeter

• The Law of Demeter … has taken a firm hold in many areas of JPL. Major systems which have used LoD extensively include … Mars Pathfinder Software (begun in 1993). We are going to use LoD as a foundational software engineering principle for the X2000 Europa orbiter mission.

Page 9: Law of Demeter

What others say about the Law of Demeter

• Two examples:– Booch– Rumbaugh

Page 10: Law of Demeter

Booch and the Law of Demeter

Context

Chapter: Classes and Objects, Section: On Building Quality Classes and Objects, Subsection: Choosing Relationships

Page 11: Law of Demeter

Booch and the Law of Demeter

Quote: The basic effect of applying this Law is the creation of loosely coupled classes, whose implementation secrets are encapsulated. Such classes are fairly unencumbered, meaning that to understand the meaning of one class, you need not understand the details of many other classes.

Page 12: Law of Demeter

Rumbaugh and the Law of Demeter

Context

Chapter: Programming Style, Section: Extensibility

Page 13: Law of Demeter

Rumbaugh and the Law of Demeter

Quote: Avoid traversing multiple links or methods. A method should have limited knowledge of an object model. A method must be able to traverse links to obtain its neighbors and must be able to call operations on them, but it should not traverse a second link from the neighbor to a third class.

Page 14: Law of Demeter

Law of Demeter(alternative formulation)

A method should have limited knowledge of an object model.

Leads to another Demeter favorite: Use grammars to define both class structure and an application-specific language. See the Structure-Shy Object Pattern.

Page 15: Law of Demeter

Agreement that LoD Good Idea

• How to follow LoD: good solutions exist but not widely known. Two approaches to following LoD:– OO approach– Adaptive approaches

• Traversal support • APPC • DemeterJ

Page 16: Law of Demeter

The Law of Demeter (cont.)Violation of the Law

class A {public: void m(); P p(); B b; };

class B {public: C c; };

class C {public: void foo(); };

class P {public: Q q(); };

class Q {public: void bar(); };

void A::m() {

this.b.c.foo(); this.p().q().bar();}

Page 17: Law of Demeter

Violations: Dataflow Diagram

AB C

1:b 2:c

P Q

3:p()

4:q()

foo()

bar()

m

Page 18: Law of Demeter

OO Following of LoD

AB C

1:b c

P Q3:p() q()

foo()

bar()

m

2:foo2()

4:bar2()

foo2

bar2

Page 19: Law of Demeter

Adaptive Following of LoD

void A::m() {

(C)

Traversal.long_get(this,”A->C”).foo();

(Q)

Traversal.long_get(this,”A->Q”).bar();}

void A::m() {

this.b.c.foo(); this.p().q().bar();} // violation

Page 20: Law of Demeter

Law of Demeter

FRIENDS

Page 21: Law of Demeter

What if your friends are far away?

• You pay them to travel to you or you send an agent to them to collect the information you need.– Approximate Directions: You give them or

your agent directions about what kind of information to collect but you don’t care about accidental details of the travel.

– Detailed Directions: You give them or your agent detailed travel directions.

Page 22: Law of Demeter

Adaptive Following LoDFRIENDS

S

A

b

C

X

a:From S to Ab:From S to B c:From S via X to C

a

c

Page 23: Law of Demeter

Traversal strategies create friends

• Class Traversal is an intermediate class between classes that need to communicate

Traversal.long_get(Object o, Strategy s)

Page 24: Law of Demeter

Are not friends for accidental reasons

• Other classes exist for other reasons

• Ideal class graph: all are friends, even “far” away classes.