UML 总结(基于《标准建模语言UML教程》)

定义

UML 又称为统一建模语言或标准建模语言,是一种标准的图形化建模语言,它是面向对象分析与设计的一种标准表示。尽管UML 本身没有对过程有任何定义,但UML 对任何使用它的方法(或过程)提出的要求是:支持用例驱动、以架构为中心、递增和迭代的开发

UML 目标

  • 易于使用、表达能力强,进行可视化建模
  • 与具体的实现无关,可应用于任何语言平台和工具平台
  • 与具体的过程无关,可应用于任何软件开发的过程
  • 简单并且可拓展,具有拓展和专有化机制,便于拓展,无需对核心概念进行修改
  • 为面向对象的设计与开发中涌现的高级概念(如协作、框架、模式和组件)提供支持,强调在软件开发中,对架构、框架、模式和组件的重用
  • 与最好的软件工程实践经验集成
  • 可升级,具有广阔的适用性和可用性
  • 有利于面向对象工具的市场成长

UML 架构

UML是由图和元模型组成的。图是UML 的语法,而元模型则给出图的意思,是UML 的语义。UML的语义是定义在一个四层建模概念框架中的,这四层分别是:元元模型层、元模型层、模型层、用户模型层。

  • 元元模型层:组成UML 最基本的元素"事物"代表要定义的所有事物。
  • 元模型层:组成了UML 的基本元素,包括面向对象和面向组件的概念。这一层的每个概念都是元元模型中"事物"概念的实例
  • 模型层:组成了UML的模型,这一层中的每个概念都是元模型层中概念的一个实例。这一层的模型通常叫做类模型或类型模型
  • 用户模型层:这层中的所有元素都是UML模型的例子。这一层中的每个概念都是模型层的一个实例,也是元模型层的一个实例。这一层的模型通常叫做:对象模型或实例模型

UML 三要素

UML 组成的三要素包括基本构造块、图、运用于整个语言的公共机制;(基于软考架构设计官方教材)

  • 基本构造块包括:事物与关系;
    • 四种事物包括:结构事物、行为事物、分组事物、注释事物
      • 结构事物:是UML 模型中的名词。它们通常是模型的静态部分,描述概念或物理元素
        • 包括:类(Class)、接口(Interface)、协作(Collaboration)、用例(UseCase)、主动类(Active Class)、构件(COmponent)、制品(Artifact)、结点(node)。
      • 行为事物:是UML 模型的动态部分。它们是模型中的动词,描述了跨越时间和空间的行为。
        • 包括:交互(Interaction)、状态机(State Machine)和活动(Activity)。

UML 与 4+1视图

UML 是用来描述模型的,它用模型来描述系统的结构或静态特征、以及行为或动态特征。它从不同的视角为系统的架构建模,形成系统的不同视图,包括:用例视图(场景)、逻辑视图、并发视图、组件视图、物理视图;

  • 场景(用例视图)(用户模型视图)(想定视图):强调从用户的角度看到的或需要的系统功能;
    • 所有其他视图都依靠用例视图(场景)来指导它们,这就是将模型称为4+ 1的原因
    • 分析人员和测试人员关心的是系统的行为,会侧重于用例视图。
    • 包括:
      • 用例图:描述系统的功能
  • 逻辑视图(结构模型视图)(静态视图):展现系统的静态或结构组成及特征
    • 主要支持功能性需求-系统应该为用户提供哪些服务。系统分解为一系列的关键抽象,来自于问题域,表现为对象或对象类的形式
    • 最终用户关心的是系统的功能,会侧重于逻辑视图。
    • 包括:
      • 类图:描述系统的静态结构
      • 对象图:描述系统在某个时刻的静态结构
  • 并发视图(行为模型视图)(过程视图)(协作视图)(动态视图):体现了系统的动态或行为特征
    • 考虑一些非功能性的需求,如性能和可用性。它解决并发性、分布性、系统完整性、容错性的问题,以及逻辑视图的主要抽象如何与过程结构相配合在一起即在哪个控制线程上,对象的操作被实际执行
    • 系统集成人员关心的是系统的性能、可伸缩性、吞吐率等问题,会侧重于进程视图。
    • 包括:
      • 序列图:按时间顺序描述系统元素间的交互
      • 协作图:按照时间和空间的顺序描述系统元素间的交互和它们之间的关系
      • 状态图:描述了系统元素的状态条件和响应
      • 活动图:描述了系统元素的活动
  • 组件视图(实现视图)(开发视图):体现了系统实现的结构和行为特征
    • 关注软件开发环境下实际模块的组织
    • 程序员关心的是系统的配置、装配等问题,会侧重于实现视图
    • 包括:
      • 组件图:描述了实现系统的元素的组织
      • 包图:
  • 展开视图(环境模型视图)(物理视图):体现了系统实现环境的结构和行为特征
    • 用来显示系统的物理结构,展示了如何把软件映射到硬件上,它通常要考虑到系统性能、规模、可靠性等。解决系统拓扑结构、系统安装、通讯等问题。
    • 系统工程师关心的是系统的发布、安装、拓扑结构等问题,会侧重于部署视图
    • 包括:
      • 部署图:描述了环境元素的配置,并把实现系统的元素映射到配置上

