VB分布式应用程序开发随记---继承的两个方面

来源:互联网 发布:javbus域名更新2017 编辑:程序博客网 时间:2024/05/19 12:41

    继承是一种以实体间的“是”关系为基础的面向对象的概念。到目前为止,我已使用术语“实现继承”来代替使用更通用的术语“继承”,这是因为使用子类扩展超类是唯一一种平衡“是”关系的方法。当类实现接口时,它还将利用“是”关系。例如,如果类CBeagle实现接口IDog,那么说猎犬“是”小狗是正确的。您可以在任意需要与IDog兼容的对象的情况下使用CBeagle对象。

基于接口的编程方式是以继承的第二种形式“接口继承”为基础的。一般来说,继承不需要重用方法实现。相反,对于继承唯一真正的要求是,子类实例必须与所扩展的基类型兼容。所扩展的基类型可以是类,也可以是用户定义的接口。无论是哪种情况,您都可以使用基类型引用来与多种不同类型的对象进行通信。这使得两种形式的继承都可以获得多态。

   虽然实现继承和接口继承都提供了多态,但是当要使用封装时,它们却有很大的不同。实现继承是以白盒重用为基础的。它使子类可以知道它所扩展的超类的细节。这使得子类可以隐含地重用超类的方法实现和数据属性。在重用状态和行为方面,实现继承的功能要比接口继承的功能强大许多。但是,这种重用是要付出代价的。白盒重用中的封装损失限制了基于实现继承的应用程序的可伸缩性。

正如术语“黑盒重用”所体现的,接口继承强化了封装的概念。在类中严格地遵守实现的封装使得可以进行更具伸缩性的应用程序设计。基于接口的编程方式解决了很多与白盒重用有关的问题。但是,要评价这种编程方式,您必须接受“获得的利益要大于付出的代价”的思想。这对于很多程序员是需要进行一些思想斗争的。

   当类实现接口时,它就承担了提供一组方法实现的义务。子类的作者必须在决定决定实现接口时编写一些额外的代码。当与实现继承进行比较时,它看上去似乎需要进行更多的工作。当从类继承时,大多数工作都已经完成,但是,当从接口继承时,工作却刚刚开始。乍一看,实现继承看上去更像是奶酪三明治,而接口继承看上去更像是一碗蒸制的椰菜。您必须超越拥有奶酪三明治就认为达到较高级别的接口的思想。接口继承与实现继承相比,主要的优点在于,它不会以牺牲应用程序的扩展性来获得紧密的联系。

原创粉丝点击