88
ГЛАВА 5. ПРИНЦИПЫ ОО ДИЗАЙНА
ше — в классе Document, беззаботно открывающем секреты своей ре-
ализации незнакомцам
8
. Пример показывает, что нарушение принципа
Деметера ведет к неконтролируемому распространению зависимостей
между классами, что, в конечном счете, неизбежно приводит к сниже-
нию гибкости кода и увеличению стоимости сопровождения. Действи-
тельно, изменение, например, способа доступа к документу в клас-
се Viewer становится затруднительным, так как может вызвать кас-
кадное распространение изменений на классы, использующие метод
getDocument. Неконтролируемые, а стало быть, потенциально слиш-
ком длинные, цепочки зависимостей между классами безусловно сни-
зят переиспользуемость, поскольку слишком много классов придется
переиспользовать «в нагрузку», а также могут стать причиной появле-
ния циклических зависимостей между классами и пакетами
9
.
Гради Буч по этому поводу заметил: «Основной эффект от приме-
нения закона Деметера — создание слабо связанной иерархии классов,
детали реализации которых скрыты друг от друга. Такие классы очень
незагроможденны, чтобы понять один класс, вы не должны понимать
детали многих других классов»
10
5.4 Принцип подстановки Лисковой
Следующее правило,предложенное Барбарой Лисковой (BarbaraLiskov)
в 1988 году, фактически, задает определение подкласса:
LSP
11
— Принцип подстановки Лисковой
8
Одна из формулировок принципа Деметера звучит так: «Only talk to your
immediate friends. Nevertalk tostrangers.»
Разговаривайте только с близкими друзьями.
Никогда не разговаривайте с незнакомцами.
9
см. также Принцип ацикличности зависимостей
10
«The basic effect of applying this Law is the creationof loosely coupled classes, whose
implementation secrets are encapsulated. Such classes are fairly unencumbered, meaning
that to understand the meaning of one class, you need not understand the details of many
other classes.»
11
Liskov Substitution Principle