UML导学
这里记录一下我自己对于UML中各种箭头的记忆方式
声明:这里的部分图片是我从《大话设计模式》中截取的,因此图中的部分例子是c++实现的,与我使用的java有所出入,不过不影响阅读。这里也推荐大家看一下这本书,内容丰富而且有趣。
继承(extends)
空心三角 + 直线
指的是一个类(称为子类)继承另外一个类(称为父类)的功能,并且
可以增加自己的新功能
的能力,通过extends关键字标识,用的很多,不多啰嗦。
实现接口(implement)
空心三角 + 虚线
指的是一个class类实现interface接口(java有
单继承
,多实现
的特性【说白了就是只能有一个爹】)的功能(必须实现所有功能,不同于继承
)。在java中通过关键字implement标识。
空心三角
+ 线条
的就这两个:即 继承
实现
关联关系
箭头 + 直线
说白了:就是成为属性,private Climate climate;
就像是我和出生入死的兄弟,他成为我生命中的重要组成部分,这种关系比依赖关系更强(依赖我这里理解为用完就一别两宽,利用的关系,用完就互不干涉),不像依赖关系的偶然性、临时性,
一般是长期的,并且双方的关系一般是平等的
。关联可以是单向的
、双向的
;一般是类A以属性的方式出现在类B
,也可能是类B引用类A的全局变量。
聚合关系
空心棱形 + 箭头
其实可以将聚合看作关联的特例。 聚合也是成为属性,不过不是一个
,是一堆
: private WideGoose[] arrWideGoose 变成数组
了,has-a的关系。
聚合关系:如同乌合之众
,大家只是聚集在一起完成一项任务,完事了就各回各家,互不干涉,而不是连体婴儿。正式点的说法就是:整体和部分是分离的,他们有各自的生命周期,部分可以属于多个整体对象,也可以被多个整体对象共享。
关联和聚合:都是将一个类变成自己的一个属性
依赖关系
虚线 + 箭头
比如:动物新陈代谢需要判断氧气和水的数值是否达标,这里就是动物依赖于氧气和水
public class Animal {
public void metabolism(Oxygen oxygen, Water water){}
}
依赖:用完就完事的利用关系,与组合不同,是一种临时性、偶然性的关系,非常脆弱。 类B作为参数在类A的Method中使用到
(类A依赖于类B)。
组合关系
实心棱形 + 箭头 (可以标注数字,表示彼此的数量关系)
说白了:就是new了一个对象
组合是如同聚合一样,也是关联关系的一种特例,他体现的是
contains-a
的关系,比聚合关系更强
(也叫做强聚合
)。此时整体和部分密不可分,当整体(用鸟做比喻)结束,部分(用鸟的翅膀做比喻)也跟着结束【当鸟死亡的时候,翅膀也跟着死亡了】。
箭头下方数字表示:一只鸟组合两个翅膀
这里仿照图片内容给出java代码
public class Bird {
private Wing wing;
public Bird() {
wing = new Wing();
}
}
这是我的记忆UML的方式,如果还有其他不错的方法或者需要补充的地方,欢迎大家留言!