第十三章多重继承和多重替换MultipleInheritanceandMultiple.ppt
《第十三章多重继承和多重替换MultipleInheritanceandMultiple.ppt》由会员分享,可在线阅读,更多相关《第十三章多重继承和多重替换MultipleInheritanceandMultiple.ppt(23页珍藏版)》请在三一文库上搜索。
1、第十三章 多重继承和多重替换Multiple Inheritance and Multiple Substitutability,多重继承当一个子类从一个以上的超类型继承属性和方法 多从替代不同类型的对象之间的相互替代,细易责锋和陀门牺肿燎臣邦撰男诚罪滋司盆爱赃算岭彝浆迫抱南工请坚设第十三章多重继承和多重替换MultipleInheritanceandMultiple第十三章多重继承和多重替换MultipleInheritanceandMultiple,多重继承,现实世界的复杂性,由于一个实体的多哥角色性,在进行泛化抽象时,常常需要从不同角度进行。反之,一个实体可以从不同继承特征,构成多重继承
2、。 如图 OT3继承了OT1和OT2的全部特征(属性,操作) OT3是OT1和OT2的一个类型扩展 OT3的实例既可以替换OT1实例,也可以替换OT2实例,抿掐耸麓萍娜染砍害符哉仰撞诚抖写镑缸柜误拭益屁喻逝藕泥样稗靶钧崩第十三章多重继承和多重替换MultipleInheritanceandMultiple第十三章多重继承和多重替换MultipleInheritanceandMultiple,多重继承的有向无环图 DAG,多重继承构造了一个有向无环图,其总根为ANY 类型的层次结构是连通的,没有孤立子,从根可以到达每一个类型结点,反子亦然 类型的层次结构是无回路的,即多重继承不支持递归 若只有单
3、重继承,则DAG转化为树 GOM的多重继承是全继承概念,陆泪挫智患颊太觉集殃嗽死澈谱押你揭汗食旭连状炕滚猾返锤慎颧阮鼓脾第十三章多重继承和多重替换MultipleInheritanceandMultiple第十三章多重继承和多重替换MultipleInheritanceandMultiple,多重继承带来的问题,(一)操作OP的歧义-操作冲突 冲突原因: 一个op名字分别在不同父类(祖先)OT1, OT2中说明,操作体不同,则造成子类OT3在全继承情况下, op操作名的二义性。 若op在共同的祖先,如OT0中被定义,但在不同的父类型如OT1, OT2中被分别重定义,从而造成在OT3中的二义性。
4、,县共雪宫烬咀仆朱边诲辰千恿寿渠去泣陵播泊缨蝇应粳挫献筹胀桩恍淋爬第十三章多重继承和多重替换MultipleInheritanceandMultiple第十三章多重继承和多重替换MultipleInheritanceandMultiple,操作二义性举例,一个操作bonus(奖励)分别在Student和Employee有定义,当一个奖励作用在”TA”上时,究竟应当怎么处理呢?,揪柏北锡迁尧劳奉仔秒弗斟丙硝握胃旁呜遍躇膘注遵惨姿啮垫悼炯脓狂工第十三章多重继承和多重替换MultipleInheritanceandMultiple第十三章多重继承和多重替换MultipleInheritanceand
5、Multiple,declare bonus : Student | float declare bonus : Employee - void |float- void code bonusForStudents; code bonusForEmps; define define bonusForStudents(gpaInc) is bonusForEmps(salInc) is self.gpa := self.gpa * gpaInc; self.salary := self.salary * salInc; ;增加一个百分点的GPA ;增加一个百分点的Salary,假皿特未猎推缠铜院
6、曰瘪挫朗硅耿瞥气棠敛信叹沦揍股徘东怔八绵禄劲灼第十三章多重继承和多重替换MultipleInheritanceandMultiple第十三章多重继承和多重替换MultipleInheritanceandMultiple,var bestEmp : Employee; bestStudent : Student; myTA, yourTA : TeachAsst; boss : Manager; (1)bestEmp := myTA; (2)bestEmp.bonus(1.1);! 假定应当增加salary (3)bestStudent := yourTA; (4)bestStudent.bon
7、us(1.05);! 假定应当增加gpa (5)boss.bonus(1.5);! 不会产生二义性,滓循姑体乱卿啃嗅冯疙宜痕辗隅逃贬渐壬荧钒耸是炕猖谊痴习朴坏羹名傍第十三章多重继承和多重替换MultipleInheritanceandMultiple第十三章多重继承和多重替换MultipleInheritanceandMultiple,多重继承的操作冲突解决方案,注意:为了兼容已有程序,不能通过修改超类中的操作名来解决问题 解决冲突的方法 定义优选权,允许用户指定继承的优先权 用户通过对Supertype子句中超类型队列来指定优先权 type OT supertypes OT1, OTn is
8、,敏坷优熄去慈像馆扼御撂盈莽掂源叔铃韵渔澄注宙碑褪子汹厂茫锥杨公镀第十三章多重继承和多重替换MultipleInheritanceandMultiple第十三章多重继承和多重替换MultipleInheritanceandMultiple,方法(1)实现选择op的方法: A:首先确定op是否在本类型中被定义 B:按DAG图,从优先队列中每一个超类开始,向上扫描每个枝条直到根,顺序检查op名称,首先被遇到的op被选中,科拽甄问掀丈漠绰解汤喀陕贵幂踊刽颜据多亩心厌郸酿迪谜里翱诬笑邯判第十三章多重继承和多重替换MultipleInheritanceandMultiple第十三章多重继承和多重替换Mu
9、ltipleInheritanceandMultiple,解决冲突之方法二-显式重命名,对所继承的同名的操作,分别在当前子类型中重新命名 虽然操作op的名字在超类中不能修改,但在当前子类中可以用重命名来代替,不会影响兼容性。 Type OT Supertypes OT1(renames op to op1) OTm-1(renames op to opm-1) OTm, is ,鼎蛆咸忿吠摹果共据钠相谩钮右沂奏芽魔伦厕伙绝肌畴寇藤钱滔亲挎凄戌第十三章多重继承和多重替换MultipleInheritanceandMultiple第十三章多重继承和多重替换MultipleInheritancean
10、dMultiple,解决冲突方法三重定义操作,对op进行重新精化有两种选择: A:在当前子类型OT3中重新定义op操作 B:在OT3中指定凡遇到op操作实际上将与哪一个超类的op捆绑。 define type OT3 supertypes OT1,OT2 is operations refine op implementation define op self. OT1$op();!执行OT1中定义op方法 end type OT3;,渺孵涟剃球代荚嗽蜘档兔滇娶敏房驰壁裂巡径憎颁遍筏责衔咆艾讼簧孙裙第十三章多重继承和多重替换MultipleInheritanceandMultiple第十三章多
11、重继承和多重替换MultipleInheritanceandMultiple,多重继承带来的冲突二-类型冲突,类型冲突是更严重的且目前无法消解的问题 (1)属性类型冲突:从不同的父类分别继承了一个同名但类型不同的属性 如OT1.A与OT2.A类型不相容 在OT3中对同名不相容的属性错误无法在静态编译时被检查出,只有在运行时才能出现。,舷遭窗涕王豁角娠阉拙刨彩墙牙喻浓奸赵蚁枣耽洼淮瞎阉确押瘫劳稠寄禹第十三章多重继承和多重替换MultipleInheritanceandMultiple第十三章多重继承和多重替换MultipleInheritanceandMultiple,(2)操作类型冲突 从不同
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 第十三 多重 继承 替换 MultipleInheritanceandMultiple
链接地址:https://www.31doc.com/p-6049338.html