软技能之UML图
工欲善其事必先利其器,程序员建模过程中需要用到的建模工具UML。
UML:Unified Modeling Language 统一建模语言。目标是以对象图的方式来描述任何类型的系统。
UML可分为两类:结构型(描述某种结构)、行为型(描述某种行为)
结构性的UML有:类图、对象图、构件图、部署图、包图。
行为型的UML有: 活动图、状态机图、顺序图、通信图、用例图、时间图。
需求分析阶段:
用例图:由参与者、用例、边界及它们之间的关系构成描述系统功能的视图。
流程图:面向过程,描述处理过程。
概要设计阶段:
类图:模型的静态结构,类之间的关系。
对象图:作为系统在某一个时刻的快照,是类图中的各个类在某一个时刻点上的实例及其关系的静态写照。用于描述某一时刻的一组对象及它们之间的关系。
详细设计阶段:
时序图:描述对象之间发送消息的时间顺序显示多个对象之间的动态协作。
状态图:描述一个实体基于事件反应的动态行为。侧重从行为的结果来描述。
活动图:阐明业务用例的工作流程。侧重从行为的结果来描述,面向对象,着重表现系统行为。
顺序图:将交互关系表示为一个二维图。
通信图:表现对象交互关系的图。
部署阶段:
部署图。
类图是描述业务概念的一种图。
类之间关系主要分为六种:
继承:子类继承父类。
实现:实现类与接口。
关联:类对象与另一类对象有联系。(组合、聚合也属于关联关系)
依赖:某个类方法使用另一个类对象作为参数。(单向)
组合:类之间整体与部分的关系,整体与部分有一致的生命周期。
聚合:类之间整体与部分的关系,但成员对象可以脱离整体对象独立存在。
各关系从强到弱:继承->实现->组合->聚合->关联->依赖。(DDD中的聚合和UML中的组合关系是一致的)
类图属性表示法:
+ public
- private
# protected
~ default
抽象类或抽象方法用斜体表示
静态类或静态方法加下划线
如果是接口在类上加<<>>
UML图中画一个类使用分割线的矩阵表示:
最上面为类名。
中间为类属性。
下面为类方法。
完整类图例子:
部署图用来描述系统如何部署,以及系统之间的关系的一种图。
18年画了一张,后面分享出来了。
流程图:面向过程,描述处理过程的一种图。
常用的基本符号:
开始/结束:表示流程的开始或结束符号。一个流程图只有一个开始,可能有多个结束。
过程:流程中要处理的一个步骤。
数据:表示数据的输入或者输出。
判定:用来表示过程中的一项判定。
文档:表示属于该过程的书面信息。
流向:箭头表示一个过程的流程方向。
本人之前画的ForkjoinPool执行流程图,最左侧ForkJoinWorkerThread#run 其实是由main方法启动后续执行的,为了方便理解,画了两个开始。
活动图和流程图对比:
活动图更侧重某一体系中各个对象之间的行为联系,活动顺序。而流程图可以指某一算法的具体实现步骤,侧重处理过程。
活动图可以并发执行,而流程图是依次执行,有时间顺序。
活动图是面向对象的,流程图是面向过程的。
组成元素:
角色 Actor:系统角色,可以是人或者其它系统和子系统。
对象 Object:对象代表时序图中的对象在交互中所扮演的角色。
生命线 Lifeline:生命线代表时序图中的对象在一段时期内的存在。
控制焦点 Activation:代表时序图中的对象执行一项操作的时期。
消息 Message:定义交互和协作中交换信息的类。