Inheritance, Association, Aggregation, and Composition 类的继承,关联,聚合和组合的区别

简介:

在C++中,类与类之间的关系大概有四种,分别为继承,关联,聚合,和组合。其中继承我们大家应该都比较熟悉,因为是C++的三大特性继承Inheritance,封装Encapsulation,和多态Polymorphism之一。

继承Inheritance:是指一个类(子类)来继承另一个类(基类),并增加自己的功能,可以通过重写基类中的函数来实现。可以将继承理解成“IS A”的关系,比如A cat "IS A" animal, or A car "IS A" vehicle.

关联Association:是类之间很弱的一种联系,在C++中表现为一个类作为另一个类方法的参数,比如:

class A;
class B;
A::Function1(B &b);
A::Function2(B b);
A::Function3(B *b);

聚合Aggregation:指的是整体和部分的关系,通过从别的类中拿来函数来组成一个新类,或在新类中添加其他代码的一个常用的接口Interface。可以将聚合理解成“HAS A”, 比如 A car "HAS A" engine, or A person "HAS A" name.

Inheritance v.s. Aggregation: 我们有时候会犹豫何时该用继承,何时该用聚合,通常来说,当一个接口Interface的部分不需要使用或是应该被修改以避免不合逻辑的情况时,我们需要用聚合。假如我们需要用几乎所有的函数而并不需要太大的改变时,使用继承。

组合Composition:和聚合类似,也是表示整体和部分的关系,但不同的是,整体和部分具有统一的生存期,一旦整体不存在了,部分也就没有了。可以将组合理解成“CONTAIN A", 比如地球和人的关系,假如地球毁灭了,那么人类也就玩完了,这是组合的关系。那么聚合的关系就好比主机和其外设,即使主机挂了,外设也可以连到其他机子上使用。在C++中,比如:

class A;
class B { A *a; ... };
class C { A a; ... };

本文转自博客园Grandyang的博客,原文链接:类的继承,关联,聚合和组合的区别Inheritance, Association, Aggregation, and Composition,如需转载请自行联系原博主。

相关文章
|
5月前
|
容器
OOP 中的组合、聚合和关联
【8月更文挑战第22天】
70 0
|
5月前
|
uml
UML 类图几种关系(依赖、关联、泛化、实现、聚合、组合)及其对应代码
UML 类图几种关系(依赖、关联、泛化、实现、聚合、组合)及其对应代码
837 0
|
7月前
|
Java 程序员 C#
程序员必知:UML关联聚合组合关系
程序员必知:UML关联聚合组合关系
82 0
|
8月前
|
定位技术 计算机视觉 Windows
类间两种关系:继承、 组合
类间两种关系:继承、 组合
46 0
|
设计模式 Oracle 关系型数据库
深入理解合成复用原则(Composition /Aggregate Reuse Principle)
深入理解合成复用原则(Composition /Aggregate Reuse Principle)
443 0
|
测试技术 领域建模 微服务
DDD领域驱动设计实战-聚合(Aggregate)和聚合根(AggregateRoot)(上)
DDD领域驱动设计实战-聚合(Aggregate)和聚合根(AggregateRoot)
970 0
DDD领域驱动设计实战-聚合(Aggregate)和聚合根(AggregateRoot)(上)
|
存储 弹性计算 安全
DDD领域驱动设计实战-聚合(Aggregate)和聚合根(AggregateRoot)(下)
DDD领域驱动设计实战-聚合(Aggregate)和聚合根(AggregateRoot)
1218 0
重构——24将单项关联改为双向关联(Change Unidirectional Association to Bidirectional)
将单项关联改为双向关联(Change Unidirectional Association to Bidirectional):两个类都需要对方特性,但其间只有一条单向连接;添加一个反向连接,并使修改函数能够同时更新两条连接
1429 0