2008-11-18 3 views
3

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

Контр-пример, в C++, является:

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

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

ответ

7

В law of demeter благодаря Jim Burger говорит:

Закон Деметры (LOD), или принцип наименьшего знаний, является дизайн ориентиром для разработки программного обеспечения, в частности, объектно-ориентированных программ. Руководство было изобретено в Северо-Восточном университете в конце 1987 года и может быть кратко изложено как «Только поговорить с вашими ближайшими друзьями». Основное понятие состоит в том, что данный объект должен как можно меньше предполагать о структуре или свойствах чего-либо еще (включая его подкомпоненты).
+0

http://en.wikipedia.org/wiki/Law_of_Demeter – 2008-11-18 02:00:25

0

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

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

0

Посмотрите на Robert Martin's SOLID principles. В частности, посмотрите на Single responsibility Principle. Сложная цепочка зависимостей в вашем примере выглядит так, как будто она разбивает SRP.

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

0

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

Смежные вопросы