微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

01. 重新认识 UML

一、什么是 UML?

1、统一建模语言(Unified Modeling Language,UML)是一种为面向对象系统的产品进行说明、可视化和编制文档的一种标准语言,是非专利的第三代建模和规约语言。

2、UML 使用 面向对象 设计的的建模工具,但 独立于任何具体程序设计语言。

截图

二、UML 绘图规范

1、事物描述

类 [Class],对一组具有相同属性方法,关系和语义的对象的描述

接口 [Interface],定义了一组操作的规范,并没有给出这组操作的具体实现

用例 [Usecase],是对一组动作序列的描述,系统将产生一个对特定的参与者(Actor)有价值且可观察的结果

包 [Pakage],是分组事物中最主要的,是UML 中唯一的组织机制

2、事物关系描述

1)关联 [Association],是一种拥有的关系,具有方向性。

截图

2)聚合 [Aggregate],是整体与部分的关系。

截图

3)组合 [Combination],整体与部分的关系。具有相同生命周期

截图

4)泛化 [Generalization],父子关系,就是继承。

截图

5)实现 [Realization],类与接口的关系,类实现接口。

截图

6)依赖 [Dependency],两个类的依赖关系,一般是单向得。

截图

三、类图

1、标识方法

顶部标识类名,中间标识类的属性,尾部标识类的方法

截图

1)继承

公交车 和 出租车 都是汽车,汽车 是实体

截图

2)实现

汽车 和 轮船 都是交通工具,而 交通工具 是抽象概念

截图

3)组合

人由 头 和 身体 组成,两者不可分割,共同存在。

截图

4)聚合

公交车司机和工衣、工帽是整体与部分的关系,但是可以分开。

截图

5)关联关系

关联关系有四种:双向关联、单向关联、自关联、多重数关联。例如:汽车和司机,一辆汽车对应特定的司机,一个司机也可以开多辆车。

1..1 仅一个
0..* 零个或多个
1..* 一个或多个
0..1 没有或只有一个
m..n 最少m、最多n 个 [ m<=n ]

截图

6)依赖关系

汽车依赖汽油,如果没有汽油,汽车将无法行驶

截图

2、关系图

六种类关系中,组合、聚合和关联的代码结构一样,可以从关系的强弱来理解,各类关系从强到弱依次是 继承→实现→组合→聚合→关联→依赖。

截图

1)类关系记忆技巧

箭头方向:从子类指向父类

记忆技巧:

1、定义子类是需要通过extends 关键字指定父类

2、子类一定是知道父类定义的,但父类并不知道子类的定义;

3、只有知道对方信息时才能指向对方;

4、所以箭头的方向是从子类指向父类


继承实现:用线条连接两个类。

记忆技巧:

1、空心三角箭头表示继承或实现。

2、实线表示继承,是is-a 的关系,表示扩展,不虚,很结实;

3、虚线表示实现,虚线代表“虚”无实体。


关联依赖:用线条连接两个类。

记忆技巧:

1、虚线表示依赖关系:临时用一下,若即若离,虚无缥缈,若有若无;表示一种使用关系,一个类需要借助另一类来实现功能;一般是一个类将另一个类作为参数使用,或作为返回值。

2、实线表示关联关系:关系稳定,实打实的关系,铁哥们;表示一个类对象和另一个类对象有关联;通常是一个类中有另一个类对象作为属性


组合聚合:用菱形表示。记忆技巧:

1、菱形就是像是一个盛东西的器皿(比如盘子);

2、聚合:空心菱形,代表空器皿里可以放很多相同的东西,聚集在一起(箭头方向所指的类);整体和局部的关系,两者有独立的生命周期,是has-a 的关系;弱关系,消极的词:弱-空。

2)生活案例

下面这张图是来自《大话设计模式》这本书中,对动物衍生关系描述的类图

截图

四、时序图

时序图描述对象之间消息的发送顺序,强调时间顺序。时序图一个二维图,横轴表示对象,纵轴表示时间,消息在各对象之间横向传递,依照时间顺序纵向排列。用箭头表示消息、用竖虚线表示对象生命线。

1、时序图的作用

1)展示对象之间交互的顺序。将交互行为建模为消息传递,通过描述消息是如何在对象间发送和接收的来动态展示对象之间的交互

2)相对于其他UML 图,时序图更强调交互的时间顺序

3)可以直观的描述并发进程

2、时序图组成元素

1)角色 [Acto] ,可以是人、机器、其他系统、子系统;在时序图中用表示

2)对象 [Object] ,对象的左右顺序并不重要,但是为了作图清晰整洁。把交互频繁的对象尽可能的靠拢,把初始化整个交互活动的对象放置在最左端

3)生命线 [Lifeline] ,在时序图中表示为从对象图标向下延伸的一条虚线,表示对象存在的时间

4)控制焦点 [Focus of Control] ,又称为激活期,在这个时间段内对象将执行相应的操作。可以理解为Java 语言中一对大括号{ }中的内容;用小矩形表示

5)消息 [Message] ,消息一般分为同步消息(Synchronous Message),异步消息(Asynchronous Message)和返回消息(Return Message)

截图

3、组合片段

1)抉择 [Alt] , 消息序列之间的互斥的选择,相当于经典的 if...else。

抉择在任何场合下只发生一个序列。可以在每个片段中设置一个临界来指示该片段可以运行的条件。else 的临界指示其他任何临界都不为True 时应运行的片段。如果所有临界都为False 并且没有else,则不执行任何片段

截图

2)选项 [Opt] ,一个可能发生或不发生的序列

截图

3)循环 [Loop] ,片段重复一定次数,可以在临界中指示片段重复的条件

截图

4)并行 [Par] 

截图


时序图画法及实践

1)划清边界,识别交互的语境

2)将所要绘制的交互场景中的角色以及对象梳理出来

3)从触发整个交互的某个消息开始,在生命线之间从上到下依次画出所有消息,并注明每个消息的特性(如参数等)

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