一、类的属性的表示方式

在UML类图中,类使用包含类名、属性(field) 和方法(method) 且带有分割线的矩形来表示,比如下图表示一个A类,它包含c、d两个属性,以及methodA方法。

那么属性/方法名称前加的加号和减号是什么意思呢?它们表示了这个属性或方法的可见性,UML类图中表示可见性的符号有三种:

· + :表示public

· - :表示private

· #:表示protected(friendly也归入这类)
属性的完整表示方式如下:
可见性 名称 :类型 [ = 缺省值]

方法的完整表示方式如下:
可见性 名称(参数列表) [ : 返回类型]

属性与方法中括号中的内容是可选的。

一、简介
在UML类图中,类之间的关系可以分成:关联(association)、聚合(aggregation)、组合(composition)、依赖(dependency)、泛化(generalization)/继承(inheritance)和实现(realization)。这六种关系如下图所描绘:

上面的关系可以解读如下:
(关联)Association:A类有B类有逻辑上的连接
(聚合)Aggregation : A类有一个B类
(组合)Composition : A类拥有一个B类
(依赖)Dependency : A类使用了B类
(继承)Inheritance : B类是一个A类 (或者B类扩展A类)
(实现)Realization : B类实现了接口A
本篇文章主要是展示在Java中如何表示这些关系 ,以便我们可以更好地理解这些关系并且知道如何以及何时使用每一种关系。

二、关联(association)
关联描述两个类之间行为的一般二元关系。例如,一个学生选修一门特定的课程是学生类Student和课程类Course之间的一个关联,而一个教师教授一门课程是师资类Faculty和课程类Course之间的一个关联。Java代码中,关联可以用属性和方法来实现。

public class Student {private Course[] courses;public void addCourse(Course s) {. . . . . .} }public class Course {private Strudent[] students;private Faculty faculty;public void addStudent(Student s) {. . . . . .}public void setFaculty(Faculty faculty) {this.faculty = faculty;} }public class Faculty {private Course[] courses;public void addCourse(Course s) {. . . . . .}  }

三、聚合(Aggregation)
聚合是一种特殊的关联(Association)形式,表示两个对象之间的所属(has-a)关系。所有者对象称为聚合对象,它的类称为聚合类;从属对象称为被聚合对象,它的类称为被聚合类。例如,一个公司有很多员工就是公司类Company和员工类Employee之间的一种聚合关系。被聚合对象和聚合对象有着各自的生命周期,即如果公司倒闭并不影响员工的存在。


public class Company {private List<Employee> employees;
}public class Employee {private String name;
}

四、组合(Composition)
聚合是一种较弱形式的对象包含(一个对象包含另一个对象)关系。较强形式是组合(Composition). 在组合关系中包含对象负责被包含对象的创建以及生命周期,即当包含对象被销毁时被包含对象也会不复存在。例如一辆汽车拥有一个引擎是汽车类Car与引擎类Engine的组合关系。下面是组合的一些例子。

   (1)通过成员变量初始化
public class Car {private final Engine engine = new Engine();
}class Engine {private String type;
}
  (2)通过构造函数初始化
public class Car {private final Engine engine;  public Car(){engine  = new Engine();}
}public class Engine {private String type;
}
  (3)通过延迟初始化
public class Car {   private final Engine engine;  public Engine getEngine() {if (null == engine) {engine = new Engine();}return engine;}
}public class Engine {private String type;
}

五、依赖(Dependency)
依赖(Dependency)描述的是一个类的引用用作另一个类的方法的参数。例如,可以使用Calendar类中的setTime(Date date)方法设置日历,所以Calendar和Date之间的关系可以用依赖描述。

public abstract class Calendar implements Serializable, Cloneable, Comparable<Calendar> {public final void setTime(Date date) {setTimeInMillis(date.getTime());}. . . . . .
}
   在依赖关系中,类之间是松耦合的。

六、继承(Inheritance)
继承(Inheritance)模拟两个类之间的is-a关系。强是(strong is-a)关系描述两个类之间的直接继承关系。弱是(weak is-a)关系描述一个类具有某个属性。强是关系可以用类的继承表示。例如,Spring的ApplicationEvent是一个EventObject,ApplicationEvent和EventObject间就是一种强是关系,可以用继承描述。

public abstract class ApplicationEvent extends EventObject {. . . . . .
**}

七、实现(Realization)**
实现(Realization)描述的是一个类实现了接口(可以是多个)。上面描述的弱是(weak is-a)关系就可以用接口表示。例如字符串是可以被序列化的,这就可以用实现来描述。

public final class String  implements java.io.Serializable, Comparable<String>, CharSequence {. . . . . .
}

八、参考资料
http://usna86-techbits.blogspot.com/2012/11/uml-class-diagram-relationships.html
http://javarevisited.blogspot.com/2014/02/ifference-between-association-vs-composition-vs-aggregation.html

UML类图中的六大关系:关联(单向、双向、自关联)、聚合、组合、依赖、继承、实现相关推荐

  1. UML类图的6大关系

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

  2. 区分 UML 类图中的几种关系

    区分 UML 类图中的几种关系   2010-12-23 作者:fnw 来源:网络      区分 UML 类图中的几种关系  UML 类图中的 "关联关系(association) &qu ...

  3. 一张图看明白UML类图中的6种关系

    在UML类图中,有6种关系,分别是: (1)泛化(Generalization),简单说就是父类和子类的关系,extends/: (2) 实现(Realization),简单说就是接口和实现的关系,i ...

  4. [转] UML类图的几种关系总结

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

  5. UML类图中符号的含义

    UML类图中符号的含义 类图中的基本符号由虚线.箭头.实线.空心三角形.空心菱形.实心菱形组成,这些符号的组合构成类图的基本符号 实线+箭头 表示关联关系 关联关系分类 自身关联 表示自身拥有一个自身 ...

  6. UML类图中各种箭头和线条的含义和用法(转)

    UML类图中箭头和线条的含义和用法 1.UML中关系 本节向大家学习一下UML箭头.线条代表的意义,UML中关系主要有依赖,聚合,合成,泛化和实现等,下面就让我们来看一下这些关系如何用UML箭头和线条 ...

  7. 通过简单例子 | 快速理清 UML类图中六大关系

    类与类之间的六大关系 泛化 ( Generalization ) -> 表继承关系 实现 ( Realization ) 关联 ( Association ) 聚合 ( Aggregation ...

  8. UML类图中会涉及到的一些概念、关系

    以下是会用到的文章 聚合 组合 依赖 内嵌 关联 弄上自己做的图,自己明白就行呗

  9. UML类图中的各种箭头代表的含义(转自:http://www.cnblogs.com/damsoft/archive/2016/10/24/5993602.html)

    1.UML简介 Unified Modeling Language (UML)又称统一建模语言或标准建模语言. 简单说就是以图形方式表现模型,根据不同模型进行分类,在UML 2.0中有13种图,以下是 ...

最新文章

  1. c# 解析JSON的几种办法(转载)
  2. deepin更新依赖错误_deepin的踩坑问题与解决方案,以及使用分享(持续更新)
  3. java寄存器_汇编学习 1 寄存器的作用 寻址方式 - DraculaW - JavaEye技术网站
  4. ubuntu php上传文件,Ubuntu中增加apache上传文件大小限制(突破Aapache默认2M上传限制)...
  5. 《Ajax基础教程》一书推荐的JS工具备忘
  6. Linux从零开始(二、基础命令)
  7. WinSock三种选择I/O模型
  8. 怎么调整磁盘分区的大小
  9. 税收分类编码2020_增值税开票系统你会吗?2020最新开票(金税盘版)图文教程详细版...
  10. python global用法_【干货】每天更新两个Python 小例子(十九)
  11. was cached in the local repository, resolution will not be reattempted until the update interval of
  12. 人艰不拆,一句话毁掉小清新!
  13. photoshop图片显示为索引,解决办法
  14. 【对比Java学Kotlin】协程-异步流
  15. 在phpstudy中安装并使用ThinkPHP 5
  16. 如何在微信环境中点击链接关注微信公众号
  17. webpack基础知识
  18. 【JavaSE进阶(上)】自学笔记 记得收藏时时回顾
  19. MATLAB-004 excel重命名默认sheet
  20. ADDA: Adversarial Discriminative Domain Adaptation

热门文章

  1. 蓝桥杯 历届真题 耐摔指数【第九届】【省赛】【C组】C++ 动态规划
  2. 深度学习网络层之 Pooling
  3. 如何用python爬取图片数据_“python爬取微博图片教程“用Python爬虫爬取的图片怎么知道图片有没有水印...
  4. 全球及中国类胡萝卜素行业研究及十四五规划分析报告
  5. Windows电脑10实用小技巧
  6. 基于postgresql使用powerdesigner反向工程
  7. java中关于拼音的处理。
  8. 解决服务器硬件冗余的方法有哪些
  9. 网站优化之如何让友链更给力
  10. 云计算应用(视频托管)关键实现技术之---加密篇