Title: Law of Demeter
1Law of Demeter
2Law 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.
3Law 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.
Dont talk to strangers. - Main Motivation Control information overload. We
can only keep a limited set of items in
short-term memory.
4Law of Demeter
FRIENDS
5closely related
6Application 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.
7Citibank 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.
8Jet 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.
9What others say about the Law of Demeter
- Two examples
- Booch
- Rumbaugh
10Booch and the Law of Demeter
- Context
- Chapter Classes and Objects, Section On
Building Quality Classes and Objects, Subsection
Choosing Relationships -
11Booch 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.
12Rumbaugh and the Law of Demeter
- Context
- Chapter Programming Style, Section Extensibility
13Rumbaugh 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.
14Law 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.
15Agreement 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
16The 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 Am()
- this.b.c.foo() this.p().q().bar()
17Violations Dataflow Diagram
m
foo()
2c
1b
B
C
A
4q()
bar()
3p()
P
Q
18OO Following of LoD
m
foo2
foo()
c
1b
B
C
A
2foo2()
4bar2()
bar2
bar()
3p()
q()
P
Q
19Adaptive Following of LoD
- void Am()
- (C)
- Traversal.long_get(this,A-gtC).foo()
- (Q)
- Traversal.long_get(this,A-gtQ).bar()
- void Am()
- this.b.c.foo() this.p().q().bar() //
violation
20Law of Demeter
FRIENDS
21What 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 dont care about accidental
details of the travel. - Detailed Directions You give them or your agent
detailed travel directions.
22Adaptive Following LoD
C
A
FRIENDS
a
S
X
c
b
aFrom S to A bFrom S to B cFrom S via X
to C
23Traversal strategies create friends
- Class Traversal is an intermediate class between
classes that need to communicate
Traversal.long_get(Object o, Strategy s)
24Are not friends for accidental reasons
- Other classes exist for other reasons
- Ideal class graph all are friends, even far
away classes.