原创文章,同步发自作者个人博客http://www.jasongj.com/uml/class_diagram/

UML类图

UML类图介绍

在UML 2.*的13种图形中,类图是使用频率最高的UML图之一。类图用于描述系统中所包含的类以及它们之间的相互关系,帮助开发人员理解系统,它是系统分析和设计阶段的重要产物,也是系统编码和测试的重要模型依据。

类的UML图示

在UML类图中,类使用包含类名、属性和方法且带有分隔线的长方形来表示。如一个Employee类,它包含private属性age,protected属性name,public属性email,package属性gender,public方法work()。其UML类图表示如下图所示。

属性及方法表示形式

UML规定类图中属性的表示方式为

可见性 名称 : 类型 [=缺省值]

方法表示形式为

可见性 方法名 [参数名 : 参数类型] : 返回值类型

方法的多个参数间用逗号隔开,无返回值时,其类型为void

属性及方法可见性

  • public+表示
  • private-表示
  • protected#表示
  • package~表示

接口的UML图示

接口的表示形式与类类似,区别在于接口名须以尖括号包裹,同时接口无属性框,方法可见性只可能为public,这是由接口本身的特性决定的。

类间关系

依赖关系

依赖关系说明

依赖关系是一种偶然的、较弱的使用关系,特定事物的改变可能影响到使用该事情的其它事物,在需要表示一个事物使用另一个事物时使用依赖关系。

依赖关系UML表示

UML中使用带箭头的虚线表示类间的依赖(Dependency)关系,箭头由依赖类指向被依赖类。下图表示Dirver类依赖于Car类

依赖关系的表现形式

  • B类的实例作为A类方法的参数
  • B类的实例作为A类方法的局部变量
  • A类调用B类的静态方法

关联关系

关联(Association)关系是一种结构化关系,用于表示一类对象与另一类对象之间的联系。在Java中实现关联关系时,通常将一个类的对象作为另一个类的成员变量。

在UML类图中,用实线连接有关联关系的类,并可在关联线上标注角色名或关系名。

在UML中,关联关系包含如下四种形式

双向关联

默认情况下,关联是双向的。例如数据库管理员(DBA)管理数据库(DB),同时每个数据库都被某位管理员管理。因此,DBA和DB之间具有双向关联关系,如下图所示。

从上图可看出,双向关联的类的实例,互相持有对方的实例,并且可在关联线上注明二者的关系,必须同时注明两种关系(如上图中的manage和managed by)。

单向关联

单向关联用带箭头的实线表示,同时一方持有另一方的实例,并且由于是单向关联,如果在关联线上注明关系,则只可注明单向的关系,如下图所示。

自关联

自关联是指属性类型为该类本身。例如在链表中,每个节点持有下一个节点的实例,如下图所示。

多重性关联

多重性(Multiplicity)关联关系,表示两个对象在数量上的对应关系。在UML类图中,对象间的多重性可在关联线上用一个数字或数字范围表示。常见的多重性表示方式如下表所示。

| 表示方式 | 多重性说明 |

|---------------------------|

| 1..1 | 另一个类的一个对象只与该类的一个对象有关系 |

| 0..* | 另一个类的一个对象只与该类的零个或多个对象有关系 |

| 1..* | 另一个类的一个对象与该类的一个或多个对象有关系 |

| 0..1 | 另一个类的一个对象与该类的对象没关系或者只与该类的一个对象有关系 |

| m..n | 另一个类的一个对象与该类最少m,最多n个对象有关系 |

例如一个网页可能没有可点击按钮,也可能有多个按钮,但是该页面中的一个按钮只属于该页面,其关联多重性如下图所示。

聚合关系

聚合(Aggregation)关系表示整体与部分的关系。在聚合关系中,部分对象是整体对象的一部分,但是部分对象可以脱离整体对象独立存在,也即整体对象并不控制部分对象的生命周期。从代码实现上来讲,部分对象不由整体对象创建,一般通过整体类的带参构造方法或者Setter方法或其它业务方法传入到整体对象,并且有整体对象以外的对象持有部分对象的引用。

