Как Закон Деметры применяется к объектно-ориентированным системам со связью и сцеплением?
Я читал книгу «Разработка программного обеспечения и профессиональная практика» и наткнулся на главу о LoD, и мне было любопытно, как этот принцип применяется в объектно-ориентированных системах.
object-oriented
design-principles
Джереми
источник
источник
Ответы:
По словам Эмерсона Маседо Закон Деметры гласит следующее:
Это напрямую соответствует принципу слабой связи, поскольку единицы (или объекты) должны, как и выше:
Одной из самых низких форм связи является передача сообщений, то есть данные разделяются между объектами посредством вызовов методов с параметрами.
Кроме того, из того, что я вижу, закон Деметры не соответствует напрямую принципу высокой сплоченности, поскольку он только утверждает, что сами объекты должны знать, какими данными они обладают. Объект с низкой когезией имеет элементы данных, которые он часто не использует в своих собственных методах. Это больше о содержании объекта, а не о его отношениях и взаимодействующих объектах.
источник
Муфта упрощенная
Когда объект вызывает метод, свойство и т. Д. Другого объекта, мы говорим, что объекты связаны. Мы называем это соединения , потому что теперь вызываемая не может изменить что - либо о своем собственном методе / проп. без взлома звонящего .
Таким образом, тем более сцепление - методы, реквизит. - тем сложнее изменить код вызываемого абонента, не нарушая весь код, который его использует.
созерцая связь
Большинство знаний вызывает сумасшедшую связь
Здесь у нас
Employee
есть, уPerson
которого есть «Адрес»Для того, чтобы получить на улицу , я должен позвонить:
myEmployee.me.home.street
. Это на 180 градусов противоположно принципу наименьшего знания. Я должен знать о внутренностях, композиционной структуры, изEmployee
,Person
иAddress
классов.Этот дефектный дизайн класса вынуждает меня знать обо всех этих классах и таким образом
myEmployee.me.home.street
соединяет меня (объект вызывающего) не менее чем с 3 классами - чтобы получить только одно свойство!Наименьшее знание спасает день
Если я разговариваю только с
Employee
классом, я применяю принцип наименьшего знания как таковой, и тем самым мы автоматически ограничиваем связь только с этим классом и в то же время изолируем связь с этим одним классом.Добавляя все необходимые свойства в
Employee
классе, мы фиксируем связь.таким образом
Позволяет мне позвонить:
myEmployee.street
-Employee
Employee
- независимо от того, насколько сложна его структура.Наименее Знание полностью вниз
Мы отделили myEmployee от
Person
иAddress
и, в идеале, мы должны продолжать применять наименьшее количество знаний, добавляя сквозные свойства, которыеEmployee
только говорятPerson
иPerson
только говорят сAddress
источник
Исследование ( В. Базили, Л. Бриан и В. Л. Мело. Проверка объектно-ориентированных метрик проектирования как показателей качества ) показало, что классы с большими наборами ответов имеют тенденцию создавать больше ошибок, чем классы с меньшим набором ответов, потому что больше набор ответов означает шанс более высокого сцепления.
Значение Закона Деметры в том, что оно уменьшает отклик, заданный по определению. Метод объекта может вызывать только сам метод, любой параметр, который был передан в метод, метод любого объекта, который он создал, и метод любого непосредственно удерживаемого объекта. Поскольку набор откликов меньше, вероятность высокого уровня связи меньше. Так как модуль / метод использует только доступные ссылки, существует более высокая сплоченность.
источник
Это довольно просто; скажем, A зависит от B, а B зависит от C. Без закона Деметры вы можете использовать как B, так и C в A, но, придерживаясь этого закона, A зависит только от B, оно не может зависеть от C.
Это обеспечивает низкую связь, поскольку значительно уменьшает количество зависимостей модуля; сплоченность, хотя и отличается по концепции от сцепления, достигается таким же образом. Имея меньше зависимостей от модуля, они становятся более специфичными для этого модуля и, таким образом, увеличивают сплоченность. Также увеличится общее количество модулей, и они станут более специализированными для выполнения вещей, специализирующихся на зависимом модуле (в отличие от объектов бога), что напрямую переводит в более целостную систему.
источник