Отличие композиции, агрегации и наследования

Композиция, агрегация и наследование — это три понятия, используемые в объектно-ориентированном программировании для организации кода и управления зависимостями между классами.

  1. Композиция (Composition) — это отношение «часть-целое» между двумя классами, где один класс является частью другого и не может существовать без него. Например, класс «автомобиль» может содержать композицию из классов «двигатель», «колеса», «сиденья» и т.д. Композиция обычно реализуется путем включения одного класса в другой как его поле или атрибут.
  2. Агрегация (Aggregation) — это отношение «содержит-много» между двумя классами, где один класс может содержать несколько экземпляров другого класса, но эти экземпляры могут существовать независимо. Например, класс «отдел» может содержать агрегацию из классов «сотрудник», где каждый отдел содержит несколько сотрудников, но сотрудники могут принадлежать к разным отделам. Агрегация также реализуется путем включения одного класса в другой, но в этом случае экземпляры включаемого класса могут быть созданы и использованы независимо от того, где они находятся.
  3. Наследование (Inheritance) — это отношение «является-типом» между двумя классами, где один класс наследует свойства и методы другого класса. Например, класс «собака» может наследовать свойства и методы от класса «животное». При этом класс «собака» расширяет функциональность базового класса «животное» и может добавлять свои собственные методы и свойства. Наследование обычно используется для организации классов в иерархии, где классы-наследники могут переопределять методы базового класса или добавлять свои собственные методы и свойства.