简单记录

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. uni-app中组件的使用

    组件基本知识点: uniapp中:每个页面可以理解为一个单页面组件,这些单页面组件注册在pages.json里,在组件关系中可以看作父组件. 自定义可复用的组件,其结构与单页面组件类似,通常在需要的页 ...

  2. Mysql8.0新特性【详细版本】

    1.  账户与安全 用户创建与授权 之前:创建用户并授权 1 grant all privileges on *.* to 'myuser'@'%' identified by '3edc#EDC'; ...

  3. 【JAVA基础】static的定义

    public class STATIC { public static void main(String[] args) { // 创建两个不同的类 只要赋值一个 另外一个定义好的static属性 会 ...

  4. 痞子衡嵌入式:恩智浦i.MX RT1xxx系列MCU硬件那些事(2.5)- 串行NOR Flash下载算法(IAR EWARM篇)

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是IAR开发环境下i.MXRT的串行NOR Flash下载算法设计. 在i.MXRT硬件那些事系列之<在串行NOR Flash XI ...

  5. MySQL的修仙者之旅,不来看看你的修为如何吗?

    目录 因为我个人比较喜欢看修仙类的小说,所以本文的主体部分借用修仙者的修为等级,将学习旅程划分成:练气.筑基.结丹.元婴.化神.飞升六个段位,你可以看下你大概在哪个段位上哦! 本文目录: 我为什么要写 ...

  6. Python炫技操作:五种Python 转义表示法

    1. 为什么要有转义? ASCII 表中一共有 128 个字符.这里面有我们非常熟悉的字母.数字.标点符号,这些都可以从我们的键盘中输出.除此之外,还有一些非常特殊的字符,这些字符,我通常很难用键盘上 ...

  7. Python批量创建word文档(2)- 加图片和表格

    Python创建word文档,任务要求:小杨在一家公司上班,每天都需要给不同的客户发送word文档,以告知客户每日黄金价格.要求在文档开始处给出banner条,价格日期等用表格表示.最后贴上自己的联系 ...

  8. Android驱动学习-Eclipse安装与配置

    在ubuntu系统下安装配置Eclipse软件.并且让其支持编译java程序和内核驱动程序. 1. 下载Eclipse软件. 打开官网:http://www.eclipse.org/  点击 DOWN ...

  9. 什么是Cassandra数据库

    在本文中,我们将介绍Cassandra名字的含义.Cassandra的发展简史.Cassandra这项技术的特点及优势,以及对于这项技术的未来展望. 本文将用浅显易懂的方式,帮助您将对Cassandr ...

  10. 四元数和旋转(Quaternion & rotation)

    四元数和旋转(Quaternion & rotation) 本篇文章主要讲述3D空间中的旋转和四元数之间的关系.其中会涉及到矩阵.向量运算,旋转矩阵,四元数,旋转的四元数表示,四元数表示的旋转 ...