UML2.0定义的视图种类及其分类

UML2.0 定义了13种图(基于软考架构设计官方教材)包括:

类图、对象图、用例图、状态图、活动图、构件图、部署图、组合结构图、包图、序列图、通信图、交互概览图、计时图

UML 图分类

  • 交互图:序列图、通信图、交互概览图、计时图
  • 静态视图:用例图、类图、对象图、组件图、配置图
  • 动态视图: 序列图、协作图、状态图、活动图

用例图

定义

用例图是静态模型,是用户与系统交互的最简表示形式,展现了用户和他相关的用例之间的关系。通过用例图,人们可以获知系统不同种类的用户和用例。

元素构成

  • 参与者:参与者是指存在于系统外部并与系统进行交互的任何事物。参与者可以由人、物、其他系统、时钟组成。
  • 用例:用例是由系统执行的一系列动作,为相关的参与者提供所期望的服务
    • 用例都以动词开头并强化所发生的操作,且最好按照逻辑排列用例
  • 系统边界:使用一个矩形框表示一个系统,并将系统的名称放在顶部。在矩形内的所有东西都属于这个系统,而在矩形外的任何东西都能够使用这个系统

  • 注释:

  • 用例规约:用例图只是在总体上大致描述了系统所提供的各种服务,让人们对系统有一个总体的认知。但对于每一个用例,还需要详细地描述信息,以便让别人对于整个系统更加详细的了解,这些信息包含在"用例规约"中

用例规约包括:简要说明、事件流、用例场景、特殊需求、前置条件、后置条件

  1. 简要说明:简要说明是指对用例作用和目的的简要描述
  2. 事件流:事件流包括基本流和备选流。基本描述的是用例的基本流程,是指用例"正常"运行时的场景。备选流描述的是用例执行过程中可能发生的异常和失败场景。
  3. 用例场景:同一个用例在实际执行的时候会有很多不同的情况发生,称之为用例场景,也可以说用例场景就是用例的实例,用例场景包括成功用例和失败场景
  4. 特殊需求:特殊需求是指一个用例的非功能性需求和设计约束。特殊需求通常是非功能性需求,包括可靠性、性能、可用性和可拓展性等。
  5. 前置条件:前置条件是指执行用例之间系统必须所处的状态。例如,前置条件是要求用户有访问的权限,或是要求某个用例必须已经执行完。
  6. 后置条件:后置条件是指用例执行完毕后系统可能处于的一组状态。例如,要求在某个用例执行完成后,必须执行另一个用例。

关联关系

  • 关联关系:使用一根实线连接参与者和用例,表示参与者和用例在进行一种基本的交流或互动。
  • 包含关系(include):包含关系当两个或多个用例中共用一组相同的动作,这时可以将这组相同的动作抽出来作为一个独立的子用例,供多个基用例所共享
    • 使用一根带有箭头的虚线,由基本用例指向包含用例
  • 拓展关系(extend):拓展关系是对基用例的扩展,基用例是一个完整的用例,即使没有子用例的参与,也可以完成一个完整的功能。
    • 使用一根带有箭头的虚线,由拓展用例指向基本用例。
  • 泛化关系(generalization):使用一个带实线的三角形空心箭头来表示泛化关系,三角形箭头由子指向父。子参与者继承父参与者的所有关系、子用例继承父用例的所有结构、行为和关系

类图

定义

类图是显示了模型的静态结构,特别是模型中存在的类,类的内部结构以及它们与其他类的关系等。类图不显示暂时性的信息。类图是面向对象建模的主要组成部分。

