软件建模与设计过程可以拆分成需求分析、概要设计和详细设计三个阶段。UML规范包含了十多种模型图,常用的有7种:类图、序列图、组件图、部署图、用例图、状态图和活动图,本篇笔记重点探讨如何使用这七种模型图在需求分析、概要设计、详细设计中输出合适的设计文档。
类图
类图,用来表述类的特性和类之间的静态关系。
一个类包含三个部分:类的名字、类的属性列表和类的方法列表。类之间的静态关系有6种:关联、依赖、组合、聚合、继承、泛化。把相关的一组类及其关系用一张图画出来,就是类图。
类图主要是在详细设计阶段画图,设计出类图,开发工程师就可以按照类图实现代码,只要类方法的逻辑不是太复杂,不同的工程师实现出来的代码几乎是一样的,这样就可以保证软件的规范、统一。在日常开发中,不需要画出所有的类图,把核心的、有代表性和有技术难度的类图画出来即可。
序列图
序列图主要用来描述参与者之间的动态调用关系。
每个参与者有一条垂直向下的生命线,这条线用虚线表示,而参与者之间的消息从上到下表示其调用的前后顺序关系,这正是序列图这个词的由来,每个生命线都有一个激活条,只有参与者活动的时候才是激活的。
序列图通常用于表示对象之间的交互,这个对象可以是类对象,也可以是更大粒度的参与者,比如组件、服务器、子系统等等,只要是描述不同参与者之间交互的,都可以使用序列图。
组件图
组件是比类更大的设计元素,一个组件中通常包含很多个类。组件图有的时候和包图的用途比较接近,组件图通常用来描述一个物理上的组件。在进行模块设计的时候更多的是用组件图。
组件图描述的是组件之间的静态关系,主要是依赖关系,不能描述组件之间的动态调用关系,如果要描述组件之间的调用关系可以使用序列图。
部署图
部署图描述的是软件系统的最终部署情况,比如使用多少服务器,关键组件都部署在哪些服务器上。
部署图是描述软件系统最终物理呈现的蓝图,根据部署图,可以让客户、老板、工程师清晰了解到最终运行的系统在物理上是什么样子,根据部署图,可以估算服务器和第三方软件的采购成本。部署图主要用于概要设计阶段。
用例图
用例图主要用在需求分析阶段,通过反映用户和软件系统的交互,描述系统的功能需求。
图中小人形象的元素,被称为角色,角色可以是人,也可以是其他系统。对于复杂的功能系统,一张用例图只能包含其中的一小部分,所以这些功能被一个矩形框框起来,矩形框是用例的边界,框中的椭圆表示一个个功能。用例图中功能描述的比较简单,通常还需要对用例图配以文字说明,形成需求文档。用例图一般在需求分析阶段使用。
状态图
状态图是用来展示单个对象生命周期的状态变迁,业务系统中,很多重要的领域对象都有比较复杂的状态变迁,比如账号,有创建状态、激活状态、冻结状态、欠费状态等等各种状态。此外,用户、订单、商品、红包这些常见的领域模型都有多种状态。
这些状态的变迁描述可以在用例图中用文字描述,随着角色的各种操作而改变,但是用这种方式描述,状态散乱在各处,不要说开发的时候容易搞错,就是产品经理自己在设计的时候,也容易搞错对象的状态变迁。
举例门的三种状态:开 opened、关 closed 和锁 locked,用状态图展示就是:
状态图在需求分析阶段画主要是描述状态变迁的逻辑关系,在设计阶段画时,状态用剧吐的枚举表示以指导具体的开发。
活动图
活动图主要是描述过程逻辑也业务流程,UML中没有流程图,活动图大多数时候都是当流程图在用。实心圆代表流程开始,空心圆代表流程结束,圆角矩形表示活动,菱形表示分支判断。活动图引入了一个重要的概念——泳道。活动图可以根据活动的范围,将活动根据领域、系统和角色等划分到不同的泳道中,使流程边界更加清晰。
活动图可以在需求分析阶段描述业务流程,也可以在概要设计描述子系统和组件的交互,在详细设计阶段描述一个类方法内部的计算流程等待,比较具有普适性。
使用合适的UML模型构建一个设计文档
UML模型图单拆开看都比较简单,难的是在合适的场合使用正确的UML模型表达设计意图,形成一套完整的软件设计模型,进而组织成一个层次分明即可指导开发,又可以在团队内外达成共识的设计文档。
梳理各个阶段如何使用正确的模型进行软件建模,根据系统具体分析,也每次设计也不是需要把所有的模型都给用一遍,能清晰表达出要设计思想即可。
- 需求分析阶段,可以使用用例图来描述系统的功能与使用场景;可以通过活动图来描述关键的业务流程;可以用时序图来描述新系统和原来子系统的调用关系;可以用简化的类图来进行领域模型抽象并描述核心领域对象间的关系;可以用状态图来描述对象内部的复杂状态变化。
- 概要设计阶段:通过部署图描述系统最终的物理蓝图;通过组件图以及组件时序图设计软件主要模块及其关系;可以用组件活动图描述组件间的流程逻辑。
- 详细设计:主要输出类图和类的时序图,来指导最终的代码开发,如果类的方法内部有很复杂的逻辑,可以画出方法的活动图进行描述。
总结
主要学习了UML建模中7中模型图具体是什么,怎么用,用在哪些阶段解决哪些问题,搞好系统设计。
此文章为2月Day01学习笔记,