第十章多态及软件复用
10.1编程语言中的多态
10.1.1多态的形式-1
class overloader{
public void example(int x){......}
public void example(int x,double y){......}
public void example(string x){......}
}
10.1.2多态的形式-2
- 改写(包含多态):层次关系中,相同类型签名
是重载的一种特殊情况,但是只发生在由父类和子类关系的上下文中。
class parent{
public void example(int x){......}
}
class child extends parent{
public void example(int x){......}
}
10.1.3多态的形式-3
Parent p = new child();
10.1.3多态的形式-4
Template<class T> T max(T left,T right){
if(left<right)
return right;
else return left;
}
10.2软件复用机制
- 最常用的软件复用机制:继承和组合。
通过List类来构造一些列抽象
class List{
List();
void add(int);
int firstElement();
int size();
int includes(int);
void remove(int);
};
- 创建一个集合抽象,来执行:增加数值到集合;确定集合中元素的数目;检查集合中是否包含数值。
- 是一个or有一个
- 如果A类有一个B类,那么自然地,B类的数据字段也应该是一个A类实例的一部分。另一方面,如果A类是一个B类,那么使用继承是正确的编码方式。
10.2.1组合
- 提供一种利用已存在的软件组件来创建新的应用程序的方法。
class Set{
Set();//comstructor
//operations
void add(int);
int size();
int includes(int);
private:
List theData;
};
10.2.2继承
- 通过继承,新的类可以声明为已存在类的子类。通过这种方式,与初始类相关的所有数据字段和函数都自动地与新的数据抽象建立联系。
class set:public List{
public:
//constructor
Set();
//operations
void add(int);
int size();
};
10.2.3组合和继承的比较
- 组合是较为简单的一种技术。优点是在特定的数据结构中需要执行哪些操作。无需考虑列表类所定义的所有操作。
- 继承无法知道一个方法是否可以合法地应用于集合。
- 使用继承构件数据抽象的代码的简洁性是继承的一个优点。
- 继承无法防止用户使用父类的方法来操纵新的数据结构。