表示方法

  • 在UML 类图中,类使用包含类名,属性和方法;用带有分割线的矩形来表示;
  • UML 类图中表示可见性的符号有三种
    • +: 表示 public
    • -:表示 private
    • #:表示 protected

作用

  • 在软件工程中,类图是一种静态的结构图,描述了系统的类的集合,类的属性和类之间的关系,可以简化了人们对系统的理解;
  • 类图是系统分析和设计阶段的重要产物,是系统编码和测试的重要模型;

关联关系

  • 一般关联关系:包括单向关联、双向关联、自关联

  • 聚合关系:

    • 聚合关系是关联关系的一种,是强关联关系,是整体和部分之间的关系
    • 聚合关系也是通过成员对象来实现的,其中成员对象是整体对象的一部分,但是成员对象可以脱离整体对象而独立存在。
    • 在UML 类图中,聚合关系可以用带空心棱形的实线来表示,棱形指向整体
  • 组合关系:
    • 组合表示类之间的整体与部分的关系,但它是一种更强烈的聚合关系
    • 在组合关系中,整体对象可以控制部分对象的生命周期,一旦整体对象不存在,部分对象也将不存在,部分对象不能脱离整体对象而存在
    • 在UML 类图中,组合关系用带棱形的实线来表示,棱形指向整体
  • 依赖关系:
    • 依赖关系是一种使用关系,它是对象之间耦合度最弱的一种关联方式,是临时性的关联。
    • 在代码中,某个类的方法通过局部变量,方法的参数或者对静态方法的调用来访问另一个类(被依赖类)中的某些方法来完成一些职责。
    • 在UML 类图中,依赖关系使用带箭头的虚线来表示,箭头从使用类指向被依赖的类。
  • 泛化关系:
    • 泛化关系是对象之间耦合度最大的一种关系,表示一般与特殊的关系,是父类与子类之间的关系,是一种继承关系。父类又称作基类或超类,子类又称派生类。
    • 在UML 类图中,泛化关系用带空心三角箭头的实现来表示,箭头从子类指向父类。
    • 在代码实现时,使用面向对象的继承机制来实现泛化关系
  • 实现关系:
    • 实现关系是接口与实现类之间的关系。
    • 在这种关系中,类实现了接口,类中的操作实现了接口中所声明的所有的抽象操作。
    • 在UML类图中,实现关系使用带空心三角箭头的虚线来表示,箭头从实现类指向接口。

对象图

定义

对象图是一种结构图,用于展示系统中对象之间的静态关系。对象图显示了系统中的对象实例以及它们之间的关系,通常用于详细描述类图中的类和实例。

对象图是类图在某一时刻的实例,是一个系统的具体状态在某一时刻的快照。

作用

  • 描述对象的属性和状态:对象图可以展示对象的属性和状态,帮助我们了解对象的内部结构和数据。
  • 显示对象之间的关系:对象图可以展示对象之间的关联、聚合、组合和继承等关系,帮助我们理解对象之间的交互和依赖关系。
  • 表达对象的实例化:对象图可以展示系统中实际存在的对象实例,帮助我们理解对象的创建和生命周期。

状态图

定义

  • 状态图是描述一个实体基于事件反应的动态行为,显示了该实体如何根据当前所处的状态对不同的事件做出反应,以及由于各种事件的发生而引起的状态之间的转移。
  • 状态图侧重从行为的结果来描述,只涉及一个特定的对象。
  • 状态图用于显示状态机(它指定对象所在的状态序列)、使对象达到这些状态的事件和条件、以及达到这些状态时所发生的操作。

作用

  • 状态图清晰的描述了状态之间的转换顺序,通过状态的转换顺序也就可以清晰的看出事件的执行顺序。如果没有状态图我们就不可避免的要使用大量文字来描述外部事件的合法顺序。
  • 清晰的事件顺序有利于程序员在开发程序时避免出现事件顺序错误的情况。例如,对于一个网上销售系统,在用户处于登录状态前是不允许购买商品的,这就需要程序员开发程序的过程中加以限制。
  • 状态图清晰的描述了状态转换时所必须的触发事件、监护条件和动作等影响转换的因素,有利于程序员避免程序中非法事件的进入。例如,飞机起飞前半小时不允许售票,在状态图中就可以清晰地看到,可以提醒程序员不要遗漏这些限制条件。
  • 状态图通过判定可以更好的描述工作流因为不同的条件发生的分支。例如,当一个班的人数少于10人的时候需要和其他班合为一班上课,大于10人则单独上课,在状态图中就可以很明确地表达出来。

