第十章继承Inheritance.ppt
《第十章继承Inheritance.ppt》由会员分享,可在线阅读,更多相关《第十章继承Inheritance.ppt(54页珍藏版)》请在三一办公上搜索。
1、第十章 继承(Inheritance),继承是面向对象系统的重要特性之一,它支持泛化和特化两方面的抽象。对继承概念的需求:一个类型仅适合于结构和操作相同的 对象实例集 当类型需要在结构和操作上有所扩充 或变异时如何处理?方式1:定义一个新的类型 问题:缺乏可重用性,缺乏灵活性,方式2:用继承概念定义子类型,示例:persistent type Person is public name,age,spouse,marry body name:string;age:int;spouse:Person;operations declare marry:Person void;implementati
2、on define marry(victim)is self.spouse:=victim;end type Person;,persistent type Employee is public name,age,spouse,marry,ss#,boss body operationsdeclare marry:Person void;implementation define marry(victim)is self.spouse:=victim;end type Employee;,引用语句:var mickeyMouse:Employee;miniMouse:Person;mickey
3、Mouse.marry(miniMouse);/合法,miniMouse是Person miniMouse.marry(mickeyMouse);/非法,mickeyMouse非Person以上方式无法体现一个雇员也是一个Person的语义,继承和子类型的一般概念,继承支持类型间的 is-a 联系继承含有三方面语义:1.特化/泛化 的抽象语义 2.子类型是父类型的一个扩展 3.可替换性语义(Substitutability),继承的泛化抽象概念,类型的继承设计是一个抽象过程:由子类 超类是逐级的泛化抽象过程其中:OTsuper 为 OTsub 的超类,OTsub为OTsuper的子 类,OTs
4、ub is-a OTsuper强调了任何属于OTsub 的对象也属于OTsuper。,OTsuper,OTsub,is-a,OTsuper,OTsub,is-a,OTsuper,OTsub,当OTsub is-a OTsuper 时说明:子类型OTsub的一个实例继承了 OTsuper Type的所有特征(结构、操 作),包括OTsuper从祖先继承来的 所有特征 子类型OTsub的一个实例还具有 OTsub Type自定义的独特的结构 和操作从类型上看,子类型是超类型的一种扩展,示例:,Person,Employee,is-a,spouse,age,salary,boss,ss#,name,
5、persistent type Employee supertype Person is public ss#,salary,boss,isRetired/public语句也被继承 body ss#:int;salary:float;boss:Employee;operations declare isRetired:bool;return(self.age64);end type Employee;继承解决了类型间的代码和结构的可复用性,继承的可替换性概念,OTsub is-a OTsuper 从可替换性角度而言,强调了属于OTsub对象实例中的任一个实例对象,也属于OTsuper的实例集合
6、 即:若 oext(OTsub)则 oext(OTsuper)因此ext(OTsub)是ext(OTsuper)的一个真子集任何一个子类的实例都可以被替换为超类的实例,oPerson,oEmployee,子类型Employee包含了超类型Person的所有属性如果仅针对Person特征的访问,客户无法区别被访问的对象是Person还是Employee 因此,可以使用替换法则,在所有对Person引用的地方,用一个Employee实例不会破坏一致性解决了类型特化后的灵活性问题编译通过放松对类型检查(引用和参数的哑实结合时)的约束来解决子类型实例对超类型实例的可替换性,type Type1 is
7、type Type2 is type Type3 is public A,A supertype Type1 is supetype Type2 is body A:;public B,B public C,C body B:;body C:;end type Type1;end type Type2;end type Type3;,Type1,A,Type2,B,Type3,C,Types,is-a,is-a,A:,A:B:,A:B:C:,id1,id2,id3,Instances,Type1,Type2,Type3,ext(Type1),ext(Type2),ext(Type3),从实例集
8、合的角度来看 超类Type2的实例集合是Type1集合的真子集,Type3是Type2的真子集类型的实例集合构成了对象的一个类别 class的概念继承的传递构成了类型的层次结构从类型定义的角度来看,子类型是超类型的一个扩展 子类型包含了超类型,类型层次结构的根:ANY,对于数据库而言,所有对象具有共同特征:对象标识OID 对象标识的测试 标识的识别 用户不可见的系统操作建立一个根类型为ANY来承接所有的共性操作,ANY,OT1,is-a,OTn,is-a,is-a,is-a,is-a,is-a,is-a,is-a,Cylinder,ConicalPipe,Pipe,innerRadius2,r
9、adius2,innerRadius,center2,center1,radius,综合举例,persistent type Cylinder is public center1,center2,radius,length,volume body center1:Vertex;center2:Vertex;radius:float;operations declare length:float;declare volume:float;implementation define length is return self.center.distance(self.center2)define
10、volume is return self.radius*2.0*3.14*self.length;end type Cylinder;,persistent type Pipe supertype Cylinder is public innerRadius body innerRadius:float;operations declare hollowBodyVolume:float;refine volume:float;implementation define hollowBodyVolume is return self.innerRadius*2.0*3.14*self.leng
11、th;define volume is return super.volume-self.hollowBodyVolume;end type Pipe;,继承概念下得操作重定义,对于从超类继承而来的操作,如果子类型有特殊的操作扩展,GOM支持对被继承的操作重定义重定义用refine标识,对操作体进行重写,即定义子类型自己的操作版本重定义的作用:既支持了操作的继承,又支持了子类型的特殊需求子类型仍然可以引用超类中定义的各种算法例如:在pipe中用Super.volume来引用Cylinder中的体积计算方法,重定义操作的动态捆绑(Dynamic Binding),需要有一个控制机制保证对重定义操
12、作的正确引用,即保证接受者对象能引用它所需要的最特殊的操作方式该控制机制不能通过静态的类型检查实现 原因:可替代性原理支持实例的类型替换,而不考虑是否真需要一个超类型,因此,在编译时确定操作的版本是不可能的只能在运行时动态检查接受者类型并进行相应操作的动态捆绑.,示例:一个Cylinder对象实例库这是一个合法的DB状态 根据可替换性,id2,id3插入到CylinderSet中时合法的,id1,id2,id3,manyCylinders,id0 CylinderSet,center1:id13center2:id23radius:10.0,id1 Cylinder,center1:id37c
13、enter2:id49radius:5.0innerRadius:2.5,id2 Pipe,center1:id55center2:id77radius:10.0innerRadius:5.0radius2:20.0innerRadius2:10.0,id3 ConicalPipe,示例:在id0上的一个体积计算迭代操作 var c:Cylinder;totalVolume:float;foreach(c in manyCylinders)totalVolume:=totalVolume+c.volume;在foreach的循环中,在语句c.volume执行中,控制机制需要随着接受者对象c的类
14、型的不同选择相应的Volume版本。,一般的动态捆绑选择机制,从当前接受者对象的直接类型开始,沿着继承的层次结构中指向根ANY的路径进行搜索,所遇到的第一个操作的实现体被执行该控制机制能保证相对于接受者对象的最特殊的版本被执行。,GOM设计追求的两个基本目标:模型的灵活性:利用继承的子类型定义和可替换性原则提供了模型的高度灵活性。即一方面可以逐级抽象,另一方面通过重定义操作可以满足子类型的特殊要求,并利用可替换性,用户可以沿类型层次上下结合,变换角色。类型设计的类型安全:通过静态类型检查保证不能发生由于类型的不一致所导致的运行错误这两个要求互相矛盾,如何在保证类型安全下获得最大灵活性,基于可替
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 第十 继承 Inheritance

链接地址:https://www.31ppt.com/p-4723321.html