通过本资料的学习可以读懂UML模型图的目的。
UML为面向对象软件设计提供统一的、标准的、可视化的建模语言。适用于描述以用例为驱动,以体系结构为中心的软件设计的全过程。
UML的定义包括UML语意和UML表示法两个部分。
事物:UML模型中最基本的构成元素,是具有代表性的成分的抽象
关系:关系把事物紧密联系在一起
图:图是事物和关系的可视化表示
UML包含4种事物:构件事物 行为事物 分组事物 注释事物
UML模型的静态部分,描述概念或物理元素
它包括以下几种:
类:具有相同属性相同操作 相同关系相同语义的对象的描述
接口:描述元素的外部可见行为,即服务集合的定义说明
协作:描述了一组事物间的相互作用的集合
用例:代表一个系统或系统的一部分行为,是一组动作序列的集合
构件:系统中物理存在,可替换的部件
节点:运行时存在的物理元素
另外,参与者、信号应用、文档库、页表等都是上述基本事物的变体
UML模型图的动态部分,描述跨越空间和时间的行为
交互:实现某功能的一组构件事物之间的消息的集合,涉及消息、动作序列、链接
状态机:描述事物或交互在生命周期内响应事件所经历的状态序列
UML模型图的组织部分,描述事物的组织结构
包: 把元素组织成组的机制
UML模型的解释部分,用来对模型中的元素进行说明,解释
注解 :对元素进行约束或解释的简单符号
依赖(dependency)是两个事物之间的语义关系,其中一个事物(独立事物)发生变化,会影响到另一个事物(依赖事物)的语义
关联(association)是一种结构关系,它指明一个事物的对象与另一个事物的对象间的联系
泛化(generalization)是一种特殊/一般的关系。也可以看作是常说的继承关系
实现(realization)是类元之间的语义关系,其中的一个类元指定了由另一个类元保证执行的契约
用例图是从用户角度描述系统功能, 是用户所能观察到的系统功能的模型图,用例是系统中的一个功能单元
类图描述系统中类的静态结构。不仅定义系统中的类,表示类之间的联系如关联、依赖、聚合等,也包括类的内部结构(类的属性和操作)
类图是以类为中心来组织的,类图中的其他元素或属于某个类或与类相关联
对象图是类图的实例,几乎使用与类图完全相同的标识。他们的不同点在于对象图显示类的多个对象实例,而不是实际的类
顺序图显示对象之间的动态合作关系,它强调对象之间消息发送的顺序,同时显示对象之间的交互
顺序图的一个用途是用来表示用例中的行为顺序。当执行一个用例行为时,顺序图中的每条消息对应了一个类操作或引起状态转换的触发事件
协作图描述对象间的协作关系,协作图跟顺序图相似,显示对象间的动态合作关系。除显示信息交换外,协作图还显示对象以及它们之间的关系
协作图的一个用途是表示一个类操作的实现
状态图是一个类对象所可能经历的所有历程的模型图。状态图由对象的各个状态和连接这些状态的转换组成
活动图是状态图的一个变体,用来描述执行算法的工作流程中涉及的活动
活动图描述了一组顺序的或并发的活动
构件图为系统的构件建模型—构件即构造应用的软件单元—还包括各构件之间的依赖关系,以便通过这些依赖关系来估计对系统构件的修改给系统可能带来的影响
部署视图描述位于节点实例上的运行构件实例的安排。节点是一组运行资源,如计算机、设备或存储器。这个视图允许评估分配结果和资源分配
用例图是被称为参与者的外部用户所能观察到的系统功能的模型图。
用例图列出系统中的用例和系统外的参与者,并显示哪个参与者参与了哪个用例的执行 (或称为发起了哪个用例)。
用例图多用于静态建模阶段(主要是业务建模和需求建模)。
关系 | 解释 | 图 | |
---|---|---|---|
参与者与用例之间的关系 | 关联 | 表示参与者与用例之间的交互,通信途径。(关联有时候也用带箭头的实线来表示,这样的表示能够显示地表明发起用例的是参与者。) | |
用例之间的关系 | 包含 | 箭头指向的用例为被包含的用例,称为包含用例;箭头出发的用例为基用例。包含用例是必选的,如果缺少包含用例,基用例就不完整;包含用例必须被执行,不需要满足某种条件;其执行并不会改变基用例的行为。 | |
用例之间的关系 | 扩展 | 箭头指向的用例为被扩展的用例,称为扩展用例;箭头出发的用例为基用例。扩展用例是可选的,如果缺少扩展用例,不会影响到基用例的完整性;扩展用例在一定条件下才会执行,并且其执行会改变基用例的行为。 | |
参与者之间的关系 | 泛化 | 发出箭头的事物“is a”箭头指向的事物。泛化关系是一般和特殊关系,发出箭头的一方代表特殊的一方,箭头指向的一方代表一般一方。特殊一方继承了一般方的特性并增加了新的特性。 |
类图以反映类的结构(属性、操作)以及类之间的关系为主要目的,描述了软件系统的结构,是一种静态建模方法
类图中的“类”与面向对象语言中的“类”的概念是对应的,是对现实世界中的事物的抽象
1.从上到下分为三部分,分别是类名、属性和操作。类名是必须有的
2.类如果有属性,则每一个属性都必须有一个名字,另外还可以有其它的描述信息,如可见性、数据类型、缺省值等
3.类如果有操作,则每一个操作也都有一个名字,其它可选的信息包括可见性、参数的名字、参数类型、参数缺省值和操作的返回值的类型等
一组操作的集合,只有操作的声明而没有实现
不能被实例化的类,一般至少包含一个抽象操作
一种参数化的类,在编译时把模版参数绑定到不同的数据类型,从而产生不同的类
描述了类的结构之间的关系。具有方向、名字、角色和多重性等信息。一般的关联关系语义较弱。也有两种语义较强,分别是聚合与组合。
聚合关系
特殊关联关系,指明一个聚集(整体)和组成部分之间的关系
组合关系
语义更强的聚合,部分和整体具有相同的生命周期
在面向对象中一般称为继承关系,存在于父类与子类、父接口与子接口之间
对应于类和接口之间的关系
描述了一个类的变化对依赖于它的类产生影响的情况。有多种表现形式,
例如绑定(bind)、友元(friend)等
1.顺序图用来表示用例中的行为顺序。当执行一个用例行为时,顺序图中的每条消息对应了一个类操作或状态机中引起转换的事件。
2.顺序图展示对象之间的交互,这些交互是指在场景或用例的事件流中发生的。 顺序图属于动态建模。
3.顺序图的重点在消息序列上,也就是说,描述消息是如何在对象间发送和接收的。表示了对象之间传送消息的时间顺序。
4.浏览顺序图的方法是:从上到下查看对象间交换的消息。
1.协作图是一种交互图,强调的是发送和接收消息的对象之间的组织结构,使用协作图来说明系统的动态情况。
2.协作图主要描述协作对象间的交互和链接,显示对象、对象间的链接以及对象间如何发送消息。协作图可以表示类操作的实现。
事物名称 | 解释 | 图 |
---|---|---|
参与者 | 发出主动操作的对象,负责发送初始消息,启动一个操作。 | |
对象 | 对象是类的实例,负责发送和接收消息,与顺序图中的符号相同,冒号前为对象名,冒号后为类名。 | |
消息流(由箭头和标签组成) | 箭头指示消息的流向,从消息的发出者指向接收者。标签对消息作说明,其中,顺序号指出消息的发生顺序,并且指明了消息的嵌套关系;冒号后面是消息的名字。 |
关系名称 | 解释 | 关系实例 |
---|---|---|
链接 | 用线条来表示链接,链接表示两个对象共享一个消息,位于对象之间或参与者与对象之间 |
消息标签的Format:
[前缀] [守卫条件] 序列表达式 [返回值 :=] 消息名
守卫条件的语法规则: [条件短句]
说明:条件短句通常用伪代码或真正的程序语言来表示。 例[x>=0]
返回值和消息名:返回值表示一个消息的返回结果,消息名指出了消息的名字和所需参数。
例:x:=calc ( n )
协作图和顺序图都表示出了对象间的交互作用,但是它们侧重点不同。
1.顺序图清楚地表示了交互作用中的时间顺序(强调时间),但没有明确表示对象间的关系。
2.协作图清楚地表示了对象间的关系(强调空间),但时间顺序必须从顺序号获得。
3.协作图和顺序图可以相互转化。
1.状态图说明对象在它的生命期中响应事件所经历的状态序列,以及它们对那些事件的响应。
2.状态图用于揭示Actor、类、子系统和组件的复杂特性。 为实时系统建模。
状态
对象的状态是指在这个对象的生命期中的一个条件或状况,在此期间对象将满足某些条件、执行某些活动,或等待某些事件。
转移
转移是由一种状态到另一种状态的迁移。这种转移由被建模实体内部或外部事件触发。
对一个类来说,转移通常是调用了一个可以引起状态发生重要变化的操作的结果。
状态 | 上格放置名称,下格说明处于该状态时,系统或对象要做的工作(见可选活动表) |
---|---|
转移 | 转移上标出触发转移的事件表达式。如果转移上未标明事件,则表示在源状态的内部活动执行完毕后自动触发转移 |
开始 | 初始状态(一个) |
结束 | 终态(可以多个) |
转换种类 | 描述 | 语法 |
---|---|---|
入口动作 | 进入某一状态时执行的动作 | entry/action |
出口动作 | 离开某一状态时执行的动作 | exit/action |
外部转换 | 引起状态转换或自身转换,同时执行一个具体的动作,包括引起入口动作和出口动作被执行的转换 | e(a:T)[exp]/action |
内部转换 | 引起一个动作的执行但不引起状态的改变或不引起入口动作或出口动作的执行 | e(a:T)[exp]/action |
1.描述系统的动态行为。
2.包含活动状态(ActionState),活动状态是指业务用例的一个执行步骤或一个操作,不是普通对象的状态。
3.活动图适合描述在没有外部事件触发的情况下的系统内部的逻辑执行过程;否则,状态图更容易描述。
4.类似于传统意义上的流程图。
5.活动图主要用于:
业务建模时,用于详述业务用例,描述一项业务的执行过程;
设计时,描述操作的流程。
迁移(transition) | 活动的完成与新活动的开始 | |
---|---|---|
分支(junction point) | 根据条件,控制执行方向 | |
分叉(fork) | 以下的活动可并发执行 | |
结合(join) | 以上的并发活动再此结合 |
1.构件图用于静态建模,是表示构件类型的组织以及各种构件之间依赖关系的图。
2.构件图通过对构件间依赖关系的描述来估计对系统构件的修改给系统可能带来的影响。
事物名称 | 含义 | 图例 |
---|---|---|
构件 | 指系统中可替换的物理部分,构件名字(如图中的Dictionary)标在矩形中,提供了一组接口的实现。 | |
接口 | 外部可访问到的服务 (如图中的Spell-check)。 | |
构件实例 | 节点实例上的构件的一个实例,冒号后是该构件实例的名字(如图中的RoutingList)。 |
关系名称 | 含义 | 图例 |
---|---|---|
实现关系 | 构件向外提供的服务。 | |
依赖关系 | 构件依赖外部提供的服务(由构件到接口)。 |
1.部署图用于静态建模,是表示运行时过程节点结构、构件实例及其对象结构的图。
2.如果含有依赖关系的构件实例放置在不同节点上,部署视图可以展示出执行过程中的瓶颈。
3.部署图的两种表现形式:实例层部署图和描述层部署图(会在后面的实例中给出)。
关系名称 | 含义 | 图例 |
---|---|---|
实现关系 | 构件向外提供的服务。 | |
依赖关系 | 构件依赖外部提供的服务(由构件到接口)。 | |
关联关系 | 通信关联。 | |
其他关系 | 对象的移动(一个位置到另一个位置)。 |
部署图与构件图相同的构成元素:
构件、接口、构件实例、构件向外提供服务、构件要求外部提供的服务。
部署图与构件图的关系:
部署图表现构件实例;
构件图表现构件类型的定义。
部署图偏向于描述构件在节点中运行时的状态,描述了构件运行的环境;
构件图偏向于描述构件之间相互依赖支持的基本关系。
UML建模工具:Visio