UML 简介
1997年,OMG(难道是Oh My God?) 组织(Object Management Group对象管理组织)发布了统一建模语言(Unified Modeling Language,UML)。UML 是一种编制软蓝图的标准化语言,它的目标之一就是为开发团队提供标准通用的设计语言来开发和构建计算机应用。UML 提出了一套 IT 专业人员期待多年的统一的标准建模符号。通过使用UML,这些人员能够阅读和交流系统架构和设计规划。UML支持面向对象的技术,能够准确的方便地表达面向对像的概念,体现面向对象的分析和设计风格。
UML 模型
- 事物(Things):UML模型中最基本的构成元素,是具有代表性的成分的抽象
- 关系(Relationships):关系把事物紧密联系在一起
- 图(Diagrams ):图是事物和关系的可视化表示
UML 特点
- 面向对象
- 可视化,表达能力强
- 独立于过程
- 独立于程序设计
- 容易掌握使用
UML 概述
- UML 是 OMG 在1997年1月提出了创建由对象管理组和 UML1.0 规范草案;
- UML 是一种为面向对象开发系统的产品进行说明、可视化、和编制文档的标准语言;
- UML 作为一种模型语言,它使开发人员专注于建立产品的模型和结构,而不是选用什么程序语言和算法实现;
- UML 是不同于其他常见的编程语言,如C + +,Java中,COBOL等,它是一种绘画语言,用来做软件蓝图;
- UML 不是一种编程语言,但工具可用于生成各种语言的代码中使用UML图;
- UML 可以用来建模非软件系统的处理流程,以及像在一个制造单元等.
UML 构建模块
构建块的定义
- 事物
- 关系
- 图
事物
- 结构事物
- 行为事物
- 分组事物
- 注释事物
结构事物
结构事物是模型中的静态部分,用以呈现概念或实体的表现元素,是软件建模中最常见的元素
- 1.类
类是指具有相同属性、方法、关系和语义的对象的集合。
- 2.接口
接口是指类或组件所提供的服务(操作),描述了类或组件对外可见的动作。
- 3.协作
协作定义元素之间的相互作用。
- 4.用例
用例定义了执行者(在系统外部和系统交互的人)和被考虑的系统之间的交互来实现的一个业务目标。
- 5.组件
组件描述物理系统的一部分。
- 6.节点
一个节点可以被定义为在运行时存在的物理元素。
行为事物
行为事物指的是 UML 模型中的动态部分,代表语句里的 “动词”,表示模型里随着时空不断变化的部分
- 1.交互
交互被定义为一种行为,包括一组元素之间的消息交换来完成特定的任务。
- 2.状态机
状态机由一系列对象的状态组成,它是有用的,一个对象在其生命周期的状态是很重要的。
分组事物
可以把分组事物看成是一个"盒子",模型可以在其中被分解。目前只有一种分组事物,即包(package)。结构事物、动作事物甚至分组事物都有可能放在一个包中。包纯粹是概念上的,只存在于开发阶段,而组件在运行时存在。
- 包
封装是唯一一个分组事物可收集结构和行为的东西。
注释事物
注释事物可以被定义为一种机制来捕捉UML模型元素的言论,说明和注释。注释是唯一一个注释事物。
- 注释
注释用于渲染意见,约束等的UML元素。
关系
关系是另一个最重要的构建块UML,它显示元素是如何彼此相关联,此关联描述的一个应用程序的功能,UML中定义了依赖、协作、泛化、实现四种关系。
- 1.依赖关系
依赖是两件事物之间的语义联系,其中一个事物的变化也影响到另一个事物。
- 2.协作
一种描述一组对象之间连接的结构关系,如聚合关系(描述了整体和部分间的结构关系)。
- 3.泛化
泛化可以被定义为一个专门的元件连接关系与一个广义的元素,它基本上描述了在对象世界中的继承关系,是一种一般化-特殊化的关系。
- 4.实现
类之间的语义关系,其中的一个类指定了由另一个类保证执行的契约。
图
UML 图的整个讨论的最终输出所有要素,关系用于使一个完整的UML图,图中表示的系统。
UML 图的视觉效果是整个过程中最重要的部分。
图是事物集合的分类,UML 中包含多种图。
- 类图:类图描述系统所包含的类、类的内部结构及类之间的关系;
- 对象图:对象图是类图的一个具体实例;
- 用例图:用例图从用户的角度出发描述系统的功能、需求,展示系统外部的各类角色与系统内部的各种用例之间的关系;
- 顺序图:顺序图表示对象之间动态合作的关系;
- 协作图:协作图描述对象之间的协作关系;
- 活动图:活动图描述系统中各种活动的执行顺序。
- 状态图:状态图描述一类对象的所有可能的状态以及事件发生时状态的转移条件;
- 部署关系图:部署关系图定义系统中软硬件的物理体系结构;
- 组件图:组件图描述代码部件的物理结构以及各部件之间的依赖关系;
UML 类图
因为博主主要是学习
C++
面向对象程序设计,所以接下来,主要介绍UML图形标识中的类图。一个类图是由类和与之相关的各种静态关系共同组成的图形。类图展示的是软件模型的静态结构、类的内部结构以及和其他类的关系。通过类图,能够描述一部分面向对象的相关概念(如类、模板等)以及它们的相互关系。
类和对象
类图中最基本的是要图形化描述类,要表示类的名称、数据成员和函数成员,以及各成员的访问控制属性。
在UML语言中,用一个由上而下分为3段的矩形来表示一个类。类名写在顶部区域,数据成员(UML中称为属性)在中间区域,函数成员(UML中称为操作)在底部区域。
比如说:
1 | class Clock |
数据成员
根据图的详细程度,每个数据成员可以包括其访问控制属性、名称、类型、默认值和约束特性,最简单的情况是只表示出它的名字,其余部分都是可选的。UML规定语法如下:
[访问控制属性] 名称 [重数] [:类型] [=默认值] [{约束特性}]
至少指定数据成员的名称,其余都是可选的。
其中的访问控制属性可分为Public
, Private
和 Protected
三种,分别对应于 UML 中的“+
”、“-
”和“#
”。
函数成员
每个函数成员可以包括其访问控制属性、名称、参数表、返回类型和约束特性,最简单的情况是只表示出它的名字,其余部分都是可选的。UML规定语法如下:
[访问控制属性] 名称 [(参数表)] [:返回类型] [{约束特性}]
至少指定函数成员的名称,其余都是可选的。
其中的访问控制属性可分为Public
, Private
和 Protected
三种,分别对应于 UML 中的“+
”、“-
”和“#
”。
对象
在UML语言中,用一个矩形来表示一个对象。对象的名字要加下划线。对象的全名写在图形的上部区域,由类名和对象名组成,其间用冒号隔开,表示方式为“对象名:类名”。在一些情况下,可以不出现对象名或类名。数据成员及其值表示在下面区域,数据成员是可选的。
几种关系的图形标识
依赖关系
类或对象之间的依赖描述了一个事物的变化可能会影响到使用它的另一个事物,反之不成立。当要表明一个类使用另一个类作为它的函数成员参数时,就使用依赖关系。通常类之间的调用关系.友元、类的实例化都属于这类关系。对于大多数依赖关系而言,简单的.不加修饰的依赖关系就足够了。然而,为了详述其含义的细微差别,UML定义了一些可以用于依赖关系的构造型。最常用的构造型是使用<< use >>。当需要表示两个类之间的使用关系时,要使用<< use >>构造型。
图4-6说明了如何表示类间的依赖关系,UML图形把依赖绘成一条指向被依赖的事物的虚线。图中的“类A”是源,“类B”是目标,表示“类A”使用了“类B”,或称“类A"依赖“类B"。
作用关系——关联
关联用于表述一个类的对象和另一个类的对象之间相互作用的连接。在UML语言中,用实线来表示的两个类(或同一个类)之间的关联,在线段两端通常包含多重性(或称重数)。多重性可说是关联最重要的特性,关联一端的多重性表明:关联另一端类的每个对象要求与本端类的多少个对象发生作用。图4-7说明了在UML中对关联的表示。
图中的“重数A"决定了类B的每个对象与类A的多少个对象发生作用,同样“重数B”决定了类A的每个对象与类B的多少个对象发生作用。重数标记的形式和含义均列于表4-1中。
包含关系——聚集和组合
类或对象之间的包含关系在UML中由聚集和组合两个概念描述,它们是一种特殊的关联。UML中的聚集表示类之间的关系是整体与部分的关系,“包含”、“组成”、“分为…部分”等都是聚集关系。一条直线段有两个端点,这是聚集的一个例子。聚集可以进一步划分成共享聚集和组成聚集(简称组合)。
- 例如,课题组包含许多成员,但是每个成员又可以是另一个课题组的成员,即部分可以参加多个整体,称之为共享聚集。
- 另一种情况是整体拥有各部分,部分与整体共存,如整体不存在了,部分也会随之消失,这称为组合。组合是一种简单聚集形式,但是它具有更强的拥有关系。例如,打开一个视窗口,它就由标题、外框和显示区所组成。在UML中,聚集表示为空心菱形,组合表示为实心菱形。
图4-8说明了如何表示类的聚合和组合。
继承关系——泛化
类之间的继承关系在UML中称为泛化,使用带有三角形标识的直线段表示这种继承关系,三角的一个尖指向父类,其对边上的线指向子类。图4-10说明了泛化关系。子类1说明单继承,子类2说明多继承。
注释
为了更生动地描述类、对象以及它们之间的关系,除了上述最基本的图形符号外,UMI还有一些辅助性的图形符号,下面介绍注释。
UML的注释是一种最重要的能够独立存在的修饰符号。注释是附加在元素或元素集上用来表示说明的图形符号。用注释可以为模型附加一些诸如说明、评述和注解等的信息。在UML图形上,注释表示为带有褶角的矩形,然后用虚线连接到UML的其他元素上,它是一种用于在图中附加文字注释的机制。
结语
引用其他博主的一句话:
UML的一切实际上就是为了交流。先编码后修复是错误的,先设计再纠错是正确的。
UML图是用来画出来找错误的,而不是要画一个完美的图形,无论是否正确,画图是用来记录和构思你的想法的,而不是一开始就是要画一个正确的图。