Интернет магазин китайских планшетных компьютеров



Компьютеры - Принцип подстановки Лисков - Проектирование по контракту

23 января 2011


Оглавление:
1. Принцип подстановки Лисков
2. Проектирование по контракту



Принцип подстановки Лисков имеет близкое отношение к методологии проектирования по контракту, и ведет к некоторым ограничениям на то, как контракты могут взаимодействовать с наследованием:

  • Предусловия не могут быть усилены в подклассе.
  • Постусловия не могут быть ослаблены в подклассе.

Также, принцип LSP подразумевает, что методы подкласса не могут генерировать никаких дополнительных исключений, кроме тех, которые сами являются подклассами исключений, генерируемых методами надкласса. См. Ковариантность и контравариантность и типы данных.

Функция, использующая иерархию классов с нарушениями принципа Лисков, помимо оперирования ссылкой на базовый класс, оказывается также вынуждена знать и о подклассе. Подобная функция нарушает принцип открытия/закрытия, поскольку она требует модификации в случае появления в системе новых производных классов.

В данном контектсте принцип замещения Лисков можно переформулировать следующим образом:

Функции, которые используют ссылки на базовые классы, должны иметь возможность использовать объекты производных классов, не зная об этом.

Принцип Лисков заставляет задуматься о том, что такое «декларация типа» в терминах объектно-ориентированного языка программирования, который мы используем. Достаточно ли нам описать интерфейс объекта с помощью обычного абстрактного класса со списком методов, типами параметров и возвращаемого значения? Каким образом мы можем декларировать требования к значениям параметров метода и свойства, которыми будет обладать возвращаемое значение? Как нам описать исключения, которые может сгенерировать метод во время выполнения? Как нам описать изменение состояния объекта на разных этапах его жизненного цикла?

Задавая себе эти вопросы и находя ответы, можно спроектировать систему, которая действительно будет удовлетворять принципу замещения Лисков.



Просмотров: 1848


<<< Охрана (программирование)
Проверка моделей >>>