简单记录

UML类图

UML基本介绍

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

2、UML本身是一套符号的规定,就像数学符号和化学符号一样,这些符号用于描 述软件模型中的各个元素和他们之间的 关系,比如类、接口、实现、泛化、依赖、组合、聚合等,如图:



3、使用UML来建模,常用的工具有 Rational Rose , 也可以使用一些插件来建模

UML是一种语言,用来建模的 跟传统的编程语言不一样 它是用一些符号来表示的 用符号来描述一些设计思想 一种用于软件系统分析和设计的语言工具 图形描述 帮助我们进行思考和记录的结果

工具 Rational Rose 画各种类

插件 AmaterasUML

统一建模语言,可以画各种图形,图形可以帮助我们去软件系统设计和分析理解。

UML图

UML图

画UML图与写文章差不多,都是把自己的思想描述给别人看,关键在于思路和条理。

UML图分类:

  • 用例图(use case)
  • 静态结构图:类图、对象图、包图、组件图、部署图
  • 动态行为图:交互图(时序图与协作图)、状态图、活动图

说明:

类图是描述类与类之间的关系的,是UML图中最核心的

熟悉地掌握了UML,就好像学会了写字,在现实生活中,会写字不见得会写出好文章。仅仅会写,学会了UML并不一定就分析设计出好的软件系统,灵活的使用.

UML类图

UML类图用于描述系统中的类(对象)本身的组成和类(对象)之间的各种静态关系。

描述类和类之间的关系

类之间的关系:依赖、泛化(继承)、实现、关联、聚合与组合

类图简单举例

public class Person{ //代码形式->类图
private Integer id;
private String name; public void setName(String name){
this.name=name;
}
public String getName(){
return name;
}
}

类图怎么画呢?

代码形式 --> 类图

类名 属性 方法

类和类之间到底是什么关系?怎么画?这是一个问题.

类图—依赖关系(Dependence)

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

public class PersonServiceBean {
private PersonDao personDao;//类 public void save(Person person){}
public IDCard getIDCard(Integer personid){ }
public void modify(){
Department department = new Department();
}
}
public class PersonDao{}
public class IDCard{}
public class Person{}
public class Department{}

小结

类中用到了对方

如果是类的成员属性

如果是方法的返回类型

是方法接收的参数类型

方法中使用到

依赖关系

A类用到了B类 ,A依赖于B, 没有B,A编译也通过不了

类图—泛化关系(generalization)

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

public abstract class DaoSupport{
public void save(Object entity){ }
public void delete(Object id){ }
}
public class PersonServiceBean extends Daosupport{

}



PersonServiceBean继承了DaoSupport



小结:

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

A类继承了B类,泛化关系就是继承关系 , A类继承了B类也相当于A类用到了B类, 泛化关系是依赖关系的特例。

类图—实现关系(Implementation)

实现关系实际上就是A类实现B接口,他是依赖关系的特例.

public interface PersonService {  public void delete(Interger id);
}
public class PersonServiceBean implements PersonService {
public void delete(Interger id){}
}



一个类来实现这个接口

PersonServiceBean实现了PersonService这个接口 实现关系

人与人之间存在关系 但是否存在父子关系什么的 这是特例了

实现关系是依赖关系的特例 ,依赖关系更强 。

=>类图

小结????

被一个类实现了 ,A类实现B接口 实现关系

类图—关联关系(Association)

关联关系实际上就是类与类之间的联系,他是依赖关系的特例

关联具有导航性:即双向关系或单向关系

关系具有多重性:如“1”(表示有且仅有一个),“0…”(表示0个或者多个), “0,1”(表示0个或者一个),“n…m”(表示n到 m个都可以),“m…*”(表示至少m 个)。

单向一对一关系

public class Person { private IDCard card;

}

public class IDCard{}

一个人一个身份证号 一对一

单向的 一对一

双向一对一关系

public class Person {

private IDCard card;

}

public class IDCard{

private Person person

}

双向一对一关系

一个人一个身份证号 一对一 一个身份证号也对应一个人



小结:

关联关系实际上就是类与类之间的联系,是依赖关系的特例。

导航性??双向 单向

多重性??一对一,一对多,多对多

类图—聚合关系(Aggregation)

聚合关系(Aggregation)表示的是整体和部分的关系,整体与部分可以分开。聚

合关系是关联关系的特例,所以他具有关联的导航性与多重性。

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



computer monitor mouse

计算机包含鼠标、显示器

