文章目录

  • 一.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.各类关系强弱

各类关系从强到弱依次是:继承→实现→组合→聚合→关联→依赖

三.生活案例之动物衍生关系图

四.关联关系、聚合关系、组合关系之间的区别

从上文可以看出,关联关系、聚合关系和组合关系三者之间比较相似,本文的最后就来总结一下这三者之间的区别。

关联和聚合的区别主要在于语义上

  • 关联的两个对象之间一般是平等的,聚合则一般是不平等的

聚合和组合的区别则在语义和实现上都有差别:

  • 组合的两个对象之间生命周期有很大的关联,被组合的对象在组合对象创建的同时或者创建之后创建,在组合对象销毁之前销毁,一般来说被组合对象不能脱离组合对象独立存在,而且也只能属于一个组合对象;
  • 聚合则不一样,被聚合的对象可以属于多个聚合对象。

再举例子来说:

  • 你和你的朋友属于关联关系,因为你和你的朋友之间的关系是平等的,关联关系只是表示一下两个对象之间的一种简单的联系而已,就像我有一个朋友
  • 你和你借的书属于聚合关系,第一是因为书可以独立存在,第二是因为书不仅仅属于你,也可以属于别人,只是暂时你拥有
  • 你和你的心脏属于组合关系,因为你的心脏只是属于你的,不能脱离与你而存在

五.类关系记忆技巧

继承实现,箭头方向:从子类指向父类。

  1. 定义子类是需要通过extends关键字指定父类;

  2. 子类一定是知道父类定义的,但父类并不知道子类的定义;

  3. 只有知道对方信息时才能指向对方;

  4. 所以箭头的方向是从子类指向父类。

继承实现:用线条连接两个类。

  1. 空心三角箭头表示继承或实现
  2. 实线表示继承,是is-a 的关系,表示扩展,不虚,很结实;
  3. 虚线表示实现,虚线代表“虚”无实体。

关联依赖:用线条连接两个类。

  1. 虚线表示依赖关系:
    临时用一下,若即若离,虚无缥缈,若有若无;表示一种使用关系,一个类需要借助另一类来实现功能;一般是一个类将另一个类作为参数使用,或作为返回值。

  2. 实线表示关联关系:
    关系稳定,实打实的关系,铁哥们;表示一个类对象和另一个类对象有关联;通常是一个类中有另一个类对象作为属性。

组合聚合:用菱形表示。

  1. 菱形就是像是一个盛东西的器皿(比如盘子);
  2. 聚合:空心菱形,代表空器皿里可以放很多相同的东西,聚集在一起(箭头方向所指的类);整体和局部的关系,两者有独立的生命周期,是has-a 的关系;弱关系,消极的词:弱-空。
  3. 组合:实心菱形,代表器皿里已经有实体结构的存在,生死与共;整体与局部的关系,和聚合关系对比,关系更加强烈;两者具有相同的生命周期,contains-a 的关系;强关系,积极的词:强-满。

【Java基础】UML类图及各种线代表的关系含义总结相关推荐

  1. 浅谈UML类图中类之间的5种关系

    什么是UML类图? 类图显示了一组类.接口.协作以及他们之间的关系.在UML中问题域最终要被逐步转化,通过类来建模,通过编程语言构建这些类从而实现系统.类加上他们之间的关系就构成了类图,类图中还可以包 ...

  2. java uml 类图 加号_UML建模基础 UML类图的组成元素和关系解析

    本文和大家重点讨论一下在UML建模中UML类图的java代码表现,主要包括UML类图元素和关系两大部分内容,相信通过本文的介绍你对UML类图的概念一定会与明确的认识. 在UML建模中UML类图的jav ...

  3. Java设计模式—UML类图

    个人感觉总结很好的UML类图,转http://blog.csdn.net/u013467442/article/details/41808501 UML类图几种关系的总结 在UML类图中,常见的有以下 ...

  4. Java画UML类图

    1.在Eclipse中安装插件. 1.1 安装和使用AmaterasUML 安装AmaterasUML前,需要先安装GEF 第一种:采用eclipse在线安装方式安装就好. eclipse在线安装GE ...

  5. 【Java】UML类图详解-详细易懂

    基本介绍 统一建模语言(Unified Modeling Language,UML)是用来设计软件的可视化建模语言.它的特点是简单.统一.图形化.能表达软件设计中的动态与静态信息. UML 从目标系统 ...

  6. Java程序设计——UML类图

    目录(仅供参考) 一.定义 二.类图示例 三.类之间的关系 类与类一共有如下几种关系:泛化(Generalization).实现(Realization).依赖(Dependence).关联(Asso ...

  7. java集合UML类图 总览

    Java集合框架主要包括两种类型的容器, 一种是集合(Collection),存储一个元素集合, Collection 接口又有 3 种子类型,List.Set 和 Queue. 另一种是图(Map) ...

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

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

  9. Java设计模式——UML类图

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

最新文章

  1. 深度学习模型部署简要介绍
  2. 从世界数字大脑形成看元宇宙未来趋势
  3. SpringBoot系列: 单元测试
  4. oracle的故障包括用户或应用程序故障_数据库实例错误,oracle 备份恢复基础
  5. SqlSugar ORM 入门到精通【一】入门篇
  6. 响应式网页之媒体查询
  7. 吴麒pdf 自动控制原理下_自动控制原理 第五讲 频域分析(下)
  8. 上传文件时路径总是C:\fakepath\的问题
  9. thinkphp mysql save_新增Save · ThinkPHP5+数据库和模型 · 看云
  10. 三条中线分的六个三角形_初中数学——与三角形有关的线段
  11. elastic 常用操作
  12. java fields是_一个快速生成R2.java中fields的插件
  13. 温习php一(apache和php的配置)
  14. 版本向量 使用css时正确区分IE版本[转]
  15. 5.1--5.1.2 Permutations of a Multiset 多重集合的排列
  16. sever client
  17. 流媒体服务器架设(转载)
  18. android框架揭秘之Java服务学习笔记
  19. 遗传算法基本原理及在互联网中的应用
  20. 案例:数据提取/数据获取/爬虫—工具篇—影刀

热门文章

  1. 教大家电脑重装系统后如何设置硬盘密码
  2. Keyence激光打标机入门2
  3. Unity3D 2021.1.2F1 发布了。赋国际版本下载地址。
  4. 618狂欢过后,冷静揭秘亚马逊和淘宝如何用算法让你剁手
  5. php mysql emoji_php实现emoji表情包的数据库存储和展示
  6. JSON版七彩影视双端百果炫彩UI前端主题
  7. HASH 与 随机数
  8. 留言板 基于html,php,mysql
  9. 如何治好自己的选择恐惧症
  10. AES加解密效率测试(纯软件AES128/256)--以嵌入式Cortex-M0与M3 平台为例