[zz] 几种类间关系:继承、实现、依赖、关联、聚合、组合及UML实现图
继承
指的是一个类(称为子类、子接口)继承另外的一个类(称为父类、父接口)的功能,并可以增加它自己的新功能的能力,继承是类与类或者接口与接口之间 最常见的关系;在Java中此类关系通过关键字extends明确标识,在设计时一般没有争议性;
实现
指的是一个class类实现interface接口(可以是多个)的功能;实现是类与接口之间最常见的关系;在Java中此类关系通过关键字implements明确标识,在设计时一般没有争议性
继承和实现又可以统称为泛化
依赖
可以简单的理解,就是一个类A使用到了另一个类B,而这种使用关系是具有偶然性的、、临时性的、非常弱的,但是B类的变化会影响到A;比如某人要过 河,需要借用一条船,此时人与船之间的关系就是依赖;表现在代码层面,为类B作为参数被类A在某个method方法中使用;
[具体表现] 依赖关系表现在局部变量,方法的参数,以及对静态方法的调用
[现实例子]
比如说你要去拧螺丝,你是不是要借助(也就是依赖)螺丝刀(Screwdriver)来帮助你完成拧螺丝(screw)的工作
[代码表现]
<strong> public class Person{ <br> /** 拧螺丝 */ <br> public void screw(Screwdriver screwdriver){ <br> screwdriver.screw(); <br> } <br>}<br></strong>
|
[UML图]
关联
他体现的是两个类、或者类与接口之间语义级别的一种强依赖关系,比如我和我的朋友;这种关系比依赖更强、不存在依赖关系的偶然性、关系也不是临时性 的,一般是长期性的,而且双方的关系一般是平等的、关联可以是单向、双向的;表现在代码层面,为被关联类B以类属性的形式出现在关联类A中,也可能是关联 类A引用了一个类型为被关联类B的全局变量;
[具体表现] 关联关系是使用实例变量来实现
[现实例子]
比如客户和订单,每个订单对应特定的客户,每个客户对应一些特定的订单;再例如公司和员工,每个公司对应一些特定的员工,每个员工对应一特定的公司
[代码表现]
<strong> public class Company{ <br> private Employee employee; <br> public Employee getEmployee(){ <br> return employee; <br> } <br> public void setEmployee(Employee employee){ <br> this .employee=employee; <br> } <br> //公司运作 <br> public void run(){ <br> employee.startWorking(); <br> } <br> } <br></strong>
|
[UML图]
聚合
聚合是关联关系的一种特例,他体现的是整体与部分、拥有的关系,即has-a的关系,此时整体与部分之间是可分离的,他们可以具有各自的生命周期, 部分可以属于多个整体对象,也可以为多个整体对象共享;比如计算机与CPU、公司与员工的关系等;表现在代码层面,和关联关系是一致的,只能从语义级别来 区分;
[具体表现]
与关联关系一样,聚合关系也是通过实例变量来实现这样关系的。关联关系和聚合关系来语法上是没办法区分的,从语义上才能更好的区分两者的区别。
[UML图]
组合
组合也是关联关系的一种特例,他体现的是一种contains-a的关系,这种关系比聚合更强,也称为强聚合;他同样体现整体与部分间的关系,但此 时整体与部分是不可分的,整体的生命周期结束也就意味着部分的生命周期结束;比如你和你的大脑;表现在代码层面,和关联关系是一致的,只能从语义级别来区 分;
[UML图]
对于继承、实现这两种关系没多少疑问,他们体现的是一种类与类、或者类与接口间的纵向关系;其他的四者关系则体现的是类与类、或者类与接口间的引 用、横向关系,是比较难区分的,有很多事物间的关系要想准备定位是很难的,前面也提到,这几种关系都是语义级别的,所以从代码层面并不能完全区分各种关 系;但总的来说,后几种关系所表现的强弱程度依次为:组合>聚合>关联>依赖;
转载于:https://www.cnblogs.com/18fanna/p/3388682.html
[zz] 几种类间关系:继承、实现、依赖、关联、聚合、组合及UML实现图相关推荐
- UML关系(泛化,实现,依赖,关联(聚合,组合))
UML的构造快包含3种: (1) 事物(4种):结构事物,行为事物,分组事物,注释事物 (2) 关系(4种):泛化关系,实现关系,依赖关系,关联关系 (3) 图(10种):用例图,类图,对象图,包图, ...
- 【UML关系(泛化、实现、依赖、关联(聚合,组合))】
UML关系(泛化,实现,依赖,关联(聚合,组合))
- UML中几种类间关系:继承、实现、依赖、关联、聚合、组合的联系与区别
zz from: http://dev.firnow.com/course/3_program/java/javajs/20090219/155939.html UML中几种类间关系:继承.实现.依赖 ...
- 转:UML图中类之间的关系:依赖,泛化,关联,聚合,组合,实现
转:UML图中类之间的关系:依赖,泛化,关联,聚合,组合,实现 原文:https://www.cnblogs.com/firstcsharp/p/5327659.html 类与类图 1) 类(Clas ...
- UML图中类之间的关系:依赖,泛化,关联,聚合,组合,实现
类与类图 1) 类(Class)封装了数据和行为,是面向对象的重要组成部分,它是具有相同属性.操作.关系的对象集合的总称. 2) 在系统中,每个类具有一定的职责,职责指的是类所担任的任务,即类要完成什 ...
- ULM图中类之间的关系:依赖,泛化,关联,聚合,组合,实现
在UML中,类使用包含类名.属性和操作且带有分隔线的长方形来表示,如定义一个Employee类,它包含属性name.age和email,以及操作modifyInfo() public class Em ...
- 2019-9-17【Javase】object、final、实现关系、抽象类、接口、多态、UML类图
文章目录 Object类 1.equals() hashCode():hash算法 toString(): 一.final 修饰: 类 ,方法,变量: 类: 此类不能被继承: 方法:不能被重写: 变量 ...
- java 泛化_(转)Java中的泛化,依赖,关联,聚合,合成
本文参考 今天给一个很有思想网友解释 关联, 聚合,合成 的区别.结果把我自己给绕进去了.赶紧的 查漏补缺. 做个备份. 处于聚合关系的两个类生命周期不同步,则是聚合关系:处于组合关系的两个类的生命周 ...
- UML中几种类间关系:继承、实现、依赖、关联、聚合、组合的联系与区别 - 老唐 的专栏 -... (转载)
这是一堂关于UML基础知识的补习课:现在我们做项目时间都太紧了,基本上都没有做过真正的class级别的详细设计,更别提使用UML来实现规范建模了:本篇主要就以前自己一直感觉很迷糊的几种class之间的 ...
最新文章
- 函数 —— strncpy() (内存重叠) memcpy() memmove() 一个字符串拷贝给另一个字符串
- 【Linux 内核】进程管理 task_struct 结构体 ③ ( real_parent 字段 | parent 字段 | group_leader 字段 | real_cred、cred字段 )
- go语言能编android程序吗,用 Golang 开发 Android 应用(二)—— 简单 UI-Go语言中文社区...
- [知识图谱实战篇] 八.HTML+D3绘制时间轴线及显示实体
- PHP 使用 OSS 批量删除图片
- 在Spring Framework中通过JNDI进行配置
- 【数据库】Oracle用户、授权、角色管理
- 力扣21.合并有序链表
- JAVA入门[5]-初步搭建SpringMVC站点
- Windows服务编写原理及探讨(三)
- Windows Hello安装和体验
- 小米应用市场隐私政策
- 虚拟机配置文件vmx放置路径问题
- Android开发 自定义控件 边框TextView
- 命令与征服3 凯恩之怒
- LDK 7.1开发包正式发布
- Java程序员必备的几款开发工具,高效才是硬道理!
- 游戏翻译工具截屏翻译工具源代码 图片单词识别
- 项目教程 | Pycharm+Pyqt5+Eric6实现逻辑与界面分离(实例教学)
- 职称是啥?职称是不是只能在国企事业单位申报呢?
热门文章
- 【字符串操作之】大小写转换→→toLocaleLowerCase、toLocaleUpperCase
- 数组中子数组运算常见写法
- leetcode算法题--最大加号标志★
- 我在51CTO微职位学软考——网络工程师
- PHP如何验证以太坊签名
- Leetcode-探索 | 旋转数组
- 【转】linux tar 压缩
- centos6.7x86_64安装nginx (good)
- 【LeetCode】004 Median of Two Sorted Arrays 两个排序数组合并后的中位数
- 记录一次Mac虚拟机安装的过程(有图有真相)