Концепции композиции и агрегирования отображаются в UML стрелками с ромбами, но когда эти концепции реализованы на языке программирования, они могут переходить с одного языка программирования на другой.
В целом, в языках программированияКак и Java, C # или Delphi, оба случая представлены ссылками на объекты.Каждый объект имеет «жизненный цикл» («создан», «делать вещи», «уничтожен»).
package Universities;
class ProfessorClass {
string FirstName;
string LastName;
// constructor
public ProfessorClass(string AFirstName, string ALastName) {
FirstName = AFirstName;
LastName = ALastName;
}
} // class ProfessorClass
class DepartmentClass {
string Name;
string Description;
// constructor
public DepartmentClass(string AName, string ADescription) {
Name = AName;
Description = ADescription;
}
} // class DepartmentClass
class UniversityClass {
// here doesn't look different:
// aggregation
ProfessorClass[] Professors;
// composition
DepartmentsClass[] Departments;
// constructor
public UniversityClass() {
// "UniversityClass" is in charge of creating parts
// here doesn't look different:
DepartmentsClass = new DepartmentsClass[]();
ProfessorClass = new ProfessorClass[]();
}
public addDepartment(string AName, string ADescription)
{
// composition, whole class is in charge of adding parts:
DepartmentClass Dept = new DepartmentClass(AName, ADescription);
DepartmentsClass.add(Dept);
}
public deleteDepartment(string AName)
{
// composition, whole class is in charge of deleting parts:
DepartmentsClass.delete(AName);
}
public addProfessor(ProfessorClass AProfessor)
{
// aggregation, whole class only reference other objects,
// but, may look like they where parts
ProfessorClass.add(AProfessor);
}
public static void main(String[] args) {
UniversityClass MyUniversity = new UniversityClass();
// composition, internal, maintained by main class
MyUniversity.addDepartment("History", "Very Boring");
MyUniversity.addDepartment("Music", "Only if you like it");
MyUniversity.addDepartment("Astronomy", "night living people");
// aggregation, external, referenced by main class,
// maintained independently
ProfessorClass Professor1 = new ProfessorClass("Jane", "Doe");
ProfessorClass Professor2 = new ProfessorClass("Mike", "Smith");
ProfessorClass Professor3 = new ProfessorClass("Louise", "Kent");
MyUniversity.addProfessor(Professor1);
MyUniversity.addProfessor(Professor2);
MyUniversity.addProfessor(Professor3);
} // static void main(...)
} // class UniversityClass
В композиции «целые» объекты, составленные другими объектами («частями»), отвечают за создание, использование и уничтожение его частей.«Целый» объект отвечает за «жизненный цикл» каждой из его «частей».
При агрегации «целые» объекты, ссылающиеся на другие объекты («агрегация»), могут выглядеть как «Части "(композиция), как правило, не создаются или уничтожаются основным объектом, просто назначаются или отменяются.Главный объект не управляет напрямую другими объектами, просто добавляет или удаляет ссылки.
Иногда вы можете выбрать код, уже сделанный другими разработчиками, и можете увидеть обе идеи, путаницу и не можете различить, какиеКонцепция была использована.