Принцип замены Лискова (LSP) — это фундаментальный принцип объектно-ориентированного программирования (ООП), который гласит, что объекты суперкласса должны быть заменены объектами его подклассов, не влияя на корректность программы. Другими словами, если S является подтипом T, то объекты типа T можно заменить объектами типа S без изменения желаемых свойств программы.
Чтобы придерживаться принципа замены Лискова, можно использовать несколько методов:
-
Следуйте отношению «is-a». Убедитесь, что подкласс действительно является подтипом суперкласса и представляет отношение «is-a». Это означает, что подкласс должен наследовать все поведение и свойства суперкласса.
-
Избегайте ослабления предварительных условий: подкласс не должен требовать более конкретных условий, чем суперкласс. Он должен поддерживать как минимум тот же набор предварительных условий и при необходимости может усилить эти предварительные условия.
-
Избегайте усиления постусловий: подкласс не должен гарантировать более слабые постусловия, чем суперкласс. Он должен поддерживать как минимум тот же набор постусловий и при необходимости может ослабить эти постусловия.
-
Сохранять инварианты: подкласс должен сохранять инварианты, определенные суперклассом. Инварианты — это условия, которые остаются истинными до и после вызова метода.
-
Не создавать новых исключений: подкласс не должен создавать исключения, которые не объявлены в суперклассе. Он может генерировать те же исключения или подклассы исключений, объявленных в суперклассе.
Следуя этим методам, вы гарантируете, что ваш код спроектирован таким образом, чтобы объекты суперкласса можно было легко заменять объектами его подклассов, не вызывая неожиданного поведения или нарушения корректности программы.