第十章 继承 (Inheritance)

第十章 继承 (Inheritance)

ID:46384128

大小:235.00 KB

页数:54页

时间:2019-11-23

第十章 继承 (Inheritance)_第1页
第十章 继承 (Inheritance)_第2页
第十章 继承 (Inheritance)_第3页
第十章 继承 (Inheritance)_第4页
第十章 继承 (Inheritance)_第5页
资源描述:

《第十章 继承 (Inheritance)》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、第十章继承(Inheritance)继承是面向对象系统的重要特性之一,它支持泛化和特化两方面的抽象。对继承概念的需求:—一个类型仅适合于结构和操作相同的对象实例集—当类型需要在结构和操作上有所扩充或变异时如何处理?方式1:定义一个新的类型问题:⑴缺乏可重用性,⑵缺乏灵活性,方式2:用继承概念定义子类型示例:persistenttypePersonispublicname,age,spouse,marrybody[name:string;age:int;spouse:Person;]operationsdecla

2、remarry:Person—>void;…implementationdefinemarry(victim)isself.spouse:=victim;…endtypePerson;persistenttypeEmployeeispublicname,age,spouse,marry,ss#,bossbody[…]operationsdeclaremarry:Person—>void;…implementationdefinemarry(victim)isself.spouse:=victim;…endtyp

3、eEmployee;引用语句:varmickeyMouse:Employee;miniMouse:Person;mickeyMouse.marry(miniMouse);//合法,miniMouse是PersonminiMouse.marry(mickeyMouse);//非法,mickeyMouse非Person★以上方式无法体现一个雇员也是一个Person的语义继承和子类型的一般概念继承支持类型间的is-a联系继承含有三方面语义:1.—特化/泛化的抽象语义2.—子类型是父类型的一个扩展3.—可替换性语义(S

4、ubstitutability)继承的泛化抽象概念类型的继承设计是一个抽象过程:由子类—超类是逐级的泛化抽象过程其中:OTsuper为OTsub的超类,OTsub为OTsuper的子类,OTsubis-aOTsuper强调了任何属于OTsub的对象也属于OTsuper。OTsuperOTsubis-aOTsuperOTsubis-aOTsuperOTsub当OTsubis-aOTsuper时说明:⑴—子类型OTsub的一个实例继承了OTsuperType的所有特征(结构、操作),包括OTsuper从祖先继承来的

5、所有特征⑵—子类型OTsub的一个实例还具有OTsubType自定义的独特的结构和操作从类型上看,子类型是超类型的一种扩展示例:PersonEmployeeis-aspouseagesalarybossss#namepersistenttypeEmployeesupertypePersonispublicss#,salary,boss,isRetired//public语句也被继承body[ss#:int;salary:float;boss:Employee;]operationsdeclareisRetire

6、d:—>bool;return(self.age>64);…endtypeEmployee;继承解决了类型间的代码和结构的可复用性继承的可替换性概念OTsubis-aOTsuper从可替换性角度而言,强调了属于OTsub对象实例中的任一个实例对象,也属于OTsuper的实例集合即:若o∈ext(OTsub)则o∈ext(OTsuper)因此ext(OTsub)是ext(OTsuper)的一个真子集任何一个子类的实例都可以被替换为超类的实例Person类型的特征定义●name●age●spouse●marryEm

7、ployee类型的特征定义●ss#●salary●boss●isRetiredoPersonoEmployee子类型Employee包含了超类型Person的所有属性如果仅针对Person特征的访问,客户无法区别被访问的对象是Person还是Employee因此,可以使用替换法则,在所有对Person引用的地方,用一个Employee实例不会破坏一致性解决了类型特化后的灵活性问题编译通过放松对类型检查(引用和参数的哑实结合时)的约束来解决子类型实例对超类型实例的可替换性typeType1istypeType2i

8、stypeType3ispublicA→,A←supertypeType1issupetypeType2isbody[A:…];publicB→,B←publicC→,C←…body[B:…];body[C:…];endtypeType1;……endtypeType2;endtypeType3;Type1AType2BType3CTypesis-ais-aA:…A:…B:…A:…B:…

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。