2008-11-18 74 views
3

有一些面向对象的工程原理说明了“一个类应该只知道它作为参数所使用的类的合约,或者它所使用的任何内部类的合约”。封装原理

的反例,在C++中,方法是:

Foo::bar(Baz* baz) 
{ 
    baz()->blargh()->pants()->soil(); // this is bad, Foo knows about blarghs and pants 
} 

这是否原则有名字吗?另外,上面的实际原则而不是我的意思是很好看的。

回答

7

law of demeter感谢Jim Burger说:

迪米特法则(LOD),或至少意味着知识的原则,是开发软件,特别是面向对象的程序设计指导。该指南是在1987年底在东北大学发明的,可以简洁地概括为“只与你的直接朋友交谈”。基本概念是一个给定的对象应尽可能少地假设其他任何结构或属性(包括其子部分)。
+0

http://en.wikipedia.org/wiki/Law_of_Demeter – 2008-11-18 02:00:25

0

这可能会也可能不会编译(由于baz指针后面的圆括号),但是您的示例至少打破了我能想到的一个原则。它打破了德米特法则(也被称为简约法则,我相信)。主要原理可以在这里找到: S.O.L.I.D. Principles

除了这些,我不知道是否有一个特定的名称为你所描述的。你可以在wikipedia上查找Demeter法则。

0

我会在这里说,良好的封装有助于减少coupling - - 这是除了显而易见的任何体面封装的好目标。