说到设计模式就不得不涉及建模思想,说到建模思想自然而然会应用UML,目前业界开源的UML工具很多,用起来也非常便捷。近几年来随着软件应用领域开发模式转向快速迭代试错,UML在敏捷开发,尤其是web及mobile开发领域应用越来越少。
就国内软件行业发展现状来说,稳定成熟的商业软件凤毛麟角,初具雏形的互联网App大行其道,竞争中的公司更看重的是快速占领市场,小团队快速迭代试错,而不是长期、精心打磨同一款软件产品,所以注重统一规范、充分需求分析、严密框架设计的UML显得相对繁琐,自然会被灵活敏捷的各类开发过程文档取代,比如建模草图、wiki、看板、注释等轻文档。
对于敏捷开发和传统开发来说,不管是否广泛使用UML工具,建模总是必不可少的,可以帮助我们理清思路,更好地分析和设计易扩展、易维护的软件框架。从当前市面上看,基于图表的UML是熟悉建模思想及设计模式的最好选择。
UML简介
简单地说,UML的核心是图表,是与具体编程语言无关的设计规范,用来定义、细化、编写、构造软件系统中的要素,以可视化的图形定义软件开发中涉及到的参与者、实体、流程及它们之间的调用关系,覆盖软件开发所有阶段的抽象表述。
UML的优势在于分析、建模和整理设计思路。
建模思想
在最终设计和实现软件系统之前,通常都需要划一定的时间在不同的层次上抽象开发模型,稍微上点规模的项目,团队协作是必不可少了,开发模型也可以帮助团队成员更好地沟通交流,所以不管是草图还是UML,我们都需要对开发中的项目构建一些直观、明确的文档化记录。建模的出发点有以下几个方面:
- 更好地理解用户需求,避免曲解或遗漏
- 更好地进行系统分析和设计,避免返工
- 帮助团队交流和项目协同开发,避免埋坑
- 帮助提高开发速度和质量,降低沟通成本
UML常用图
UML常用图有13种,大体可以归类为结构图(Structure Diagrams)和行为图(Behavior Diagrams)。
- 结构图:强调的是系统构建的静态结构,包括类图、对象图、包图、组件图、部署图、组合结构图
类图(Class Diagram)
类图是最常用的UML图,也是其他UML图的基础。类图用来显示类、接口以及它们之间的静态结构和关系。
类图中的元素:类,接口、关系、协作、约束、注释、包
类图中的关系:泛化、实现、关联、聚合、组合、依赖
对象图(Object Diagram)
对象图可以看作是类图在系统某一时刻的镜像。
对象图中的元素:对象、链接、包
对象图中的关系:泛化、实现、关联、聚合、组合、依赖
包图(Package Diagram)
包图是对各个包及包之间关系的描述,展现系统中模块与模块之间的依赖关系。
包图中的元素:类、接口、组件、节点、协作、用例及其他包
包图中的关系:泛化、细化、依赖
组件图(Component Diagram)
组件图又称构建图,用来建模系统的各个组件,包括源代码文件、二进制文件、脚本文件、可以执行文件之间的关系
组件图中的元素:构件、接口、关系、端口、连接器
组件中的关系:依赖、泛化
部署图(Deployment Diagram)
部署图是展示运行系统中的软件和硬件的物理架构及处理节点的组件分布情况
部署图中的元素:结点、结点实例、结点类型、结点容器、物件、连接
部署图中的关系:依赖、关联
组合结构图(Composite Structure Diagram)
组合结构图用来描述某一部分及其成员的组成结构关系,成员之间的连接关系,与外部组件的接口及协作
组合结构图的元素:部件、连接件、端口
组合结构图的关系:关联、组合、泛化、依赖
- 行为图:强调系统中对象的动态行为,包括用例图、活动图、状态图、交互概述图、通信图、时序图、时间图
用例图(Use Case Diagram)
用例图从客户角度展现需求模型中希望哪些参与者提供什么样的用例功能,以及功能模块之间的调用关系
用例图中的元素:参与者、用例、关系
用例图中的关系:关联、包含、扩展、泛化
活动图(Activity Diagram)
活动图用来描述用例功能所要求进行的活动以及活动之间的约束关系,有利于对象间的流程控制
活动图的元素:活动状态、动作状态、控制点、转移、开始节点、终止节点、对象、对象流、泳道
活动图的关系:控制转移、分支与合并、分叉与汇合
状态图(State Machine Diagram)
状态图用来描述特定对象所有可能的状态,以及由各事件引发的状态之间的转换变化,强调从状态到状态的控制流
状态图的元素:状态、转换、事件、活动、动作
状态图的关系:状态与状态之间有组合、转换关系
交互概述图(Interaction Overview Diagram)
交互概述图是将活动图和时序图嫁接在一起的图,合并了时序图片段和控制流构造
交互概述图的元素:活动状态、动作状态、控制点、转移、开始节点、终止节点、对象、对象流、泳道
交互概述图的关系:控制转移、分支与合并、分叉与汇合
通信图(Communication)
通信图描述发送和接受消息的对象之间的合作及调用关系
通信图的元素:对象、链、消息
通信图的关系:通过链让消息在不同对象间传递
时序图(Sequence Diagram)
时序图也叫序列图或顺序图,用来描述对象之间传送消息的时间顺序
时序图的元素:角色、对象、生命线、控制焦点、消息
时序图的关系:时序图对象之间有约束关系
时间图(Timing Diagram)
用来描述单个或多个对象随时间变化或维持的状态
时间图的元素:时间约束、持续时间约束、生命线、状态、条件、事件
时间图的关系:事件之间有时间约束关系,状态之间有转移关系
UML常用符号
- actor: 角色/参与者
- usecase:用例
- class diagram: 类图 抽象类用斜体表示
- object diagram:对象图
- interface:接口
- package: 包
- start, end: 开始、结束
- state: 状态
- component: 构件
- node:节点
- note: 注释
- <<include>>:包含关系
- <<extend>>:扩展关系
- generalization:泛化
- dependency:依赖关系 注意箭头指向:B依赖A
- aggregation:聚合
- composition:组合
- association:关联
multiplicity: 多重性
* - 1 仅为1
- * 从0到无穷大
- 0..1 0 或者 1
- n..m [n, m]之间的任何数
UML扩展与细化
正如本文开始所述,UML在快速迭代的互联网和移动互联网时代似乎没有以前应用那么广泛,更多时候开发人员在隐性使用UML特性,比如说绘制类、包、用例、组件等草图辅助设计,但不会花费大量时间制作正式的UML图例同时因为需求的不断变化而频繁返工。而且面向接口编程在框架设计中应用越来越多,但接口特性在UML2.0中并没有得到相应扩展和细化,所以当前软件开发过程,尤其是web & mobile app的开发过程的特点需要UML进一步升级以适应软件工程的发展。对于UML的扩展与细化,个人有以下方面不太成熟的看法,仅供参考:
- 根据已实现代码生成UML各类图:其实这种功能在不少IDE中已经提供了,但是功能还不够全面和易用
- 细化UML图在接口方面的规范和契约:这个尝试在UML中暂时还没有发现,在其他开发流程和工具中倒是有抽象且细化接口导入、导出、约束等契约
- 在UML中扩展新的分支xUML(根据xUML自动生成代码):这个需要丰富的代码库支撑,暂时还不太容易做到,一旦抽象出基础代码库,应该会大大提升开发效率
- 淘汰老化UML概念:UML常用的十三种图中,常用的也就几种,其他的规范和契约虽然都在但实用性越来越小,所以需要适当瘦身
原文地址:https://www.cnblogs.com/coolstream/p/9572878.html