Закон Деметры

Закон Деметры

Закон Деметры (англ. Law of Demeter, LoD) — правило дизайна при разработке программного обеспечения, в частности объектно-ориентированных программ. Обобщенно, Закон Деметры является специальным случаем слабой связности (Loose coupling). Это правило было придумано в конце 1987 в северовосточном Университете (Бостон, Массачусетс, США).

Простыми словами каждый программный модуль должен отвечать следующим требованиям:

  • должен обладать ограниченным знанием о других модулях: знать о модулях, которые имеют «непосредственное» отношение к этому модулю.
  • должен взаимодействовать только с известными ему модулями «друзьями», не взаимодействовать с незнакомцами.
  • обращаться только к непосредственным «друзьям».

Аналогия из жизни. Если Вы хотите, чтобы собака побежала, глупо командовать ее ногами, лучше отдать команду собаке, а она уже разберется со своими ногами сама.

Основной идеей является то, что объект должен иметь как можно меньше представления о структуре и свойствах чего угодно (включая собственные подкомпоненты).

Название взято из проекта «Деметра», который использовал идеи аспектно-ориентированного и адаптивного программирования. Проект был назван в честь Деметры, греческой богини земледелия, чтобы подчеркнуть достоинства философии программирования «снизу-вверх».

Содержание

В объектно-ориентированном программировании

Общее описание правила: Объект A не должен иметь возможность получить непосредственный доступ к объекту C, если у объекта A есть доступ к объекту B и у объекта B есть доступ к объекту C.

Более формально, Закон Деметры для функций требует, что метод М объекта О должен вызывать методы только следующих типов объектов:

  • собственно самого О
  • параметров М
  • других объектов, созданных в рамках М
  • прямых компонентных объектов О
  • глобальных переменных, доступных О, в пределах М


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

Использование процесса внедрения зависимостей способствует[1] соблюдению Закона Деметры.


Многоярусная архитектура может также рассматриваться, как пример реализации Закона Деметры в программной системе.
В такой архитектуре код каждого яруса может вызвать только код своего и низшего яруса. Вызов "через ярус" является нарушением многоярусной архитектуры.

Пример кода

Таким образом, код a.b.Method() нарушает Закон Деметры, а код a.Method() является корректным.

Преимущества и недостатки

Преимущества

Преимуществами Закона Деметры является то, что код разработанный с соблюдением данного закона делает написание тестов более простым[2], а разработанное программное обеспечение менее сложно при поддержке и имеет большие возможности повторного использования кода. Так как объекты являются менее зависимыми от внутренней структуры других объектов, контейнеры объектов могут быть изменены без модификации вызывающих объектов (клиентов).

Недостатки

Недостатком Закона Деметры является то, что иногда требуется создание большого количества малых методов-адаптеров (делегатов), для передачи вызовов метода к внутренним компонентам.

Примечания

Ссылки



Wikimedia Foundation. 2010.

Игры ⚽ Поможем сделать НИР

Полезное


Смотреть что такое "Закон Деметры" в других словарях:

  • Связанность (программирование) — Связанность (англ. coupling) или зависимость (англ. dependency) характеристика взаимосвязи модуля с другими модулями. Это степень, в которой каждый программный модуль полагается на другие модули. Связанность обычно… …   Википедия

  • Греция — I Греция         Древняя, Эллада (греч. Hellás), общее название территории древнегреческих государств, занимавших Ю. Балканского полуострова, острова Эгейского моря, побережье Фракии, западную береговую полосу Малой Азии и распространивших своё… …   Большая советская энциклопедия

  • Язычество греко-римское — § 1) Анимизм в тесном смысле слова (культ душ). Древнейшей ступенью греко римской религии мы должны признать ту, которая является для нее общей с большей частью первобытных религий не только европейских, но и других народностей; это культ душ… …   Энциклопедический словарь Ф.А. Брокгауза и И.А. Ефрона

  • Семья — I. Семья и род вообще. II. Эволюция семьи: a) Семья зоологическая; b) Доисторическая семья; c) Основания материнского права и патриархального права; d) Патриархальная семья; e) Индивидуал., или моногамическая, семья. III. Семья и род у древних… …   Энциклопедический словарь Ф.А. Брокгауза и И.А. Ефрона

  • Семья — I. Семья и род вообще. II. Эволюция семьи: a) Семья зоологическая; b) Доисторическая семья; c) Основания материнского права и патриархального права; d) Патриархальная семья; e) Индивидуал., или моногамическая, семья. III. Семья и род у древних… …   Энциклопедический словарь Ф.А. Брокгауза и И.А. Ефрона

  • Зевс — (Ζεύς, Jupiter). Владыка неба, величайший из Олимпийских богов, сын Кроноса и Реи, брат Посейдона, Аида, Гестии, Деметры и Геры и супруг Геры. Он низверг с неба Кроноса и Титанов и приобрел верховную власть над богами и людьми. Он господствует на …   Энциклопедия мифологии

  • Фауна древнегреческой мифологии — Валентин Серов, «Похищение Европы»: чтобы украсть красавицу царевну, Зевс превратился в быка. Европа пожелала покататься на красивом животном, и была похищена. Бык приплыл на остров Крит …   Википедия

  • Джайнс, Кортни — Кортни Джайнс Courtney Jines Имя при рождении: Кортни Элизабет Джайнс Дата рождения: 4 мая 1992(1992 05 04) (20 лет) Место рождения …   Википедия

  • Сейсахфия — Солон Солон (др. греч. Σόλων, Sólōn) (между 640 и 635  около 559 до н. э.), афинский политический деятель и социальный реформатор, поэт, один из «семи мудрецов» Древней Греции. Содержание …   Википедия

  • Греция (Древняя) — Греция Древняя, Эллада (греч. Hellás), общее название территории древнегреческих государств, занимавших Ю. Балканского полуострова, острова Эгейского моря, побережье Фракии, западную береговую полосу Малой Азии и распространивших своё влияние в… …   Большая советская энциклопедия


Поделиться ссылкой на выделенное

Прямая ссылка:
Нажмите правой клавишей мыши и выберите «Копировать ссылку»