能不能分开

如果关系是可以分开的,是聚合关系

如果关系是不可以分开的,是组合关系

鼠标是可以分离的,可以插上也可以不插上,电脑没有鼠标还是一个电脑

显示器可以分开

鼠标这个类 显示器这个类 与电脑这个类 他们构成聚合关系

对应类图

小结:

聚合关系表示整体与部分关系,整体与部分可以分开,聚合关系是关联关系的特例,导航性 多重性

谁聚合谁的

A聚合一个B 单聚合

A里面可以聚合多个B 多重聚合

如果我们人Mouse,Monitor和Computer是不可分离的,则升级为组合关系



computer创建mouse、monitor也创建了,销毁也都销毁了

类图—组合关系(Composition)

组合关系:也是整体与部分的关系,但是整体与部分不可以分开。

再看一个案例:在程序中我们定义实体:Person与IDCard、Head, 那么 Head 和Person 就是 组合,IDCard 和 Person 就是聚合。

人不能没有头 可以没有手、脚,没头会死的。

一个人没有身份证,不会死的,可以去补办身份证

Head和Person就是组合,

IDCard和Person就是聚合

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

public class Person{ private IDCard card;

private Head head = new Head();

}

public class IDCard{} public class Head{}

级联删除,一起删了,组合。

关联关系 一个类 成员变量 成员属性 用到另一个类 构成关联关系

聚合关系 整体和部分的关系 你是我的一个什么属性 可以分开 聚合关系

不能分开 组合关系

小结

依赖关系

只要是在类中用到了对方,那么他们之间就存在依赖关系

类中用到了对方

如果是类的成员属性

如果是方法的返回类型

是方法接收的参数类型

方法中使用到

虚线 箭头

用到了

泛化关系

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

如果A类继承了B类,我们就说A和B存在泛化关系

空心三角形 实线

实现关系

实现关系实际上就是A类实现B接口,他是依赖关系的特例.

空心的三角形 虚线

关联关系

类与类之间的关系,他是依赖关系的特例.

导航性 多重性

单向一对一

双向一对一 你用到我 我用到你

聚合关系

聚合关系表示的是整体和部分的关系,整体与部分可以分开.

聚合关系是关联关系的特例,所以他具有关联的导航性与多重性.

Person Head Person IDCard

组合 聚合 菱形实心空心

创建 删除 级联的 组合关系

类图 关系 不同表示 画

依赖 泛化 实现 关联 聚合 组合

方法

陆游和卖油翁

陆游的忠告

《冬夜读书示子聿》

(南宋)陆游

古人学问无遗力,少壮工夫老始成。

纸上得来终觉浅,绝知此事要躬行。

渐若窥宏大 工夫在诗外

纸上得来终觉浅,绝知此事要躬行

卖油翁

卖油翁

【作者】欧阳修 【朝代】宋

陈康肃公善射,当世无双 ,公亦以此自矜。尝射于家圃,有卖油翁释担而立,睨之久而不去。见其发矢十中八九,但微颔之。

康肃问曰:”汝亦知射乎?吾射不亦精乎?”翁曰:”无他, 但手熟尔。”康肃忿然曰:”尔安敢轻吾射!”翁曰:”以我酌油知之。”乃取一葫芦置于地,以钱覆其口,徐以杓酌油沥之,自钱孔入,而钱不湿。因曰:”我亦无他,惟手熟尔。”康肃笑而遣之。

此与庄生所谓解牛斫轮者何异?

我亦无他,惟手熟尔。

书到用时方恨少,事非经过不知难。

知 行

参考资料

1、图解Java设计模式-尚硅谷_韩顺平

