有一些面向对象的工程原则表明“一个类应该只知道它作为参数的类的契约,或者它使用的任何内部契约”。
在 C++ 中,反例是:
Foo::bar( Baz* baz)
{
baz()->blargh()->pants()->soil(); // this is bad, Foo knows about blarghs and pants
}
这个原则有名字吗?此外,很高兴看到实际原理而不是我上面的解释。
有一些面向对象的工程原则表明“一个类应该只知道它作为参数的类的契约,或者它使用的任何内部契约”。
在 C++ 中,反例是:
Foo::bar( Baz* baz)
{
baz()->blargh()->pants()->soil(); // this is bad, Foo knows about blarghs and pants
}
这个原则有名字吗?此外,很高兴看到实际原理而不是我上面的解释。
这可能会也可能不会编译(由于 baz 指针后面的括号),但是您的示例至少违反了我能想到的一个原则。它违反了得墨忒耳法则(我相信也称为简约法则)。主要原则可以在这里找到: SOLID 原则
除此之外,我不确定您所描述的内容是否有特定名称。你可以在维基百科上查阅得墨忒耳法则。
看看Robert Martin 的 SOLID 原则。具体来说,看看单一职责原则。您的示例中复杂的依赖链看起来像是破坏了 SRP。
封装——本身——不是原则。这是实现各种原则的一部分。除了继承、多态性和其他更晦涩的 OO 特性。
我想说的是,良好的封装有助于减少耦合——这对于任何体面的封装来说都是一个很好的目标,除了显而易见的。