Наследование и Композиция

Уровень материала: 🐣 #junior   Выявлять победителя не придётся — оба эти механизма важны и нужны. Хотя для игровой логики композиция и является более предпочтительной.    Но всё же важно правильно распознать сценарий применения, во избежание появления мутантов типа FlyingEnemyWithShielвButWithoutGun.    Поделюсь своим конспектом по теме — может быть это поможет лучше понять различия.    ⚠️ Дисклеймер: некоторые утверждения для разных языков программирования могут иметь разную степень актуальности.    ————————————————    Наследование — механизм, который позволяет описать новый класс на основе существующего (родительского). При этом свойства и функциональность родительского класса заимствуются новым классом.    • Основная задача: задать родство, указать, что объект A является производным от B.    • Основные проблемы: хрупкость, неустойчивость к изменениям, сложность комбинирования.    • Расширение поведения: только на этапе компиляции.    • Основная возможность: "естественный" полиморфизм.    • Сценарий применения: определение идентичности, чем является объект.    • Правило использования: is-a (является)    Примеры:  ✅ Cat is an Animal  ✅ Axe is a Weapon  ❌ Train is a Hat  ❌ Dog is a Human  ❌ FlyingEnemy is an Enemy (❓)    ————————————————    Ассоциация — отношение, которое проявляется в том, что объекты двух классов могут ссылаться один на другой, иметь некоторую связь между друг другом.    Агрегация — частный случай ассоциации, при котором один объект имеет ссылку на другой объект, и оба объекта могут существовать независимо.    Примеры: Car и Passenger, Human и Hat.    Композиция — более строгий вариант агрегации, когда включаемый объект может существовать только как часть основного.    Примеры: Car и Engine, Human и Heart.    • Основная задача: задать возможности, указать, что объект A умеет/имеет x, y и z.    • Основные проблемы: разрастание кол-ва компонентов и сложность управления ими.    • Расширение поведения: во время исполнения.    • Основная возможность: добавление функциональности без изменения базовых классов.    • Сценарий применения: задание поведения и возможностей.    • Правило использования: has-a (имеет)    Примеры:  ✅ House has Rooms  ✅ Enemy has a FlyingBehaviour  ✅ Vehicle has a MovementStrategy    ————————————————    Следствия    Компонентный подход — способ реализации композиции, при котором объект собирается из независимых компонентов, каждый из которых отвечает за отдельную функциональность или данные.    Пример: PlayerObject = MovementBehaviour + JumpBehaviour + HealthBehaviour.    ECS (Entity Component System) — архитектура с плоской иерархией, основанная на принципах композиции, где поведение игровых объектов определяется набором отдельных компонентов, каждый из которых хранит своё состояние и обрабатывается соответствующими системами.    Пример: (MovementComponent + JumpComponent + …) + (MovementSystem + JumpSystem+ …)

Наследование и Композиция | Сетка — социальная сеть от hh.ru