OOD启思录笔记

不知道如何实例化对象的类称为抽象类(abstract class)。知道如何实例化对象的类称为具体类(concrete class)。

在面向对象范型中,抽象类的一个重要用途是帮助创建继承层次结构。

如果我拿起一只闹钟对你说:“你觉得我的水果怎么样?”你会认为我疯了;而如果我拿起一只苹果问同样的问题,你就会觉得很正常。“水果”这个称谓表达了有用的信息,虽然你不能创建水果对象。事实上,它是一个类的(概念),但不知道如何实例化它这种类型的对象。

引擎中包含活塞,引擎有最大马力。活塞是有行为的,因此被建模成类,而最大马力只是一个描述性的属性,没有行动。

继承关系是面向对象范型中比较重要的关系之一。用它来表示数之间的“a-kind-of”关系是最好不过了。它的主要用途有两种,它被用作表示两个类之间的共性机制(泛化),还用来表示一个类是另一类的特殊类型(特化)。

决定性的问题是,“这个属性的值是否影响类的行为”?

对属性值的显示的分情况分析常常是错误的。类应当解融合成一个继承层次结构,每一个属性值都被换成一个派生类。

如果你觉得需要在运行时创建新的类,那么退后一步以认清你要创建的是对象。现在,把这些对象概括成一个类。

在派生类中用空方法(也就是什么都不做的方法)来覆写基类中的方法应当是非法的。

只要在面向对象设计中用到了继承,问自己两个问题:
1.派生类是否是它继承的哪个东西的一个特殊类型?
2.基类是不是派生类的一部分?

如果你在一个面向对象设计中发现了多重继承关系,确保没有哪个基类实际上是另一个基类的派生类。

你可能感兴趣的:(ood启思录)