3

有一些面向对象的工程原则表明“一个类应该只知道它作为参数的类的契约,或者它使用的任何内部契约”。

在 C++ 中,反例是:

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

这个原则有名字吗?此外,很高兴看到实际原理而不是我上面的解释。

4

4 回答 4

8

多亏了吉姆·伯格,得墨忒耳定律 说:

得墨忒耳定律 (LoD) 或最少知识原则是开发软件,尤其是面向对象程序的设计指南。该准则是 1987 年底在东北大学发明的,可以简明扼要地概括为“只与你的直系朋友交谈”。基本概念是给定对象应尽可能少地假设其他任何事物(包括其子组件)的结构或属性。
于 2008-11-18T01:42:15.217 回答
0

这可能会也可能不会编译(由于 baz 指针后面的括号),但是您的示例至少违反了我能想到的一个原则。它违反了得墨忒耳法则(我相信也称为简约法则)。主要原则可以在这里找到: SOLID 原则

除此之外,我不确定您所描述的内容是否有特定名称。你可以在维基百科上查阅得墨忒耳法则。

于 2008-11-18T01:43:13.530 回答
0

看看Robert Martin 的 SOLID 原则。具体来说,看看单一职责原则。您的示例中复杂的依赖链看起来像是破坏了 SRP。

封装——本身——不是原则。这是实现各种原则的一部分。除了继承、多态性和其他更晦涩的 OO 特性。

于 2008-11-18T01:51:10.970 回答
0

我想说的是,良好的封装有助于减少耦合——这对于任何体面的封装来说都是一个很好的目标,除了显而易见的。

于 2008-11-27T09:25:15.497 回答