元素构成

状态

状态主要用于描述一个对象在生命周期内的一个时间段。状态包括状态名,内部转移,进入/退出操作、子状态、延迟的事件等状态的特征。

  • 初态:
    • 显示状态图中状态执行的开始,用一个实心原型表示。
  • 终态:
    • 表示最后的或者终端状态,用一个圆圈内嵌实心圆点表示。
    • 终端数目可以不确定,也可以没有。
  • 选择状态:
    • 条件分支上方括号内的文字表示监护条件,用一个棱形形表示。
  • 中间状态
    • UML中使用一个圆角矩形表示一个一般状态。

    • 状态的组成

      • 状态名:是可以把该状态和其它状态区分开的字符串;状态也可能是匿名的,即没有名称。
      • 入口/出口动作 :在进入和退出状态时所执行的操作
      • 内部转换:在不使状态发生变更的情况下进行的转移
      • 子状态:状态的嵌套结构,包括不相连或并行的子状态
      • 延迟事件:未在该状态中处理但被延迟处理的一系列事件
  • 组合状态
    • 含有子状态的状态被称为组合或嵌套状态
    • 两种表示方法
      • 顺序子状态:如果一个组成状态的子状态对应的对象在其生命周期内的任何时刻都只能处于一个子状态,即多个子状态之间是互斥的,不能同时存在,这种子状态称为顺序子状态。
      • 并发子状态:有时组合状态有两个或者多个并发的子状态机,此时称组成状态的子状态为并发子状态。
      • 顺序子状态与并发子状态的区别在于后者在同一层次给出两个或多个顺序子状态,对象处于同一层次中来自每个并发子状态的一个时序状态中。
  • 历史状态:使用历史状态,可以存储目前退出组合状态时所处的子状态,则返回组合状态时可以直接回到相应的子状态。
转换

转换是两个状态之间的关联,表示对象在第一状态中执行一定的动作,并在某个特定事情发生并且某个特定的条件满足时进入下一个状态。

  • 转换的组成
    • 源状态(source State):源状态就是被转换影响的状态。某对象处于源状态,当它接收到触发事件或满足监护条件,就会激活一个转换。
    • 目标状态(Target State):转换完成后,对象状态发生变化,这时对象所处的状态就是转换的目标状态。
    • 触发事件(Trigger):引起转换的事件,这里所指的事件可以是信号、调用、时间段或状态的一个改变。
    • 监护条件(Guard):是一个方块括起来的布尔表达式,它被放在触发事件的后面。监护条件可以引用对象的属性值和触发事件的参数
    • 结果(Effect):对象状态转移后的结果。
  • 一般转换:一般情况下的状态转换是两个不同状态之间的转换。
  • 自身转换:自身转换是指状态可以有返回自身状态的转换
  • 本地转换与外部转换
    • 对于复合状态之间的转换,需要注意本地转换与外部转换的不同

    • 上图中,左边是本地转换,右边是外部转换。

    • 本地转换:源状态包含了目标状态,这种情况两种转换的区别在于:本地转换不会从源状态退出(不会执行退出动作),而外部转换会退出再重新进入源状态。

    • 外部转换:目标状态包含了源状态,这种情况两种状态的区别在于:本地转换不会再次进入目标状态(不会执行进入动作),而外部转换会退出再重新进入目标状态。

事件
  • 事件的表达式:事件名(参数表)[监护条件]/动作表达式^发送子句
同步条

在并发状态机中,同步条用于表示多个控制流必须同时到达某个点才能继续执行。

序列图

定义

时序图,也叫顺序图,或序列图,是一种UML 动态图;时序图通过描述对象之间发送消息的时间顺序显示多个对象之间的交互模式。

作用

  • 将交互行为建模为消息传递,通过描述消息是如何在对象间发送和接收的来动态展示对象之间的交互;
  • 展示对象之间的交互的顺序,相对于其他UML,时序图更强调交互的时间顺序;
  • 可以直观的描述并发程序

