资源描述:
《第十章 继承 (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:…