在UML类图中,聚合关系由带箭头的实线表示,并且实线的起点处以空心菱形表示,如下图所示。

Java设计模式(六)代理模式 vs. 装饰模式》一文中所述装饰模式中,装饰类的对象与被装饰类的对象即为聚合关系。

组合关系

组合(Composition)关系也表示类之间整体和部分的关系,但是在组合关系中整体对象控制成员对象的生命周期,一旦整体对象不存在了,成员对象也即随之消亡。

从代码实现上看,一般在整体类的构造方法中直接实例化成员类,并且除整体类对象外,其它类的对象无法获取该对象的引用。

在UML类图中,组合关系的表示方式与聚合关系类似,区别在于实线以实心菱形表示。

Java设计模式(六)代理模式 vs. 装饰模式》一文中所述代理模式中,代理类的对象与被代理类的对象即为组合关系。

泛化关系/继承关系

泛化(Generalization)关系,用于描述父类与子类之间的关系,父类又称作超类或者其类,子类又称为派生类。注意,父类和子类都可为抽象类或者具体类。

在Java中,我们使用面向对象的三大特性之一——继承来实现泛化关系,具体来说会用到extends关键字。

在UML类图中,泛化关系用带空心三角形(指向父类)的实线表示。并且子类中不需要标明其从父类继承下来的属性和方法,只须注明其新增的属性和方法即可。

实现关系

很多面向对象编程语言(如Java)中都引入了接口的概念。接口与接口之间可以有类与类之间类似的继承和依赖关系。同时接口与类之间还存在一种实现(Realization)关系,在这种关系中,类实现了接口中声明的方法。

在UML类图中,类与接口间的实现关系用带空心三角形的虚线表示。同时类中也需要列出接口中所声明的所有方法(这一点与类间的继承关系表示不同)。

UML类图十万个为什么

聚合关系与组合关系都表示整体与部分的关系,有何区别?

聚合关系中,部分对象的生命周期独立于整体对象的生命周期,或者整体对象消亡后部分对象仍然可以独立存在,同时在代码中一般通过整体类的带参构造方法或Setter方法将部分类对象传入整体类的对象,UML中表示聚合关系的实线以空心菱形开始。

组合关系中,部分类对象的生命周期由整体对象控制,一旦整体对象消亡,部分类的对象随即消亡。代码中一般在整体类的构造方法内创建部分类的对象,UML中表示组合关系的实线以实心菱形开始。

同时在组合关系中,部分类的对象只属于某一个确定的整体类对象;而在聚合关系中,部分类对象可以属于一个或多个整体类对象。

如同《Java设计模式(六)代理模式 vs. 装饰模式》一文中所述代理模式中,代理类的对象与被代理类的对象即为组合关系。装饰模式中,装饰类的对象与被装饰类的对象即为聚合关系。

聚合关系、组合关系与关联关系有何区别和联系?

聚合关系、组合关系和关联关系实质上是对象间的关系(继承和实现是类与类和类与接口间的关系)。从语意上讲,关联关系中两种对象间一般是平等的,而聚合和组合则代表整体和部分间的关系。而聚合与组合的区别主要体现在实现上和生命周期的管理上。

依赖关系与关联关系的区别是?

依赖关系是较弱的关系,一般表现为在局部变量中使用被依赖类的对象、以被依赖类的对象作为方法参数以及使用被依赖类的静态方法。而关联关系是相对较强的关系,一般表现为一个类包含一个类型为另外一个类的属性。