元素构成

  • 参与者:或称为系统角色,以一个小人图标表示。
  • 对象:以一个矩形表示,在一个系统中可以有多个对象
  • 生命线:生命线就是一条垂直的虚线
  • 激活:也叫会话,或控制焦点,代表时序图中对象执行一项操作的时期,表示该对象被占用以完成某个任务,以一个垂直的窄的矩形表示。对象激活就是在激活条的顶部激活。
  • 消息
    • 同步消息:消息的发送者把控制传递给消息的接收者,然后停止活动,等待消息的接收者放弃或者返回控制,用来表示同步的意义。

    • 异步消息:消息发送者通过消息把信号传递给消息的接收者,然后继续自己的活动,不等待接收者返回消息或者控制。异步消息的接收者和发送者是并发工作的。

    • 返回消息:反回消息表示从过程调用返回

    • 自关联消息:表示方法的自身调用或者一个对象内的一个方法调用另外一个方法

  • 片段

|--------|-----|----------------------------------------|
| 片段类型 | 名称 | 说明 |
| Alt | 选择 | Alt片段组合可以理解为if...else if...else条件语句。 |
| Loop | 循环 | 片段重复一定次数,可以在临界中指示片段重复的条件。Loop相当于for语句。 |
| Par | 并行 | |
| Opt | 选项 | 包含一个可能发生或不发生的序列。Opt相当于if...语句。 |
| Break | 中断 | 配合Loop 使用,循环中返回 |
| Seq | 弱顺序 | |
| Strict | 强顺序 | |

协作图(通信图)

定义

  • 在UML1.0 中,通信图称为协作图
  • 协作图是一种交互图,强调的是发送和接收消息的对象之间的组织结构,使用协作图来说明系统的动态情况
  • 协作图主要描述协作对象间的交互和链接,显示对象、对象间的链接以及对象间如何发送消息
  • 协作图可以表示类操作的实现

作用

  • 通过描绘对象间消息的传递情况来反映具体的使用语境的逻辑表达。一个使用情景的逻辑可能是一个用例的一部分,或者是一条控制流,这与序列图的作用类似。
  • 显示对象及其交互关系的控件组织结构。协作图显示了在交互过程中各个对象之间的组织交互关系以及对象彼此之间的连接。与序列图不同,协作图显示的是对象之间的关系,并不是侧重交互的顺序,它没有将时间作为一个单独的维度,而是使用序列号来确定消息及并发线程的顺序。
  • 协作图的另外一个作用是表现一个类操作的实现。协作图可以说明类操作中使用到的参数、局部变量以及返回值等。当使用协作图表现一个系统行为时,消息编号对应了程序中的嵌套调用结构和信号传递过程。

元素构成

  • 执行者:发出主动操作的对象,负责发送初始消息,启动一个操作
  • 对象:对象是类的实例,负责发送和接收消息。对象的角色表示一个或一组对象在完成目标的过程中所起的部分作用。对象是角色所属类的直接或间接实例。在协作图中,一个类的对象可能充当多个角色。
    • 对象的表示方式
      • 对象带对象名和类名,即 "类名:对象名"
      • 只显示类名不显示对象名,即 "类名:"
      • 只显示对象名不显示类名,即 ":对象名"
  • 链:用线条来表示链接,链接表示两个对象共享一个消息,位于对象之间或参与者与对象之间
  • 消息:消息是带有标签的箭头。箭头指示消息的流向,从消息的发出者指向接收者。标签对消息作说明,其中顺序号指出消息的发生次序,并且指明了消息的嵌套关系;冒号后面是消息的名字。
  • 消息标签格式:消息标签的Format: [前缀] [守卫条件] 序列表达式 [返回值 :=] 消息名

活动图

定义

活动图是一种用于描述系统行为的模型视图,它可用来描述动作和动作导致对象状态改变的结果,而不用考虑引发状态改变的事件。通常,活动图记录单个操作或方法的逻辑、单个用例或商业过程的逻辑流程。

作用

  • 描述一个操作执行过程中所完成的工作,说明角色、工作流、组织和对象是如何工作的。
  • 活动图对用例描述尤其有用,它可对用例的工作流建模,显示用例内部和用例之间的路径。它可以说明用例的实例是如何执行动作以及如何改变对象状态的。
  • 显示如何执行一组相关的动作,以及这些动作如何影响它们周围的对象。
  • 活动图对理解业务处理过程十分有用,活动图可以画出工作流用以描述业务,有利于领域专家进行交流。通过活动图可以明确业务处理操作是如何进行的,以及可能产生的变化。
  • 描绘复杂过程的算法,在这种情况下使用的活动图和传统的程序流程图是差不多的。

