UML类图的箭头含义
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了UML类图的箭头含义相关的知识,希望对你有一定的参考价值。
参考技术A 本文以starUML中的图例解释UML类图中的箭头含义。参考:
http://design-patterns.readthedocs.io/zh_CN/latest/read_uml.html
http://blog.csdn.net/duran1986/article/details/5573415
用gif图展示UML中箭头和线条的含义,及搞懂UML类图时序图和用例图
前言
新进入一家公司,应对 日常的软件开发工作和交流,要能看懂别人写的代码各个类之间的关系,那就需要您能看懂类图uml中各个类之间的线条、箭头代表什么意思?
UML的类图中,一共有以下六大关系:
泛化(Generalization), 实现(Realization), 依赖(Dependence),关联(Association),聚合(Aggregation) ,组合(Composition)
为了避免反复看,反复记,但是还是记不住,采用gif动图及幽默比喻的解释,来加深,对她们的理解。
从uml动图gif说起
UML类图六种关系的强弱是:
泛化> 实现> 组合> 聚合> 关联> 依赖
如何更有效的来记忆这些符号?
类图符号基础知识
首先我们从整体上来认识一下表达类图关系的符号,类图关系的符号由三部分组成:
箭头、线条和箭尾。
箭头形状有两种,分别为箭头和三角箭头。
线条形状有两种,分别为实线和虚线。
箭尾形状有三种,分别为点、空心菱形和实心菱形。
综上,我们可以得知表达类图关系的符号一共有2 x 2 x 3 =12种,但是UML类图中只有6种关系,所以还剩下6种关系未被使用。
在了解类图关系的符号表达之后,我们来看一下符号的优先级关系。
符号优先级
从关系符号的组成来看,我们定义以下优先级关系:
箭头> 箭尾> 线条
对于箭头:三角箭头> 箭头
对于箭尾:实心菱形> 空心菱形> 点
对于线条:实线> 虚线
所以,从上述优先级我们不难得出:
上面的六种符号就是UML类图中定义的六种关系符号表达。
应用设计模式中的对象关系
关联和依赖的对比
依赖关系:虚线箭头
public class Person
void buy(Car car)
...
依赖关系,体现为类构造方法及类方法的传入参数,箭头的指向为调用关系;依赖关系除了临时知道对方外,还是“使用”对方的方法和属性。
依赖是a类成员方法中有b类的属性,如动物新陈代谢方法中有水和空气的属性,只有调这个方法的时候,才可能临时用一下。
关联关系:实线
public class 徒弟
public class 唐僧
protected: list<徒弟> tdlist;
类与类的连接,(它使一个类知道另一个类的属性和方法,关联关系一般用成员变量实现)
关联是表示类与类或类与接口之间的依赖关系,表现为“拥有关系”;具体到代码可以用实例变量来表示。
A类有一个成员变量保存的是B类的一个引用,也就是说由A类可以找到B类,或者说a类中存在b类对象,企鹅类中有气候类的属性,唐僧对应多个徒弟,老师教学生,老公和老婆,水壶装水等……
组合和聚合的对比
组合中被组合类单独存在没有意义; 聚合中被聚合类在可以有单独存在的意义。
生命期上:组合中必须要负责被组合类的生命期; 聚合中可不负责被聚合类的声明期,可以由外部程序来创建和消亡(可用赋值)。
组合关系:实心菱形
class 肢
class 人
protected: 肢 limb[4];
组合有相同的生命周期,人有四肢,人死了,四肢不复存在
聚合关系:空心菱形
public class 引擎
public class 轮胎
public class 汽车
protected:引擎 engine;
protected:轮胎 tyre[4];
聚合关系是关联关系的一种,是强的关联关系。
聚合是整体和部分之间的关系,例如汽车由引擎、轮胎以及其它零件组成。
体现整体和部分可以有不一样的生命周期,是一种弱拥有关系,如汽车的一个轮子坏了,还可以换一个;大雁群有大雁,一只大雁挂了,大雁群不会消失。
继承和实现的对比
继承:空心三角形实线
泛化关系表示类与类之间的继承关系,接口与接口之间的继承关系
如:老虎是动物的一种,即有老虎的特性也有动物的共性。
实现:空心三角形虚线
实现关系,指定两个实体之间的一个合同。换言之,一个实体定义一个合同,而另一个实体保证履行该合同。
对Java应用程序进行建模时,实现关系可直接用implements关键字来表示。
UML类图、时序图和用例图
UML类图
UML时序图
时序图,是显示对象之间交互的图,这些对象是按照时间顺序排列的,顺序图中显示的是参与交互的对象及其对象之间消息交互的顺序,一个时序图包括的建模元素主要有:角色(Actor)、对象(Object)、生命线(Lifeline)、控制焦点(Focus of control)、消息(Message)。
如下是简单工厂模式的时序图:
UML用例图
用例图,主要用了描述“用户、需求、系统功能单元”之间的关系。
它展示一个外部用户能够观察到的系统功能模型图。用例图多用于静态建模阶段(主要是业务建模和需求建模),帮助开发团队以一种可视化的方式理解系统的功能需求。
参与者(Actor)
在系统外部与系统直接交互的人或事物。
需要注意以下两点:
- 参与者是角色而不是具体的人,它代表了参与者,在与系统打交道的过程中,所扮演的角色,所以在系统的实际运作中,一个实际用户可能对应系统的多个参与者。不同的用户也可以只对应一个参与者,从而代表同一参与者的不同实例。
- 参与者作为外部用户与系统发生交互作用,是它的主要特征。用小人表示
用例(Use Case)
系统外部可见的一个系统功能单元。系统的功能由系统单元所提供,并通过一系列系统功能与一个或多个参与者之间交换的消息所表达。用椭圆表示
介绍完参与者和用例后,我们了解下它们的存在关系。
关联(Association)
表示参与者与用例之间的交互,通信途径,任何一方都可发送或接受消息。使用普通箭头的实心线,箭头指向消息接收方
泛化(Generalization)
它是一种继承关系,子用例和父用例相似,但表现出更特别的行为;子用例将继承父用例的所有结构、行为和关系。子用例可以使用父用例的一段行为,也可以重载它。
父用例通常是抽象的。使用三角箭头的实线,箭头指向父类
包含(Include)
用来把一个较复杂的用例,所表示功能分解成较小的步骤。包含用例是必须的。
如果缺少包含用例,基用例就不完整,包含用例必须被执行。使用带箭头的虚线并标明“包含”,指向分解出来的功能用例
扩展(Extend)
它是只用例功能的延伸,相当于为基础用例提供一个附加功能。
扩展用例是可选的,如果缺少扩展用例,不会影响到基用例的完整性。使用带箭头的虚线并标明“扩展”,指向基用例
以上是关于UML类图的箭头含义的主要内容,如果未能解决你的问题,请参考以下文章