Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

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

Закон Деметри (англ. Law of Demeter, LoD) - правило дизайну при розробленні програмного забезпечення, зокрема об' єктно - орієнтованих програм. Узагальнено, Закон Деметри є специфічним випадком слабкої зв' язності. Правило було винайдено у Північносхідному Університеті (Бостон, Масачусетс, США) наприкінці 1987 та може бути сформульованим одним з наступних способів:

Кожен модуль має володіти обмеженним знанням про інші модулі: тільки про модулі, які мають "близьке" відношення до даного модуля.

Кожен модуль має розмовляти тільки зі своїми друзями, не розмовляти з незнайомцями.

Звертатись тільки до безпосередніх друзів

Фундаментальною ідеєю є ті, що об' єкт має мати якнайменше уявлення про структуру та властивості чого завгодно (включаючи власні підкомпоненти). Назва походити з проекту "Деметра", що використовував ідеї аспекто- орієнтованого та адаптивного програмування. Проект було названо на честь Деметри, грецької богині землеробства, щоб підкреслити переваги філософії програмування "знизу-нагору".

У контексті об' єктно - орієнтованого програмування, Закон Деметри більш точно називати "Закон Деметри для функцій\методів". У цьому разі, об' єкт А може використовувати сервіс (викликати метод) об' єкта B, та об' єкт А не може "через" об' єкт В отримати доступ до іншого об' єкта, З, та використовувати його сервіси. Якби це було можливо, це означало б, що об' єкт А явно потребує більшого знання про внутрішню структуру об' єкта В. Замість цього, інтерфейс В має бути змінено, якщо необхідно, таким чином, щоб напряму оброблювати запити об' єкта А, передаючи їх відповідним підкомпонетам. Як альтернатива, А може мати пряме посилання на об' єкт З та викликати методи безпосередньо з нього. Якщо слідувати закону, тільки об' єкт В знає свою внутрішню структуру.

Більш формально, Закон Деметри для функцій вимагає, що метод М об' єкта Про має викликати методи тільки наступних типів об' єктів:

· власне самого Про

· параметрів М

· будь-яких об' єктів, створених у межах М

· прямих компонентних об' єктів Про

· глобальних змінних, доступних О, у межах М

Практично, об' єкт - клієнт має уникати викликів методів об' єктів, внутрішніх членів, повернених методом об' єкта - сервісу. Для багатьох сучасних об' єктно - орієнтованих мов програмування, що використовують крапку, як кваліфікатор члена класу, закон може бути перефразовано як "Використовуйте лише одну крапку". Таким чином, код a.b.Method() порушує Закон Деметри, а код a.Method() є коректним.

Переваги та недоліки

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

Недоліком Закону Деметри є ті, що іноді потребує створення великої кількості малих методів - адаптерів (делегатів), для передачі викликів методу до внутрішніх компонентів. Більше того, інтерфейс класу може статі перевантаженим, так як вміщує методи внутрішніх класів, що порушує принцип високої зв' язності. Та це також може бути сигналом поганого об' єктно - орієнтованого дизайну.

Багатоярусна архітектура може розглядатися, як приклад імплементації Закону Деметри у програмній системі. У такій архітектурі код шкірного з ярусів може викликати тільки код свого ярусу та код з нижчого ярусу. Виклик "через ярус" є порушенням багатоярусної архітектури.

<== предыдущая лекция | следующая лекция ==>
Конструктори копіювання та перетворення | Контейнери
Поделиться с друзьями:


Дата добавления: 2013-12-14; Просмотров: 346; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.013 сек.