元素构成

  • 起点和终点
    • 在UML中,活动图的起点用来描述活动图的开始状态,用黑的实心圆表示。活动图的中止点描述活动图的终止状态,用一个含有实心圆的空心圆表示。
  • 动作状态
    • 动作状态是原子性的动作或操作的执行状态,它不能被外部事件的转换中断。动作状态的原子性决定了动作状态要么不执行,要么就完全执行,不能中断。
    • 在UML 中,动作状态使用平滑的圆角矩形表示,动作状态表示的动作写在矩形内部
  • 活动状态
    • 活动状态是非原子性的,用来表示一个具有子结构的纯粹计算的执行。
    • 活动状态和动作状态的表示图标相同,都是平滑的圆角矩形。不同的是,活动状态可以在图标中给出入口动作和出口动作等信息,如下图:
  • 组合活动
    • 组合活动是一种内嵌活动图的状态。我们把不含内嵌活动或动作的活动称为简单活动,把嵌套了若干活动或动作的活动称为组合活动。
  • 分叉与结合
    • 分叉表示将一个控制流分成两个或多个并发运行的分支,结合用来表示并行分支在此得到汇合。
  • 分支与合并
    • 在UML 活动图中,分支与合并都是用空心的菱形表示的。分支有一个输入箭头和两个输出箭头,而合并有两个输入箭头和一个输出箭头。
  • 泳道
    • 为了对活动图的职责进行组织而在活动图中将活动状态分为不同的组,成为泳道。每个泳道代表了特定含义的状态职责的部分。在活动图中,每个活动只能明确的属于一个泳道,泳道明确的表示了哪些活动是由哪些对象进行的。每个泳道都有一个与其它泳道不同的名称。

组件图(构件图)

定义

  • 组件图又称为构件图,它描述的是在软件系统中遵从并实现一组接口的物理、可替换的软件模块。
  • 构件图 = 构件 + 接口 + 关系 + 端口 + 连接器
  • 在面向对象系统的物理方面进行建模要用到的两种图:组件图和配置图;

元素构成

  • 组件/构件:组件是定义了良好接口的物理实现单元,是系统中可替换的物理部件
  • 接口:接口由一组操作组成,它指定了一个契约,这个契约必须由实现和使用这个接口的构件所遵循。
    • 供接口:构件的提供接口是给其它构件提供服务的
    • 需接口:构件向其它构件请求服务时要遵循的接口
  • 端口:端口是UML2.0 引入的概念;端口描述了在构件与它的环境之间以及在构件与它的内部构件之间的一个显示的交互点

关联关系

  • 依赖关系:通过带箭头的线条表示,箭头指向被依赖的组件或接口。
  • 实现关系:通过带空心三角形的线条表示,三角形指向接口。

部署图

定义

  • UML 中的部署图是一种用于展示系统中软件和硬件的物理架构的图形表示。通过部署图,可以了解软件和硬件组件之间的物理关系,以及处理节点的组件分布情况。
  • 在部署图中,主要包含了两种基本的元素:节点和节点之间的连接。部署图描述了一个系统运行时的硬件节点,以及在这些节点上运行的软件构件将在何处物理的运行和它们将如何彼此通信的静态视图。

作用

  • 在对嵌入式系统进行建模的时候要用到部署图
  • 对CS架构、客户服务器系统进行建模时要用到部署图
  • 对分布式系统进行建模的时候

元素构成

  • 制品:可以独立部署的软件单元。一般是以文件的形式存在的,模型文件,源文件,执行文件,数据库文件。
  • 节点:节点表示的是可部署软件制品并能够从事计算的物理设备
    • 节点之间的关系
      • 通信关系:节点之间存在的最普遍的一种关系,表示的是两个节点之间需要通过介质连接,并且可以互相通信。
      • 包含关系:一个节点可以包含其他的节点。
      • 使用关系:一个节点可以使用另外一个节点。表示为两个节点之间的使用关系。
  • 运行环境:执行的环境,表示软件支撑的结点。操作系统,数据库管理系统,J2EE开发环境
  • 部署:部署指的是把各个制品放置到运行节点上的工作过程;大型软件系统的部署是一个复杂的工作,完整的安装,配置软件的执行环境;部署表现为制品对环境的依赖关系。
    • 部署的表示
      • 包含形式:把制品直接放置到要部署的节点中
      • 关系依赖形式:把部署作为一种依赖关系,虚线指向节点。使用构造型deploy表示部署
      • 列表形式:将制品的名字写到节点内,表示出制品将部署到该节点上

