首页 新闻 论坛 群组 Blog 文档 下载 读书 Tag 网摘 搜索 开源 FAQ 第二书店 博文视点 程序员
频道: 研发 数据库 中间件 信息化 视频 .NET Java 游戏 移动 服务: 人才 外包 培训
    图书品种:235680
       
热门搜索: ASP.NET Ajax Spring Hibernate Java

前一章我们讲述了如何通过声明类来创建新的类型。本章将探求真实世界中的对象之间的关系,以及如何用程序代码为这些关系建模。本章的注意力将集中在C#中通过继承(inheritance)而实现的具体化(specialization)。还将解释如果更具体的类的实例同时又是更一般的类的实例应该如何处理,这一过程又称多态(polymorphism)。最后是对密封(sealed)(不能具体化的类)、抽象(abstract)类(只能进行具体化的类)和所有类的根——Object类的探讨。

提示:VB6程序员注意了,与VB.NET一样,C# 也提供了完整的面向对象支持,包括继承、多态和封装。这些对于VB6程序员是相对比较新的概念。应该仔细研究这些概念,它们会影响你对类和应用程序的设计。

具体化与一般化

Specialization and Generalization

类及其实例(也即对象)并不是凭空存在的,它们存在于相互依存性和各种关系的网络中,就像我们这些社会动物生活在各种关系和类别的世界里一样。

“是”(is-a)关系就是一种具体化。当我们说狗(Dog)是哺乳动物(Mammal)时,指的是狗是具体的一种哺乳动物。它有所有哺乳动物都具备的特征(生育幼崽,用乳汁哺育,有毛发),但它又继而具有犬科的具体特征。猫(Cat)也是哺乳动物。因此它与狗都具备哺乳动物共有的一些特征,但它也有与狗不同的猫的一些具体特征。

具体化与一般化关系是相对的、层次化的。说关系是相对的,因为具体化与一般化正如硬币的两面。狗和猫是哺乳动物的具体化,而哺乳动物是狗和猫的一般化。

说这种关系是层次化的,因为由此可以创建关系树,其中具体化的类型从更一般的类型中分支出来。沿着这个层次向上移动时,就更趋一般化。比如,向哺乳动物移动时,就对都生育幼崽的狗、猫和马进行了一般化。相反沿着层次向下移动地,就更趋具体化。如猫对于哺乳动物而言就是备有爪(一种特征)而且会喵喵叫(一种行为)这些的具体化。

类似的,当我们说ListBox(列表框)和Button(按钮)都是Windows(窗口)时,意思是这些类型中有Window都具备的特征和行为。也就是说,Window对二者的共同特征和行为进行了一般化,而二者又具体具备了自己具体的特征和行为。

关于UML

UML(统一建模语言,Unified Modeling Language)是描述系统或业务的标准化“语言”。UML中很适合用于本章的是叙述类之间关系的图集。

在UML中,类用方框表示。类的名字写在方框上部,方法和成员(未必有)则列在方框下部。用UML对上述关系建模如图5-1所示。请注意箭头从具体类指向一般类。

图5-1:是(is-a)关系

注意到两个类有共同功能,然后将这种共性提取到一个共同的基类,是很常见的。这样可

以更大程度地重用代码,而且代码也易于维护。例如,假设我们创建了一系列如图5-2所示的对象。

图5-2:从Control派生

在傻乎乎地逐一处理了RadioButton(单选按钮)、CheckBox(复选框)和Command(命令)按钮后,很自然地会意识到,它们有一些共同的特征与行为,比Control要特殊,但比这三者任何一个又更一般化。可以将这种共性提取为一个共同的基类Button,然后进一步重排继承层次,如图5-3所示。这就是面向对象开发中如何使用一般化的例子。

图5-3:更进一步提取的层次

这个UML图描述了经过提取的类之间的关系,说明ListBox和Button都从Control派生而来,而Button反过来又具体化为CheckBox和Command。最后,RadioButton从CheckBox派生。因此,我们可以说RadioButton是一种CheckBox,而且也是一种Button,而Button都是Control。

当然这并不是唯一也未必是最好的组织这些对象的方式,但对于理解这些类型(类)的相关方式是一个很好的起点。

提示:实际上,虽然以上的对象层次确实反映了一些界面组件的组织方式,但我对于其模型与我自己认知的事实有异的系统总是非常怀疑,每次说RadioButton(单选按钮)是一种ChectBox(复选框)时,我都要三思,是否真的如此。我权且接受这种说法。可以认为单选按钮是一种支持互斥选择用法的复选框。这有点扩大定义了,而且可能表示设计上存在问题。

读书小趣味:pence

查看所有评论(0)条】

最近评论



正在载入评论列表...
热点评论