UML概述
Unified Modeling Language (UML)又称统一建模语言或标准建模语言。
1997年,OMG 组织(Object Management Group对象管理组织)发布了统一建模语言(Unified Modeling Language,UML)。UML 是一种编制软蓝图的标准化语言,它的目标之一就是为开发团队提供标准通用的设计语言来开发和构建计算机应用。UML 提出了一套 IT 专业人员期待多年的统一的标准建模符号。通过使用UML,这些人员能够阅读和交流系统架构和设计规划。UML支持面向对象的技术,能够准确的方便地表达面向对像的概念,体现面向对象的分析和设计风格.
UML 统一了Booch、OMT、OOSE和其他面向对象方法所涉及的基本概念和建模符号。
UML的模型主要有三部分构成:
- 事物(Things):UML模型中最基本的构成元素,是具有代表性的成分的抽象
- 关系(Relationships):关系把事物紧密联系在一起
- 图(Diagrams ):图是事物和关系的可视化表示
UML 特点:
- 面向对象
- 可视化,表达能力强
- 独立于过程
- 独立于程序设计
- 容易掌握使用
UML 组成
事物
结构事物
类
类是指具有相同属性、方法、关系和语义的对象的集合。
下面的图表示的 UML 类,该图被分为四个部分。
- 顶端部分被用来命名类。
- 第二个是用来显示类的属性。
- 第三部分是用来显示类的方法。
- 第四部分是可选的显示附加组件。
对象
该对象表示以同样的方式作为类。唯一的区别是有下划线的名称,如下图所示。
接口
接口是指类或组件所提供的服务(操作),描述了类或组件对外可见的动作。
接口是用圆来表示,如下所示。它有一个名称,一般写成下面的圆圈。
接口是用来描述的功能,而不执行。界面就像一个模板,定义不同的功能不执行。当一个类实现了接口,也按要求实现的功能。
协作
协作定义元素之间的相互作用。
协作表示由 eclipse 虚线如下所示。它有一个名字,里面写 eclipse。
用例
用例定义了执行者(在系统外部和系统交互的人)和被考虑的系统之间的交互来实现的一个业务目标。
用例表示它里面的一个名字作为 eclipse。它可能包含更多的责任。
用例是用来捕捉系统的高层次功能。
角色
某些内部或外部的与系统进行交互的实体,可以被定义为一个角色。
角色是在描述用例图内部或外部实体。
初始状态
初始状态被定义,以显示开始的一个过程。这个符号在几乎所有的图。
初始状态的表示法的用法是显示的一个过程的起点。
最终状态
最终状态是用来显示的一个过程的结束。这种表示法也可以用来在大部分的图中描述的目的。
最终状态表示法的用法是显示一个过程的终止点。
活动类
活动类类似于一类具有扎实的边界,活动类一般是用来描述一个系统的并发行为。
活动类是用来表示在一个系统的并发性。
组件
组件描述物理系统的一部分。
UML中的一个组件,如下图所示名称里面。在必要时,可以添加额外的元素。
节点
一个节点可以被定义为在运行时存在的物理元素。
UML 中的一个节点表示的一个方盒子,如下图所示,同一个名字。一个节点表示一个物理的系统组件。
节点用来表示物理系统的一部分,如服务器,网络等。
行为事物:
行为事物指的是 UML 模型中的动态部分,代表语句里的 "动词",表示模型里随着时空不断变化的部分,包含两类:
交互
交互被定义为一种行为,包括一组元素之间的消息交换来完成特定的任务。
交互基本上是两个 UML 组件之间的信息交换。下图表示交互中使用不同的符号。
交互是用来表示一个系统的组件之间的通信。
状态机
状态机由一系列对象的状态组成,它是有用的,一个对象在其生命周期的状态是很重要的。
状态机描述的组件在其生命周期的不同状态。在下面的图中描述的符号。
状态机是用来描述一个系统组件的不同状态。状态可以是活动,空闲或任何其他根据情况。
分组事物:
可以把分组事物看成是一个"盒子",模型可以在其中被分解。目前只有一种分组事物,即包(package)。结构事物、动作事物甚至分组事物都有可能放在一个包中。包纯粹是概念上的,只存在于开发阶段,而组件在运行时存在。
组织的 UML 模型设计的最重要的方面之一。 UML 中只有一个元件即可用于分组,也就是包。
包
封装是唯一一个分组事物可收集结构和行为的东西。
包装信息书写方式如下表所示,这是用来包装系统组成部分的。
注释事物:
注释事物可以被定义为一种机制来捕捉UML模型元素的言论,说明和注释。注释是唯一一个注释事物。
注释
注释用于渲染意见,约束等的UML元素。
这种表示法如下所示,它们被用来提供一个系统的必要的信息。
关系
关系是另一个最重要的构建块UML,它显示元素是如何彼此相关联,此关联描述的一个应用程序的功能,UML中定义了四种关系:
依赖关系
依赖是两件事物之间的语义联系,其中一个事物的变化也影响到另一个事物。
依赖是UML元素的一个重要方面。它描述了相关的元素和方向上依赖关系。
依赖关系的虚线箭头表示,如下所示。箭头代表的独立元素,另一端的依赖元素。
依赖关系是用来表示一个系统的两个元素之间的依赖。
协作
一种描述一组对象之间连接的结构关系,如聚合关系(描述了整体和部分间的结构关系)。
协作介绍 UML 图中的元素相关联。简单的一句话,它介绍了多少个元素参与互动。
联合会(无)两侧的箭头的虚线表示。两端代表两个相关联的元素,如下所示。在两端(1,*等)的多样性也提到多少对象相关。
协作是用来表示一个系统的两个元素之间的关系。
泛化
泛化可以被定义为一个专门的元件连接关系与一个广义的元素,它基本上描述了在对象世界中的继承关系,是一种一般化-特殊化的关系。
泛化介绍了面向对象世界的继承关系。这是父与子的关系。
泛化为代表的空心箭头,如下图所示箭头的一端表示的父元素而另一端表示子元素。
泛化是用来描述一个系统的两个元素的亲子关系。
可扩展性
所有的语言(编程或模型)有某种机制来扩展与其功能类似的语法,语义等。 UML 具有以下机制来提供可扩展性功能。
- 定型观念(代表新元素)
- 标记值 (代表新的属性)
- 约束 (代表界限)
可扩展标记基本上是用来表示一些额外的系统行为的附加元素。这些额外的行为,不包括可用的标准符号。
实现
类之间的语义关系,其中的一个类指定了由另一个类保证执行的契约。
UML标准图
UML 图的整个讨论的最终输出所有要素,关系用于使一个完整的UML图,图中表示的系统。
UML 图的视觉效果是整个过程中最重要的部分。
图是事物集合的分类,UML 中包含多种图:
- 类图:类图描述系统所包含的类、类的内部结构及类之间的关系;
- 对象图:对象图是类图的一个具体实例;
- 用例图:用例图从用户的角度出发描述系统的功能、需求,展示系统外部的各类角色与系统内部的各种用例之间的关系;
- 顺序图:顺序图表示对象之间动态合作的关系;
- 协作图:协作图描述对象之间的协作关系;
- 活动图:活动图描述系统中各种活动的执行顺序。
- 状态图:状态图描述一类对象的所有可能的状态以及事件发生时状态的转移条件;
- 部署关系图:部署关系图定义系统中软硬件的物理体系结构;
- 组件图:组件图描述代码部件的物理结构以及各部件之间的依赖关系;
UML六种依赖关系
在UML类图中,常见的有以下几种关系: 泛化(Generalization), 实现(Realization), 关联(Association), 聚合(Aggregation), 组合(Composition), 依赖(Dependency)
泛化(Generalization)
【泛化关系】:是一种继承关系, 表示一般与特殊的关系, 它指定了子类如何特化父类的所有特征和行为. 例如:老虎是动物的一种, 即有老虎的特性也有动物的共性.
【箭头指向】:带三角箭头的实线,箭头指向父类
实现(Realization)
【实现关系】:是一种类与接口的关系, 表示类是接口所有特征和行为的实现。
【箭头指向】:带三角箭头的虚线,箭头指向接口。
关联(Association)
【关联关系】:是一种拥有的关系, 它使一个类知道另一个类的属性和方法;如:老师与学生,丈夫与妻子
关联可以是双向的,也可以是单向的。双向的关联可以有两个箭头或者没有箭头,单向的关联有一个箭头。
【代码体现】:成员变量
【箭头及指向】:带普通箭头的实心线,指向被拥有者
上图中,老师与学生是双向关联,老师有多名学生,学生也可能有多名老师。但学生与某课程间的关系为单向关联,一名学生可能要上多门课程,课程是个抽象的东西他不拥有学生。
上图为自身关联。
聚合(Aggregation)
【聚合关系】:是整体与部分的关系, 且部分可以离开整体而单独存在. 如车和轮胎是整体和部分的关系, 轮胎离开车仍然可以存在.
聚合关系是关联关系的一种,是强的关联关系;关联和聚合在语法上无法区分,必须考察具体的逻辑关系。
【代码体现】:成员变量
【箭头及指向】:带空心菱形的实心线,菱形指向整体
组合(Composition)
【组合关系】:是整体与部分的关系, 但部分不能离开整体而单独存在. 如公司和部门是整体和部分的关系, 没有公司就不存在部门.
【代码体现】:成员变量
【箭头及指向】:带实心菱形的实线,菱形指向整体
依赖(Dependency)
【依赖关系】:是一种使用的关系, 即一个类的实现需要另一个类的协助, 所以要尽量不使用双向的互相依赖.
【代码表现】:局部变量、方法的参数或者对静态方法的调用
【箭头及指向】:带箭头的虚线,指向被使用者
各种关系的强弱顺序:
泛化 = 实现 > 组合 > 聚合 > 关联 > 依赖
下面这张UML图,比较形象地展示了各种类图关系:
参考链接: https://www.w3cschool.cn/uml_tutorial/ https://www.cnblogs.com/jiangds/p/6596595.html https://blog.csdn.net/tectrol/article/details/95368600