现实生活中的许多事物具有共同特性。例如,狗和猫都是动物。多个类也可以有共同的特征。类之间的这种关系可由泛化关系来阐释。通过将共同的特征抽取到类的自身中,可使未来对业务模型的更改更为容易。
从另一个类继承一般特征的类被称为后代。被后代继承的类被称为祖代。泛化关系显示一个类继承另一个类。这意味着祖代的定义,包括任何属性或操作,对后代而言也是有效的。祖代的关系也被继承了。
尽管为更容易理解,应限制级别的数目,但是泛化关系可在若干阶段发生,这使得对复杂的、多级别的继承层次结构建模成为可能。一般特征被放置在继承层次结构的上部,特殊特征被放置在层次结构的下部。换句话说,泛化关系可用于对更为一般的概念的专门化进行建模。
示例:
在机场办理登机手续的乘客携带有不同种类的行李:普通行李、手提行李和特殊行李。从机场的角度来看,它们有一些共同的特征,除了都是行李之外,例如,每个包都有所有者和重量。可通过名为“行李”的、单独的类中的属性和操作对这些共同的特征进行建模。“普通行李”、“手提行李”和“特殊行李”将从该类继承。
“普通行李”类、“手提行李”类和“特殊行李”类有共同的特征。它们都是一般概念“行李”的专门化。
尽管一个类通常仅继承一个类,但它也可以继承其他多个类,这被称为“多重继承”。若类继承了若干类,检查关联、属性和操作是如何在祖代中命名的,这将非常重要。若在若干祖代中出现了相同的名称,您必须描述该名称对于特定的继承类的意义何在。
仅为被其他类继承而存在的类是抽象类。抽象类永不实例化。但是,继承抽象类的类的对象将遵循其自身的描述和被继承的类的描述。在业务中被实例化的类是具体类。
在此环境中,“抽象”指与日常用语中的意思完全不同的某些事物。若抽象类未代表某事物,那么在日常用语中该事物极有可能是抽象的。由于无法触及学校的课程,所以这些课程是抽象的现象或概念。但是,如果对学校的任务建模,则课程很可能与具体类(实例化的类)相似。类似地,若具体现象(例如产品和人)与其他类有共同的特征,就可认为该具体现象能生成抽象类。
使用继承的主要目的在于实现可适应改变的对象模型。但是,应小心使用继承:
-
继承仅是一种构建描述的方法。您使具有某些共同特征的现象直观化。
实现之后,您仍需找到无论何时使后代类实例化,都有能力同时执行祖代和后代的作业的员工。
由于不同的类构造型有不同的目的,从一个构造型的某个类到另一构造型的某个类的泛化关系将毫无意义。例如,若使业务工作者类继承业务实体,业务工作者将成为混合类。
|