概要

在"UML系列02之 UML类图(一) "中介绍了类图的基本构成--类的UML表示方法。本文是接着前文,继续对"UML的类图"中几种关系进行介绍。介绍的主要内容包括:
UML类图的几种关系
1. 泛化
2. 实现
3. 关联
3.1 自关联
3.2 单向关联
3.3 双向关联
3.4 多重性关联
3.5 聚合
3.6 组合
4. 依赖

转载请注明出处:http://www.cnblogs.com/skywang12345/p/3523209.html

UML类图的几种关系

在UML类图中,关系可以分为4种: 泛化, 实现, 关联依赖
1. 泛化 -- 表示"类与类之间的继承关系"。
2. 实现 -- 表示"类与接口之间的实现"。
3. 关联 -- 表示"类与类之间的拥有关系"。即,一个类是另一个类的成员。关联又包括:自关联, 单向关联, 双向关联, 多重性关联, 组合, 聚合。
4. 依赖 -- 表示"类与类之间的使用关系"。即,一个类是另一类的局部变量, 形式参数, 或者调用了静态方法/成员等。

这几种关系表示的"类与类之间关系的强弱顺序"是:泛化 = 实现 > 关联 > 依赖

1. 泛化(Generalization)

[关系说明]: 泛化是一种继承关系。它指定了子类如何特化父类的所有特征和行为。例如:老虎是动物的一种。
[代码说明]: 父类与子类。
[UML图形]: 带三角箭头的实线,箭头指向父类。
[示例]:  Fruit是"水果";Apple是"苹果",它继承了Fruit,是水果中的一种。
UML示例图

对应的Java代码

public class Fruit {
protected int price;
public int getPrice() {
return price;
}
public void setPrice() {
return price;
}
}
public class Apple extends Fruit {
}

2. 实现(Realization)

[关系说明]: 实现是一种类与接口的关系,表示类是接口所有特征和行为的实现。
[代码说明]: 实现类与接口。
[UML图形]: 带三角箭头的虚线,箭头指向接口。
[示例]: Runnable接口表示"一个任务",TimeTask是"计时任务",它实现了Runnable接口。
UML示例图

对应的Java代码

public interface Runnable {
abstract public void run();
}
public class TimeTask implements Runnable{
@Override
public void run() {
}
}

3. 关联(Association)

关联表示"类与类之间的拥有关系"。即,一个类是另一个类的成员。关联包括:自关联, 单向关联,双向关联, 多重性关联, 聚合, 组合

3.1 自关联

[关系说明]: 一个类包含自己。例如,单向链表中的节点,包含下一个节点的信息。
[代码说明]: 成员变量
[UML图形]: 带普通箭头的实心线,指向被自己。
[示例]: Node是单向链表中的节点,它包含下一个节点的指针。
UML示例图

对应的Java代码

public class Node {
private Node node;
}

3.2 单向关联

[关系说明]: "类A"中有"类B"成员变量,"类B"中没有"类A"成员变量。
[代码说明]: 成员变量
[UML图形]: 带普通单向箭头的实心线,指向被拥有者。
[示例]: Person表示"人",IdCard表示"身份证信息",身份证包括id和"身份证编号snum"。一个人拥有唯一的身份证信息。
UML示例图

对应的Java代码

public class Person {
private IdCard idcard;
}
public class IdCard {
private int id;
private String snum;
}

3.3 双向关联

[关系说明]: "类A"中有"类B"成员变量,"类B"也有"类A"成员变量。
[代码说明]: 成员变量
[UML图形]: 带普通双向箭头的实心线 或者 不带箭头的实心线。
[示例]:  Cusomer表示"客户",Product表示"产品"。客户可以购买产品,产品也属于客户。
UML示例图

对应的Java代码

public class Customer {
private Address address;
}
public class Address {
private Customer customer;
}

3.4 多重性关联

