好的面向对象程序设计的优点

本主题是对开始于“公有集合示例:稻草盖的房子”一节,并在“私有集合示例:树枝盖的房子”和“创建自己的集合类:砖块盖的房子”一节中继续作了讨论的代码示例的结果进行总结。在开始本主题之前,请先阅读一下那些主题。

创建 Employees 集合类,其结果是产生了一种非常清晰、模块化的编程风格。这个集合的所有代码都在集合类中(封装),从而减小了 SmallBusiness 类模块的大小。如果 Employee 对象的集合出现在对象分层结构的不止一处,那么重用集合类将不需要复制任何代码。

增强集合类

可以为自己的集合类实现附加的方法和属性。例如,可以实现 Copy 和 Move 方法,或者包含 SmallBusiness 对象引用的只读 Parent 属性。

也可以添加事件。例如,每当 Add 或者 Remove 方法更改集合中的项数时,可以产生一个 CountChanged 事件。

强健性,强健性,强健性

并不总是必须以可能的最强健的方式来实现集合。不过,面向对象编程的一个优点是代码重用;重用对象比起复制源代码来要容易的多,而且如果使用的是强健的、封装的代码,则会更安全些。

一位精明的人说过:“如果想书写真正强健的代码,一定要假设会发生真正糟糕的事情。”

集合类和部件软件

如果使用的是 Visual Basic 的专业版或者企业版,可以将自己的工程转变成 ActiveX 部件,这样,同组的其他程序员就可以使用已经创建的对象了。

实现集合类的步骤

下面的清单总结了创建集合类所需要的步骤。

  1. 将类模块添加到工程中,并为它起一个名字—通常是该集合类将包含的对象名的复数形式。(请参阅本章前面的“命名属性、方法和事件”一节。)

  2. 将私有变量添加进去,该私有变量包含对属性和方法所委派的 Collection 对象的引用。

  3. 在 Class_Initialize 事件过程中,创建 Collection 对象。(如果希望将该对象的创建时间推迟到需要时,可以在第二步中将私有变量声明为 AS New Collection。这样每次访问 Collection 时会增加少量开销。)

  4. 将 Count 属性和 Add、Item 以及 Remove 方法添加到类模块中;在每种情况下,通过调用其相应的成员,委派给私有的 Collection。

  5. 实现 Add 方法时,通过只接受一种类型的对象,可以覆盖 Collection 对象的无鉴别力的 Add 方法。甚至可以不让外部创建的对象添加到自己的集合中,这样Add 方法就完全控制了对象的创建和初始化。

  6. 用“过程属性”对话框,使“Item”方法成为集合类中缺省的方法。

  7. 象下面显示的那样,添加一个“NewEnum”方法。用“过程属性”对话框来将其标志为隐藏的,并将一个值为 -4 的过程标识符给它,这样,它就可以使用 For Each ... Next。
    Public Function NewEnum() As IUnknown
    Set NewEnum = mcol.[_NewEnum]
    End Function
    

    注意   上面的代码假设第二步中的私有变量被命名为 mcol

  8. 将自定义属性、方法和事件添加到集合类中。

注意   在 Visual Basic 的专业版和企业版所包括的 Class Builder 实用工具,可用来创建集合类。就可以定制所得到的源代码。

详细信息   可以在《部件工具指南》中的“创建 ActiveX 部件”中读到更多关于软件部件的信息。