Принцип подстановки Лисков: различия между версиями

[отпатрулированная версия][отпатрулированная версия]
Содержимое удалено Содержимое добавлено
м Bot: HTTP→HTTPS (v477)
викификация
Строка 21:
 
== Проектирование по контракту ==
 
Принцип подстановки (замещения) Лисков имеет близкое отношение к методологии [[Контрактное программирование|контрактного программирования]], и ведёт к некоторым ограничениям на то, как контракты могут взаимодействовать с [[Наследование (программирование)|наследованием]]:
 
* [[Предусловие|Предусловия]] не могут быть усилены в подклассе.
* [[Постусловие|Постусловия]] не могут быть ослаблены в подклассе.
* Исторические ограничения ("«правило истории"») - — подкласс не должен создавать новых мутаторов свойств базового класса. Если базовый класс не предусматривал методов для изменения определенных в нем свойств, подтип этого класса так же не должен создавать таких методов. Иными словами, неизменяемые данные базового класса не должны быть изменяемыми в подклассе. Данная концепция, представленная Лисков и Винг, являлась новаторской для теории программной архитектуры.
 
Также принцип LSP подразумевает, что методы подкласса не могут генерировать никаких дополнительных [[Обработка исключений|исключений]], кроме тех, которые сами являются подклассами исключений, генерируемых методами надкласса. См. [[Ковариантность и контравариантность (программирование)|Ковариантность и контравариантность]] и [[Тип данных|типы данных]].