一. 前言 期末考试之前,我复习系统分析与设计的时候对UML图做了一些知识汇总,现在放到博客上。如果有不对或不恰当的地方,欢迎各位指正。本文仅仅起记录作用,可随意转载,荣幸之至。 截图来自网络或是老师的PPT
二. 概述 · 系统模型的三个主要部分: 功能模型:从用户的角度来看,系统的功能。包括用例图等 对象模型:用对象表示系统的结构和子结构、属性、操作或关系等。包括类图 动态模型:表示系统的内部行为。包括顺序图、活动图、状态图等
· 行为图和交互图: 行为图包括:用例图、状态图、活动图和交互图。交互图又包括顺序图,协作图等。用一个树形结构来表示各种图的关系: 下面根据例子介绍主要的几种图。
三. 具体例子 · sequence diagram(顺序图): 从左到右画出对象及其生命线,对象用矩形表示,生命线用虚线; 在生命线中嵌入的矩形,表示某一过程;对象之间用带箭头的线表示消息传递: 上图表示客户在银行取款的部分顺序图。客户插卡属于消息传递,用带箭头实线表示并在线上面注明行为; 返回的消息用带箭头虚线表示。同步消息和异步消息的区别如图所示。
如果消息传递受某个条件限制,将该条件用 [] 括起来; 表示if…else…结构,用Alt关键字标示(即alternative),并将该结构用实线框括起来: if…then…结构同上,区别在于关键字Alt改为Opt。 再放一个例子:电梯系统中,一个乘客在一楼呼叫电梯准备上六楼: 这个电梯系统的顺序图是我自己设计的,不一定很正确,但是可以参考画顺序图的规则。
· state machine diagram(状态图): 表示系统的各个对象的状态变化。状态用圆边矩形表示,状态之间用带箭头实线表示,实线上标注驱动状态改变的事件。 起始点(请忽略图中的文字): 结束点: 异常终止点: 例子:仍然是电梯系统,一个乘客在一楼呼叫电梯准备上六楼,电梯的状态图: 历史状态:例如,洗衣机洗到一半突然断电,但是记录了历史状态,当通电后可以继续运行:
· collaboration diagram(协作图): 主要表示对象间的协作关系。对象用矩形表示,用带无箭头实线表示对象间有关系,实线上方用箭头表示消息的传递,注意这些消息要用序号标记。 下图为一个打印公司的协作图: 再例如,下图为一个安保系统的协作图,包括的对象有保安,操作台,火警传感器,安保传感器,窃贼:
· use case diagram(用例图): 表示系统的对象和用例。系统具有边界,对象用矩形表示,画在边界外;用例用椭圆表示,画在边界内。一个对象是一个用例的actor,则将它们连起来。 用例的关系:包含、扩展、泛化,包含和扩展都是虚线,而泛化是实线+三角,泛化的画法同对象图。扩展关系标注为extend,是带箭头的虚线,指向被扩展的用例。包含关系标注为include,也是带箭头的虚线,指向被包含的用例。 行为者和用例的连接是不需要文字说明的。 当用例图设计多个系统、多个对象,可以分开来画:
· activity diagram(活动图): 活动图是用例流,不使用对象、类等,但是对象也可以标注出来,要下划线,可用[]表示当前该对象的状态。 活动图的泳道:将用例按照功能或者对象分成几个部分,用实线隔开,状似泳道: 包括起始点、终止点(和状态图相同),对操作流建模,当一个操作完成时,流立即转移到下一个操作。状态的自动转移使它区别于状态图。下例为“作者-出版社-印刷厂”的活动图: 分支(选择性转移)的画法(状态图的分支也是这样画): 并发执行的画法:
· component diagram(组件图): 通常组件在运行时由一个或多个(对象)实现,具有比类图更高的抽象级别。组件图中所有的元素都是私有的。组件图之间通过接口相连,接口分为两种:一种用于访问其他组件(凸形),一种提供给其他组件访问(凹形)。例如:
· class diagram(类图) 类图是最常见的UML模型。包括类名、属性、方法三个部分: 类之间的关系有(根据关联强度从大到小):泛化=实现,组合,聚合,关联,依赖。 类图分为分析类图和设计类图。我们一般先构思分析类图,再构思设计类图。两者的区别: a.一个分析类可能被分解成一个或多个设计类或接口; b.在分析阶段类图研究领域的概念,可以理解为从需求中获取,而在设计阶段类图重点描述类与类之间的接口; c.分析类的三高:高于设计实现(不必理会复杂的设计要求比如系统框架)、高于语言实现(不必理会采用哪一种特性的语言来编写)、高于实现方式(不必考虑采用哪一种具体的实现方式)。
设计类应当:指明每个模块的指责、具有完整的属性和完全的描述(可见性、属性名、类型、默认值)、完整的实现方法(可见性、方法名、变量列表、属性、返回值)。例如: 分析类转为设计类:细化分析类(分析类的抽象更加细节化、增加新的属性以使类能够完整地实现)、将大的分析类拆分;细化分析关系:拆分出整体和部分(用组合或聚合连接);注意标出数据结构的特点如indexed、sorted、set: 总之,当我们分析问题域的时候,我们一般用分析类图进行表示;当我们的分析已经成熟,考虑将它们具体地实现时,一般会借用设计类图。