单个类型 抽象Abstract 封装encapsulation
层次结构 继承inheritance 多态polymorphism
类型之间 关联association 聚合aggregation 组合composition
编程准则:内聚与藕合 cohesion & coupling
◆抽象Abstract:把事物共同点抽取出来,以统一的方式进行概要描述的过程.抽象是存在不同层次的。
在不同的需求环境下,我们到底把什么抽象成类,把什么当作实例或对象,是面向对象设计一开始最关键的一步,如果抽象过度,可能导致程序设计层次加重,但如果抽象不够在极端的情况下,可能会退化到面向过程设计的那种一段程序对应一个问题的情形。
忽略掉一个对象或实体的细节而只关注其本质特征的过程简化功能与格式帮助用户与对象交互。
◆封装(encapsulation)
隐藏数据和实现
提供公共方法供用户调用功能
对象的两种视图
—— 外部视图:对象能做的工作
—— 内部视图:对象如何完成工作
—— 电视机:调节音量
◆继承(inheritance)
通过存在的类型定义新类型的机制。
通常在两个类型之间存在“is a”或“kind of”这样的关系。
通过继承可实现代码重用,另外继承也是多态的基础。
如苹果“is a”水果。
◆多态(polymorphism)
一个名称,多种形式。
一个类中的方法重载就是一种多态。
基于继承的多态。
调用方法时根据所给对象的不同选择不同的处理方式。
如Football——play():使用脚来完成。
Basketball——play():使用手来完成。
给出一个具体的足球或篮球,用户自动知道该使用谁的方式去执行play()。
◆关联(association)
对象之间交互时的一种引用方式。
当一个对象通过对另一个对象的引用去使用另一个对象的服务或操作时,两个对象之间便产生了关联。
如person使用computer,person与computer之间就存在了关联关系。
person
{
Computer.PlayGame();
}
◆聚合(aggregation)
关联关系的一种,一个对象成为另外一个对象的组成部分。
是一种关系较强的关联。
在两个对象之间存在“has a”这样的关系,一个对象作为另一个对象的属性存在,在外部对象被生产时,可由客户端指定与其关联的内部对象。
如汽车与轮胎,轮胎作为汽车的一个组成部分,它和汽车可以分别生产以后装配起来使用,但汽车可以换新轮胎,轮胎也可以卸下来给其它汽车使用。
较强的关联 ---- 通过构造函数
class person
{
public person()
{
Create compter;
}
}
◆组合(composition)
当一个对象包含另一个对象时,外部对象负责管理内部对象的生命周期的情况。
关联关系中最为强烈的一种。
内部对象的创建由外部对象自己控制。
外部对象不存在时,内部对象也不能存在,如电视机与CRT。
◆组合composition
发动机 车。
车的生命周期决定发动机生命周期。
垃圾回收。
◆内聚(cohesion)
度量一个类独立完成某项工作的能力。
清洁工(有吸尘器,拖不,扫把)。
临时工(无)。
◆藕合(coupling)
度量系统内或系统之间依赖关系的复杂度。
设计原则:增加内聚,减少藕合。
接口 :解耦合。