Композиция против агрегации: право собственности на содержащийся объект, повторно используемый в других содержащих объектах - PullRequest
0 голосов
/ 10 января 2020

Я читал пост Наследование и состав (отношение Is-a против Has-a) в Java, и я удивлен, что это следующее утверждение.

Также стоит отметить, что в этом случае содержащий объект Computer имеет право собственности на содержащиеся объекты, если и только если объекты не могут быть повторно использованы в другом объекте Computer. Если бы они могли, мы бы использовали агрегация, а не составление, где право собственности не подразумевается.

Вот фрагмент кода, на который ссылается

public class Computer{
    private Processor processor;
    private Memory memory;
    private SoundCard soundCard;
    //... more code
}

Что это означает, если повторно использовать в другом Компьютерный объект ? Означает ли это, что когда у меня есть два экземпляра компьютера, что они не должны делиться этими составными объектами (процессор, память, звуковая карта)?

Может ли кто-нибудь привести пример, где агрегация используется вместо композиции после выражения выше

1 Ответ

0 голосов
/ 10 января 2020

Вопрос в том, как создаются частные поля?

Означает ли это, что когда у меня есть два экземпляра компьютера, они не должны делиться этими составными объектами ...

Да.

Если объект Computer создает свой собственный Processor, так что никакой другой объект не имеет ссылки на этот экземпляр Processor, тогда он "владеет" своим Processor, что в кавычке называется агрегация .

Сравните этот сценарий с объектом Computer, который получает свой Processor через метод метода получения или аргумент конструктора. В этом случае экземпляр Processor создается другим объектом, а Computer не имеет единоличного владения своим Processor, поскольку не имеет единственной ссылки на объект Processor. Цитата относится к этой взаимосвязи как состав .

На практике разница между агрегацией и составом редко имеет значение. Разница между составом и наследованием гораздо важнее.

...