文章目录

  • 0. 什么是UML?
  • 1. 依赖关系(Dependence)
    • 1.1 什么是依赖关系?
    • 1.2 上代码
    • 1.3 用类图描述关系
    • 1.4 依赖小结
  • 2. 泛化关系(Generalization)
    • 2.1 什么是泛化关系?
    • 2.2 上代码
    • 2.3 用类图描述关系
    • 2.4 小结
  • 3. 实现关系(Realization)
    • 3.1 什么是实现关系?
    • 3.2 上代码
    • 3.3 用类图描述关系
  • 4. 关联关系(Association)
    • 4.1 什么是关联关系?
    • 4.2 单向一对一
    • 4.3 单向一对一:用类图描述关系
    • 4.3 双向一对一
    • 4.4 双向一对一: 用类图描述关系
  • 5. 聚合关系(Aggregation)
    • 5.1 什么是聚合关系?
    • 5.2 上代码
    • 5.3 类图
  • 6. 组合关系(Composition)
    • 6.1 什么是组合关系?
    • 6.2 上代码
    • 6.3 用类图描述关系
    • 6.4 再举一个例子,加深理解
    • 6.5 上代码
    • 6.6 用类图描述关系
    • 6.7 注意

0. 什么是UML?

UML:统一建模语言,是一种用于软件系统分析和设计的语言工具,它用于帮助软件开发任意进行思考和记录思路的结果。

1. 依赖关系(Dependence)

1.1 什么是依赖关系?

只要是在类中用到了对方,那么他们之间就存在依赖关系。如果没有对方,连编译都过不了。

1.2 上代码

新建四个类

/*** @author LongXi* @create 2021-07-31 19:57*/
public class IDCard {}
/*** @author LongXi* @create 2021-07-31 19:57*/
public class Person {}
/*** @author LongXi* @create 2021-07-31 19:57*/
public class PersonDao {}
/*** @author LongXi* @create 2021-07-31 19:57*/
public class Department {}

主类

/*** @author LongXi* @create 2021-07-31 19:57*/
public class PersonServiceBean {private PersonDao personDao;public void save(Person person){}public IDCard getIDCard (Integer personId){return null;}public void modify(){Department department = new Department();}
}

1.3 用类图描述关系

1.4 依赖小结

在类中用到了对方,具体有下面四种

  1. 类的成员属性(私有变量)
  2. 类的方法的返回类型
  3. 方法接收的参数类型
  4. 方法中使用到

2. 泛化关系(Generalization)

2.1 什么是泛化关系?

泛化关系实际上就是继承关系,他是依赖关系的特例

2.2 上代码

/*** @author LongXi* @create 2021-07-31 20:15*/
public abstract class DaoSupport {public void save (Object entity){}public void delete (Object id){}
}
/*** @author LongXi* @create 2021-07-31 20:17*/
public class PersonServiceBean extends DaoSupport{}

2.3 用类图描述关系

2.4 小结

  1. 泛化关系实际上就是继承关系
  2. 如果A类继承了B类,我们就说A和B存在泛化关系。

3. 实现关系(Realization)

3.1 什么是实现关系?

实现关系实际上就是A类实现了B类,它是依赖关系的特列

3.2 上代码

/*** @author LongXi* @create 2021-07-31 20:23*/
public interface PersonService {public void delete(Integer id);
}
/*** @author LongXi* @create 2021-07-31 20:23*/
public class PersonServiceBean implements PersonService{@Overridepublic void delete(Integer id) {System.out.println("delete");}
}

3.3 用类图描述关系

4. 关联关系(Association)

4.1 什么是关联关系?

关联关系实际上就是类与类之间的联系,它是依赖关系的特例
关联具有导航性:即双向关系或单向关系

4.2 单向一对一

/*** @author LongXi* @create 2021-07-31 20:37*/
public class Person {private IDCard card;
}
/*** @author LongXi* @create 2021-07-31 20:37*/
public class IDCard {}

4.3 单向一对一:用类图描述关系

4.3 双向一对一

/*** @author LongXi* @create 2021-07-31 20:37*/
public class Person {private IDCard card;
}
/*** @author LongXi* @create 2021-07-31 20:37*/
public class IDCard {private Person person;
}

4.4 双向一对一: 用类图描述关系

5. 聚合关系(Aggregation)

5.1 什么是聚合关系?

聚合关系:表示的是整体和部分的关系,整体和部分可以分开。聚合关系是关联关系的特例,所以它具有关联的导航性和多重性。

例如:一台电脑由键盘,显示器,鼠标等组成,组成电脑的各个配件是可以从电脑上分离出来的,使用带空心菱形的实线来表示。

聚合:整体和部分可以分开
组合:整体和部分不可以分开

5.2 上代码

显示器类

/*** @author LongXi* @create 2021-07-31 20:47*/
public class Moniter {}

鼠标类

/*** @author LongXi* @create 2021-07-31 20:47*/
public class Mouse {}

电脑类

/*** @author LongXi* @create 2021-07-31 20:47*/
public class Computer {private Mouse mouse;private Moniter moniter;public void setMouse(Mouse mouse) {this.mouse = mouse;}public void setMoniter(Moniter moniter) {this.moniter = moniter;}
}

5.3 类图


部分聚合整体

6. 组合关系(Composition)

6.1 什么是组合关系?

