第1章 UML基础:类的关系

1. 类的关系

1.1 继承和实现:继承表示有父子关系

 

1.2 依赖:(use–a),表示一个类要使用(use)另一个类。

(1)类图

(2)三种依赖方式函数参数或返回值局部变量静态成员变量或函数

1.3 关联:是一种平等的、朋友关系

(1)双向关联:双方都知道对方的存在,都可以调用对方的公有成员变量和函数

  ①在代码的表现为双方都拥有对方的一个指针或引用。注意,表现为拥有对方的一个 “指针” 和 “引用”。

  ②之所以是指针和引用是有原因的。如果是值(对象)那么就不是关联了,而是组合。因为是值的话,C31对象消失C32对象也会消失。这和组合的定义就一样了 :整体与部分的关系,而且整体消失部分也会消失,部分不能独立于整体存在。

(2)单向关联

  ①表示相识关系,指C33知道C34,可以调用C34的公共成员变量和函数

  ②代码上表示为C33有C34的指针,而C34对C33一无所知。

(3)自身关联:自己的内部有着一个指向自身的指针或引用

1.4 聚合与组合

(1)聚合:(has–a ),表示整体-部分的关系,但部分可以脱离整体而单独存在。

  ①如C41聚合C42,但是C42可以离开C41而独立存在。在创建C41类的对象时,一般不会马上创建theC42对象,而是等待一个外界的对象传给它。

  ②当用C++代码来描绘关联和聚合时都是一个类包含了另外一个类的指针。但是他们是有区别的,这个区别不是C++语法上的差别,而是语义上的差别聚合是整体和部分的关系,而且关联是平等的朋友关系,比如。张三和李四,是关联。而张三和张三的杯子是聚合。张三和张三的鼻子是组合。

(2)组合:Contains-a。表示整体-部分的关系,但部分不能脱离整体而单独存在。如手脚是身体的一部分,轮胎与汽车的一部分,脱离后就没有意义了。

  ①一般组合用的是值对象(如theC44,表示其生命期与整体一致)

  ②聚合是指针。但有时组合也可以用指针,在构造函数中创建对象,析构函数中销毁对象。但不同的是聚合,一般其对象指针是由类外传入的,而组合是在类内部的构造函数中new出来的

  ③从语义上看,组合与聚合也是不一样的。当表示聚合时,部分可以脱离整体。而组合不行。

2. 依赖和聚合/组合、关联的区别

  ①关联是类之间的一种平等关系,例如老师和学生,老公和老婆,水壶装水等就是一种关系。从语义上很容易区分出来

  ②组合是一种整体-部分的关系,在问题域中这种关系很明显,从语义上可以直接分析得出。例如轮胎是车的一部分,树叶是树的一部分,手脚是身体的一部分这种的关系,非常明显的整体-部分关系。

  ③上述的几种关系(依赖、关联、聚合/组合)在代码中可能以指针、引用、值等的方式在另一个类中出现,不拘于形式,只有配合语义,结合上下文来判断。而只给出一段代码让我们来判断是什么关系,还是无法准确判断的。

  ④这里还要说明一下,所谓的这些关系只是在某个问题域才有效,离开了这个问题域,可能这些关系就不成立了。

猜你喜欢

转载自blog.csdn.net/CherishPrecious/article/details/83854612
今日推荐