第10章继承Inheritance.pptVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
进一步说明的例子: var miniMouse : Person; mickeyMouse : Employee; chief: Employee; i: integer; … mickeyMouse.spouse := miniMouse //ok miniMouse.spouse:= mickeyMouse;//ok mickeyMouse.boss:= chief; //ok miniMouse.spouse.boss:=chief; //非法 i:=mickeyMouse.boss.ss#; //ok i:=miniMouse.spouse.boss.ss#; //非法 i:=miniMouse.spouse.spouse.age; //ok i:=mickeyMouse.spouse.boss.ss#; // 非法 mickeyMouse.boss.spouse.marry(chief); 一个类型一致性检查过程示例 miniMouse.spouse.boss := chief; 由于可替换性,赋值号左边类型必须是右边类型的一个超类或同类型 Person Person 潜在的错误 Employee 对于Sort类型,则必须左右类型相同 i := miniMouse.spouse.spouse.age; int Person Person Person int 锚类型约束 (Anchor Type Constraints) 锚的概念来自超文本,超文本利用超链联结二个页面,而锚则指明了进入页面的具体位置。GOM利用了锚的“定位”概念 静态类型检查会降低灵活性,而有些灵活性的实现并不会破坏状态的一致性。 类型检查降低灵活性的示例 declare incAge: Person || →Person; declare incSalary: Employee || float →Employee; var somePerson : Person; someEmp:Employee; somePerson.incAge.incAge; someEmp.incAge.incAge; someEmp.incSalary(1000.00).incAge; someEmp.incAge.incSalary(1000.00);//类型检查报错 语句(3) (4)完成同样功能,而(4)无论从什么角度来看,都不会造成DB的不一致性。 造成类型检查过严的原因分析及锚的引入 类型检查是严格的按操作说明的各个参数类型来检查的 有些操作,如incAge,其结果类型与接受者类型是相一致的, 如一个雇员增加一岁后仍是雇员 可以将结果类型与接受者类型捆绑,只要保证它们二者的类型一致就可以了,不必要一定严格按照类型说明来检查— 锚就起这个作用 GOM的锚的说明及语义 示例: declare incAge: Person || → like self; declare incSalary: Employee || float→ like self; Like — 象…一样 like self — 指定结果类型与接受者类型self一致 Like 还可以指定类型是参数表中的某一个参数类型,此时,需要对照参数命令 示例: declare meeting : me:Person,he:Person →like he; 编译可以根据like后表示的各类型来检查结果类型的合法性 合法操作的精化规则 (Legal Operation Refinement) 在继承概念下一个重定义操作设计必须遵守规则为 (1)原操作名不变 (2)操作参数个数必须与原版本保持一致 目的:为了保证版本的兼容,即当引用系统进行模式演进或增加新子功能时,能使新不影响原有程序的运行。 不影响现有应用的类型扩展使面向对象系统的主要目标 在操作说明字句部分,能精化的只是参数类型(接受参数、变元参数、结果参数)的自由度 精化操作的参数类型自由度约束条件 接受者参数类型 — 只能使原操作所指定的接受类型的子类型 目的:为了支持精化的要求— 更特殊化 变元参数类型 — 使原操作的变元参数类型的超类型 目的:为了使操作更能与原祖先的同名操作兼容,参数类型必须更一般化。即新版的同名操作应当照顾它的祖先版本的要求,参数定义更一般化 结果参数类型— 使原操作的结果类型的子类型 目的:是精化设计的要求,精化的结果自然应当是更特殊化 示例说明:不合法的marry精化定义 declare marr

文档评论(0)

beautyeve + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档