用gif图展示UML中箭头和线条的含义,及搞懂UML类图、时序图和用例图

前言

新进入一家公司,应对 日常的软件开发工作和交流,要能看懂别人写的代码各个类之间的关系,那就需要您能看懂类图uml中各个类之间的线条、箭头代表什么意思?

UML的类图中,一共有以下六大关系:

泛化(Generalization), 实现(Realization), 依赖(Dependence),关联(Association),聚合(Aggregation) ,组合(Composition)

为了避免反复看,反复记,但是还是记不住,采用gif动图及幽默比喻的解释,来加深,对她们的理解。

从uml动图gif说起

UML类图六种关系的强弱是:
泛化> 实现> 组合> 聚合> 关联> 依赖

如何更有效的来记忆这些符号?

类图符号基础知识

首先我们从整体上来认识一下表达类图关系的符号,类图关系的符号由三部分组成:

箭头、线条和箭尾。


箭头形状有两种,分别为箭头和三角箭头。

扫描二维码关注公众号,回复: 12450887 查看本文章

线条形状有两种,分别为实线和虚线。

箭尾形状有三种,分别为点、空心菱形和实心菱形。


综上,我们可以得知表达类图关系的符号一共有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)

系统外部与系统直接交互的人或事物。

需要注意以下两点:

  1. 参与者是角色不是具体的人,它代表了参与者,在与系统打交道的过程中,所扮演的角色,所以在系统的实际运作中,一个实际用户可能对应系统的多个参与者不同的用户也可以只对应一个参与者,从而代表同一参与者的不同实例
  2. 参与者作为外部用户系统发生交互作用,是它的主要特征。用小人表示

用例(Use Case)

系统外部可见的一个系统功能单元。系统的功能由系统单元所提供,并通过一系列系统功能与一个或多个参与者之间交换的消息所表达。用椭圆表示

介绍完参与者和用例后,我们了解下它们的存在关系。

关联(Association)

表示参与者与用例之间的交互,通信途径,任何一方可发送接受消息。使用普通箭头实心线,箭头指向消息接收方

泛化(Generalization)

它是一种继承关系,子用例父用例相似,但表现出更特别的行为;子用例将继承父用例的所有结构、行为和关系。子用例可以使用父用例的一段行为,也可以重载它。

父用例通常是抽象的。使用三角箭头的实线箭头指向父类

包含(Include)

用来把一个较复杂的用例,所表示功能分解成较小的步骤。包含用例是必须的。

如果缺少包含用例,基用例就不完整,包含用例必须被执行。使用带箭头的虚线并标明“包含”,指向分解出来的功能用例

扩展(Extend)

它是只用例功能的延伸,相当于为基础用例提供一个附加功能。

扩展用例是可选的,如果缺少扩展用例,不会影响到基用例的完整性。使用带箭头的虚线并标明“扩展”,指向基用例

猜你喜欢

转载自blog.csdn.net/as4589sd/article/details/112134000