Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Поиск рулит! Сообщения за день Все разделы прочитаны
 

Вернуться   Форум Flasher.ru > Блоги > Good

Оценить эту запись

Закон наименьшего знания (LoD)

Запись от artcraft размещена 05.01.2012 в 23:13
Обновил(-а) artcraft 09.01.2012 в 17:40

Закон наименьшего знания или law of Demeter (Закон Деметры)

это правило хорошего тона при проектировании объектно ориентриованных программ,
техника для ослабления связанности кода.

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


Допустим у нас есть объект O, у него есть метод m.
Закон Деметры требует, чтобы в методе m мы пользовались услугами только следующих объектов:
- самого O и его полей;
- параметров, переданных в m;
- любых объектов, созданных в m;

Применительно к AS3 этот закон можно сформулировать как "Правило одной точки".

Например:
Код AS3:
public class O{
 
  private var _b:B;
  private var _c:C;
 
  public function m(a:A):void{
 
    a.m(); //не нарушает закон
 
    _b = new B();
    _b.m(); //не нарушает закон
 
    a.getC().m(); // нарушает закон
 
    _c = a.getC(); 
    _c.m(); // тоже нарушает закон
 
  }
}
Аналогия из жизни.
Если Вы хотите, чтобы собака побежала, глупо командовать ее ногами, лучше отдать команду собаке, а она уже разберется со своими ногами сама.

Достоинства:
Снижает связность, в результате получается код, который легче сопровождать и отлаживать.

Недостатки:
Заставляет писать множество методов-оберток, которые только лишь делегируют работу кому-то еще. Классы становятся более громоздкими.
Всего комментариев 7

Комментарии

Старый 06.01.2012 03:25 TanaTiX вне форума
TanaTiX
 
Аватар для TanaTiX
Почитай еще про SOLID - должно понравиться
Старый 06.01.2012 15:50 expl вне форума
expl
Тут все как с бюрократией:
- либо вы приходите в контору, приносите паспорт и говорите, что нужно оформить, а вам называют дату, когда прийти за документом. Если нужны внешние справки, вы приносите их этому же товарищу, зная в какие часы он работает.
- либо посылают в пешее путешествие по кабинетам этой же конторы, причем каждый начальник требует наличие справок от начальника из соседнего кабинета, причем все работают в разное время и не всегда могут объяснить где именно брать необходимую справку, хотя брать ее надо в этой же конторе. Таким образом вы очень глубоко проникаетесь структурой и принципами делопроизводства конторы, что не может не радовать
Обновил(-а) expl 06.01.2012 в 15:55
Старый 06.01.2012 20:11 artcraft вне форума
artcraft
 
Аватар для artcraft
TanaTiX > да меня интересует всё что касается сложностей взаимоотношений в OOP.
в ближайшее время постараюсь запостить еще несколько постов c фокусом именно на зависиомтсях и ослаблении связанности

expl > отличная метафора
Старый 12.01.2012 01:01 Котяра вне форума
Котяра
 
Аватар для Котяра
В противовес правилу одной точки, есть интересный "Fluent принцип" .
Старый 12.01.2012 13:19 K.A.T.A.F.A.L.K.E.R вне форума
K.A.T.A.F.A.L.K.E.R
 
Аватар для K.A.T.A.F.A.L.K.E.R
Цитата:
В противовес правилу одной точки, есть интересный "Fluent принцип" .
И правда интересный
Старый 12.01.2012 15:51 artcraft вне форума
artcraft
 
Аватар для artcraft
fluent interface, кстати, не нарушает закон Деметры
это цепочка вызовов разных методов одного объекта, просто записанная в одну строку
Старый 13.01.2012 00:36 Котяра вне форума
Котяра
 
Аватар для Котяра
Но назвать его выполняющим "правилом одной точки" некомильфо.
 

 


Часовой пояс GMT +4, время: 19:03.


Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.