Урок 15: Композиция против наследования
У машины есть двигатель — но она не является разновидностью двигателя. Для отношений «имеет» есть второй инструмент, на удивление простой: хранить один объект как атрибут другого объекта. Это композиция — и выбор между ней и наследованием — одно из ключевых решений в проектировании.
Наследование — это ДНК, то, чем вы являетесь; композиция — это рюкзак, то, что у вас есть. Собака — это животное (наследование), а машина лишь имеет двигатель (композиция).
- композиция
- Построение класса из объектов других классов — объект, хранящийся как атрибут: self.engine = Engine().
- отношение «имеет»
- «У машины есть двигатель» — отношение, решаемое композицией, а не наследованием.