专栏:《Java面向对象程序设计》学习笔记
# 第 7 章 面向对象设计的基本原则
7.1 UML 类图简介
类的 UML 图
长方形垂直地分为三层。
-
第 1 层是名字层。
名字是常规字形,表明该类是具体类,如果类的名字是斜体字形,表明该类是抽象类
-
第 2 层是变量层。
-
第 3 层是方法层。
访问权限:+表示 public -表示 private #表示 protected
-
接口 (lnterface)
-
泛化关系 (Generalizationl)
继承关系 实线 空心三角形
-
关联关系 (Association)
组合关系 实线 箭头
-
依赖关系 (Dependency)
弱组合关系 虚线 箭头
-
实现关系 (ReaIization)
实现接口 虚线 空心三角形
7.2 面向抽象原则
所谓面向抽象编程,是指当设计一个类时,不让该类面向具体的类,而是面向抽象类或接口,即所设计类中的重要数据是抽象类或接口声明的变量,而不是具体类声明的变量。
“面向抽象编程”,该原则的核心就是将类中经常需要变化的部分分割出来。其关键点是分割变化。
-
将每种可能的变化对应地交给抽象类的一个子类或实现接囗的一个类去负责
-
从而让类的设计者不去关心具体实现,避免所设计的类依赖于具体的实现。
-
基于该原则就容易使设计的类应对用户需求的变化。
7.3 “开-闭”原则
“开.闭”原则 (Open-Closed Principle) ,就是让用户的设计“对扩展开放,对修改关闭”。
本质是指当在一个设计中增加新的模块时,不需要修改现有的模块。
7.4 “多用组合、少用继承”原则
继承与复用
-
子类从父类继承的方法在编译时刻就确定下来了,所以无法在运行期间改变从父类继承的方注的行为。
-
子类和父类的关系是强耦合关系,也就是说当父类的方法的行为更改时,必然导致子类发生变化
-
通过继承进行复用也称“白盒”复用,其缺点是父类的内部细节对于子类而言是可见的。
组合与复用
如果一个对象 a 组合了对象 b ,那么对象 a 就可以委托对象 b 调用其方法
- 通过组合对象来复用方法也称“黑盒”复用,因为当前对象只能委托所包含的对象调用其方法,这样一来,当前对象所包含的对象的方注的细节对当前对象是不可见的。
- 对象与所包含的对象属于弱耦合关系,因为,如果修改当前对所包含的对象的类的代码,不必修改当前对象的类的代码。
- 当前对象可以在运行时刻动态指定所包含的对象
7.5 “高内聚-低耦合”原则
如果类中的方法是一组相关的行为,则称该类是高内聚的,反之称为低内聚的。
高内聚便于类的维护,而低内聚不利于类的维护。
低耦合就是尽量不盅让一个类含有太多的其它类的实例的引用,以避免修改系统的其中一部分会影响到其它部分,
7.6 小结
- 在设计模式中,使用简单的 UML 类图可以简洁地表达一个模式中类之间的关系。
- 面向抽象原则的核心思想是:在设计一个类时,不让该类面向具体的类,而是面向抽象类或接口,即所设计类中的重要数据是抽象类或接口声明的变量,而不是具体类声明的变量。
- “开-闭”原则的本质是指当一个设计中增加新的模块时,不需要修改现有的模块。我们在给出一个设计时,应当首先考虑到用户需求的变化,将应对用户变化的部分设计为对扩展开放,而设计的核心部分是经过精心考虑之后确定下来的基本结构,这部分应当是对修改关闭的,即不能因为用户的需求变化而再发生变化,因为这部分不是用来应对需求变化的。
- “多用组合、少用继承”原则的目的是减少类之间的强耦合关系。
- “高内聚-低耦合”原则的目的是尽量不要让一个类含有太多的其他类的实例的引用,便于类的维护。