[关系说明]: 多重性关联是两个类之间在关联对象上的数量关系。有如下几种:
┏━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
┃ 表示方法     ┃ 多重性关联说明                                                                                                    ┃
┣━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┫
┃ 1..1             │ 表示另一个类的一个对象只与该类的一个对象有关系                                            ┃
┠────────┼──────────────────────────────────────────────────┨
┃ 0..*              │ 表示另一个类的一个对象与该类的零个或多个对象有关系                                    ┃
┠────────┼──────────────────────────────────────────────────┨
┃ 1..*              │ 表示另一个类的一个对象与该类的一个或多个对象有关系                                    ┃
┠────────┼──────────────────────────────────────────────────┨
┃ 0..1             │ 表示另一个类的一个对象没有或只与该类的一个对象有关系                                 ┃
┠────────┼──────────────────────────────────────────────────┨
┃ m..n            │ 表示另一个类的一个对象与该类最少m,最多n个对象有关系(m≤n)                      ┃
┗━━━━━━━━━━┷━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛

[代码说明]: 成员变量
[UML图形]: 实心线表示,单向关联则包括箭头,双向关联包括"两个箭头"或"不包含任何箭头"。
[示例]:  Album是"相册",Picture是"图片",相册有N(N>=0)张图片。
UML示例图

对应的Java代码

public class Album {
private Picture[] pics;
}
public class Picture {
}

3.5 聚合

[关系说明]: 聚合是整体与部分的关系。聚合关系是类与类之间关系比较密切的关联关系;要区分聚合和其它的关联关系,必须考察具体的逻辑关系。在聚合关系中,成员对象是整体对象的一部分,但是成员对象可以脱离整体对象独立存在。如车和轮胎是整体和部分的关系。
[代码说明]: 成员变量
[UML图形]: 带空心菱形的实心线,菱形指向整体
[示例]:  Car表示"汽车",Tire表示"轮胎"。"轮胎"本身是个独立个体。
UML示例图

对应的Java代码

public class Company {
private Nose nose; private class Nose {
}
}

3.6 组合

[关系说明]: 组合是整体与部分的关系。组合关系是比聚合关系还要强的关联关系。但是在组合关系中整体对象可以控制成员对象的生命周期,一旦整体对象不存在,成员对象也将不存在,成员对象与整体对象之间具有同生共死的关系。例如,身体和鼻子,身体包括鼻子,鼻子不能脱离身体而独立存在。
[代码说明]: 成员变量
[UML图形]: 带实心菱形的实线,菱形指向整体
[示例]: Body表示"身体",Nose表示"鼻子"。身体包含鼻子,鼻子离不开身体。
UML示例图

对应的Java代码

public class Company {
private Nose nose; private class Nose {
}
}

4. 依赖(Dependency)

[关系说明]: 依赖是一种使用的关系。在需要表示一个事物使用另一个事物时使用依赖关系,尽量不使用双向的互相依赖。
[代码说明]: 局部变量、方法的参数或者对静态方法的调用
[UML图形]: 带箭头的虚线,指向被使用者
[示例]:  人过河。人是"Person"类,它包括过河函数acrossRiver(),acrossRiver()的参数是过河工具,返回值是过河时间。此处的过河工具是船,船对应的类是Boat。
UML示例图

对应的Java代码

public class Person {
public int acrossRiver(Boat boat);
}
public class Boat {
}

更多内容

1. UML系列01之 UML和绘图工具Visio介绍

2. UML系列02之 UML类图(一)

