【问题标题】:Encapsulation Principle封装原理
【发布时间】:2008-11-18 01:34:10
【问题描述】:

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

C++ 中的反例是:

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

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

【问题讨论】:

    标签: oop encapsulation law-of-demeter


    【解决方案1】:

    law of demeter 感谢Jim Burger 说:

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

    【讨论】:

    • @[Jim Burger]:谢谢,已编辑答案以包含链接和引用
    • 呃,是吉姆,不是金。无论如何,这不仅仅适用于面向对象的编程。
    • @[Harleqin]:哎呀!错字已修复。
    【解决方案2】:

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

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

    【讨论】:

      【解决方案3】:

      看看Robert Martin's SOLID principles。具体来说,查看Single responsibility Principle。您的示例中复杂的依赖链看起来像是破坏了 SRP。

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

      【讨论】:

        【解决方案4】:

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2011-04-16
          • 2016-11-10
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2016-10-15
          • 2018-04-27
          • 1970-01-01
          相关资源
          最近更新 更多