Принцип инкапсуляции - PullRequest
3 голосов
/ 18 ноября 2008

Существует некоторый объектно-ориентированный инженерный принцип, который гласит что-то вроде «класс должен знать только о контрактах классов, которые он принимает в качестве аргументов, или о любых внутренних, которые он использует».

Контрпример в C ++:

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

У этого принципа есть имя? Кроме того, фактический принцип, а не мой парафраз выше, было бы приятно видеть.

Ответы [ 4 ]

7 голосов
/ 18 ноября 2008

Закон Деметры благодаря Джиму Бургеру говорит:

Закон Деметры (LoD), или Принцип Наименьшего Знания, является руководством по проектированию для разработки программного обеспечения, особенно объектно-ориентированных программ. Руководство было изобретено в Северо-Восточном университете в конце 1987 года и может быть кратко изложено как «Говорите только со своими непосредственными друзьями». Фундаментальное представление состоит в том, что данный объект должен как можно меньше предполагать о структуре или свойствах чего-либо еще. (включая его подкомпоненты).
0 голосов
/ 27 ноября 2008

Я бы сказал здесь, что хорошая инкапсуляция помогает уменьшить связь - - что является хорошей целью для любой достойной инкапсуляции, кроме очевидной.

0 голосов
/ 18 ноября 2008

Посмотрите на ТВЕРДЫЕ принципы Роберта Мартина . В частности, посмотрите на принцип единоличной ответственности . Сложная цепочка зависимостей в вашем примере выглядит так, как будто она нарушает SRP.

Инкапсуляция - сама по себе - не принцип. Это часть достижения различных принципов. Наряду с наследованием, полиморфизмом и другими более неясными особенностями ОО.

0 голосов
/ 18 ноября 2008

Это может или не может компилироваться (из-за скобок после указателя baz), но ваш пример нарушает хотя бы один принцип, который я могу придумать. Это нарушает закон Деметры (я думаю, он также называется законом скупости). Основные принципы можно найти здесь: S.O.L.I.D. Принципы

Кроме них, я не уверен, есть ли конкретное имя для того, что вы описываете. Вы можете посмотреть Закон Деметры в Википедии.

...