Встречается на собеседованиях • сегодня

Приведи пример нарушения приниципа подстановки Лисков (Liskov Substitution)

python
class Rectangle:
    def __init__(self, width, height):
        self.width = width
        self.height = height
    
    def set_width(self, width):
        self.width = width
    
    def set_height(self, height):
        self.height = height
    
    def area(self):
        return self.width * self.height

class Square(Rectangle):
def set_width(self, width):
self.width = width
self.height = width

text
def set_height(self, height):
    self.width = height
    self.height = height

def test_rectangle(rect):
rect.set_width(5)
rect.set_height(4)
assert rect.area() == 20 # Для Square будет 16 - нарушение LSP!

rect = Rectangle(5, 5)
test_rectangle(rect) # OK

square = Square(5, 5)
test_rectangle(square) # AssertionError - нарушение LSP!

text

Квадрат наследуется от прямоугольника, но изменяет поведение родителя (изменение ширины влияет на высоту). Это нарушает LSP - код, работающий с Rectangle, ломается при подстановке Square. Правильнее было бы не наследовать Square от Rectangle.
Sophi
Софи собрала все вопросы. Тренируйся и получай
офферы быстрее!
Попробовать бесплатноArrow

Следующий вопрос

Это единственный вопрос по вашему фильтру

как отвечать на вопрос
пример собеседования
фреймворки на собеседовании
типичные вопросы junior
интервью вопросы и ответы