Ответ
Композиция — это принцип проектирования, при котором один класс (целое) содержит в себе экземпляры других классов (части) и делегирует им выполнение задач. Это создает отношение «has-a» (имеет).
Ключевое отличие от наследования:
- Наследование — это отношение «is-a» (является). Класс-потомок наследует структуру и поведение родителя.
- Композиция — отношение «has-a». Класс использует функциональность другого класса, не наследуя его.
Пример на Python:
class Engine:
def start(self):
return "Двигатель запущен"
class Car:
def __init__(self):
# Композиция: Car содержит (has-a) объект Engine
self.engine = Engine()
def start(self):
# Делегирование вызова методу вложенного объекта
return self.engine.start()
# Использование
my_car = Car()
print(my_car.start()) # Вывод: Двигатель запущен
Преимущества композиции:
- Гибкость: Поведение можно динамически менять, подменяя компоненты во время выполнения.
- Слабая связанность: Классы зависят от интерфейсов, а не от конкретных реализаций.
- Избегание проблем наследования: Нет хрупкости базового класса, не нарушается инкапсуляция.
- Соответствует принципу: Является реализацией принципа «Предпочитай композицию наследованию» (GoF).