封装原理
有一些面向对象的工程原理,其中规定了“一个类应该只知道它作为参数的类的契约,或者它使用的任何内部契约”。
C++ 中的反例是:
Foo::bar( Baz* baz)
{
baz()->blargh()->pants()->soil(); // this is bad, Foo knows about blarghs and pants
}
这个原理有名字吗? 另外,很高兴看到实际的原理而不是我上面的解释。
There's some object-oriented engineering principle that states something along the lines of "a class should only know about the contracts of the classes that it takes as arguments, or any internal ones it uses."
The counter-example, in C++, is:
Foo::bar( Baz* baz)
{
baz()->blargh()->pants()->soil(); // this is bad, Foo knows about blarghs and pants
}
Does this principle have a name? Also, the actual principle rather than my paraphrase above would be nice to see.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
德米特定律 感谢吉姆·伯格 说:
The law of demeter thanks to Jim Burger says:
这可能会也可能不会编译(由于 baz 指针后面的括号),但您的示例至少打破了我能想到的一个原则。 它违反了德墨忒尔法则(我相信也称为简约法则)。 主要原则可以在这里找到:
坚实的原则
除了这些之外,我不确定您所描述的内容是否有一个具体的名称。 您可以在维基百科上查找德墨忒尔定律。
That may or may not compile (due to the parentheses after the baz pointer), but your example breaks at least one principle that I can think of. It breaks the Law of Demeter (also called the Law of Parsimony, I believe). The main principles can be found here:
S.O.L.I.D. Principles
Aside from these, I'm not sure if there is a specific name for what you're describing. You can look up the Law of Demeter on wikipedia.
看看罗伯特·马丁的 SOLID 原则。 具体来说,请查看单一职责原则。 您的示例中复杂的依赖关系链看起来破坏了 SRP。
封装本身并不是一个原则。 这是实现各种原则的一部分。 还有继承、多态性和其他更晦涩的 OO 特性。
Look at Robert Martin's SOLID principles. Specifically, look at the Single responsibility Principle. The complex chain of dependencies in your example looks like it breaks the SRP.
Encapsulation -- itself -- isn't a principle. It's part of achieving the various principles. Along with inheritance, polymorphism and other more obscure OO features.
我想说的是,良好的封装有助于减少 耦合 - - 这是一个很好的方法除了显而易见的封装之外,任何体面封装的目标都是如此。
I would say here that good encapsulation helps to reduce coupling - - which is a good goal for any decent encapsulation apart from the obvious.