Какие знаешь принципы Барбары Лисков

«Какие знаешь принципы Барбары Лисков» — вопрос из категории Архитектура, который задают на 10% собеседований Frontend Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Принцип подстановки Барбары Лисков (LSP) гласит: подтипы должны быть заменяемыми на свои базовые типы без нарушения работы программы.

Основные идеи:

  1. Наследники не должны ужесточать предусловия (требования к входным данным).
  2. Наследники не должны ослаблять постусловия (гарантии на выходные данные).
  3. Наследники должны сохранять инварианты базового класса.

Пример нарушения LSP:

class Rectangle {
  constructor(public width: number, public height: number) {}
  setWidth(width: number) { this.width = width; }
  setHeight(height: number) { this.height = height; }
}

class Square extends Rectangle {
  setWidth(width: number) { 
    this.width = width;
    this.height = width; // Нарушение LSP, меняет поведение родителя
  }
}

function testArea(shape: Rectangle) {
  shape.setWidth(5);
  shape.setHeight(4);
  console.log(shape.width * shape.height); // Ожидается 20, но для Square будет 25
}

Вывод: Наследование должно дополнять, а не изменять логику базового класса.