Композиция это тоже фундаментальное понятие любого объектно-ориентированного языка программирования. Даже если язык не поддерживает композицию (что редкость в наши дни), люди все равно будут мыслить категориями частей и компонентов. Без композиции было бы невозможно решить сложные задачи по частям.
С композицией мы постоянно сталкиваемся в жизни: у стула есть ножки, стена состоит из кирпичей и цемента и тому подобное. Так и при создании объектов, композицией считается такой программный код, где конструктор, или методы класса используют объекты других классов. Такое явление еще называют агрегированием по значению.
Композиция: объект A создает объект B
Плюсы:
Композиция позволяет скрыть отношение использования объектов от глаз клиента;
Делает API использования класса более простым и позволяет перейти от использования одного класса, к другому;
Минусы:
Для чего нужна композиция? Очевидно: из частей собрать целое.