如果Mouse,Moniter和Computer是不可分离的,则升级为组合关系
组合关系:也是整体和部分的关系,但是整体和部分不可以分开

6.2 上代码

改变一下鼠标,显示器和电脑的关系

/*** @author LongXi* @create 2021-07-31 20:47*/
public class Computer {private Mouse mouse = new Mouse();private Moniter moniter = new Moniter();public void setMouse(Mouse mouse) {this.mouse = mouse;}public void setMoniter(Moniter moniter) {this.moniter = moniter;}
}

6.3 用类图描述关系

6.4 再举一个例子,加深理解

人和身份证的关系,就是聚合关系,人可以没有身份证。
人和头的关系,就是组合关系,人不可以没有头。

6.5 上代码

头部类

/*** @author LongXi* @create 2021-07-31 20:59*/
public class Head {}

身份证类

/*** @author LongXi* @create 2021-07-31 20:37*/
public class IDCard {private Person person;
}

人类

/*** @author LongXi* @create 2021-07-31 20:37*/
public class Person {// 聚合关系private IDCard card;// 组合关系private Head head = new Head();
}

6.6 用类图描述关系

6.7 注意

如果在程序中Person实体中定义了对IDCard进行级联删除 ,即删除Person时连同IDCard一起删除,那么IDCard和Person就是组合

UML类图之六种基本关系详解相关推荐

  1. UML类图的6大关系

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

  2. Java之UML类图的六种关系

    UML类图 UML图概念 UML--Unified modeling language UML(统一建模语言),是一种用于软件系统分析和设计的语言工具,它用于帮助软件开发人员进行思考和记录思路的结果. ...

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

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

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

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

  5. UML类图属性和相关关系

    UML类图 1. 类属性的可见性 描述类的属性的可见性: UML中,可见性分为4级 public 公用的 :用+ 前缀表示 ,该属性对所有类可见 protected 受保护的:用 # 前缀表示,对该类 ...

  6. UML类图、6种关系

    目录 一,类图 二,类的6种关系 1,泛化 2,实现 3,组合 4,聚合 5,关联 6,依赖 三,总结 一,类图 类图中,每个类由3个部分组成,上面的是类名,中间的是属性,下面的是方法. 属性和方法可 ...

  7. uml 菱形_UML建模之类图常用符号及关系详解!

    在软件开发中,经常会遇到UML建模,而类图作为一种静态的结构图,不仅是系统编码和测试的重要模型,还可以简化人们对系统的理解.因此,理解和知道如何使用UML图就显得尤为重要了!那么,对于UML类图中常用 ...

  8. UML类图中类之间的关系,聚合,组合,依赖总结

    下面我就根据下面这个图来讲解一下UML类图. 类图 首先,看动物那个矩形框,他就表示为一个类(Class).类图分为三层: 第一层显示类的名称 如果是抽象类,就用斜体表示 第二层显示类的特性,通常是字 ...

  9. 【UML】例析UML类图的几种关系

    最近在学习UML,别的先不提,英文单词到是学会了不少..既然Rational Rose就是英文版的,索性我就所有东西都按照英文意思来理解,慢慢来,当初学VB的时候我也不是一下子就能记住Label的.. ...

最新文章

  1. Rushcrm:企业部署CRM系统做什么
  2. 解决onclick事件调用其它带参数的函数方法无效的问题
  3. arm linux下编译库System.Net.Primitives.dll和System.Xml.XmlSerializer.dll
  4. SpringMVC处理自定义异常,通过读取配置文件把错误信息显示在前台页面
  5. 支付和LBS定位对于O2O到底有多重要?
  6. django orm 常用查询筛选
  7. windows下mongodb安装与使用整理
  8. c语言按shift用户随时退出,2014年云南省“三校生”高考计算机第三次模拟试卷...
  9. 《我也能做CTO之程序员职业规划》和《.NET软件设计新思维——像搭积木一样搭建软件》新书发布会 回顾
  10. 用友服务器ip地址在哪里修改密码,用友服务器ip地址在哪里修改密码
  11. 从实践应用中催生课题,通过课题研究促进应用
  12. 19 个接私活平台汇总,今天我们只聊用技术挣钱
  13. 将Win7中的IE11降级为IE8
  14. Dw cs6的详细下载安装教程对网页设计需要cs6的同学
  15. C++二维vector初始化大小方法
  16. 值得注意的4个NPS注意事项
  17. 【翻译】图解Janusgraph系列-事务详解(Janusgraph Transactions)
  18. 计算机游戏缓存在哪里清楚,电脑清除缓存在哪里-怎么干净的清理电脑缓存电脑很卡东西清理不干净 爱问知识人...
  19. 独家专访丨刘江川:从“边缘”到“中心”,边缘计算科学家的创业之路
  20. Linux开启root用户

热门文章

  1. 转行进入测试一年有感
  2. RHEL7 -- 修改主机名
  3. python入门-windows下anaconda环境搭建
  4. 【转】POP3、SMTP和IMAP之间的区别和联系
  5. leetcode @python 120. Triangle
  6. 变态的儿童国学教育与孔子真正的教育之道
  7. ASP.NET AJAX深入浅出系列课程(10):基于Microsoft AJAX Library扩展客户端组件.zip(10.77 MB)...
  8. thinkphp mysql 密码加密_thinkphp微信开发(消息加密解密)
  9. 软件定义汽车带来的困境---如何破局?
  10. DelayedOperationPurgatory分析