浅谈UML中常用的几种图

UML简介

统一建模语言(Unified Modeling Language,UML)又称标准建模语言,是始于1997年的一个OMG标准,它是一个支持模型化和软件系统开发的图形化语言,为软件开发的所有阶段提供模型化和可视化支持,包括由需求分析到规格,到构造和配置。‘UML感兴趣的可以阅读UML 1规 范,包含了UML 的所有知识内容。

UML常见图分类

UML从考虑系统的不同角度出发,定义了用况图、类图、对象图、包图、状态图、活动图、序列图、通信图、构件图、部署图等10种图。
分类:
面向对象动态建模,用于建立行为的实体间行为交互的四种图:状态图(Stage Diagram),序列图(Sequence Diagram),协作图(Communication Diagram),活动图(Activity Diagram) 。
“序列图”与“协作图”表述的是相似的消息,“活动图”是“状态图”的一种。

  • 静态结构图Static Structure Diagram
    类图Class Diagram
    对象图Object Diagram
    用况图Use Case Diagram
  • 交互图Interaction Diagram
    顺序图Sequence Diagram
    协作图Collaboration Diagram
    状态图State chart Diagrams
    活动图Activity Diagrams
  • 实现图Implementation Diagrams
    构件图Component Diagram
    部署图Deployment Diagram

用框图(用例)

用例图,展现了一组用例、参与者(actor)以及它们之间的关系。
用例图从用户角度描述系统的静态使用情况,用于建立需求模型。(用于需求分析)

参与者(Actor)
  在系统外部与系统直接交互的人或事物。需要注意以下两点:
  1)参与者是角色而不是具体的人(可以是外部系统),它代表了参与者在与系统打交道的过程中所扮演的角色。所以在系统的实际运作中,一个实际用户可能对应系统的多个参与者。不同的用户也可以只对应于一个参与者,从而代表同一参与者的不同实例。
  2)参与者作为外部用户(而不是内部)与系统发生交互作用,是它的主要特征。
在UML中,参与者使用如图所示的一个小人表示:
用例(Use Case)用况
系统外部可见的一个系统功能单元。系统的功能由系统单元所提供,并通过一系列系统单元与一个或多个参与者之间交换的消息所表达。用椭圆表示,椭圆中的文字简述系统的功能;
关系(Relationship)
  常见关系类型有关联、泛化、包含和扩展。
  以上各关系在uml图中的表示方式,如下表所示:
avatar

  1. 关联(Association)
      表示参与者与用例之间的通信,任何一方都可发送或接受消息。
     【箭头指向】:指向消息接收方
    avatar
  2. 泛化(Inheritance)
      就是通常理解的继承关系,子用例和父用例相似,但表现出更特别的行为;子用例将继承父用例的所有结构、行为和关系。子用例可以使用父用例的一段行为,也可以重载它。父用例通常是抽象的。
    【箭头指向】:指向父用例
    avatar
  3. 包含(Include)
    包含关系用来把一个较复杂用例所表示的功能分解成较小的步骤。
      【箭头指向】:指向分解出来的功能用例
    avatar
  4. 扩展(Extend)
      扩展关系是指用例功能的延伸,相当于为基础用例提供一个附加功能。
      【箭头指向】:指向基础用例
    avatar
    包含(include)、扩展(extend)、泛化(Inheritance) 的区别:
      条件性:泛化中的子用例和include中的被包含的用例会无条件发生,而extend中的延伸用例的发生是有条件的;
      直接性:泛化中的子用例和extend中的延伸用例为参与者提供直接服务,而include中被包含的用例为参与者提供间接服务。
      对extend(扩展)而言,延伸用例并不包含基础用例的内容,基础用例也不包含延伸用例的内容。
      对Inheritance(泛化)而言,子用例包含基础用例的所有内容及其和其他用例或参与者之间的关系;

类图

