在类之间, 最常见的关系有
•依赖 (“ uses-a”)
•聚合(“ has-a”)
•继承(“ is-a”)

依赖( dependence ), 即“ uses-a” 关系, 是一种最明显的、 最常见的关系。例如, Order类使用 Account 类是因为 Order 对象需要访问 Account 对象查看信用状态。但是 Item 类不依赖于 Account 类, 这是因为 Item 对象与客户账户无关。因此, 如果一个类的方法操纵另一个类的对象,我们就说一个类依赖于另一个类。

应该尽可能地将相互依赖的类减至最少。 如果类 A 不知道 B 的存在, 它就不会关心 B的任何改变(这意味着 B 的改变不会导致 A 产生任何 bug )。用软件工程的术语来说, 就是让类之间的耦合度最小。

聚合(aggregation ), 即“ has-a” 关系, 是一种具体且易于理解的关系。 例如, 一个Order 对象包含一些 Item 对象。聚合关系意味着类 A 的对象包含类 B 的对象。

注释: 有些方法学家不喜欢聚合这个概念,而更加喜欢使用“ 关联” 这个术语。从建模的角度看, 这是可以理解的。 但对于程序员来说,“ has-a” 显得更加形象。喜欢使用聚合的另一个理由是关联的标准符号不易区分, 请参看表 4-1。

继承( inheritance ), 即“ is-a” 关系, 是一种用于表示特殊与一般关系的。 例如, RushOrdei •类由 Order 类继承而来。 在具有特殊性的 RushOrder 类中包含了一些用于优先处理的特殊方法, 以及一个计算运费的不同方法;而其他的方法, 如添加商品、 生成账单等都是从Order 类继承来的。一般而言, 如果类 A 扩展类 B, 类 A 不但包含从类 B 继承的方法,还会拥有一些额外的功能(下一章将详细讨论继承,其中会用较多的篇幅讲述这个重要的概念。)很多程序员采用 UML ( Unified Modeling Language, 统一建模语言)绘制类图,用来描述类之间的关系。图 4-2 就是这样一个例子。类用矩形表示,类之间的关系用带有各种修饰的箭头表示。表 4-1 给出了 UML 中最常见的箭头样式。

《Java 核心技术卷1 第10版》学习笔记------ 类之间的关系相关推荐

  1. Java 核心技术卷 II(第 8 版) – 读书笔记 – 第 1 章(下)

    22.一旦获得了一个 Charset,就可以在 Java 的 Unicode 和指定的编码格式之间进行转化,下面以 GBK 和 Unicode 之间做为例子. 从 Unicode 到 GBK: imp ...

  2. 《Java 核心技术卷1 第10版》学习笔记------异常

    异常处理的任务就是将控制权从错误产生的地方转移给能够处理这种情况的错误处理器 . 7.1.1 异常分类 在 Java 程序设计语言中, 异常对象都是派生于 Throwable 类的一个实例 . 稍后还 ...

  3. 《Java 核心技术卷1 第10版》学习笔记------ 组织继承:final类和方法【编译器优化:内联( inlining );】

    使用 final 关键字阻止继承 有时候,可能希望阻止人们利用某个类定义子类.不允许扩展的类被称为 final 类.如果在定义类的时候使用了 final 修饰符就表明这个类是 final 类. 例如, ...

  4. 《Java 核心技术卷1 第10版》学习笔记------对象克隆【对象拷贝】

    由于克隆并不太常见,而且有关的细节技术性很强,你可能只是想稍做了解,等真正需要时再深人学习. 先来回忆为一个包含对象引用的变量建立副本时会发生什么 .原变量和副本都是同一个对象的引用: Employe ...

  5. 《Java 核心技术卷1 第10版》学习笔记 ------ 泛型【进阶】

    这部分主要是结合 Java 虚拟机实现泛型的原理进一步研究如何更好的使用泛型. 8.5 泛型代码和虚拟机 虚拟机没有泛型类型对象---所有对象都属于普通类.所以编译器在编译的时候会进行类型擦除操作. ...

  6. 《Java 核心技术卷1 第10版》学习笔记 ------ 泛型【基础】

    泛型从Java SE 5.0 中开始出现,是 Java 程序设计语言从 1.0 版本发布以来,变化最大的部分. 使用泛型机制编写的程序代码要比那些杂乱地使用 Object 变量,然后再进行强制类型转换 ...

  7. 《Java 核心技术卷1 第10版》学习笔记------调试技巧

    调试器是 Eclipse . NetBeans 这类专业集成开发环境的一部分 . 在启动调试器之前, 本节先给出一些有价值的建议 . 1 ) 可以用下面的方法打印或记录任意变量的值 : System. ...

  8. 《Java 核心技术卷1 第10版》学习笔记------日志

    日志 API 的优点: 可以很容易地取消全部日志记录, 或者仅仅取消某个级别的日志, 而且打开和关闭这个操作也很容易 . 可以很简单地禁止日志记录的输出, 因此, 将这些日志代码留在程序中的开销很小 ...

  9. 《Java 核心技术卷1 第10版》学习笔记------ 接口(Interface)

    接口技术作用:主要描述类具有什么功能,而并不给出每个功能的是的实现. Java的继承(inheritance)是不支持的多继承的,但是Java接口是支持多继承的. 一个 Java 类实现一个接口类就必 ...

  10. 《Java 核心技术卷1 第10版》学习笔记------ 对象包装器、自动装箱、拆箱

    有时, 需要将 int 这样的基本类型转换为对象. 所有的基本类型都冇一个与之对应的类.例如,Integer 类对应基本类型 int.通常, 这些类称为包装器 ( wrapper ) 这些对象包装器类 ...

