Sobes.tech
Middle+
174
questionbank

Что такое принцип подстановки Барбары Лисков?

Ответ от нейросети

sobes.tech AI

Принцип подстановки Барбары Лисков (LSP - Liskov Substitution Principle) гласит, что объекты в программе могут быть заменены экземплярами их подтипов без нарушения корректности выполнения программы. Иными словами, функции, которые используют базовые типы, должны иметь возможность использовать любые подтипы этих базовых типов, не зная об этом.

Это означает, что производный класс должен расширять поведение базового класса, а не изменять или сужать ожидания относительно его работы.

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

class Rectangle
{
    public virtual int Width { get; set; }
    public virtual int Height { get; set; }

    public int Area() => Width * Height;
}

class Square : Rectangle // Квадрат является частным случаем прямоугольника, но его поведение отличается
{
    public override int Width
    {
        get => base.Width;
        set { base.Width = value; base.Height = value; } // Нарушает LSP, устанавливая обе стороны
    }

    public override int Height
    {
        get => base.Height;
        set { base.Width = value; base.Height = value; } // Нарушает LSP, устанавливая обе стороны
    }
}

// Нарушение при использовании Square вместо Rectangle
void CalculateArea(Rectangle rectangle)
{
    rectangle.Width = 10;
    rectangle.Height = 5;
    Console.WriteLine($"Area: {rectangle.Area()}"); // Ожидается 50, но для Square будет 25
}