UML类图简介

来源:互联网 发布:vmware12安装linux系统 编辑:程序博客网 时间:2024/05/21 21:36

UML类图简介

类图(Class diagram)由许多(静态)说明性的模型元素(例如类、包和它们之间的关系,这些元素和它们的内容互相连接)组成。类图可以组织在(并且属于)包中,仅显示特定包中的相关内容。
类图(Class diagram)是最常用的UML图,显示出类、接口以及它们之间的静态结构和关系;它用于描述系统的结构化设计。
UML-Unified Model Language 统一建模语言,又称标准建模语言。是用来对软件密集系统进行可视化建模的一种语言。UML的定义包括UML语义和UML表示法两个元素。
UML是在开发阶段,说明、可视化、构建和书写一个面向对象软件密集系统的制品的开放方法。最佳的应用是工程实践,对大规模,复杂系统进行建模方面,特别是在软件架构层次,已经被验证有效。统一建模语言(UML)是一种模型化语言。模型大多以图表的方式表现出来。一份典型的建模图表通常包含几个块或框,连接线和作为模型附加信息之用的文本。这些虽简单却非常重要,在UML规则中相互联系和扩展。

 

1. 类(Class

 一般包含3个组成部分:第一个是类名;第二个是属性(attributes);第三个是该类提供的方法(类的性质可以放在第四部分;如果类中含有内部类,则会出现第五个组成部分)。类名部分是不能省略的,其他组成部分可以省略。

 类名书写规范:正体字说明类是可被实例化的,斜体字说明类为抽象类。

 属性和方法书写规范:修饰符 [描述信息属性、方法名称 [参数] [:返回类型|类型]

 属性和方法之前可附加的可见性修饰符:

       加号(+)表示public

       减号(-)表示private

       #号表示protected

       省略这些修饰符表示具有package(包)级别的可见性。


     如果属性或方法具有下划线,则说明它是静态的。

     描述信息使用 << 开头和使用 >> 结尾。

      类的性质是由一个属性、一个赋值方法和一个取值方法组成。书写方式和方法类似。

  

 

       

2. 包(Package

 

包是一种常规用途的组合机制。

UML中的一个包直接对应于Java中的一个包。在Java中,一个包可能含有其他包、类或者同时含有这两者。

进行建模时,通常使用逻辑性的包,用于对模型进行组织;使用物理性的包,用于转换成系统中的Java包。

每个包的名称对这个包进行了惟一性的标识。:

 



 

3. 接口(Interface

 

接口是一系列操作的集合,它指定了一个类所提供的服务。它直接对应于Java中的一个接口类型。接口的表示有大概两种方式。具体画法见下例:

画法一:

 



 

 

画法二 :    



4. 关系

传统应用程序设计中所说的依赖一般指“类之间的关系”,那先让我们复习一下类之间的关系:

     泛化:表示类与类之间的继承关系、接口与接口之间的继承关系;

     实现:表示类对接口的实现;

     依赖:当类与类之间有使用关系时就属于依赖关系,不同于关联关系,依赖不具有“拥有关系”,而是一种“相识关系”,只在某个特定地方(比如某个方法体内)才有关系。

     关联:表示类与类或类与接口之间的依赖关系,表现为“拥有关系”;具体到代码可以用实例变量来表示;

     聚合:属于是关联的特殊情况,体现部分-整体关系,是一种弱拥有关系;整体和部分可以有不一样的生命周期;是一种弱关联;

     组合:属于是关联的特殊情况,也体现了体现部分-整体关系,是一种强“拥有关系”;整体与部分有相同的生命周期,是一种强关联;

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


4.1.泛化(Generalization)(也叫一般化关系(继承))

【泛化关系】:是一种继承关系,它指定了子类如何特化父类的所有特征和行为.例如:老虎是动物的一种.

                   一般化关系表示类与类、接口与接口之间的继承关系。关系中的箭头由子类指向父类。在Java中,用extends关键字来直接表示这种关系。

【箭头指向】:带三角箭头的实线,箭头指向父类


4.2.实现(Realization)

【实现关系】:是一种类与接口的关系,表示类是接口所有特征和行为的实现

              关系中的箭头由实现接口的类指向被实现的接口。在Java中,实现关系可直接用implements关键字来表示。

【箭头指向】:带三角箭头的虚线,箭头指向接口

表示方法一:(在Rose2003 下实现如下,连接线没有箭头,因为方向显而易见)


表示方法二: 


4.3.关联(Association

关联关系】:是一种拥有的关系,它使一个类知道另一个类的属性和方法;如:老师与学生,丈夫与妻子

              关联可以是双向的,也可以是单向的。双向的关联可以有两个箭头或者没有箭头,单向的关联有一个箭头。

【代码体现】:成员变量

【箭头及指向】:带普通箭头的实心线,指向被拥有者


 常见的基数

基数

含义

0..1

零个或者一个实例

0..*或者*

没有限制,任意

1

有且只能一个实例

1..*

至少有一个实例

 

 

例:以权限中的用户组、用户角色为例,一个用户角色可以属于一个或者多个用户组,一个用户组则可以包含多个用户角色。如果用户组采用下面的方法来获得用户角色的权限

注意:一个关联关系往往是聚合关系或者是合成关系。

如:


上图中,老师与学生是双向关联,老师有多名学生,学生也可能有多名老师。但学生与某课程间的关系为单向关联,一名学生可能要上多门课程,课程是个抽象的东西他不拥有学生。


自身关联:



4.4. 聚合(Aggregation

聚合是关联的一种形式,代表两个类之间的整体/局部关系。聚合暗示着整体在概念上处于比局部更高的一个级别,而关联暗示两个类在概念上位于相同的级别。

Java中,聚合也是使用实例变量来实现的。

关联和聚合的区别纯粹是概念上的,在Java语法上分辨不出来的。聚合还暗示着实例图中不存在回路。换言之,只能是一种单向关系。

 

【聚合关系】:是整体与部分的关系.如车和轮胎是整体和部分的关系.

          聚合关系是关联关系的一种,是强的关联关系;关联和聚合在语法上无法区分,必须考察具体的逻辑关系。

【代码体现】:成员变量

【箭头及指向】:带空心菱形的实心线,菱形指向整体



4.5. 组合(Composition)(也叫合成)

合成是聚合的一种特殊形式,暗示局部整体内部的生存期职责。合成关系是不能共享的。所以,虽然局部不一定要随整体的销毁而被销毁,但整体要么负责保持局部的存活状态,要么负责将其销毁。局部不可与其他整体共享。但是,整体可将所有权转交给另一个对象,后者随即将承担生存期职责。

【组合关系】:是整体与部分的关系.,如:没有公司就不存在部门 组合关系是关联关系的一种,是比聚合关系还要强的关系,它要求普通的聚合关系中代表整体的对象负责代表部分的对象的生命周期

【代码体现】:成员变量

【箭头及指向】:带实心菱形的实线,菱形指向整体



4.6. 依赖(Dependency)

依赖也是类与类之间的连接,并且依赖总是单向的。实体之间一个使用关 系暗示一个实体的规范发生变化后,可能影响依赖于它的其他实例。更具体地说,它可转换为对不在实例作用域内的一个类或对象的任何类型的引用。其中包括一个 局部变量,对通过方法调用而获得的一个对象的引用(如下例所示),或者对一个类的静态方法的引用(同时不存在那个类的一个实例)。也可利用依赖来表示包和包之间的关系。由于包中含有类,所以你可根据那些包中的各个类之间的关系,表示出包和包的关系。

【依赖关系】:是一种使用的关系,所以要尽量不使用双向的互相依赖

【代码表现】:局部变量、方法的参数或者对静态方法的调用

【箭头及指向】:带箭头的虚线,指向被使用者




各种关系的强弱顺序:

泛化实现组合聚合关联依赖

 

0 0