UML系列03之 UML类图(二)的更多相关文章

  1. uml系列(四)——类图

    类图是uml的核心.学习类图,总共须要掌握三个部分:类:类之间的关系:类图怎么画. 首先,类.老规矩,先来张图. 类是什么:举个简单的样例:猫.狗.猪三个都是动物.这里面的"动物" ...

  2. UML系列03之UML时序图

    时序图介绍 时序图(Sequence Diagram),亦称为序列图或循序图,是一种UML行为图.时序图是用来描述系统内部是如何交互运作的,它通过描述对象之间发送消息的时间顺序显示多个对象之间的动态协 ...

  3. UML系列04之 UML时序图

    概要 本章对UML的时序图进行介绍,主要内容包括:时序图介绍时序图组成 转载请注明出处:http://www.cnblogs.com/skywang12345/p/3523355.html 时序图介绍 ...

  4. UML系列02之 UML类图(一)

    概要 本章介绍类图中类的UML表示方法.内容包括:类图介绍实体类的UML表示抽象类和接口的UML表示 转载请注明出处:http://www.cnblogs.com/skywang12345/p/352 ...

  5. UML从需求到实现---类图(2)

    上节写到了UML中的类图:UML从需求到实现---类图(1) 写完以后总觉得写的不够详细.里面很多细节没有说到.一篇文章就把强大的面向对象的类说完.当然是不可能的.这次我再补充一些关于UML中类图和类 ...

  6. UML系列02之UML类图(1)

    类图介绍 类图,是UML(统一建模语言)中用于描述"类"以及"类与类"之间关系的示意图.它形象的描述出了系统的结构,帮助人们理解系统.类图是在"所有的 ...

  7. UML系列02之 UML类图(2)

    UML类图的几种关系 在UML类图中,关系可以分为4种: 泛化, 实现, 关联 和 依赖.1. 泛化 -- 表示"类与类之间的继承关系".2. 实现 -- 表示"类与接口 ...

  8. UML类图二

    在软件系统中,类并不是孤立存在的,类与类之间存在各种关系,对于不同类型的关系,UML提供了不同的表示方式.       1. 关联关系 关联(Association)关系是类与类之间最常用的一种关系, ...

  9. UML从需求到实现---类图(1)

    上次写到了UML的包图,用例等:接上:UML从需求到实现---包图 按照UML中图的出现顺序.当做完包图以后.我们下一步要做的当然是类图,类图也是UML中的三大核心图之一. 看到很多文章在描述类图的时 ...

随机推荐

  1. 爬虫神器xpath的用法(四)

    使用xpath多线程爬取百度贴吧内容 #encoing=utf-8 from lxml import etree from multiprocessing.dummy import Pool as T ...

  2. python查询

    #coding=utf-8 import MySQLdb conn = MySQLdb.Connect(host = '127.0.0.1',port=3306,user='root',passwd= ...

  3. js 排列 组合 的一个简单例子

    最近工作项目需要用到js排列组合,于是就写了一个简单的demo. 前几天在网上找到一个写全排列A(n,n)的code感觉还可以,于是贴出来了, 排列的实现方式: 全排列主要用到的是递归和数组的插入 比 ...

  4. LeetCode:Minimum Path Sum(网格最大路径和)

    题目链接 Given a m x n grid filled with non-negative numbers, find a path from top left to bottom right ...

  5. redis的基本使用

    Redis的应用 http://www.redis.cn/commands.html http://www.cnblogs.com/ikodota/archive/2012/03/05/php_red ...

  6. Spark RDD解密

    1.  基于数据集的处理: 从物理存储上加载数据,然后操作数据,然后写入数据到物理设备; 基于数据集的操作不适应的场景: 不适合于大量的迭代: 不适合交互式查询:每次查询都需要对磁盘进行交互. 基于数 ...

  7. jquery.jqzoom.js图片放大镜

    jqzoom插件实现图片放大镜效果 1. jquery.jqzoom.js //************************************************************ ...

  8. mac OSX 上 brew install hive

    本文介绍brew install hive并修改默认的metastore存储方案,改Derby数据库为mysql的方法以及可能遇到的问题的解决方案. 1. 通过homebrew安装hive 1 bre ...

  9. Android开发(三十二)——延时

    模拟延时 private class GetDataTask extends AsyncTask<Void, Void, String[]> { @Override protected S ...

  10. ecshop商品详细描述调用商品相册代码

    该修改方法让用户体验更好,特别是ecshop建站的用户产品描叙文字不多的朋友,直接让相册图显示在产品描述里.免去除在后台添加了 <div style="text-align:cente ...