【Java基础】UML类图及各种线代表的关系含义总结
文章目录
- 一.UML常见图
- 1.类图(Class Diagram)
- 2.对象图(Object Diagram)
- 3.时序图(Sequence Diagram)
- 二.UML类图线的概括
- 1.类(Class)
- 2.接口(interface)
- 3.泛化(generalization)—继承关系
- 4.实现(realization)—接口实现关系
- 5.依赖(dependency)—使用关系
- 6.关联(association)— 拥有关系
- 7.组合和聚合概念简单理解
- 8.聚合(aggregation)—组合类需要被组合类存在才能构建,被组合类可以单独存在
- 9.组合(composition)— 组合类需要被组合类存在才能构建,被组合类不可以单独存在
- 10.各类关系强弱
- 三.生活案例之动物衍生关系图
- 四.关联关系、聚合关系、组合关系之间的区别
- 五.类关系记忆技巧
一.UML常见图
1.类图(Class Diagram)
类图是显示一组类、接口、协作以及它们之间关系的图。
2.对象图(Object Diagram)
对象图是表示在某一时间点上一组对象以及它们之间的关系的图。
3.时序图(Sequence Diagram)
时序图显示对象之间的关系,强调对象之间消息的时间顺序,显示对象之间的交互。
二.UML类图线的概括
关系 | 线 |
---|---|
继承 | |
实现 | |
依赖 | |
关联 |
,注意:双向关联可以有两个箭头或者没有箭头,单向的关联有一个箭头
|
组合 |
|
聚合 |
|
1.类(Class)
使用3层矩形框
表示
- 第1层显示
类的名称
,如果是抽象类,则就用斜体
显示。 - 第2层是
字段和属性
。 - 第3层是
类的方法
。 注意前面的符号,+表示public
,-表示private
,#表示protected
2.接口(interface)
使用2层矩形框
表示,与类图的区别主要是顶端有<<interface>>
显示
- 第一层是
接口名称
- 第二层是
接口方法
。
3.泛化(generalization)—继承关系
- 继承类(extends) :用
实线空心箭头
来表示。在Java中,用extends
关键字来继承一个类- 继承关系中,子类会继承所具有的属性、方法,子类应该都有。子类还可以有自己独有的属性、方法。
在UML中 继承抽象类,无论类名还是抽象方法名,都以斜体的方式表示,因为这也是一种继承关系,所以子类与父类通
实线空心箭头
来联系。- 例如出租车、公交车、货车都是属于车,它们都有自己的名字,都可以上路跑。
java代码
class Car{//汽车名字private String name;public String getName(){this.name;};public String setName(String name){this.name= name;};//跑public String run(){this.name;};
}//公交车
class Bus extends Car{}//出租车
class Taxi extends Car{}
类图
注意:
箭头方向是子类指向父类。
- 泛化是依赖关系的特例
4.实现(realization)—接口实现关系
- 实现接口(implements) :用
虚线空心箭头
来表示 在Java中,用implements
关键字来实现一个接口。 - 接口(包括抽象类)是方法的集合,实现接口的具体实现类需要实现接口下的所有方法。
- 汽车和轮船都是交通工具,而交通工具只是一个可移动工具的抽象概念,船和车实现了具体移动的功能。
java代码:
//交通工具
interface Vehicle{//移动public void run();
}//汽车
class Car implements Vehicle{//汽车的名称(独有属性)private String name;@Overridepublic void run() {}
}//轮船
class Ship implements Vehicle{//轮船的名称(独有属性)private String name;@Overridepublic void run() {}
}
类图
实现是依赖关系的特例
5.依赖(dependency)—使用关系
依赖(Dependency) :用
虚线箭头
来表示 是一种使用的关系
,即一个类的实现需要另一个类的协助。在Java中,方法参数需要传入另一个类的对象,就表示依赖这个类
。- 大多数情况下,依赖关系体现
在某个类的方法使用另一个类的对象作为参数
。
只要是在类中用到了对方,那么他们之间就存在依赖(Dependency)关系。如果没有对方,连编绎都通过不了的那种。比如
- 类中用到了对方
- 是类的成员属性
- 是方法的返回类型
- 是方法接收的参数类型
- 方法中使用到
- 大多数情况下,依赖关系体现
例如:汽车依赖汽油,如果没有汽油,汽车将无法行驶。
java代码
//汽车
class Car{public void beforeRun(Oil oil){System.out.println("使用"+oil.getType+"号企业");}
}//汽油
class Oil {//汽油类型private String type;private String getType(){this.type;};private String setType(String type){this.type = type;};
}
类图
注意:类A需要用到类B,类A指向类B。
6.关联(association)— 拥有关系
- 关联(Association) :用
实线箭头
来表示 在Java中,一个类的全局变量引用了另一个类,就表示关联了这个类
- 关联关系是类与类之间最常用的一种关系,表示一类对象与另一类对象之间有联系。
组合、聚合也属于关联关系
,只是关联关系的类间关系比其他两种要弱
。- 关联关系有4种:
双向关联、单向关联、自关联、多重数关联。
- 在多重性关系中,可以直接在关联直线上增加一个
数字
,表示与之对应的另一个类的对象的个数。
- 1…1:仅一个
- 0…*:零个或多个
- 1…*:一个或多个
- 0…1:没有或只有一个
- m…n:最少m、最多n 个(m<=n)依赖关系
- 例如:汽车和司机,一辆汽车对应特定的司机,一个司机也可以开多辆车。(这按一个司机固定开司机专属的车来设计)
java代码
单向关联
//学生
class Student{private Pen pen;
}
//笔
class Pen{}
双向关联
//司机
class Driver{private Car[] cars;;public void addCar(Car car){this.cars.add(car);}
}
//车
class Car{ private Driver[] drivers;public void addDriver(Driver driver){this.drivers.add(driver);}
}
类图
注意:类A中用到类B属性,类A指向类B。
- 关联是依赖关系的特例
7.组合和聚合概念简单理解
- 聚合:就是说各个对象聚合在一起工作,但是我没有你也行,我照样可以正常运行。
- 组合呢,关系就比较密切,组合中的各个对象之间组成了一个整体,缺少了某一个对象就不能正常运行或者说功能会有很大缺陷。
- 也就是说
聚合对象 "不具备相同生命周期",而组合对象 "具有相同的生命周期"
举个例子:
- 比如:
电脑和U盘
就是 “聚合”,而电脑显示器和主机
就是 “组合”。
8.聚合(aggregation)—组合类需要被组合类存在才能构建,被组合类可以单独存在
- 聚合(Aggregation) :用
尾部为空心菱形的实线箭头(也可以没箭头)
来表示:是一种弱的‘拥有’
关系,体现的是A对象可以包含B对象,但B对象不是A对象的一部分
在聚合关系中,成员对象是整体的一部分,但是成员对象可以脱离整体对象独立存在。
Java代码实现聚合关系,成员对象通常以构造方法、Setter方法的方式注入到整体对象之中
。例如:公交车司机和工衣、工帽是整体与部分的关系,但是可以分开,工衣、工帽可以穿在别的司机身上,公交司机也可以穿别的工衣、工帽。
//公交车司机
class BusDriver{private Clothes clothes;private Hat hat;public void setClothes(Clothes clothes){this.clothes= clothes;}public void setHat(Hat hat){this.hat= hat;}public void show(){System.out.println("我穿了"+clothes.getName()+"的工衣,戴了"+hat.getName()+"的工帽");}
}//工衣
class Clothes{//工衣类型private String name;public String getName(){this.name;};public String setName(String name){this.name= name;};
}
//工帽
class Hat{//工衣类型private String name;public String getName(){this.name;};public String setName(String name){this.name= name;};;
}
类图
注意:类A中用到类B属性,类A指向类B。
- 这六种类关系中,
组合、聚合和关联的代码结构一样
,可以从关系的强弱来理解。 - 聚合属于关联的特例
9.组合(composition)— 组合类需要被组合类存在才能构建,被组合类不可以单独存在
- 组合(Composition):用
尾部为实心菱形的实线箭头(也可以没箭头)
来表示。- 组合关系也表示的是一种
整体和部分
的关系,但是在组合关系中整体对象可以控制成员对象的生命周期,一旦整体对象不存在,成员对象也不存在,整体对象和成员对象之间具有同生共死的关系
- Java代码实现组合关系,通常
在整体类的构造方法中直接实例化成员类
,这是因为组合关系的整体和部分是共生关系,如果通过外部注入,那么即使整体不存在,那么部分还是存在的,这就相当于变成了一种聚合关系了。 - 例如:人由头部和身体组成,两者不可分割,共同存在。通常是在构造函数的时候,通过new创建出来。
- 组合关系也表示的是一种
java代码
//人
class Human{private Head head;private Body body;public void setHead(Head head){this.head = head;}public void setBody(Body body){this.body = body;}
}
//头
class Head{}
//身体
class Body {}
类图
注意:类A中用到类B属性,类A指向类B。
- 这六种类关系中,
组合、聚合和关联的代码结构一样
,可以从关系的强弱来理解。 - 组合属于关联的特例
10.各类关系强弱
各类关系从强到弱依次是:继承→实现→组合→聚合→关联→依赖
。
三.生活案例之动物衍生关系图
四.关联关系、聚合关系、组合关系之间的区别
从上文可以看出,关联关系、聚合关系和组合关系三者之间比较相似,本文的最后就来总结一下这三者之间的区别。
关联和聚合的区别主要在于语义上
关联的两个对象之间一般是平等的,聚合则一般是不平等的
。
聚合和组合的区别则在语义和实现上都有差别:
组合
的两个对象之间生命周期有很大的关联,被组合的对象在组合对象创建的同时或者创建之后创建,在组合对象销毁之前销毁,一般来说被组合对象不能脱离组合对象独立存在,而且也只能属于一个组合对象;聚合
则不一样,被聚合的对象可以属于多个聚合对象。
再举例子来说:
- 你和你的朋友属于
关联关系
,因为你和你的朋友之间的关系是平等的,关联关系只是表示一下两个对象之间的一种简单的联系而已,就像我有一个朋友 - 你和你借的书属于
聚合关系
,第一是因为书可以独立存在,第二是因为书不仅仅属于你,也可以属于别人,只是暂时你拥有 - 你和你的心脏属于
组合关系
,因为你的心脏只是属于你的,不能脱离与你而存在
五.类关系记忆技巧
继承实现,箭头方向:从子类指向父类。
定义子类是需要通过
extends
关键字指定父类;子类一定是知道父类定义的,但父类并不知道子类的定义;
只有知道对方信息时才能指向对方;
所以箭头的方向是从子类指向父类。
继承实现:用线条连接两个类。
- 空心三角箭头表示继承或实现
- 实线表示继承,是is-a 的关系,表示扩展,不虚,很结实;
- 虚线表示实现,虚线代表“虚”无实体。
关联依赖:用线条连接两个类。
虚线表示依赖关系:
临时用一下,若即若离,虚无缥缈,若有若无;表示一种使用关系,一个类需要借助另一类来实现功能;一般是一个类将另一个类作为参数使用,或作为返回值。实线表示关联关系:
关系稳定,实打实的关系,铁哥们;表示一个类对象和另一个类对象有关联;通常是一个类中有另一个类对象作为属性。
组合聚合:用菱形表示。
- 菱形就是像是一个盛东西的器皿(比如盘子);
- 聚合:空心菱形,代表空器皿里可以放很多相同的东西,聚集在一起(箭头方向所指的类);整体和局部的关系,两者有独立的生命周期,是has-a 的关系;弱关系,消极的词:弱-空。
- 组合:实心菱形,代表器皿里已经有实体结构的存在,生死与共;整体与局部的关系,和聚合关系对比,关系更加强烈;两者具有相同的生命周期,contains-a 的关系;强关系,积极的词:强-满。
【Java基础】UML类图及各种线代表的关系含义总结相关推荐
- 浅谈UML类图中类之间的5种关系
什么是UML类图? 类图显示了一组类.接口.协作以及他们之间的关系.在UML中问题域最终要被逐步转化,通过类来建模,通过编程语言构建这些类从而实现系统.类加上他们之间的关系就构成了类图,类图中还可以包 ...
- java uml 类图 加号_UML建模基础 UML类图的组成元素和关系解析
本文和大家重点讨论一下在UML建模中UML类图的java代码表现,主要包括UML类图元素和关系两大部分内容,相信通过本文的介绍你对UML类图的概念一定会与明确的认识. 在UML建模中UML类图的jav ...
- Java设计模式—UML类图
个人感觉总结很好的UML类图,转http://blog.csdn.net/u013467442/article/details/41808501 UML类图几种关系的总结 在UML类图中,常见的有以下 ...
- Java画UML类图
1.在Eclipse中安装插件. 1.1 安装和使用AmaterasUML 安装AmaterasUML前,需要先安装GEF 第一种:采用eclipse在线安装方式安装就好. eclipse在线安装GE ...
- 【Java】UML类图详解-详细易懂
基本介绍 统一建模语言(Unified Modeling Language,UML)是用来设计软件的可视化建模语言.它的特点是简单.统一.图形化.能表达软件设计中的动态与静态信息. UML 从目标系统 ...
- Java程序设计——UML类图
目录(仅供参考) 一.定义 二.类图示例 三.类之间的关系 类与类一共有如下几种关系:泛化(Generalization).实现(Realization).依赖(Dependence).关联(Asso ...
- java集合UML类图 总览
Java集合框架主要包括两种类型的容器, 一种是集合(Collection),存储一个元素集合, Collection 接口又有 3 种子类型,List.Set 和 Queue. 另一种是图(Map) ...
- Java之UML类图的六种关系
UML类图 UML图概念 UML--Unified modeling language UML(统一建模语言),是一种用于软件系统分析和设计的语言工具,它用于帮助软件开发人员进行思考和记录思路的结果. ...
- Java设计模式——UML类图
一.引言 UML -- Unified modeling language UML (统一建模语言),是一种用于软件系统分析和设计的语言工具,它用于帮助软件开发人员进行思考和记录思路的结果. 在我们的 ...
最新文章
- 深度学习模型部署简要介绍
- 从世界数字大脑形成看元宇宙未来趋势
- SpringBoot系列: 单元测试
- oracle的故障包括用户或应用程序故障_数据库实例错误,oracle 备份恢复基础
- SqlSugar ORM 入门到精通【一】入门篇
- 响应式网页之媒体查询
- 吴麒pdf 自动控制原理下_自动控制原理 第五讲 频域分析(下)
- 上传文件时路径总是C:\fakepath\的问题
- thinkphp mysql save_新增Save · ThinkPHP5+数据库和模型 · 看云
- 三条中线分的六个三角形_初中数学——与三角形有关的线段
- elastic 常用操作
- java fields是_一个快速生成R2.java中fields的插件
- 温习php一(apache和php的配置)
- 版本向量 使用css时正确区分IE版本[转]
- 5.1--5.1.2 Permutations of a Multiset 多重集合的排列
- sever client
- 流媒体服务器架设(转载)
- android框架揭秘之Java服务学习笔记
- 遗传算法基本原理及在互联网中的应用
- 案例:数据提取/数据获取/爬虫—工具篇—影刀