UML的体系结构
UML建模规则
- 名字:任何一个UML成员都必须包含一个名字。
- 作用域:UML成员所定义的内容起作用的上下文环境。某个成员在每个实例中代表一个值,还是代表这个类元的所有实例的一个共享值,由上下文决定。
- 可见性:UML成员能被其他成员引用的方式。
- 完整性:UML成员间互相连接的合法性和一致性。
- 运行属性:UML成员在运行时的特性。
UML建模的原则
- 被省略:即模型本身是完备的,但在图上某些属性被隐藏起来,以简化表达;
- 不完全:即在设计过程中某些元素可以暂时不存在;
- 不一致:即在设计过程中暂时不保证设计的完整性。
UML常用的9种模型图
- 按照视图进行划分:
(4 + 1 视图)
- 按照静态图及动态图进行划分:
1. 用例图(UseCase Diagrams)
- 用于描述一组用例、参与者及它们之间的连接关系,即什么角色做了什么事。
- 从角色使用系统的角度描述系统中的信息,查看系统的功能,而不描述该功能的内部实现。
- 用例图包括系统用例图及业务用例图,系统用例图是通过系统的使用用例,业务用例图是没有系统参与时的使用用例。
(系统用例图)
- 椭圆:用例,是用户与计算机之间的一次典型交互作用。
- 人形:参与者(外部执行者)是指用户在系统中扮演的角色。
(旅游系统)
(ATM系统)
2. 类图(Class Diagrams)
- 用于描述一组类,接口,协作及它们间的静态关系(即系统的对象结构,显示构成系统的对象类,以及那些对象类间的关系),阐明了系统的静态结构 。
- 类是一组具有相同属性,操作,关系和语义的对象的描述,其中对类和属性进行描述时的一个重要细节是它的可见性。
(类图)
- 类图用矩形框表示,它的属性和方法操作分别列在分格中。
- 类之间可以多种方式链接,关联,泛化,依赖,实现,聚合,组合,各种关系的强弱顺序:
泛化 = 实现 > 组合 > 聚合 > 关联 > 依赖
- 类框之间的关系通过连线来表示,不同关系用连线上和连线端头的修饰符来区别。
- 方法修饰符
“-” 表示私有属性private
,内部可见,类内部操作才可存取,“+” 表示公有属性public
,可以被系统中其他操作查看和使用。“#”表示 protected
,类中操作存取,也可被子类使用。
(大学类图)
3. 对象图(Object DIagrams)
- 对象图描述的是参与交互的各个对象在交互过程中某一时刻的状态,其中所使用的符号与类图中的符号几乎完全相同,区别仅在于对象图的对象名带有下划线,而且类与类之间关系的所有实例都要画出来。
(汽车类图)
(汽车对象图)
4. 时序图(Sequence Diagrams)(顺序图,序列图)
- 顺序图表示对象间传送消息的时间顺序,阐明对象间交互过程以及在系统执行过程中的某一具体时刻将会发送什么事件。
- 是一种强调时间顺序的交互图,将用例表达的需求,转化为进一步,更加正式层次的精细表达。用例常常被细化为一个或者多个序列图。
(时序图)
-
对象: 传送事件的对象,如下面餐厅点餐时序图中的人形及方框内的对象。
-
对象生命线: 对象下的一条虚线,表示一个对象在一段时间内存在。
-
控制焦点: 每个对象下面有一个小矩形条,它与对象的生命线相重叠,事务的请求传递和响应返回在矩形条中进行。
-
同步消息: 需要等待上一步执行完,才可进行下一步操作
-
异步消息: 异步发送消息,不需等待
-
注释: 对某一操作过程进行注释
-
约束: 对传输的数据进行约束
(餐厅点餐时序图)
5. 协作图(Collaboration Diagrams)
-
协作图是一种交互图,它强调收发信息的对象的组织结构 ,描述的对象间的协作关系(与写作图相似),显示对象间的动态合作关系 。
-
协作图是表示一个类操作的实现,可以说明类操作中用到的参数和局部变量及操作中的永久链,当实现一个行为时,消息编号对应了程序中嵌套调用结构和信息传递过程。
(张三取款协作图)
(就餐者,服务生和厨师间关系的协作图)
协作图与顺序图的区别:
-
两者同构,可以相互转换,顺序图强调时间顺序,协作图强调组织结构及对象间的协作。
-
在多数情况下,协作图主要用来对单调的,顺序的控制流建模,但它也可以用来对包括迭代和分支的控制流程进行建模。
-
如果强调时间和顺序,则使用顺序图;如果强调上下级关系(对象间的协作),则选择协作图。
6. 状态图(Statechart Diagrams)
-
状态视图是一个类对象所经历的所有历程的模型图,状态由对象的各个状态和连接这些状态的变迁(事件和条件)组成。
-
每个状态对一个对象在其生命周期中满足某种条件的一个时间段建模,当一个事件发生时,它会触发状态间的变迁,导致对象从一种状态转化到另一种新的状态,与变迁相关的活动执行时,变迁也同时发生。
-
在UML中,状态图可用来对一个对象按事件排序的行为建模(建模特定对象的动态行为,说明对象的生命周期)
(张三取款状态图)
(电梯系统运行的状态图)
7. 活动图(Activity Diagrams)
-
活动图是状态图的一种特殊情况,其中几乎所有或大多数状态都处于活动状态,而且几乎所有或大多数变迁都是由源状态中活动的完成而触发的。
-
活动图本质上是一种流程图,它描述从活动到活动的控制流,而交互图强调的是对象到对象的控制流。活动图显示了系统的流程,可以是工作流,也可以是事件流。
-
活动图是一种表述过程基理、业务过程以及工作流的技术。它可以用来对业务过程、工作流建模,也可以对用例实现甚至是程序实现来建模。
(带泳道的开户的活动图)
(喝饮料活动图,同一个地方需要多个活动时,加实体长方条)
8. 构件图(Component Diagrams)(组件图)
-
用于描述一组(构)件之间的组织和依赖关系,用于建模系统的静态实现视图(可以显示程序代码如何分解成模块,相当于哪些程序代码负责哪个功能模块)。组(构)件用虚线连接,表示组(构)件间的相关性。
-
组(构)件可以是可执行程序、库、表、文件和文档等,它包含了逻辑类或者逻辑类的实现信息,因此逻辑视图和实现视图之间存在映射关系。
-
组(构)件间也存在依赖关系,利用它可方便地分析一个组(构)件的变化会给其他组(构)件带来怎样的影响。
(ATM系统构件图)
(ATM客户机的C++组建图)
ATM客户机的C++组建图解析:
-
在C++组件图中,每个类有自己的体文件和头文件,框图中每个类映射自己的组件。如,显示类映射ATM显示组件,阴影组件称为包体,表示C++中显示类的体文件(.cpp)。
-
无阴影组件称为包规范,表示C++类的头文件(.H)。组件ATM.exe是**任务规范,**表示处理线程(可执行程序)。
-
组(构)件间的相关性:如,读卡机类与显示类相关,即必须有显示类才能编译读卡机类。编译所有类后,即可创建可执行文件ATMClient.exe。
8. 部署图(Deployment Diagrams)
部署(配置)图用于定义系统中软硬件的物理体系结构。可显示实际的计算机和设备(节点,立方体图形)以及它们间的连接关系,也可显示连接的类型及组(构)件间的依赖性。
在节点内部,放置可执行组(构)件和对象以显示节点与可执行软件单元的对应关系。
(ATM系统部署图)