Sobes.tech
Back to questions
Middle
2

Что такое композиция и чем отличается от наследования?

Companies where asked
ГК АСК

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, вместо наследования от него.