第十一章 虚类型,Virtual Type.ppt

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第十一章 虚类型,Virtual Type.ppt

第十一章 虚类型,Virtual Type 两个难题在继承抽象时经常出现: 1.由于信息的缺乏,从子类型中抽象出来的操作在父类型中不能实现 2.从逻辑概念上提取出来的操作概念,在各子类型上都有不同的外特征.因此,不可能用同一个操作体现 解决方案 定义一个虚拟的超类型,虚类型的特点为: ---只有操作说明,而无实现部分,其实现部 分由各子类型重定义实现体 ---它不能被实例化,即它没有自身的实例 对象 ---GOM的根ANY是一个内嵌的虚类型 它是整个类型框架的根,它无实例对象 几何体类型框架示例 示例需求分析 在一般的几何体类型结点上.例如.体积,重量等操作均无法描述它们的实现体,因为缺乏结构信息. 这些操作在不同的几何体上其计算各不相同 有些操作又需要定义在一般几何体结点上,例如:计算全部几何体集合的总重量和总体积: foreach(b in baseParts) totalWeight:=totalWeight+b.weight; totalVolume:=totalVolume+b.volume; 解决方案---引入虚类型和虚操作 Persistent virtual type GeometricPrimitive supertype ANY is public geoID,color,specWeight,mat,weight,display body [geoID:string; mat:Material; color:string;]; operations declare specWeight:-float; virtual declare display:-void; virtual declare volume:-float; virtual declare weigth:-float; … Implementation define specWeight is return self.mat.specWeight; … End type GeoMetricPrimitive; 进一步分析---虚类型仍可拥有虚子类型 在子类型中,不是所有的虚操作均可以被替换实现的 子类型本身,也可能需要进一步引进虚操作---一个可实例化的普通类型仍然可以拥有虚子类型,且不会引起任何问题. 在我们的几何体示例中,多面体Polyeder就是一个一般几何体的虚子类型,它对继承的三个虚操作仍然无法进行精化(由于缺乏结构信息) * ANY GeometricPrimitive geoID mat color Cylinder Polyeder Vertices# Pipe Conicalpipe Pyramid Cuboid v1 v8 … *

文档评论(0)

gshshxx + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档