TGViewer
StringConcat - разработка без боли и сожалений StringConcat - разработка без боли и сожалений @stringconcat · 3.72K subscribers
Post #114 1.31K
🤨 Liskov Substitution Principle. Это же просто о наследовании?

Так сформулировал вопрос один из студентов нашего курса. Хочу ответить публично.

Говоря простым языком, если класс A использует (зависит) от интерфейса или Абстрактного класса X, то ему глубоко фиолетово какая именно имплементацию X используется: Z, Y, Я или 大. Более того, мы можем подменять одну имплементацию другой и А (как и вся программа) о подмене узнать не должен. Но ведь это и есть наследованные скажите вы? Да, если мы применяем LSP к ООП, то наследование является необходимым, но недостаточным условием соблюдение LSP.

Почему недостаточным? Например, вот что можно написать в X


Class A {

val X

fun hello() {
if (X instance of Z) { // Упс….
then ….
}
}

Вот в этот момент Liskov Substitution Principle нарушился. Теперь класс A знает что если передана имплементацию Z, то нужно делать что-то особенное. И даже если вы создадите имплементацию точно повторяющую Z, но называющаяся Y, то поведение программы не будет прежним.

Другой пример:
A знает что вызов X приведет к изменению глобального состояния и этим пользуется. Но при том в интерфейсе не гарантировано, что это изменение обязано произойти. И следовательно другие имплементации X могут не менять глобальное состояние.

К примеру


Class A {

val X

fun hello() {
x.calculateTotal();
// упс
db.read(“SELECT total from table”)
}
}


Некоторые имплементацию X могут действительно писать в базу данных, но интерфейс не обзывает их это делать.


LSP, Как и другие SOLID принципы применим не только к классам. Его можно применять так же
- К лямбдам
- К модулям и пакетам (в java скажем)
- Да и к микросервисам.

Кстати на Вот Здесь мы подробно разбираем SOLID.
А вы встречали более изощренные нарушения LSP?

P.S. На КДПВ сама Барбара Лисков 😍
  • 👍 11
  • 🔥 2
More from @stringconcat
  1. Sep 26, 2026Вы не заметили, но в интернетах разразился скандал вселенского масштаба. Вопрос вот в чём:…
  2. Sep 21, 2026А сегодня снова не совсем обычный пост (пока я занят написанием духоты). Знаю, что у многи…
  3. Sep 18, 2026Сегодня необычный выпуск — подкаст с нашим старым бро Константином Могилевкиным. Константи…
  4. Sep 15, 2026Я частенько в своих постах упоминаю ключевую характеристику для сотрудника — автономность.…
  5. Sep 8, 2026Продолжаем обзор микросервисных изделий. На этот раз подписчики прислали мне архитектуру,…
  6. Sep 4, 2026Начинаем сезон видосиков с обзора карьерных путей (не переживайте, духота тоже будет, но п…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →