统一建模语言(UML)基础

UML简介

统一建模语言(UML)是一个通用的可视化建模语言,用于对软件进行描述、可视化处理、构造和建立软件系统制品的文档。

UML的概念和模型可以分成以下几个概念域:

  • 静态结构
  • 动态行为
  • 实现构造
  • 模型组织
  • 扩展机制

UML视图

主要的域 视图 主要概念
结构 静态视图 类图 类、关联、泛化、依赖关系、实现、接口
用例视图 用例图 用例、参与者、关联、扩展、包括、用例泛化
实现视图 构件图 构件、接口、依赖关系、实现
部署视图 部署图 节点、构件、依赖关系、位置
动态 状态机视图 状态机图 状态、事件、转换、动作
活动视图 活动图 状态、活动、完成转换、分叉、结合
交互视图 顺序图 交互、对象、消息、激活
协作图 协作、交互、协作角色、消息
模型管理 模型管理视图 类图 包、子系统、模型
可扩展性 所有 所有 约束、构造型、标记值

静态视图

静态视图对应用领域中的概念以及与系统实现有关内部概念建模。这种视图之所以被称之为静态的是因为它不描述与时间有关的系统行为,此种行为在其他视图中进行描述。

静态视图主要是由类及类间相互关系构成,这些相互关系包括:关联、泛化和各种依赖关系,如使用和实现关系。

类是应用领域或应用解决方案中概念的描述。

类图是以类为中心来组织的,类图中的其他元素或属于某个类或与类相关联。

静态视图用类图来实现,正因为它以类为中心,所以称其为类图。

类图范例

在类图中类用矩形框来表示,它的属性和操作分别列在分格中。如不需要表达详细信息时,分格可以省略。

关系用类框之间的连线来表示,不同的关系用连线上和连线端头处的修饰符来区别。

修饰符 意义
0..1 0或1个实例 n..m符号表示有n到m个实例
0.. 没有实例个数的限制
1 只有1个实例
1..* 至少1个实例

类之间的关系:

  1. 依赖关系 使用带箭头的虚线表示依赖关系。

  2. 泛化关系 泛化关系描述了一般事物与该事物中的特殊种类之间的关系,也就 是父类与子类之间的关系。继承关系是泛化关系的反关系,也就是说子类是从父类中继承的,而父类则是子类的泛化。使用带箭头的实线表示泛化关系。

    在UML中,对泛化关系有三个要求。1)子类应与父类完全一致,父类所具有的关联、属性和操作,子元素都应具有;2)子类中除了与父类一致的信息外,还包括额外的信息;3)可以使用父类实例的地方,也可以使用子类实例

  3. 关联关系 关联(Association)表示两个类的实例之间存在某种语义上的联系。

    关联关系通过可以再细分成以下几种:

    聚合关系:聚合关系(Aggregation)是关联关系的特例。聚合关系是表示一种整合和部分的关系。用一个带空心菱形的实线表示,空心菱形指向的是代表“整体”的类。

    组合关系:如果聚合关系中的表示“部分”的类的存在,与表示“整体”的类有着密切关系,那么就应该使用“组合”关系来表示。用一个带实心菱形的实线表示。

  4. 实现关系:实现关系是用来规定接口和实现接口的类或组件之间的关系。用一个带空心箭头的虚线表示。

用例视图

用例视图是被称为参与者的外部用户所能观察到的系统功能的模型图。

用例是系统中的一个功能单元,可以被描述为参与者与系统之间的一次交互作用。

用例模型的用途是列出系统中的用例和参与者,并显示哪个参与者参与了哪个用例的执行。

用例图范例

用例也可以有不同的层次。用例可以用其他更简单的用例进行说明。在交互视图中,用例做为交互图中的一次协作来实现。

  1. 参与者

    参与者代表与系统接口的任何事物或人,它是指代表某一种特定功能的角色,参与者都是虚拟的概念

  2. 用例

    用例是对系统行为的动态描述,它可以促进设计人员、开发人员与用户的沟通,理解正确的需求,还可以划分系统与外部实体的界限,是系统设计的起点

  3. 包含和扩展

    两个用例之间的关系可以主要概括为两种情况。一种是用于重用的包含关系,用构造型<\>表示;另一种是用于分离出不同的行为,用构造型<\>表示。

    包含关系:当你可以从两个或两个以上的原始用例中提取公共行为,或者发现能够使用一个组件来实现某一个用例的部分功能是很重要的事时,应该使用包含关系来表示它们。

    扩展关系:如果一个用例明显地混合了两种或两种以上的不同场景,即根据情况可能发生多种事情。可以断定将这个用例分为一个主用例和一个或多个辅用例描述可能更加清晰。

交互视图

交互视图描述了执行系统功能的各个角色之间相互传递消息的顺序关系。

类元是对在系统内交互关系中起特定作用的一个对象的描述。

交互视图显示了跨越多个对象的系统控制流程。

交互视图可用两种图来表示:顺序图协作图,它们各有不同的侧重点。

顺序图

顺序图表示了对象之间传送消息的时间顺序。

每一个类元角色用一条生命线来表示,即用垂直线代表整个交互过程中对象的生命期。

生命线之间的箭头连线代表消息。

顺序图可以用来进行一个场景说明,即一个事务的历史过程。

顺序图的一个用途是用来表示用例中的行为顺序。当执行一个用例行为时,顺序图中的每条消息对应了一个类操作或状态机中引起转换的触发事件。

顺序图范例

协作图

协作图对在一次交互中有意义的对象和对象间的链建模。

对象和关系只有在交互的语境中才有意义。

类元角色描述了一个对象,关联角色描述了协作关系中的一个链。

协作图用几何排列来表示交互作用中的各角色。

附在类元角色上的箭头代表消息。

消息的发生顺序用消息箭头处的编号来说明。

协作图的一个用途是表示一个类操作的实现。

协作图可以说明类操作中用到的参数和局部变量以及操作中的永久链。

当实现一个行为时,消息编号对应了程序中嵌套调用结构和信号传递过程。

协作图范例

顺序图和协作图都可以表示各对象间的交互关系,但它们的侧重点不同。

顺序图用消息的几何排列关系来表达消息的时间顺序,各角色之间的相关关系是隐含的。

协作图用各个角色的几何排列图形来表示角色之间的关系,并用消息来说明这些关系。

状态机视图

状态机视图是一个类对象所可能经历的所有历程的模型图。

状态机由对象的各个状态和连接这些状态的转换组成。

每个状态对一个对象在其生命期中满足某种条件的一个时间段建模。

当一个事件发生时,它会触发状态间的转换,导致对象从一种状态转化到另一新的状态。与转换相关的活动执行时,转换也同时发生。

状态机用状态图表达。

状态图范例

状态图可用于描述用户接口、设备控制器和其他具有反馈的子系统。它还可用于描述在生命期中跨越多个不同性质阶段的被动对象的行为,在每一阶段该对象都有自己特殊的行为。

  1. 状态:又称为中间状态,用圆角矩形框表示。
  2. 初始状态:又称为初态,用一个黑色的实心圆圈表示,在一张状态图中只能够有一个初始状态。
  3. 结束状态:又称为终态,在黑色的实心圆圈外面套上一个空间圆,在一张状态图中可能有多个结束状态。
  4. 状态转移:用箭头说明状态的转移情况,并用文字说明引发这个状态变化的响应事件是什么。

活动视图

活动图是状态机的一个变体,用来描述执行算法的工作流程中涉及的活动。

活动状态代表了一个活动:一个工作流步骤或一个操作的执行。

活动图描述了一组顺序的或并发的活动。

活动视图用活动图来体现。

活动图范例

对事物建模是活动图的主要用途,但活动图也可对软件系统中的活动建模。

活动图有助于理解系统高层活动的执行行为,而不涉及建立协作图所必须的消息传送细节。

用连接活动和对象流状态的关系流表示活动所需的输入输出参数。

物理视图

物理视图对应用自身的实现结构建模,例如系统的构件组织和简历在运行节点上的配置。

这类视图提供了将系统中的类映射成物理构件和节点的机制。

物理视图有两种:实现视图部署视图

实现视图

实现视图为系统的构件建模,构件即构造应用的软件单元,还包括各构件之间的依赖关系,以便通过这些依赖关系来估计对系统构件的修改给系统可能带来的影响。

实现视图用构件图来表现。

构件图范例

图中的小圆圈代表接口,即服务的连贯急。从构件到接口的实线表明该构件提供的列在接口旁的服务。从构件到接口的虚线箭头说明这个构件要求接口提供的服务。

部署视图

部署视图描述位于节点实例上的运行构件实例的安排。

节点是一组运行资源,如计算机、设备或存储器。

这个视图允许评估分配结果和资源分配。

部署视图用部署图来表达。

节点用立方体图形表示。

部署图范例

模型管理视图

模型管理视图对模型自身组织建模。

一系列由模型元素(如类、状态机和用例)构成的包组成了模型。

包可能包含其他的包,因此整个模型实际上可看成一个根包,它间接包含了模型中的所有内容。

包是操作模型内容、存取控制和配置控制的基本单元。

每一个模型元素包含于包中或包含于其他模型元素中。

子系统是一种特殊的包。它代表了系统的一个部分,它有清晰的接口,这个接口可作为一个单独的构件来实现。

包范例

扩展组件

UML包含三种主要的扩展组件:约束、构造型和标记值。

约束是用某种形式化语言或自然语言表达的语义关系的文字说明。

构造型是由建模者设计的新的模型元素,但是这个模型元素的设计要建立在UML已定义的模型元素基础上。

标记值是附加到任何模型元素上的命名的信息块。

扩展组件范例

静态视图

类元列表

关系种类

用例视图

用例的用途是在不揭示系统内部构造的情况下定义连贯的行为。

热评文章