在UML类图中,常见的有以下几种关系: 泛化(Generalization), 实现(Realization),关联(Association),聚合(Aggregation),组合(Composition),依赖(Dependency)

  1. 泛化(Generalization)
    【泛化关系】:是一种继承关系,表示一般与特殊的关系,它指定了子类如何特化父类的所有特征和行为。例如:老虎是动物的一种,即有老虎的特性也有动物的共性。
    【箭头指向】:带三角箭头的实线,箭头指向父类
    avatar
  2. 实现(Realization)
    【实现关系】:是一种类与接口的关系,表示类是接口所有特征和行为的实现.
    【箭头指向】:带三角箭头的虚线,箭头指向接口
    avatar
  3. 关联(Association)
    【关联关系】:是一种拥有的关系,它使一个类知道另一个类的属性和方法;如:老师与学生,丈夫与妻子关联可以是双向的,也可以是单向的。双向的关联可以有两个箭头或者没有箭头,单向的关联有一个箭头。
    【代码体现】:成员变量
    【箭头及指向】:带普通箭头的实心线,指向被拥有者
    avatar
  4. 聚合(Aggregation)
    【聚合关系】:是整体与部分的关系,且部分可以离开整体而单独存在。如车和轮胎是整体和部分的关系,轮胎离开车仍然可以存在。
    聚合关系是关联关系的一种,是强的关联关系;关联和聚合在语法上无法区分,必须考察具体的逻辑关系。
    【代码体现】:成员变量
    【箭头及指向】:带空心菱形的实心线,菱形指向整体
    avatar
  5. 组合(Composition)
    【组合关系】:是整体与部分的关系,但部分不能离开整体而单独存在。如公司和部门是整体和部分的关系,没有公司就不存在部门。组合关系是关联关系的一种,是比聚合关系还要强的关系,它要求普通的聚合关系中代表整体的对象负责代表部分的对象的生命周期。
    【代码体现】:成员变量
    【箭头及指向】:带实心菱形的实线,菱形指向整体
  6. 依赖(Dependency)
    【依赖关系】:是一种使用的关系,即一个类的实现需要另一个类的协助,所以要尽量不使用双向的互相依赖.
    【代码表现】:局部变量、方法的参数或者对静态方法的调用
    【箭头及指向】:带箭头的虚线,指向被使用者
    avatar

各种关系的强弱顺序:
泛化 = 实现 > 组合 > 聚合 > 关联 > 依赖
下面这张UML图,比较形象地展示了各种类图关系:
avatar

时序图(顺序图)

  1. 时序图是以时间为序的表示方法,主要用来描述对象之间的时间顺序。将交互关系表示为二维图的。纵轴为时间,横轴为在协作中各个独立的对象。对象存在时用一条虚线表示,当对象的过程处于激活状态是,生命线是一个双道线。消息用从一个对象的生命线到另一个对象生命线的箭头表示。箭头以时间顺序在图中从上到下排列。如下图:
    avatar

  2. 四个元素(对象,生命线,消息,激活)
    (1)对象
    对象的概念就不多说了,就是类的实例化,在系统中随便都可以找到一个对象,因为我们使用的是基于OO编程的VB。
    (2)生命线
    表示对象的存在存在多久的时间
    (3)消息
    对象之间的单路通信,人有人的语言,机器有机器的语言,人和机器都是靠消息传递信息和指令的。
    消息的类型大致有:同步与异步,返回、阻止和超时。
    (4)激活
    表示这个时间,对象实现操作。时序图是将交互关系表示为二维图的。纵轴为时间,横轴为在协作中各个独立的对象。对象存在时用一条虚线表示,当对象的过程处于激活状态,生命线是一个双道线。消息用从一个对象的生命线到另一个对象生命线的箭头表示。箭头以时间顺序在图中从上到下排列。

协作图(Collaboration Diagram/communication Diagram)/通信图

协作图(Collaboration Diagram /Communication Diagram,也叫合作图)是一种交互图(interaction diagram),强调的是发送和接收消息的对象之间的组织结构。一个协作图显示了一系列的对象和在这些对象之间的联系以及对象间发送和接收的消息。对象通常是命名或匿名的类的实例,也可以代表其他事物的实例,例如协作、组件和节点。使用协作图来说明系统的动态情况。
avatar

状态图

1.概述:
状态图(Statechart Diagram)主要用于描述一个特定的对象的所有可能状态以及由于各种事件的发生而引起的状态之间的转换。
2.构成要素:
状态图由状态、转移和事件组成。联合使用状态和转移可以更好地建模它们,有时需要包含决策点和同步条来显示更高层次的细节信息。
2.1状态(States):
在对象的生命周期中满足某些条件、执行某些活动或等待某些事件的一个条件或状况。所有的对象都有状态,状态是对象执行了一系列活动的结果,当某个事件发生后,对象的状态将发生变化。
avatar
状态图中可以包含0个多个开始状态,也可以包含多个结束状态。模型不必同时具有开始和结束状态,因为模型可以总是运行,从不停止。
2.2转移(Transitions):
两个状态之间的一种关系,表示对象将在第一个状态中执行一定的动作并在某个特定事件发生或某个特定条件满足时进入第二个状态。
avatar
2.3事件:
使状态发生变化的某时刻发生的动作或活动,用来指示是什么触发了转移从而导致状态发生了改变。事件通常在从一个状态到另一个状态的转移路径上直接指定。
avatar
2.4判断:
判断点通过对事件判断分组转移到各自方向,提高了状态图的可视性。
avatar

总结

avatar

参考文章

https://blog.csdn.net/qq_35495763/article/details/80764914