聚合是整体/部分关系。如果整体不存在,但一部分仍然存在
但在组成上如果不再存在全部,而是部分不再存在
例如,一所大学拥有多个系(例如化学系),每个系都有许多教授。如果大学关闭,这些系将不再存在,但这些系中的教授将继续存在。因此,大学可以看作是系的组成,而系则是教授的集合体。
我在这里的问题是,我们如何在Java中实际定义大学,系和教授的类定义,该类定义还描述了上述聚合和组合行为?
在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
Run Code Online (Sandbox Code Playgroud)
在合成中,由其他对象(“部分”)组成的“整个”对象负责创建,使用和销毁其各个部分。“整个”对象对其每个“部分”的“生命周期”负责。
在聚合中,引用其他对象的“整个”对象(“聚合”)通常看起来与“部件”(组成)相似,通常不是由主对象创建或销毁的,而只是分配或取消分配了。主对象不直接控制其他对象,而只是添加或删除引用。
有时候,您可能会选择其他开发人员编写的代码,并且可能会看到想法,混淆情况,并且无法区分所使用的概念。
| 归档时间: |
|
| 查看次数: |
2850 次 |
| 最近记录: |