Что такое композиция и чем отличается от наследования?
Answer from AI
sobes.tech AI
Композиция и наследование — два разных подхода к повторному использованию кода в объектно-ориентированном программировании.
Наследование подразумевает создание нового класса на основе существующего, при этом новый класс автоматически получает свойства и методы родителя. Это удобно, когда есть "является" (is-a) отношение, например, класс "Кошка" наследует класс "Животное".
Композиция же строится на включении объектов одного класса в другой, то есть новый объект содержит другие объекты как части. Это отражает отношение "имеет" (has-a). Например, класс "Автомобиль" может содержать объект класса "Двигатель".
Главное отличие в том, что композиция более гибкая и способствует слабой связанности компонентов, что облегчает поддержку и расширение кода. В Python композиция часто реализуется через передачу объектов в конструктор или установку атрибутов.
Пример композиции:
class Engine:
def start(self):
print("Двигатель запущен")
class Car:
def __init__(self, engine):
self.engine = engine
def start(self):
self.engine.start()
print("Машина поехала")
engine = Engine()
car = Car(engine)
car.start()
Здесь класс Car использует объект Engine, вместо наследования от него.