【UML】基本介绍与类图(依赖、泛化、实现、关联、聚合、组合关系)的更多相关文章

  1. UML的类图关系分为: 关联、聚合/组合、依赖、泛化(继承)

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

  2. UML学习笔记:类图

    UML学习笔记:类图 有些问题,不去解决,就永远都是问题! 类图 类图(Class Diagrame)是描述类.接口以及它们之间关系的图,用来显示系统中各个类的静态结构. 类图包含2种元素:类.接口, ...

  3. 类图class的关联关系(聚合、组合)

    类图class的关联关系(聚合.组合) 关联的概念 关联用来表示两个或多个类的对象之间的结构关系,它在代码中表现为一个类以属性的形式包含对另一个类的一个或多个对象的应用. 程序演示:关联关系(code ...

  4. [转载]uml 类图依赖与关联的区别

    原文链接:https://www.cnblogs.com/liuzhang/archive/2013/03/17/2964095.html 最近研究设计模式,看类图有点发虚!有些关系搞的不是很清楚.所 ...

  5. uml 类图依赖与关联的区别

    类与类之间由弱到强关系是:    没关系 < 依赖 < 关联 < 聚合 < 组合. 1.依赖(dependency) 可以简单的理解,就是一个类A使用到了另一个类B,而这种使用 ...

  6. Uml 建模 一(类图建模和startuml的使用)

    本文将分三个部分介绍Uml建模:Uml建模的作用.类图.startuml的使用 Uml的作用 本文以java为例介绍Uml,在当前的软件开发中大多数使用面向对象开发(OO),面向对象的就是将现实世界中 ...

  7. UML基础系列:类图

    类图描述系统中类的静态结构,它不仅定义系统中的类,描述类之间的联系,如关联.依赖.聚合等,还包括类的内部结构(类的属性和操作).类图描述的是静态关系,在系统的整个生命周期中都是有效的.对象图是类图的实 ...

  8. 分分钟弄明白UML中泛化 , 实现 , 关联, 聚合, 组合, 依赖

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

  9. [UML]UML系列——类图class的关联关系(聚合、组合)

    关联的概念 关联用来表示两个或多个类的对象之间的结构关系,它在代码中表现为一个类以属性的形式包含对另一个类的一个或多个对象的应用. 程序演示:关联关系(code/assocation) 假设:一个公司 ...

随机推荐

  1. 传输层-Transport Layer(下):UDP与TCP报头解析、TCP滑动窗口、TCP拥塞控制详解

    第六章 传输层-Transport Layer(下) 上一篇文章对传输层的寻址方式.功能.以及流量控制方法做了简短的介绍,这一部分将介绍传输层最重要的两个实例:TCP协议和UDP协议,看一看之前描述的 ...

  2. Windows10自带截屏快捷键

    Windows10自带截屏快捷键使用方法大全我们知道,QQ和微信以及第三方浏览器等软件都支持截图功能,但是这个都是基于软件的一个功能,如果我们不打开这些软件的话,就不能实现截图功能,但其实window ...

  3. 【操作系统】页面置换算法(最佳置换算法)(C语言实现)

    [操作系统]页面置换算法(最佳置换算法)(C语言实现) (编码水平较菜,写博客也只是为了个人知识的总结和督促自己学习,如果有错误,希望可以指出) 1.页面置换算法: 在地址映射过程中,若在页面中发现所 ...

  4. ant design 中实现表格头部可删除和添加

    我是用antd pro做一个项目.有一个小需求是表格头部栏可操作.具体是表头的每一项都带一个"x"按钮,当不想展示这一栏的时候,直接点"x",这一栏就不展示了. ...

  5. 基于nacos注册中心的ribbon定制规则

    前面说到基于nacos的注册发现有可以扩展实现我们自己的负载均衡算法(Nacos数据模型),来实现同集群调用,是基于spring.cloud.nacos.discovery.cluster-name参 ...

  6. 一个小技巧助您减少if语句的状态判断

    作者:依乐祝 首发地址:https://www.cnblogs.com/yilezhu/p/14174990.html 在进行项目的开发的过程中, if 语句是少不了的,但我们始终要有一颗消灭 if  ...

  7. Python批量创建word文档(1)- 纯文字

    Python创建word文档,任务要求:小杨在一家公司上班,每天都需要给不同的客户发送word文档,以告知客户每日黄金价格.最后贴上自己的联系方式.代码如下: 1 ''' 2 #python根据需求新 ...

  8. 后端Long类型传到前端精度丢失的正确解决方式

    原因:前端js对Long类型支持的精度不够,导致后端使用的Long传到前端丢失精度,比如现在分布式id生成算法"雪花算法"在使用中就会出现问题. 解决方式: 1.后端的Long类型 ...

  9. java代理(静态代理和jdk动态代理以及cglib代理)

    版权声明:本文为Fighter168原创文章,未经允许不得转载.   目录(?)[+]   说到代理,脑袋中浮现一大堆代理相关的名词,代理模式,静态代理,jdk代理,cglib代理等等. 记忆特别深刻 ...

  10. [leetcode]61. Rotate List反转链表k个节点

    类似于找链表的后k个节点 不同的是要把前边的接到后边 public ListNode rotateRight(ListNode head, int k) { //特殊情况 if (head==null ...