面向对象编程关系:组合Composition和聚合Aggregation
在面向对象编程中,组合(Composition)和聚合(Aggregation)是两种表示类之间关系的方式,它们虽然有相似之处,但在概念和实现上有明显的区别。
1. 定义
-
组合(Composition):
- 强关系,表示一个类是另一个类的组成部分,生命周期依赖于整体。即如果整体被销毁,部分也会随之被销毁。
- 例如,一个“汽车”类可能包含一个“发动机”类,发动机的生命周期与汽车紧密相连。
-
聚合(Aggregation):
- 弱关系,表示一个类与另一个类之间的关联,但其生命周期独立。即如果整体被销毁,部分仍然可以存在。
- 例如,一个“班级”类可能包含多个“学生”类,班级的消失并不影响学生的存在。
2. 关系强度
-
组合:
- 强依赖,整体与部分的生命周期一致。
- 通常表示为“拥有”关系。
-
聚合:
- 弱依赖,整体与部分的生命周期独立。
- 通常表示为“使用”关系。
3. 示例
-
组合示例:
class Engine:
def __init__(self):
print("Engine created")
def __del__(self):
print("Engine destroyed")
class Car:
def __init__(self):
self.engine = Engine() # 组合关系
car = Car() # 创建Car时创建Engine
del car # Car被销毁时,Engine也被销毁
聚合示例:
class Student:
def __init__(self, name):
self.name = name
class Class:
def __init__(self):
self.students = [] # 聚合关系
def add_student(self, student):
self.students.append(student)
student1 = Student("Alice")
student2 = Student("Bob")
classroom = Class()
classroom.add_student(student1)
classroom.add_student(student2)
del classroom # 删除Class对象,学生仍然存在
4. 总结
- 组合:整体与部分的生命周期紧密相连,通常是“拥有”关系。
- 聚合:整体与部分的生命周期独立,通常是“使用”关系。
理解这两者的区别有助于更好地设计类之间的关系,从而实现更清晰和高效的代码结构。