最新文章

  1. windows 报错 没有文件扩展.vbs的脚本引擎 解决方法
  2. 鼠标聚焦到Input输入框时,按回车键刷新页面原因及解决方法
  3. Edittext焦点处理
  4. Undo/Redo框架实现
  5. 上传声音 微信小程序_SpringBoot开发案例之微信小程序录音上传
  6. java web远程调试工具_java远程调试 - Dendy的个人页面 - OSCHINA - 中文开源技术交流社区...
  7. c语言编写贪吃蛇难点解析,刚学C语言,想写一个贪吃蛇的代码
  8. 将截断字符串或二进制数据 语句已终止
  9. 拓端tecdat|R语言使用灰色关联分析(Grey Relation Analysis,GRA)中国经济社会发展指标
  10. Windows下用VS2015+MSYS编译OpenH264
  11. AUTOCAD——三种箭头的画法
  12. 学计算机编程笔记本电脑推荐,想选一款笔记本电脑,主要用来学编程,有什么好的推荐吗?...
  13. ue4创建c++类编译失败
  14. 目标检测经典论文——YOLOv3论文翻译:YOLOv3: An Incremental Improvement(YOLOv3:增量式的改进)
  15. python的底层是c_Python的内存管理和垃圾回收机制:基于C语言源码底层深入剖析...
  16. JavaWeb解决中文下载出现乱码问题
  17. linux uts 全称
  18. Norgen痰液液化缓冲液解决方案
  19. springboot基础(72):Redisson分布式锁
  20. 刷脸支付技术成熟能够为安全问题保驾护航

热门文章

  1. 三十七、Redis和MongoDB基本语法
  2. 额外篇 | basemap(下)
  3. 关于浏览器跨域请求的相关原理实现--很经典的博客
  4. 关于无法加载sass 模块问题。vue2.0中报错ERROR :scss can't resolve 'scss-loader'
  5. 邮件发送代码--网易服务器代理
  6. 北京/苏州内推 | 微软亚洲互联网工程院招聘算法工程师/应用科学家
  7. 浅谈NLP中的对抗训练方式
  8. 解决Transformer固有缺陷:复旦大学等提出线性复杂度SOFT
  9. 单源最短路 Dijkstra算法 和 SPFA算法
  10. torch.unsqueeze()和torch.unsqueeze()