包图

定义

包被描述成文件夹,可以用于UML 任何一种图上。它是一种维护和描述系统总体结构的模型的重要建模工具,通过对包中各个包以及包之间关系的描述,展现出系统的模块与模块之间的依赖关系。一个包图可以由任何一种UML 图组成,通常是UML 用例图或者是UML 类图。包图只是把某些类放在一个包中,因此可以看作是类图的一种。

作用

  • 利用包图可以有效的组织模型元素
  • 可以建立软件结构模型
  • 可以解决元素名称的问题

关联关系

  • 依赖关系:包元素之间最常见的关系就是依赖关系。包之间的依赖关系实际上是从一个更高的层次来描述包内某些元素之间的依赖关系。也就是说,如果不同包中任何元素之间存在着一个依赖,则两个包之间就存在着依赖关系。
    • 包的引入 <<import>>:引入指的是允许一个包中的元素可以自由访问另一个包中的公有元素。
    • 包的使用 <<use>>:一个包中的元素要使用到另外一个包中的元素
    • 包的抽象 <<abstraction>>:一个包中的元素对另外一个包元素的抽象,则两个包之间存在抽象
    • 包的跟踪 <<trace>>:一个包中的元素对另外一个包元素的深化,则两个包存在跟踪关系
  • 合并关系:合并关系是指将源包中的元素合并到目标包中,实现拓展的效果
  • 泛化关系:泛化关系是表达事务的一般和特殊的关系,如果两个包之间有泛化关系,意指其中的特殊性包必须遵循一般性包的接口。包与包之间的泛化关系和类间的泛化关系很相似,因此涉及泛化关系的包也像类那样遵循可替换性原则。
  • 包含关系:是指一个包可以嵌套另外一个包作为自己的包

包的设计原则

包的设计原则包括:重用等价、共同重用、共同封闭、无循环依赖、稳定依赖

  • 重用等价:相同的类尽量放到一个包中
  • 共同重用原则:一个应用经常用到的多个模型方放置到一个包中。减少包之间的依赖关系,提高包的独立性。
  • 共同封闭原则:把可能同时修改,同时维护的模型元素放到一个包中,便于升级和维护
  • 无循环依赖原则:包之间依赖关系不要形成循环
  • 稳定依赖原则:一个包应该依赖比它稳定的包,不应该依赖经常变化的包

组合结构图

定义

组合结构图是一种静态结构图,可以表示一个类的内部成员对象之间的相互关系,是对传统类图的一个补充

  • 特点
    • 它锁定的范围是对象内部,而不是一般业务系统的系统内部
    • 它强调对象内部的组成对象,一般在业务系统中对象是平等的,而组合的结构就比较少一点

元素构成

  • 部件:表示被描述事物所拥有的内部成分。
  • 接口:可以分为供给接口与需求接口
  • 端口:表示部件和外部环境的交互点
  • 连接器:表示端口之间的关系,可以分为装配连接器与委托连接器
  • 协作:为完成一项功能,涉及到承担相应角色的实体及其实体之间的联系

交互概览图

定义

  • 一个交互概览图是活动图的一种形式,它的节点代表交互图。交互图包含时序图,通信图,交互概览图等。大多数交互概览图标注与活动图一样。例如:起始,结束,判断,合并,分叉和结合节点是完全相同。并且,交互概览图介绍了两种新的元素:交互发生和交互元素。
  • 交互概览图将活动图中的动作改为交互概览图的交互关系。
  • 交互概览图将系统工作流中的每个过程使用时序图或通信图来描述,并通过箭头和判定决策点将这些模型联系起来,构成一个完整的工作流。

元素构成

  • 交互概览图的构成元素有初始状态、终止状态、工作流中的顺序图和通信图、交互以及判定决策点
  • 交互事件:交互事件是指在交互概览图中表示的序列图或活动图的实例;交互事件显示为一个引用框,左上角显示"ref"。被引用的图名显示在框的中央
  • 交互元素:交互元素是指在交互概览图中使用的各种符号和元素,它们用于描述对象之间的交互

