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


简单记录

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设计模式-尚硅谷_韩顺平

发布了48 篇原创文章 · 获赞 6 · 访问量 6563

猜你喜欢

转载自blog.csdn.net/qq_41569732/article/details/103766133