面向对象程序设计中的_继承_与_组合_

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
center=c; setRadius(r); } public void setRadius(int r){ radius=r; } public double area(){ return 3.14159*radius*radius; } } 在上述代码中,Point 类的定义保持 不变。而 Circle 不再是继承自 Point 类, Circle类包含一个 Point类型的成员变量 center和一个int型属性raidus,center用 于表示圆形的圆心,radius依然用于表示 圆形的半径。Circle类的构造方法相应的 也作了修改,使得我们可以用圆心和半 径初始化圆形对象。 上述代码与我们的思维方式吻合,显 得非常自然。
3.继承与组合的联系与区别
由上述,我们知道继承和组合都可 以由已有的类产生新的类,可以重用已 有的类库,提高了开发效率。
但是它们之间存在着区别。最主要 的是继承关系是一个“是一个”的关 系,若类 B 继承自类 A ,则类 B 的对象 也是类 A 的一个对象,具有类 A 中所有的 属性和方法。而组合关系是一个“有一 个”关系,如果类 A 与类 B 之间存在组 合关系,则类 A 的一个对象有一个类 B 的 对象。
和扩充新类的最有效的手段。通过继承来 重用代码时不需要修改原有的代码,具有 很好的进化性,并且能够减小代码和数据 的冗余度。
(2 )能改进软件系统的可维护性 类的继承层次结构自然地表达了人们
分析问题时所用的分类层次结构。因此按 照继承的方法开发出来的面向对象软件系 统具有更好的可理解性,从而改善了软件 系统的可维护性。另外还能通过增强一致 性来减少模块间的接口和界面,增强程序 的易维护性。
面向对象程序设计中的继承模拟了现 实世界中类别之间的层次关系。
所谓继承,就是在一个已有的类的 基础上创建一个新类,这个新类获得了 已有类的属性和方法,并且可以在新类 中增加新的数据和方法,或者修改已有 类的数据和方法。使用继承可以利用已
有的类型快速产生新的类型。 继承是两个类之间存在的一种关系。
若类 B 继承自类 A,则类 B 拥有类 A 中所 有的属性与方法,类 B 被称为子类,类 A 称为父类。
但是不少面向对象程序设计的书籍却 混淆了这两个概念,在应该使用组合的 时候,使用了继承。
许多面向对象程序设计的书籍中出现 了如下的代码(或类似的代码)[ 2 ,3 ,4 ]:
class Point{ int x,y;
-115-
信息科技
中国科技信息 2007 年第 14 期 CHINA SCIENCE AND TECHNOLOGY INFORMATION Jul.2007
面向对象的继承关系中,子类与父 类之间存在“是一个”的关系。若类 B 继承自类 A,则类 B 的对象也是类 A 的一 个对象,具有类 A 中所有的属性和方法。 例如:卡车类继承自汽车类,所有的卡 车都是汽车。
继承机制给面向对象程序设计方法带 来了以下的优点[1]:
(1 )继承性很好地实现了代码重用 继承是在已有类的基础上构造、建立
Point(int a,int b){ setPoint(a,b);
} public void setPoint(int a,int b){
x=a; y=bபைடு நூலகம் } } class Circle extends Point{ int radius; Circle(int a,int b,int r){
上接第 114 页
在设计报表时我们按学号进行分组,且将组 属性设置为“每组从新的一页上开 始”,设计的报表如图 2 所示。预览上面 报表可以将备注型字段内容显示出来,也可 将其打印出来, 只要联上打印机即可,打 印预览窗口如图 3 所示。
5 、结束语
通过对数据表中备注型字段的介绍,了 解了备注型字段内容的正确输入输出方法。 运用这些方法能有效处理数据表中备注型 字段的输入输出,特别是在表单中使用编辑 框控件输入输出更是可以做到所见即所得。 报表的使用为备注字段内容的打印输出提 供了便捷的手段。对备注型字段内容的有 效处理对管理信息系统的开发具有十分重 要的意义。
参考文献 [1] 张德惠,周元哲.C++面向对象程序设 计[M].第1版.北京:科学出版社.2005. [2] 邵丽萍,邵光亚,张后扬.Java语言程序 设计[M].第2版.北京:清华大学出版社. 2004. [3] 崔永红.C++面向对象程序设计[M].第 1 版.北京:北京出版社.2005. [4] 刘玉英 主编.程序设计基础—C++[M]. 第 1版.北京:人民邮电出版社.2006. 作者简介 曾煌存,男,硕士,助教。研究方向: 信息技术基础教育。
super(a,b); setRadius(r); } public void setRadius(int r){ radius=r; } public double area(){ return 3.14159*radius*radius; } } 以上代码定义了一个 P o i n t (点) 类,包含两个属性 x、y,分别代表点的 横坐标和纵坐标;包含一个构造方法和 一个设置点的坐标的方法 setPoint。定义 了一个 Circle(圆形)类,该类从 Point 类继承,添加了 radius 属性,表示圆的 半径;包含了一个返回圆的半径和返回 圆的面积的方法。因为 Circle 类从 Point 类继承,所以 Circle 还包含从 Point 类继 承得到的 x、y 属性,它们代表了圆心的 横坐标和纵坐标。 这段代码的设计意图是:在平面直 角坐标系中,点可以由横坐标和纵坐标 确定,因此 Point 类定义了两个属性 x、 y,分别表示点的横坐标和纵坐标。而圆 可以由圆心的位置和圆的半径确定,所 以 Circle 类应该包含圆心的位置、圆的半 径两个属性。又因为已经定义了 P o i n t 类,用于表示点,所以让 Circle 类从 Point 类继承,便可以从 Point 类得到 x、 y 属性,用于保存圆心位置的横坐标和纵 坐标。 这段代码可以正确地编译运行。可 以减少代码编写量,因为 Circle 类从 Point 类继承,就省去了声明两个变量用 于保存圆心的横坐标和纵坐标。
使用组合,该将上述代码改写为: class Point{
int x,y; Point(int a,int b){
setPoint(a,b); } public void setPoint(int a,int b){
x=a; y=b; } } class Circle{ Point center; int radius; Circle(Point c,int r){
继承和组合是面向对象程序设计中的 两个重要的机制,使用它们可以重用已有 的类库,提高开发效率。但是不少面向对 象程序设计的书籍混淆了这两个机制的用 法。本文阐述了继承和组合的联系和区别, 指出了一些书籍对它们的误用,并给出了 正确的用法。
1.继承
继承是面向对象程序设计的一个重要 特征。
现实世界是由物体组成的,每个物 体总是属于某个类别的。而类别之间存 在层次关系,例如:汽车类属于交通工 具类,小汽车类、卡车类、旅行车类等 又属于汽车类,轿车类、面包车类等又 属于小汽车类。
面向对象程序 设计中的“继承”与“组合”
曾煌存 广东外语艺术职业学院信息技术系 510640
摘 要 继承和组合是面向对象程序设计中的两个重 要的机制,使用它们可以重用已有的类库, 提高开发效率。但是不少面向对象程序设计 的书籍混淆了这两个机制的用法。本文阐述 了继承和组合的联系和区别,指出了一些书 籍对它们的误用,并给出了正确的用法。 关键词 面向对象程序设计;继承;组合
参考文献 [1]谢赝白,等.Visual FoxPro 6.0 程序设 计教程.北京:人民邮电出版社.2003 [2]郑尚志,等.Visual FoxPro 6.0 程序设 计教程 .合肥:安徽大学出版社.2002 [3]韩中孝,等.Visual FoxPro数据库系统 项目开发实践.北京:科学出版社.2005 作者简介 王亚军(1978 —)男,安徽涡阳县人,安徽 科技学院计算机系讲师,主要研究数据库及网 络 赵海燕(1977 —)女,安徽砀山县人,安徽科 技学院计算机系助教,主要研究程序设计及计 算机教学
当类 A 中的一个属性是类 B 的对象 时,称类 A 与类 B 之间存在组合关系。
组合关系是一个“有一个”的关 系,如果类 A 与类 B 之间存在组合关系, 则类 A 的一个对象有一个类 B 的对象。例 如:汽车类与发动机类存在组合关系, 每辆汽车都有一个发动机。
使用组合机制,我们也可以方便地从 已有的类中产生新的类。新的类中包含了 已有类的对象作为属性。
-116-
(3 )继承性使已有的程序库具有清 晰的层次结构
如果没有继承概念的支持,那么程序 库中所有的类就像一盘毫无关系的散沙, 管理和使用都十分不方便。可见继承还是 能管理已有代码的有力工具。
2.组合
现实世界中的物体都是由更加简单的 物体组成的。例如:汽车由发动机、车 门、轮胎等组成。
面向对象程序设计中的组合模拟了现 实世界中物体的组成关系。
但是这段代码并没有正确地使用继 承。在上述代码中,使用Cricle继承Point 类,不太妥当。因为圆形并不是点,所以 它们之间不是“是一个”的关系,不应该 让Circle类继承自Point类。
正确的做法应该是使用组合。Circle 类包含的属性包括:圆心和半径。因为 已经定义了 Point 类,我们可以让 Circle 类包含一个 Point 类型的对象用来表示圆 心。
相关文档
最新文档