通过前面的学习,相信读者已经对接口和抽象类有了更具体认识。接口和抽象类都包含着未实现的方法声明。抽象类必须为在该类的基类列表中列出所有成员以便让实现类实现,但接口允许空方法。......
2023-11-04
以Java语言为例,来说明接口与抽象类的区别。在Java语言中,abstract class和inter-face是支持抽象类定义的两种机制。正是由于这两种机制的存在,才赋予了Java强大的面向对象能力。abstract class和interface之间在对于抽象类定义的支持方面具有很大的相似性,甚至可以相互替换。因此很多开发者在进行抽象类定义时,对于abstract class和interface的选择显得比较随意。其实,两者之间还是有很大的区别的,对于它们的选择甚至反映出对于问题领域本质的理解,对于设计意图的理解是否正确、合理。本节将对它们之间的区别进行剖析,试图给开发者提供一个在二者之间进行选择的依据。
在面向对象的概念中,所有的对象都是通过类来描绘的,但是反过来却不是这样。并不是所有的类都是用来描绘对象的,如果一个类中没有包含足够的信息来描绘一个具体的对象,则这样的类就是抽象类。抽象类往往用来表征在对问题领域进行分析、设计中得出的抽象概念,是对一系列看上去不同,但本质上相同的具体概念的抽象。比如,如果进行一个图形编辑软件的开发,就会发现问题领域存在着圆、三角形这样一些具体概念。它们是不同的,但是它们又都属于形状这个概念,形状这个概念在问题领域是不存在的,它就是一个抽象概念。正是因为抽象的概念在问题领域没有对应的具体概念,所以用以表征抽象概念的抽象类是不能够被实例化的。
在面向对象领域,抽象类主要用来进行类型隐藏。我们可以构造出一组固定行为的抽象描述,但是这组行为却能够有任意个可能的具体实现方式。这个抽象描述就是抽象类,而这一组任意一个可能的具体实现,则表现为所有可能的派生类。模块可以操作一个抽象体。由于模块依赖于一个固定的抽象体,因此它可以是不允许修改的,通过从这个抽象体派生,也可扩展此模块的行为功能。
抽象类与接口的区别如下:
1)在abstract class方式中,可以有自己的数据成员,也可以有非abstract的成员方法。而在interface方式的实现中,只能够有静态的不能被修改的数据成员(也就是必须是static final的,不过在interface中一般不定义数据成员),所有的成员方法都是abstract的。从某种意义上说,interface是一种特殊形式的abstract class。
2)abstract class在Java语言中表示的是一种继承关系,一个类只能使用一次继承关系(因为Java不支持多继承)。但是,一个类却可以实现多个interface。(www.chuimin.cn)
3)在abstract class的定义中,可以赋予方法的默认行为。但是在interface的定义中,方法却不能拥有默认行为。为了绕过这个限制,必须使用委托,但是这会增加一些复杂性,有时会造成很大的麻烦。
4)实现抽象类和接口必须实现其中的所有方法。抽象类中可以有非抽象方法,接口中则不能有实现方法。
5)接口中定义的变量默认是public static final型,且必须给其初值,所以实现类中不能重新定义,也不能改变其值。接口中的方法默认都是public与abstract类型的。
6)抽象类中的变量默认是friendly型,其值可以在子类中重新定义,也可以重新赋值。
抽象类与接口都位于继承树的上方,都不能被实例化,都可以包含抽象方法。但前者可以提供默认实现,后者必须包含抽象方法。接口一旦确定就不能随意改动了,否则会带来太多的麻烦,所以接口一般用来作为纯粹的规格描述。接口不要求它的实现类在语义上是同一类型,所以要是非同类型的相同方法可以使用接口,利于继承树的合理化。接口是系统最高层次的抽象类型,抽象类则是介于“抽象”与“实现”之间的半成品,力所能及地完成了部分实现。定制模式就是一种接口颗粒度细化的设计模式。抽象类为了逻辑的封装,包含部分实现,同时要求子类必须按照某种方式实现。
有关信息系统开发方法与实践教程的文章
通过前面的学习,相信读者已经对接口和抽象类有了更具体认识。接口和抽象类都包含着未实现的方法声明。抽象类必须为在该类的基类列表中列出所有成员以便让实现类实现,但接口允许空方法。......
2023-11-04
UML是一种通用建模语言,它本身具有的可扩展性使其不仅可以用于软件系统开发各个阶段的建模,也可以用于商业和其他几乎所有类型的建模。总体来说,UML由以下几个部分构成。模型元素UML中的模型元素包括事物以及事物之间的联系。通用机制UML提供的通用机制可以为模型元素提供额外的注释、信息或语义。UML的组成结构如图6-1所示。图6-1 UML结构图用例图和类图是面向对象系统开发的重点内容。......
2023-11-23
这一阶段的任务主要由系统分析员来完成。系统分析阶段是系统详细开发的关键性阶段,关键在于“理解”和“表达”。这是对系统进行概要描述的工具,是系统分析的核心内容。......
2023-11-23
信息系统的开发具有长期性、复杂性和风险性,需要科学的方法论作指导。常用的信息系统开发方法有结构化系统开发方法、面向对象系统开发方法和原型法三种。像决策支持系统这种具有开发性而无固定需求范围的系统,更适合用原型法进行开发。图1-15 原型法的开发过程本书的第2~5章主要讲述的是结构化的系统开发方法;第6~15章,主要介绍的是面向对象的系统开发方法。......
2023-11-23
信息系统在使用过程中随着其生存环境的变化,要不断维护和修改,当它不再适应的时候就要被淘汰,需要由新系统代替老系统,这种循环周期被称为信息系统的生命周期。信息系统的生命周期及生命周期的五个阶段如图1-13所示。......
2023-11-23
顺序图与协作图极为相似,描述的主要元素都是对象和消息。本节详细总结顺序图与对象图的相同和不同之处。对象被放置在顺序图相对应的创建时间点位置。协作图不能表示对象的创建与结束,只能表示对象的存在与否。图11-4 客户还车顺序图图11-5 客户还车协作图......
2023-11-23
继承是指子类可以自动拥有父类的全部属性和操作。另外如图7-2所示,表示出了几种类之间的继承关系,位于上层的类是下层类的直接或间接父类,最下层是几种类实例化成的对象。图7-1 继承的描述图7-2 继承的例子继承性又分为单重继承和多重继承两类。单重继承时一个子类只能有一个父类,多重继承时一个子类可以有多于一个的父类。单重继承构成的类之间关系是一棵树,多重继承构成的类之间的关系是一个图。继承具有传递性。......
2023-11-23
相关推荐