Explanation in plain English:
Here's an exact quote briefly summarizing the topic from a slide for a university course found on the web, maybe it'll help clarify the historical confusion on this page: Law of Demeter
- Your method can call other methods in its class directly
- Your method can call methods on its own fields directly (but not on the fields' fields)
- When your method takes parameters, your method can call methods on those parameters directly.
- When your method creates local objects, that method can call methods on the local objects.
- One should not call methods on a global object (but it can be passed as a parameter ?)
- One should not have a chain of messages a.getB().getC().doSomething() in some class other than a's class.
Here's an exact quote briefly summarizing the topic from a slide for a university course found on the web, maybe it'll help clarify the historical confusion on this page: Law of Demeter
- governs the communication structure within an object-oriented design
- restricts message-sending statements in method implementations
- only talk to your immediate friends
- message target can only be one of the following objects:
- the method's object itself (C++, Java, C#: this; Smalltalk: self, super; VB.NET: Me)
- an object that is an argument in the method's signature
- an object referred to by the object's attribute
- an object created by the method
- an object referred to by a global variable