Закон Деметри (англ. Law of Demeter, LoD) — правило дизайну під час розробки програмного забезпечення, зокрема об'єктно-орієнтованих програм. Узагальнено, Закон Деметри є окремим випадком слабкої зв'язності. Правило було винайдено у Північносхідному Університеті (Бостон, Массачусетс, США) наприкінці 1987 та може бути сформульоване одним з таких способів:
- Кожен модуль має володіти обмеженим знанням про інші модулі: тільки про модулі, які мають «близьке» відношення до даного модуля.
- Кожен модуль має розмовляти тільки зі своїми друзями, не розмовляти з незнайомцями.
- Звертатись тільки до безпосередніх друзів.
Головною ідеєю є те, що об'єкт повинен мати якнайменше уявлення про структуру та властивості чого завгодно (включно з власними підкомпонентами).
Назва походить з проєкту «Деметра», що використовував ідеї аспектно-орієнтованого та . Проєкт було названо на честь Деметри, грецької богині землеробства, щоб підкреслити переваги філософії програмування «знизу-нагору».
В об'єктно-орієнтованому програмуванні
У контексті об'єктно-орієнтованого програмування, Закон Деметри більш точно називати «Закон Деметри для функцій/методів». У цьому разі, об'єкт А може використовувати сервіс (викликати метод) об'єкта B, та об'єкт А не може «через» об'єкт В отримати доступ до іншого об'єкта, С, та використовувати його сервіси. Якби це було можливо, це значило б, що об'єкт А явно потребує більшого знання про внутрішню структуру об'єкта В.
Замість цього, інтерфейс В має бути змінено, якщо необхідно, таким чином, щоб напряму оброблювати запити об'єкта А, передаючи їх відповідним підкомпонентам. Як альтернатива, А може мати пряме посилання на об'єкт С та викликати методи безпосередньо з нього. Якщо дотримуватися закону, тільки об'єкт В знає свою внутрішню структуру.
Більш формально, Закон Деметри для функцій вимагає, що метод М об'єкта О має викликати методи тільки наступних типів об'єктів:
- власне самого О
- параметрів М
- будь-яких об'єктів, створених у межах М
- прямих компонентних об'єктів О
- глобальних змінних, доступних О, у межах М
Практично, об'єкт-клієнт має уникати викликів методів об'єктів, внутрішніх членів, повернених методом об'єкта-сервісу. Для багатьох сучасних об'єктно-орієнтованих мов програмування, що використовують крапку, як кваліфікатор члена класу, закон може бути перефразовано як «Використовуйте лише одну крапку». Таким чином, код a.b.Method()
порушує Закон Деметри, а код a.Method()
є коректним.
Переваги та недоліки
Перевагами Закону Деметри є те, що розроблене програмне забезпечення є менш складним під час підтримки та більші можливості повторного використання коду. Так як об'єкти є менш залежними від внутрішньої структури інших об'єктів, контейнери об'єктів можуть бути змінені без модифікації викликаючих об'єктів (клієнтів).
Недоліком Закону Деметри є те, що іноді потребує створення великої кількості малих методів-адаптерів (делегатів), для передачі викликів методу до внутрішніх компонентів. Більше того, інтерфейс класу може стати перевантаженим, так як вміщує методи внутрішніх класів, що порушує принцип високої зв'язності. Та це також може бути сигналом поганого об'єктно-орієнтованого дизайну.
Багатоярусна архітектура може розглядатися, як приклад імплементації Закону Деметри у програмній системі. У такій архітектурі код кожного з ярусів може викликати тільки код свого ярусу та код з нижчого ярусу. Виклик «через ярус» є порушенням багатоярусної архітектури.
Див. також
Посилання (англ.)
- Simple Law of Demeter in Ruby/Rails with demeter gem [ 14 квітня 2010 у Wayback Machine.]
- Brad Appleton: “Introducing Demeter and its Laws” [ 25 травня 2011 у Wayback Machine.]
- Law of Demeter (Web site) [ 16 червня 2011 у Wayback Machine.]
- “Object-Oriented Programming: An Objective Sense of Style” (OOPSLA '88 Proceedings) (PDF) [ 16 червня 2011 у Wayback Machine.]
- The Paperboy, The Wallet,and The Law Of Demeter (PDF) [ 16 серпня 2011 у Wayback Machine.]
- Phil Haack: «The Law of Demeter is not a Dot Counting Exercise» [ 23 червня 2011 у Wayback Machine.]
- Lieber: «Phil Holland's Law of Demeter» [ 16 червня 2011 у Wayback Machine.]
Ця стаття потребує додаткових для поліпшення її . (березень 2017) |
Це незавершена стаття про програмування. Ви можете проєкту, виправивши або дописавши її. |
Вікіпедія, Українська, Україна, книга, книги, бібліотека, стаття, читати, завантажити, безкоштовно, безкоштовно завантажити, mp3, відео, mp4, 3gp, jpg, jpeg, gif, png, малюнок, музика, пісня, фільм, книга, гра, ігри, мобільний, телефон, android, ios, apple, мобільний телефон, samsung, iphone, xiomi, xiaomi, redmi, honor, oppo, nokia, sonya, mi, ПК, web, Інтернет
Zakon Demetri angl Law of Demeter LoD pravilo dizajnu pid chas rozrobki programnogo zabezpechennya zokrema ob yektno oriyentovanih program Uzagalneno Zakon Demetri ye okremim vipadkom slabkoyi zv yaznosti Pravilo bulo vinajdeno u Pivnichnoshidnomu Universiteti Boston Massachusets SShA naprikinci 1987 ta mozhe buti sformulovane odnim z takih sposobiv Kozhen modul maye voloditi obmezhenim znannyam pro inshi moduli tilki pro moduli yaki mayut blizke vidnoshennya do danogo modulya Kozhen modul maye rozmovlyati tilki zi svoyimi druzyami ne rozmovlyati z neznajomcyami Zvertatis tilki do bezposerednih druziv Golovnoyu ideyeyu ye te sho ob yekt povinen mati yaknajmenshe uyavlennya pro strukturu ta vlastivosti chogo zavgodno vklyuchno z vlasnimi pidkomponentami Nazva pohodit z proyektu Demetra sho vikoristovuvav ideyi aspektno oriyentovanogo ta Proyekt bulo nazvano na chest Demetri greckoyi bogini zemlerobstva shob pidkresliti perevagi filosofiyi programuvannya znizu nagoru V ob yektno oriyentovanomu programuvanniU konteksti ob yektno oriyentovanogo programuvannya Zakon Demetri bilsh tochno nazivati Zakon Demetri dlya funkcij metodiv U comu razi ob yekt A mozhe vikoristovuvati servis viklikati metod ob yekta B ta ob yekt A ne mozhe cherez ob yekt V otrimati dostup do inshogo ob yekta S ta vikoristovuvati jogo servisi Yakbi ce bulo mozhlivo ce znachilo b sho ob yekt A yavno potrebuye bilshogo znannya pro vnutrishnyu strukturu ob yekta V Zamist cogo interfejs V maye buti zmineno yaksho neobhidno takim chinom shob napryamu obroblyuvati zapiti ob yekta A peredayuchi yih vidpovidnim pidkomponentam Yak alternativa A mozhe mati pryame posilannya na ob yekt S ta viklikati metodi bezposeredno z nogo Yaksho dotrimuvatisya zakonu tilki ob yekt V znaye svoyu vnutrishnyu strukturu Bilsh formalno Zakon Demetri dlya funkcij vimagaye sho metod M ob yekta O maye viklikati metodi tilki nastupnih tipiv ob yektiv vlasne samogo O parametriv M bud yakih ob yektiv stvorenih u mezhah M pryamih komponentnih ob yektiv O globalnih zminnih dostupnih O u mezhah M Praktichno ob yekt kliyent maye unikati viklikiv metodiv ob yektiv vnutrishnih chleniv povernenih metodom ob yekta servisu Dlya bagatoh suchasnih ob yektno oriyentovanih mov programuvannya sho vikoristovuyut krapku yak kvalifikator chlena klasu zakon mozhe buti perefrazovano yak Vikoristovujte lishe odnu krapku Takim chinom kod a b Method porushuye Zakon Demetri a kod a Method ye korektnim Perevagi ta nedolikiPerevagami Zakonu Demetri ye te sho rozroblene programne zabezpechennya ye mensh skladnim pid chas pidtrimki ta bilshi mozhlivosti povtornogo vikoristannya kodu Tak yak ob yekti ye mensh zalezhnimi vid vnutrishnoyi strukturi inshih ob yektiv kontejneri ob yektiv mozhut buti zmineni bez modifikaciyi viklikayuchih ob yektiv kliyentiv Nedolikom Zakonu Demetri ye te sho inodi potrebuye stvorennya velikoyi kilkosti malih metodiv adapteriv delegativ dlya peredachi viklikiv metodu do vnutrishnih komponentiv Bilshe togo interfejs klasu mozhe stati perevantazhenim tak yak vmishuye metodi vnutrishnih klasiv sho porushuye princip visokoyi zv yaznosti Ta ce takozh mozhe buti signalom poganogo ob yektno oriyentovanogo dizajnu Bagatoyarusna arhitektura mozhe rozglyadatisya yak priklad implementaciyi Zakonu Demetri u programnij sistemi U takij arhitekturi kod kozhnogo z yarusiv mozhe viklikati tilki kod svogo yarusu ta kod z nizhchogo yarusu Viklik cherez yarus ye porushennyam bagatoyarusnoyi arhitekturi Div takozhMova programuvannya Programuvannya Ob yektno oriyentovane programuvannya Shabloni proyektuvannya programnogo zabezpechennyaPosilannya angl Simple Law of Demeter in Ruby Rails with demeter gem 14 kvitnya 2010 u Wayback Machine Brad Appleton Introducing Demeter and its Laws 25 travnya 2011 u Wayback Machine Law of Demeter Web site 16 chervnya 2011 u Wayback Machine Object Oriented Programming An Objective Sense of Style OOPSLA 88 Proceedings PDF 16 chervnya 2011 u Wayback Machine The Paperboy The Wallet and The Law Of Demeter PDF 16 serpnya 2011 u Wayback Machine Phil Haack The Law of Demeter is not a Dot Counting Exercise 23 chervnya 2011 u Wayback Machine Lieber Phil Holland s Law of Demeter 16 chervnya 2011 u Wayback Machine Cya stattya potrebuye dodatkovih posilan na dzherela dlya polipshennya yiyi perevirnosti Bud laska dopomozhit udoskonaliti cyu stattyu dodavshi posilannya na nadijni avtoritetni dzherela Zvernitsya na storinku obgovorennya za poyasnennyami ta dopomozhit vipraviti nedoliki Material bez dzherel mozhe buti piddano sumnivu ta vilucheno berezen 2017 Ce nezavershena stattya pro programuvannya Vi mozhete dopomogti proyektu vipravivshi abo dopisavshi yiyi