UML(一) 类图及类间关系的更多相关文章

  1. UML类图与类间六种关系表示

    UML类图与类间六种关系表示 1.类与类图 类封装了数据和行为,是面向对象的重要组成部分,它是具有相同属性,操作,关系的对象集合的总称. 类图是使用频率最高的UML图之一. 类图用于描述系统中所包含的 ...

  2. 设计模式之UML类图以及类间关系

    类图是描述系统中的类,以及各个类之间的关系的静态视图.能够让我们在正确编写代码以前对系统有一个全面的认识.类图是一种模型类型,确切的说,是一种静态模型类型.类图表示类.接口和它们之间的协作关系. 以下 ...

  3. 【转】UML类图与类的关系详解

    UML类图与类的关系详解   2011-04-21 来源:网络   在画类图的时候,理清类和类之间的关系是重点.类的关系有泛化(Generalization).实现(Realization).依赖(D ...

  4. UML类图与类的关系详解

    摘自:http://www.uml.org.cn/oobject/201104212.asp UML类图与类的关系详解 2011-04-21 来源:网络 在画类图的时候,理清类和类之间的关系是重点.类 ...

  5. UML类图的6大关系

    <小酌重构系列>已经完成了大约1/3了,在这些文章中,我使用了一些简单的类图来描述重构策略.在之后的文章中,我可能会借助稍微复杂一些的UML类图来介绍.但是在此之前,我觉得有必要先介绍一下 ...

  6. [UML]UML系列——类图class的泛化关系

    系列文章       [UML]UML系列——用例图Use Case       [UML]UML系列——用例图中的各种关系(include.extend)       [UML]UML系列——类图C ...

  7. [UML]UML系列——类图class的实现关系Realization

    系列文章 [UML]UML系列——用例图Use Case       [UML]UML系列——用例图中的各种关系(include.extend)       [UML]UML系列——类图Class   ...

  8. C# UML类图及类之间的几种关系

    今天晚上看了大话设计模式中的UML类图这一节感觉受益匪浅,好多年不能理解的类之间的关系理解了. 一.UML类图的表示方法 1.类的表示方法 A类用一个矩形框分三层表示,第一层是类名,斜体类名表示抽象类 ...

  9. UML类图6种主要关系区别和联系

    UML类图关系图示,因为长得都很类似,所以大家总会混淆,本文主要目的就是分析一下6种主要的关系,找到联系与区别,便于记忆. 6种主要的关系如图1所示.继承与实现.组合与聚合.关联与依赖可分别划分为一组 ...

随机推荐

  1. 带转义符的json解释

    1.json数组:jsonData.取json数组中message的appid的值.例子: var jsonData = { "code":"200", &qu ...

  2. 使用expect脚本语言写一键发布服务(代码发布、所有服务重启)

    互联网服务有很多台服务,但是在上线的时候需要将这些服务版本都更新与个个都重启,下面的脚本语言,就是一键发布服务~ 1.在/home/weihu/deploy/ 目录下建下publish .publis ...

  3. 构造函数,const char*与c_str

    /******************************************************************************* * 版权所有: * 模 块 名: * ...

  4. ubuntu的一些操作

    1.修改ubuntu的grub启动选择菜单 需要修改到文件为 /boot/grub/grub.cfg 命令: sudo gedit /boot/grub/grub.cfg 修改默认启动项:set de ...

  5. linux安装jdk(以centos安装jdk1.7为例)

    1准备工作: 1 虚拟机一台vmware12,安装64位centos 2 oracle官网下载jdk1.7-linux-x64.rpm 3 winscp将jdk传送到linux上面 2开始安装: 1 ...

  6. 使用命令行工具运行Xcode 7 UI Tests

    原文:Run Xcode 7 UI Tests from the command line 苹果在Xcode 7中引入了一项新技术UI Tests,允许开发者使用Swift或Objective C代码 ...

  7. Jquery DIV滚动至浏览器顶部后固定不动代码

    $(function(){ //获取要定位元素距离浏览器顶部的距离 var navH = $(".win").offset().top; //滚动条事件 $(window).scr ...

  8. spring aop 声明式事务管理

    一.声明式事务管理的概括 声明式事务(declarative transaction management)是Spring提供的对程序事务管理的方式之一. Spring的声明式事务顾名思义就是采用声明 ...

  9. Spark相关错误汇总

    前面介绍了Spark开发环境的搭建,下面将在实际开发过程中遇到的一些问题汇总一下: 1.Exception in thread "main" com.typesafe.config ...

  10. jquery ajax详解

    详细参数列表url:发送请求的连接地址type:请求方式 get:获取 post:发送 put和deletetimeout:设置请求超时时间async:默认true为异步请求,false同步请求锁住浏 ...