Ответ
Композиция — это отношение «часть-целое» с сильной связью, где жизненный цикл объекта-части полностью зависит от жизненного цикла объекта-целого. Если объект-целое уничтожается, уничтожаются и все его части. Это ключевой принцип для построения сложных объектов из более простых.
Пример: Компьютер и его компоненты
// Классы-части
class CPU {
private String model;
public CPU(String model) { this.model = model; }
public void execute() { System.out.println("CPU " + model + " is executing instructions"); }
}
class RAM {
private int sizeGb;
public RAM(int sizeGb) { this.sizeGb = sizeGb; }
public void load() { System.out.println("Loading data into " + sizeGb + "GB RAM"); }
}
// Класс-целое, использующий композицию
class Computer {
// Части создаются внутри конструктора целого и не существуют отдельно.
private final CPU cpu;
private final RAM ram;
public Computer(String cpuModel, int ramSize) {
this.cpu = new CPU(cpuModel); // Композиция: создание части
this.ram = new RAM(ramSize); // Композиция: создание части
}
public void start() {
ram.load();
cpu.execute();
System.out.println("Computer started.");
}
// Нет сеттеров для cpu и ram. Их нельзя заменить извне после создания.
}
// Использование
public class Main {
public static void main(String[] args) {
Computer myPC = new Computer("Intel i7", 16);
myPC.start();
// При удалении myPC сборщик мусора удалит и его cpu, и ram.
}
}
Отличие от агрегации: При агрегации части передаются в объект-целое извне (через конструктор/сеттер) и могут существовать независимо. В композиции целое владеет частями и создаёт их само.