定义
抽象是指对于一个过程的某些细节有目的的隐藏,以便把其他方面或细节表达得更加清楚。每个抽象层次,包括了某些信息,同时也忽略了另一些信息。
软件开发中使用到的抽象类型有:
- 过程抽象
- 划分系统的功能,强调功能完成的过程和步骤
- 面向过程的软件开发采用这种抽象方法
- 数据抽象
- 把数据与这些数据上的操作结合在一起
- 抽象成不同的抽象数据类型——把接口与实现分离开了
抽象的层次
一、团体——最高级别
程序被视为一个对象的团体,这些对象间相互作用,完成共同目标。
团体有两种含义:
- 指程序员的团体。
- 指程序员创建的对象的团体
他们都满足:相互作用,以完成共同目标
二、单元unit
协同工作的对象可以组合到一个单元中。如Java中的包package,C++中的命名空间namespace。
这些单元允许某些特定的名称暴露在单元以外,而其他特征则隐藏在单元中。
三、服务者与客户CS
用以处理两个独立对象间的交互。
服务者向客户提供服务,利用通信来交互。
此级别通常用接口来表示——定义行为,但不描述如何具体实现。
四、服务实现方式
即抽象行为的具体实现方式——比如顺序、链式、堆栈……
五、具体实现
方法的实现逻辑——具体过程或算法。
抽象的形式
特殊化、分治法、不同视角
一、特殊化/具体化
例:载运工具—>有轮的载运工具—>汽车
二、分治法
将一层划分成多个组成部分。
若组件很多,用目录catalog来组织。如类的列表、类中方法列表等。
例:汽车—>发动机、传动机构、车身和车轮。
三、不同视角
对同一件物品提供不同的视角,每个视角可能会看到不一样的细节,描述出不同的特性。
例如,机械师眼里的汽车和外行眼里的汽车。
继承方式
ISA继承
描述类之间或类与接口的继承关系。
如果A is-a B,那么B是A的基类(超类)。
“extends”
HASA组合
组合composition——由简单部分。根据一些组合规则,构建成复杂结构,允许合并机制,既可对初始形式进行组合,也可以对新形式进行组合。
"Has-a"代表的是对象和他成员的从属关系:
如果A has-a B,B是A的组成部分。
抽象类
抽象类是不能被直接实例化的类,即它没有直接的实例。
抽象类通常包括一个或多个抽象方法(只有方法说明,没有方法体),抽象类的子类必须实现其父类定义的每一个抽象方法,除非该子类也是抽象类。
抽象类中既可以有一般方法,同时必须有抽象方法。
作用:使子类能够对方法有不同的实现方式。抽象超类能够避免模糊性。