文档介绍:第五章继承性和派生类
在第四章,讨论了类的构造设计,主要是解决信息封装单元的程序设计问题。这一章则要进一步讨论类之间的相互关系,集中解决继承机制的程序表达问题。
本章目的:
.了解继承隆在面向对象中的重要地位
.了解类的层次关系对于继承性的需要
.了解软件设计模块化对于继承性的需要
.掌握派生类的构造
.掌握成员访问机制
.掌握多继承和虚基类
类层次、数据抽象和模块化
客观世界中的对象既具有共性,也具有个性。人类认识复杂世界的一件强有力的工具就是抽象。通过抽象,获得了主要的、起控制作用的特征,而摒弃了次要的无足轻重的特性,使得认识可以有效而完整地进行下去。通过抽象,人们发现某些事物的相似性远大于他们之间的差异,因此这些事物可以归为一类。分类(classification)大降低了认识对象的复杂程序。
抽象的程度不同,分类的层次就会不同。抽象的程序是根据要研究的问题的范围和复杂程度来确定的。。(P138)
不同层次的类之间体现了概括(generalize)和特化(specify)的关系。概括是从某些具有共性的对象或类中提取抽象出高一层的类。反之由高层次类可以衍生出低层次的对象或子类。它们之间是“is-a“的关系。即低层次类的每个实例也是高层次的类的实例。
把高层次的类称为父类、超类或基类,把由该类特化产生的低层次类称为子类或派生类。派生类不仅具有基类的属性和行为,还具有自己特有的属性和行为。
这种普遍存在的类层次关系必须在系统中有充分体现,并在语言机制上给予支持,继承机制就是体现这一关系的工具,在许多面向对象的语言中,都提供了反映继承模型的编程方法和工具。
需要说明的是,可以按照客观世界中存在的类层次关系,也可以不按照这种层次关系来设计系统。如将本来没有明显层次关系的类设计为基类与派生类的关系。也就是说,类层次关系的设计取决于具体问题。
根据父类与子类的关系,继承可分为四类:替代继承、包含继承、限制继承和特化继承。
在不同类之间,除了概括和特化的关系之外,还有聚合和分解的关系。即“is-part-of ”的关系。聚合不宜用继承表示,在C++中提供了一个很好的机制——类的属性描述。
软件设计模块化
软件质量包括外部和内部质量,其中最重要的是外部质量。
外部质量是指与用户和维护人员相关的因素,其中最重要的5点是:正确性(correctness)、健壮性(robustness)、可扩充性(extendibility)、可复用性(reusability)patibility)。可扩充性和可复用性是当今软件工程强调的重点。
获得满意的软件质量的途径就是“模块化”。模块化的完整定义由5个标准和5个原则组成。这5个标准是:模块可分解性(modular posability)、模块可结合性(posability)、模块可理解性(modular understandability)、模块连续性(modular continuity)、模块保护性(modular protecttion)。这5个原则是语言模块单元(linguistic modular units)、少接口(few interfaces)、接口弱耦合性(small interfaces)、显式的接口(explic