交互概览图的形式

  • 以活动图为主线,并用顺序图表述细节;
    • 如果你是对工作流进行建模,那么应该先采用活动图来表示工作流的活动控制流,然后再通过顺序图来描述其中一些活动节点的对象控制流,阐述更多实现细节;
  • 以顺序图为主线,并用活动图表述细节
    • 如果你是在为代码的设计、实现进行建模,那么可以先通过顺序图理清对象之间的控制流;然后再通过活动图来表示某些重要的方法、调用的算法流程。

UML图对比

类图与对象图的区别

|-------------------------------|-----------------------------------|
| 类图 | 对象图 |
| 在类中包含三个部分:类名,类的属性和类的操作 | 对象包含两个部分:对象的名称和对象的属性 |
| 类的名称栏只包含类名 | 对象的名称栏包含"对象名":"类名" |
| 类的属性栏定义了所有的属性特征 | 对象的属性栏定义了属性的当前值 |
| 类中列出了操作 | 对象图中不包含操作内容,因为对象属于同一个类的对象,其操作是相同的 |
| 类中使用了关联连接,关联中使用名称,角色以及约束等特征定义 | 对象使用链进行连接,链中包含名称,角色 |
| 类代表的是对象的分类所以必须说明可以参与关联的对象的数目 | 对象代表的是单独的实体,所有的链都是1对1的,因此不涉及到多重性 |

动态图对比

|-----|---------------------------------------------------------------------------|-------------------------------|
| 图形 | 特点 | 主要区别 |
| 顺序图 | 1. 展示用例中的行为顺序和对象之间的交互 2. 强调消息在对象间的发送和接收顺序 3. 消息按时间顺序从上到下排列 4. 显示对象实例及生命周期 | 注重时间顺序,消息如何在对象间发送和接收 |
| 协作图 | 1. 展示对象之间的关系和交互 2. 强调对象之间的链接和协作 3. 使用编号显示消息发送的顺序 | 注重对象关系和协作,而不是时间顺序 |
| 状态图 | 1. 展示对象在其生命周期内的状态变化 2. 描述不同状态之间的转换条件和事件 3. 强调对象从创建到销毁的整个生命周期中的状态 | 专注于对象状态变化和转换条件,不关注具体的交互细节 |
| 活动图 | 1. 展示系统内的业务流程和控制流 2. 描述各个活动和动作的顺序 3. 可以表示并发活动和分支流程 | 强调流程控制和业务流程,适用于描述复杂的工作流程和并行处理 |

协作图与时序图的对比

|-------|----------------------------------------------|----------------------------------------------------|
| 特性 | 时序图 | 协作图 |
| 侧重点 | 时间顺序 | 对象关系 |
| 显示内容 | 消息传递的先后顺序和时间线 | 对象之间的链接和消息传递路径 |
| 处理复杂性 | 适用于复杂的交互场景 | 适用于简单的交互过程 |
| 主要元素 | 角色、对象、生命线、控制焦点、消息 | 对象、链接、消息 |
| 应用场景 | 适用于分析复杂的交互场景和系统的动态行为,帮助开发人员理解事件发生的顺序和系统的时间行为 | 适用于描述对象如何协作完成某个任务,帮助开发人员了解对象间的链接和交互方式,尤其适用于简单的交互过程 |

相关推荐
程序员JerrySUN22 分钟前
熟悉的 Docker,陌生的 Podman
linux·docker·容器·系统架构·podman
张彦峰ZYF2 天前
DDD领域应用理论实践分析回顾
分布式·架构·系统架构·软件工程
喵~来学编程啦2 天前
【软件工程】一篇入门UML建模图(类图)
软件工程·uml
梁辰兴3 天前
Enterprise Architect 16 下载、安装与无限30天操作
uml·安装教程·下载·enterprise·architect·ea·16
成工小白3 天前
丹摩征文活动|丹摩智算平台下的YoloV8模型训练与测试实践
linux·yolo·uml·类图
oioihoii3 天前
UML中类图的介绍与使用
c++·设计模式·c#·uml
爪哇学长3 天前
JavaFX 与其他图形库的详细比较:现代架构与性能优势
java·架构·系统架构
J老熊4 天前
RabbitMQ 在 Java 和 Spring Boot 中的应用详解
java·开发语言·spring boot·后端·系统架构·rabbitmq·java-rabbitmq
架构师Wu老七4 天前
【软考】系统架构设计师-计算机系统基础(4):计算机网络
计算机网络·系统架构·软考·系统架构设计师
银帅183350309714 天前
系统架构设计师论文
系统架构·论文笔记