什么是 UML?
UML 是 国际对象管理组织(OMG)在1997年1月提出了创建由对象管理组和 UML1.0 规范草案;
UML 是一种为面向对象开发系统的产品进行说明、可视化、和编制文档的标准语言;
UML 作为一种模型语言,它使开发人员专注于建立产品的模型和结构,而不是选用什么程序语言和算法实现;
UML 是不同于其他常见的编程语言,如 C + +,Java中,COBOL 等,它是一种绘画语言,用来做软件蓝图;
UML 不是一种编程语言,但工具可用于生成各种语言的代码中使用 UML 图;
UML 可以用来建模非软件系统的处理流程,以及像在一个制造单元等.
UML 的目标
UML 的目标是定义一些通用的建模语言并对这些建模语言做出简单的说明,这样可以让建模者理解与使用。UML 也是为普通人和有兴趣的人而开发的系统,它可以是一个软件或者使用非软件,它必须是明确的。我们不将 UML 作为一个开发方法,而是随着流程做一个成功的系统。
现在我们可以明确的了解 UML 的目标就是 UML 被定义为一个简单的建模机制,帮助我们按照实际情况或者按照我们需要的样式对系统进行可视化;提供一种详细说明系统的结构或行为的方法;给出一个指导系统构造的模板;对我们所做出的决策进行文档化。
UML 基本元素
1. 三个基本模块
- 事务
- 关系
- 图
2. 四种事务
-
结构事务
结构事物是模型中的静态部分,用以呈现概念或实体的表现元素,是软件建模中最常见的元素,接下来是对结构化物件的简要描述:
类(class)
类是指具有相同属性、方法、关系和语义的对象的集合。
接口((interface))
接口是指类或组件所提供的服务(操作),描述了类或组件对外可见的动作。
协作(collaboration)
协作定义元素之间的相互作用。
用例(use case)
用例定义了执行者(在系统外部和系统交互的人)和被考虑的系统之间的交互来实现的一个业务目标。
组件(component)
组件描述物理系统的一部分。
节点(node)
一个节点可以被定义为在运行时存在的物理元素。
-
行为事务:
行为事物指的是 UML 模型中的动态部分,代表语句里的 "动词",表示模型里随着时空不断变化的部分,包含两类:
交互
交互被定义为一种行为,包括一组元素之间的消息交换来完成特定的任务。
状态机
状态机由一系列对象的状态组成,它是有用的,一个对象在其生命周期的状态是很重要的。
-
分组事务
可以把分组事物看成是一个"盒子",模型可以在其中被分解。目前只有一种分组事物,即包(package)。结构事物、动作事物甚至分组事物都有可能放在一个包中。包纯粹是概念上的,只存在于开发阶段,而组件在运行时存在。
包
封装是唯一一个分组事物可收集结构和行为的东西。
-
注释事务
注释事物可以被定义为一种机制来捕捉UML模型元素的言论,说明和注释。注释是唯一一个注释事物。
注释
注释用于渲染意见,约束等的UML元素。
3. 四种关系
关系是另一个最重要的构建块UML,它显示元素是如何彼此相关联,此关联描述的一个应用程序的功能,UML中定义了四种关系:
-
依赖
依赖是两件事物之间的语义联系,其中一个事物的变化也影响到另一个事物。
-
关联
一种描述一组对象之间连接的结构关系,如聚合关系(描述了整体和部分间的结构关系)、组合关系(更强烈的聚合关系)。
-
泛化
泛化可以被定义为一个专门的元件连接关系与一个广义的元素,它基本上描述了在对象世界中的继承关系,是一种一般化-特殊化的关系。
-
实现
类之间的语义关系,其中的一个类指定了由另一个类保证执行的契约。
4. 九种图
- 用例图
- 类图
- 对象图
- 部署图
- 活动图
- 状态图
- 序列图
- 协作图
- 组件图
UML 图的分类
根据RUP 4+1架构视图,分别为场景视图、逻辑视图、开发视图、进程视图和物理视图,如下图所示:
根据UML建模类型分类UML标准图,分别为结构图(静态)和行为图(动态),如下图所示:
类、接口、类之间关系的基本表示法
-
类
类(Class)是指具有相同属性、方法和关系的对象的抽象,它封装了数据和行为,是面向对象程序设计(OOP)的基础,具有封装性、继承性和多态性等三大特性。在 UML 中,类使用包含类名、属性和操作且带有分隔线的矩形来表示。
(1) 类名(Name)是一个字符串,例如,Student。
(2) 属性(Attribute)是指类的特性,即类的成员变量。UML 按以下格式表示:
[可见性]属性名:类型[=默认值]
例如:-name:String
注意:“可见性”表示该属性对类外的元素是否可见,包括公有(Public)、私有(Private)、受保护(Protected)和朋友(Friendly)4 种,在类图中分别用符号+、-、#、~表示。
(3) 操作(Operations)是类的任意一个实例对象都可以使用的行为,是类的成员方法。UML 按以下格式表示:
[可见性]名称(参数列表)[:返回类型]
例如:+display():void。
学生类的 UML ,如下所示:
-
接口
接口(Interface)是一种特殊的类,它具有类的结构但不可被实例化,只可以被子类实现。它包含抽象操作,但不包含属性。它描述了类或组件对外可见的动作。在 UML 中,接口使用包含接口名和操作且带有分隔线的矩形来表示。
-
类之间的关系
在软件系统中,类不是孤立存在的,类与类之间存在各种关系。根据类与类之间的耦合度从弱到强排列,UML 中的类图有以下几种关系:依赖关系、关联关系、聚合关系、组合关系、泛化关系和实现关系。其中泛化和实现的耦合度相等,它们是最强的。
1. 依赖关系
依赖(Dependency)关系是一种使用关系,它是对象之间耦合度最弱的一种关联方式,是临时性的关联。在代码中,某个类的方法通过局部变量、方法的参数或者对静态方法的调用来访问另一个类(被依赖类)中的某些方法来完成一些职责。
在 UML 类图中,依赖关系使用带箭头的虚线来表示,箭头从使用类指向被依赖的类。
人与手机的关系图,人通过手机的语音传送方法打电话,如下图所示:
2. 关联关系
关联(Association)关系是对象之间的一种引用关系,用于表示一类对象与另一类对象之间的联系,如老师和学生、师傅和徒弟、丈夫和妻子等。关联关系是类与类之间最常用的一种关系,分为一般关联关系、聚合关系和组合关系。我们先介绍一般关联。
关联可以是双向的,也可以是单向的。在 UML 类图中,双向的关联可以用带两个箭头或者没有箭头的实线来表示,单向的关联用带一个箭头的实线来表示,箭头从使用类指向被关联的类。也可以在关联线的两端标注角色名,代表两种不同的角色。
在代码中通常将一个类的对象作为另一个类的成员变量来实现关联关系。每个老师可以教多个学生,每个学生也可向多个老师学,他们是双向关联。老师和学生的关系图,如下图所示:
3. 聚合关系
聚合(Aggregation)关系是关联关系的一种,是强关联关系,是整体和部分之间的关系,是 has-a 的关系。
聚合关系也是通过成员对象来实现的,其中成员对象是整体对象的一部分,但是成员对象可以脱离整体对象而独立存在。例如,学校与老师的关系,学校包含老师,但如果学校停办了,老师依然存在。
在 UML 类图中,聚合关系可以用带空心菱形的实线来表示,菱形指向整体。大学和教师的关系图,如下图所示:
4. 组合关系
组合(Composition)关系也是关联关系的一种,也表示类之间的整体与部分的关系,但它是一种更强烈的聚合关系,是 comtains-a 关系。
在组合关系中,整体对象可以控制部分对象的生命周期,一旦整体对象不存在,成员对象也将不存在,成员对象不能脱离整体对象而存在。例如,头和嘴的关系,没有了头,嘴也就不存在了。
在 UML 类图中,组合关系用带实心菱形的实线来表示,菱形指向整体。头和嘴的关系图,如下图所示:
5. 泛化关系
泛化(Generalization)关系是对象之间耦合度最大的一种关系,表示一般与特殊的关系,是父类与子类之间的关系,是一种继承关系,是 is-a 的关系。
在 UML 类图中,泛化关系用带空心三角箭头的实线来表示,箭头从子类指向父类。在代码实现时,使用面向对象的继承机制来实现泛化关系。例如,Student 类和 Teacher 类都是 Person 类的子类,其类图如下图所示:
6. 实现关系
实现(Realization)关系是接口与实现类之间的关系。在这种关系中,类实现了接口,类中的操作实现了接口中所声明的所有的抽象操作。
在 UML 类图中,实现关系使用带空心三角箭头的虚线来表示,箭头从实现类指向接口。例如,汽车和船实现了交通工具,其类图如图下图所示:
UML与软件工程
UML图是软件工程的组成部分,软件工程从宏观的角度保证了软件开发的各个过程的质量。而UML作为一种建模语言,更加有效的实现了软件工程的要求。
在软件的各个开发阶段需要的UML图,如下图所示:
UML图的使用人员总结,每种颜色代表一种图,如黄色代表用例图,用例图是用户,分析人员,测试人员会使用的。如下图所示: