有一些面向对象的工程原理,它说的是“一个类应该只知道它作为参数所使用的类的合同,或者它所使用的任何内部合同。”
C ++中的反例是:
Foo::bar( Baz* baz)
{
baz()->blargh()->pants()->soil(); // this is bad, Foo knows about blarghs and pants
}
这个原则有名字吗?而且,实际的原则而不是我上面的释义会很高兴看到。
答案 0 :(得分:7)
感谢law of demeter 的Jim Burger 说:
Demeter法则(LoD)或最小知识原理是开发软件,特别是面向对象程序的设计指南。该指南是在1987年底在东北大学发明的,可以简洁地概括为“只与你的直接朋友交谈。”基本概念是一个给定的对象应该尽可能少地假设其他任何东西的结构或属性。 (包括其子组件)。
答案 1 :(得分:0)
可能编译也可能不编译(由于baz指针后面的括号),但是你的例子打破了至少一个我能想到的原则。它打破了得墨忒耳法则(我相信也称为简约法则)。主要原则可以在这里找到: S.O.L.I.D. Principles
除此之外,我不确定您所描述的内容是否有特定名称。您可以在维基百科上查找Demeter法则。
答案 2 :(得分:0)
看看Robert Martin's SOLID principles。具体来说,请查看Single responsibility Principle。您示例中的复杂依赖链看起来像是破坏了SRP。
封装 - 本身 - 不是一个原则。这是实现各种原则的一部分。随着继承,多态和其他更加模糊的OO功能。
答案 3 :(得分:0)
我想在这里说良好的封装有助于减少coupling - 这对于任何体面的封装来说都是一个很好的目标。