Насколько я могу судить (и, возможно, кто-то другой может дать лучший ответ), вы не можете оценить, является ли взаимосвязь агрегацией или композицией, просто взглянув на код Java. Это наоборот.
Сначала вы создаете концептуальную модель мира. В библиотеках есть книги, а у машин есть колеса. Тогда вы думаете - имеет ли смысл для книги существовать без библиотеки или для колеса существовать без автомобиля, в контексте, в котором я работаю в . Так, например, если вы пишете автомобильные гонки, вы не будете использовать колеса вне автомобилей. Но если вы пишете приложение для авторемонта, вы будете иметь дело с колесами независимо от конкретного автомобиля.
Итак, сначала вы решаете, нужна ли вам агрегация или композиция, а затем внедряете ее в свой код. Реализация может состоять в том, что объект Car
имеет List<Wheel>
, но вы не можете сказать, является ли это составом или агрегацией только из этого. Ключ заключается в том, что вы интерпретируете код (реализацию) на основе вашей концептуальной модели, а затем используете его в соответствии с этим.
Если это композиция, использование может иметь некоторые ограничения:
- Ни один объект, кроме
Car
, не будет содержать ссылку на Wheel
.
Wheel
может быть даже закрытым или закрытым для пакета классом.
- Если
Car
сохраняется в базе данных, при его удалении вы также автоматически удаляете все его Wheel
s.
Но вы должны применить эти ограничения, если решите, что это композиция.