封装原理

发布于 2024-07-09 15:48:25 字数 270 浏览 11 评论 0原文

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

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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

烟燃烟灭 2024-07-16 15:48:25

德米特定律 感谢吉姆·伯格 说:

德米特法则 (LoD),或称最少知识原则,是开发软件(尤其是面向对象程序)的设计指南。 该指南是东北大学于 1987 年底发明的,可以简洁地概括为“只与你最亲密的朋友交谈”。 基本概念是给定对象应该尽可能少地假设其他任何事物(包括其子组件)的结构或属性。

The law of demeter thanks to Jim Burger says:

The Law of Demeter (LoD), or Principle of Least Knowledge, is a design guideline for developing software, particularly object-oriented programs. The guideline was invented at Northeastern University towards the end of 1987, and can be succinctly summarized as “Only talk to your immediate friends.” The fundamental notion is that a given object should assume as little as possible about the structure or properties of anything else (including its subcomponents).

酒解孤独 2024-07-16 15:48:25

这可能会也可能不会编译(由于 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.

呆° 2024-07-16 15:48:25

看看罗伯特·马丁的 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.

宣告ˉ结束 2024-07-16 15:48:25

我想说的是,良好的封装有助于减少 耦合 - - 这是一个很好的方法除了显而易见的封装之外,任何体面封装的目标都是如此。

I would say here that good encapsulation helps to reduce coupling - - which is a good goal for any decent encapsulation apart from the obvious.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文