什么是UML类图?

类图显示了一组类、接口、协作以及他们之间的关系。在UML中问题域最终要被逐步转化,通过类来建模,通过编程语言构建这些类从而实现系统。类加上他们之间的关系就构成了类图,类图中还可以包含接口、包等元素,也可以包括对象、链等实例。

类与类之间的关系

类与类之间的关系可以根据关系的强度依次分为以下五种:

依赖关系(Dependency)---关联关系(Association)---聚合(Aggregation)---组合(Composition)---泛化(Generalization)

1. 依赖关系

依赖关系是五种关系中耦合最小的一种关系。使用虚线加箭头表示,如下图所示:

代码:

  1. class Person
  2. {
  3. public void Call()
  4. {
  5. Phone phone = new Phone();
  6. }
  7. }
  1. class Phone
  2. {
  3. }

解释:Person 和 Phone之间是没有关系的,但是由于偶尔的需要,Person需要使用Phone,在Person类中的具体方法中需要实例化Phone,这时Person就依赖于Phone.持有Phone类的是Person类的一个方法,而不是Person类,这点是最重要的。

依赖表现为:局部变量,方法中的参数和对静态方法的调用。

2. 关联关系

关联关系是实线加箭头表示。表示类之间的关系比依赖要强,如下图所示:
代码:
  1. class Person
  2. {
  3. public:
  4. //头部是人的一个属性
  5. Head head;
  6. Person()
  7. {
  8. // TODO Auto-generated constructor stub
  9. }
  10. }
  1. class Head
  2. {
  3. public:
  4. Head()
  5. {
  6. // TODO Auto-generated constructor stub
  7. }
  8. }
解释:Head是作为Person类的一个内部属性来使用,一旦实例化了Person类,同时也实例化了一个Head实例,所以他们的依赖性更强。与关联最大的区别是:依赖时是在类的内部具体方法中使用到另外一个类,而关联则是作为内部属性来用,依赖关系仅当具体方法被调用时才会实例化,比如刚才的Person只有打电话时才调用Phone实例化,而关联是在new一个Person时就同时实例化了一个Head类来作为Person的内部属性.

3. 聚合关系

聚合关系通过一个空心的菱形加箭头表示,如下图所示:
代码:
  1. class PersonGroup
  2. {
  3. public:
  4. Person person;
  5. //将person作为构造方法的参数传进去
  6. PersonGroup(Person person)
  7. {
  8. // TODO Auto-generated constructor stub
  9. this.person = person;
  10. }
  11. }
  1. class Person
  2. {
  3. public:
  4. Person()
  5. {
  6. // TODO Auto-generated constructor stub
  7. }
  8. }
解释:Person类是PersonGroup构造方法的参数,因此可以Person类可以完全脱离PersonGroup类而存在,不会因为PersonGroup实例的消亡而消亡,就像现实生活中,人不会因为脱离人群就挂了...

4. 组合关系

组合关系通过一个实心的菱形加箭头表示,如下图所示:
代码:
  1. class Person
  2. {
  3. public:
  4. Foot foot;
  5. Person()
  6. {
  7. // TODO Auto-generated constructor stub
  8. //在构造方法中实例化
  9. foot = new Foot();
  10. }
  11. }
  1. class Foot
  2. {
  3. public:
  4. Foot()
  5. {
  6. // TODO Auto-generated constructor stub
  7. }
  8. }
解释:
Foot类是在Person类的构造方法中才被具体实例化,一旦Person实例生成,则Foot实例也生成,当Person实例消亡,其Foot实例也消亡,就像现实生活中,生成一个人,并定会伴随着脚的生成,但是如果那个人挂了,它的脚自然而然也就没了。

5. 泛化关系

泛化关系通常包含类与类之间的继承关系和类与接口实现关系,如下图所示:
继承:
接口:
 解释:

泛化(generalization)关系是一个类(称为子类、子接口)继承另外的一个类(称为父类、父接口)的功能,并可以增加它自己的新功能的能力,继承是类与类或者接口与接口之间最常见的关系

 

