UML-Unified Model Language 统一建模语言,又称标准建模语言。是用来对软件密集系统进行可视化建模的一种语言。UML的定义包括UML语义和UML表示法两个元素。
UML是在开发阶段,说明,可视化,构建和书写一个面向对象软件密集系统的制品的开放方法。最佳的应用是工程实践,对大规模,复杂系统进行建模方面,特别是在软件
架构层次,已经被验证有效。统一建模语言(UML)是一种模型化语言。模型大多以图表的方式表现出来。一份典型的建模图表通常包含几个块或框,连接线和作为模型附
加信息之用的文本。这些虽简单却非常重要,在UML规则中相互联系和扩展。
UML的构造快包含3种:
(1) 事物(4种):结构事物,行为事物,分组事物,注释事物
(2) 关系(4种):泛化关系,实现关系,依赖关系,关联关系(另有两特殊的关联关系:聚合与组合)
(3) 图(10种):用例图,类图,对象图,(包图,组件图)--- 构建图,部署图,状态图,活动图,序列图,协作图
事物是对模型中最具代表性的成分的抽象;关系把事物结合在一起;图是聚集了相关的事物。
几种关系所表现的强弱程度依次为:泛化 = 实现 > 组合 > 聚合 > 关联 > 依赖
一、UML的关系
UML定义的关系主要有六种:依赖、类属、关联、实现、聚合和组合。这些类间关系的理解和使用是掌握和应用UML的关键,而也就是这几种关系,往往会让初学者迷惑。这里
给出这六种主要UML关系的说明和类图描述,一看之下,清晰明了;以下就分别介绍这几种关系
继承(泛化)
泛化(generalization)关系:是一个类(称为子类、子接口)继承另外的一个类(称为父类、父接口)的功能,并可以增加它自己的新功能的能力,继承是类
与类或者接口与接口之间最常见的关系;在Java中此类关系通过关键字extends明确标识,在设计时一般没有争议性。
实现
实现(realization)关系:指的是一个class类实现interface接口(可以是多个)的功能;实现是类与接口之间最常见的关系;在Java中此类关系通过关键字implements明确标识,
在设计时一般没有争议性;
依赖
依赖(dependency)关系:可以简单的理解,就是一个类A使用到了另一个类B,而这种使用关系是具有偶然性的、临时性的、非常弱的,但是B类的变化会影响到A;比如某人要过河,
需要借用一条船,此时人与船之间的关系就是依赖;表现在代码层面,为类B作为参数被类A在某个method方法中使用
//在java?中.?依赖关系体现为:?局部变量,?方法中的参数,?和对静态方法的调用
关联
关联(association)关系: 表示类与类之间的联接, 它使一个类知道另一个类的属性和方法.
关联可以使用单箭头表示单向关联, 使用双箭头或不使用箭头表示双向关联, 不建议使用双向关联. 关联有两个端点, 在每个端点可以有一个基数,
表示这个关联的类可以有几个实例.
常见的基数及含义:
0..1:0 或1 个实例.
0..*: 对实例的数目没有限制.
1: 只能有一个实例.
1..*: 至少有一个实例.
他体现的是两个类、或者类与接口之间语义级别的一种强依赖关系,比如我和我的朋友;这种关系比依赖更强、不存在依赖关系的偶然性、关系也
不是临时性的,一般是长期性的,而且双方的关系一般是平等的,表现在代码层面,为被关联类B以类属性的形式出现在关联类A中,也可能是关联类
A引用了一个类型为被关联类B的全局变量;在java 语言中关联关系是使用实例变量实现的.
聚合
聚合(aggregation)关系: 关联关系的一种特例, 是强的关联关系. 聚合是整体和个体之间的关系,即has-a的关系,此时整体与部分之间是可分离的,他们可
以具有各自的生命周期,部分可以属于多个整体对象,也可以为多个整体对象共享;比如计算机与CPU、公司与员工的关系等;表现在代码层面,和关联关系是一
致的,只能从语义级别来区分;
聚合关系也是使用实例变量实现的. 从java 语法上是分不出关联和聚合的.
关联关系中两个类是处于相同的层次, 而聚合关系中两个类是处于不平等的层次, 一个表示整体, 一个表示部分.
组合
组合(合成)关系(composition): 也是关联关系的一种特例,他体现的是一种contains-a的关系,这种关系比聚合更强,也称为强聚合;他同样体现整体与部分间
的关系,但此时整体与部分是不可分的,整体的生命周期结束也就意味着部分的生命周期结束;比如你和你的大脑;合成关系不能共享. 。表现在代码层面,和
关联关系是一致的,只能从语义级别来区分。
组合跟聚合几乎相同,唯一的区别就是“部分”不能脱离“整体”单独存在,就是说,“部分”的生命期不能比“整体”还要长。
二、事物
UML语言的事物,包含4类:
结构事物:语言的静态构成要素,有7种:类和对象、接口、主动类、用例、协作、构件、节点。
行为事物:语言的动态构成要素,表示事物的变化和状态。
分组事物:对模型中事物分组组织的要素,包。
注释事物:对模型中事物标注,注解和解释。
结构事物
结构事物定义了业务或软件系统中的某个物理元素,描述了事物的静态特征。结构事物常用名词表示。结构事物有7种,
它们是:类和对象、接口、主动类、用例、协作、构件、节点。
1.类和对象
类是对具有相同属性、相同操作、相同关系的一组对象的共同特征的抽象,类是对象的模板,对象是类的一个实例。
(1)类的表示
在UML中,类是用一个矩形表示的,它包含三个区域,最上面是类名、中间是类的属性、最下面是类的方法。
例如,描述People(类)用图形表示,如图1所示。
假设,People类包含的属性和行为如下:
类名:People, 在第一栏。
字段名:name、age,字段名(也称属性)放在第二栏。
方法名:speak()、breathe( ),方法在第三栏
(2).对象的表示
对象是用一个矩形表示,在矩形框中,不再写出属性名和方法名,只是在矩形框中用“对象名:类名”的格式表示一个对象。
例如,属于类People中的对象张连海的图形表示如图2所示。
2.接口
因为外界对类(或构件)的使用,是通过类(或构件)的方法来实现的,因此,我们把
为类或构件提供特定服务的一组操作的集合称为接口。接口向外界声明了它能提供
的服务。接口分为供给接口和需求接口两种,供给接口只能向其它类(或构件)提供
服务,需求接口表示类(或构件)使用其它类(或构件)提供的服务。
3.主动类
主动类是指该类创建的对象至少拥有一个进程或线程,通过进程或线程控制任务的执行。
主动类的表示与一般类相似,只是最外框是粗线描述而已。
如主动类”Radio”的表示如图4所示。
4.用例
在系统中,为完成某个任务而执行的一序列动作,以实现某种功能,我们把这些动作的集合称为用例实例。
用例是对一组用例实例共同特征的描述,用例与用例实例的关系,正如类与对象的关系。
用例是用一个实线椭圆来表示的,在椭圆中写入用例名称。如,用例“用户登录”表示如图5
5.协作
协作是指有意义的交互,即,一组对象为了完成某个任务,相互间进行的交互。
用例的实现:实现某个用例的一组对象之间的交互,即,把一个用例表示为多个对象间的交互(协作)。从本质上说,协作就是用例的实现。
用一个带2个分栏的虚线椭圆表示协作。如,用例“销售房产”,用协作“销售房产”表示时,其对应的表示法如图6所示。
6. 构件
构件也称组件:系统设计中,一个相对独立的软件部件,它把功能实现部分隐藏在内部,对外声明了一组接口(包括供给接口和需求接口)。因此,两个具有相同接口的构件可以相互替换。
构件是比“类”更大的软件部件,例如一个COM组件、一个DLL文件、一个执行文件等等。
构件通常采用带有2个小方框的矩形表示,如下图7所示。
7.节点
节点是指硬件系统中的物理部件,它通常具有存储空间或处理能力。如,PC机、打印机、服务器等都是节点。在UML中,用一个立方体表示一个节点。如,节点“server”的表示方法如图8所示。
二)、行为事物
行为事物是用来描述业务系统或软件系统中,事物之间的交互或事物的状态变化。行为事物描述了事物的动态特征。行为事物用动词表示。行为事物有2种:交互和状态机。
1.交互
交互(interaction)是为了完成某个任务的对象之间相互作用,这种作用是通过信息的发送和接受来完成的。
交互的表示法很简单,用一条有向直线来表示对象间的交互,并在有向直线上面标有消息名称。如图9所示。
2.状态机
状态机(statemachine)在对象生命周期内,在事件驱动下,对象从一种状态迁移到另一状态的状态序列,
这些状态序列构成了状态机,即,一个状态机由多个状态组成。
在UML模型中,将状态表示为一个圆角矩形,并在矩形内标识状态名称。 如,“等待”表示如图10所示。
三)、分组事物
对于一个中大型的软件系统而言,通常会包含大量的类、接口、交互,因此也就会存在大量的
结构事物、行为事物,为了能有效地对这些事物进行分类和管理,就需要对其进行分组。在UML
中,提供了“包(Package)”来实现这一目标。表示“包(Package)”的图形符号,与windows中
四)、注释事物
在模型中,用来对其它事物的解释部分(文本解释)称为注释。注释事物是用一个右上角折起来的矩形,解释的文字就写在矩形中。注释符号如图12所示。