UML类图表达的更多相关文章

  1. UML类图关系全面剖析

    UML的类图关系分为: 关联.聚合/组合.依赖.泛化(继承).而其中关联又分为双向关联.单向关联.自身关联:下面就让我们一起来看看这些关系究竟是什么,以及它们的区别在哪里. 1.关联 双向关联:C1- ...

  2. UML类图的6大关系

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

  3. UML类图关系(泛化 、继承、实现、依赖、关联、聚合、组合)

    UML类图关系(泛化 .继承.实现.依赖.关联.聚合.组合) 继承.实现.依赖.关联.聚合.组合的联系与区别 分别介绍这几种关系: 继承 指的是一个类(称为子类.子接口)继承另外的一个类(称为父类.父 ...

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

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

  5. [转载]UML类图总结

    前言 类图和序列图是UML中最常用的两种Diagram.我将做详细的总结.在许多书中,或者网站中,在介绍一个系统的子系统的设计时,很多时候,都是给出简单的类图来简述构成子系统的类之间的关系.这足以说明 ...

  6. UML类图归纳

    作为一个程序员,掌握UML类图是开发和阅读程序的基础. 转载请注明地址http://www.cnblogs.com/zrtqsk/p/3739288.html,谢谢! 一.基本介绍 UML是一种标准的 ...

  7. 看懂UML类图与时序图

    看懂UML类图和时序图 这里不会将UML的各种元素都提到,我只想讲讲类图中各个类之间的关系: 能看懂类图中各个类之间的线条.箭头代表什么意思后,也就足够应对 日常的工作和交流: 同时,我们应该能将类图 ...

  8. 设计模式——1.概述&UML类图和时序图

    声明:本博客设计模式相关文章均整理和修改自网络,原文地址:图说设计模式 学习设计模式的3个层次—— 1.熟悉所有设计模式: 2.能够用代码实现: 3.运用到工作的项目中. 设计模式指导软件开发,学习设 ...

  9. UML类图几种关系的总结(转)

    原文:http://gjhappyyy.iteye.com/blog/1422515 在UML类图中,常见的有以下几种关系: 泛化(Generalization),  实现(Realization), ...

随机推荐

  1. display详解

    css中的display属性 display属性是我们在前端开发中常常使用的一个属性,其中,最常见的有: none block inline inline-block inherit 下面,我将按照顺 ...

  2. Tomcat7 1000并发量配置以及配置优化

    首先,修改tomcat/conf/server.xml配置文件.     其次,修改tomcat/bin/catalina.bat配置文件为以下.     主要修改了maxThreads.accept ...

  3. python机器学习-sklearn挖掘乳腺癌细胞(四)

    python机器学习-sklearn挖掘乳腺癌细胞( 博主亲自录制) 网易云观看地址 https://study.163.com/course/introduction.htm?courseId=10 ...

  4. JAVA核心技术I---JAVA基础知识(Jar文件导入导出)

    一:Jar初识 (一)定义 同c++中的DLL一样 jar文件,一种扩展名为jar的文件,是Java所特有的一种文件格式,用于可执行程序文件的传播. jar文件实际上是一组class文件的压缩包 (二 ...

  5. angular,vue,react的父子通信

    父子通信 父传子 vue: 父组件:<child :msg="datamsg" ></child> //子组件的msg属性上加数据,datamsg是数据 子 ...

  6. [JVM-2]常用JVM命令参数

    (1)-Xms20M 表示设置JVM堆内存的最小值为20M,必须以M为单位 (2)-Xmx20M 表示设置JVM堆内存的最大值为20M,必须以M为单位.将-Xmx和-Xms设置为一样可以避免JVM内存 ...

  7. 开源的,跨平台的.NET机器学习框架ML.NET

    微软在Build 2018大会上推出的一款面向.NET开发人员的开源,跨平台机器学习框架ML.NET. ML.NET将允许.NET开发人员开发他们自己的模型,并将自定义ML集成到他们的应用程序中,而无 ...

  8. Python复习笔记(七)线程和进程

    1. 多任务 并行:真的多任务 并发:假的多任务 2. 多任务-线程 Python的 Thread模块是比较底层的模块,Python的 Threading模块 是对Thread做了一些包装,可以更加方 ...

  9. Openresty 学习笔记(三)扩展库之neturl

    github地址:https://github.com/golgote/neturl 最近在搞一个视频加密播放,中间使用要用lua 匹配一个域名,判断该域名是否正确 PS:使用PHP很好做,lua 的 ...

  10. 再次回归 Spark-- 转

    原文地址 combineByKey 三个参数 val scores = sc.parallelize(Array(("jake",80.0),("jake",9 ...