×

多重继承的元建模语义。 (英语) Zbl 1215.68060号

摘要:继承为面向对象编程提供了很大的可重用性。当继承是单一的时,它的规范很简单,每个人都大致同意。相反,多重继承产生的歧义引发了长期的争论,并且没有两种语言就其规范达成一致。本文提出了一种基于元建模的多重继承语义。提出了一个元模型,用于区分属性的“身份”和“值”或“实现”。它明确区分了句法和语义冲突。前者可以在任何语言中解决,但需要牺牲常见的句法结构,即全名限定。然而,语义冲突需要程序员的决定,而编程语言必须在一定程度上帮助程序员。
本文对基于线性化的方法进行了深入研究,并提出了一些扩展。由于只有静态类型才能充分利用元模型,因此还考虑了多重继承和静态类型之间的交互,特别是在虚拟类型的上下文中。将具有多重继承的各种语言提出的解决方案与元模型结果进行了比较。在整个论文中,强调了在开放世界假设下遇到的困难。

MSC公司:

68甲19 其他编程范式(面向对象、顺序、并发、自动等)
PDF格式BibTeX公司 XML格式引用
全文: 内政部 链接

参考文献:

[1] M.阿巴迪。;Cardelli,L.:对象理论,计算机科学专著(1996)·Zbl 0876.68014号
[2] 艾伦,E。;蔡斯,D。;Hallett,J。;Luchanco,V.公司。;马森,J.-W。;柳,S。;斯蒂尔,G.L。;Tobin-Hochstadt,S.:堡垒语言规范,1.0版。技术代表(2008)
[3] D.Ancona、S.Drossopoulou和E.Zucca,超载和继承,摘自:第八届国际面向对象语言基础研讨会,FOOL82001。
[4] 阿诺德,M。;芬克,S。;格罗夫,D。;Hind,M。;Sweeney,P.:虚拟机中自适应优化的调查,IEEE 93论文集,第2期,449-466(2005)
[5] 巴德,F。;Mcguinness,D。;Nardi,D。;Patel-Schneider,P.:《描述逻辑手册:理论、实现和应用》(2003)·Zbl 1058.68107号
[6] Baker,H.:《恐怖症:病因和治疗》,ACM OOPS messenger 2,No.4,4-15(1991)
[7] 《构建面向对象的数据库系统:02的故事》(1992)
[8] 巴恩斯,J.:《ada 95中的编程》(1995)·Zbl 0884.68016号
[9] 巴雷特,K。;卡塞尔,B。;Haahr,P。;Moon,D.A。;Playford,K。;沙利特,A.L.M。;Withington,P.T.:dylan的单调超类线性化,SIGPLAN注意到31,No.10,69-82(1996)
[10] Birtwistle,G。;Dahl,O。;Myraug,B。;Nygaard,K.:模拟开始(1973)
[11] Bobrow,D。;Kahn,K。;Kiczales,G。;Masinter,L.公司。;斯特菲克,M。;Zdybel,F.:公共循环:将lisp和面向对象编程相结合,SIGPLAN注意事项21,第11号,17-29(1986)
[12] A.Borning,D.Ingalls,Smalltalk-80中的多重继承,摘自:Proc。AAAI'821982年,第234–237页。
[13] Bracha,G。;Cook,W.:基于Mixin的继承,SIGPLAN注意事项25,No.10,303-311(1990)
[14] 布鲁斯,K.B。;Odersky,M。;Wadler,P.:虚拟类型的静态安全替代品,Lncs 1445,523-549(1998)
[15] F.Büttner,M.Gogolla,《关于UML 2.0中的泛化和覆盖》,载于:O.Patrascoiu(编辑),OCL和模型驱动工程,UML 2004 Conf.Workshop,2004年,第1-15页。
[16] Cardelli,L.:多重继承的语义,信息和计算76,138-164(1988)·Zbl 0651.68017号 ·doi:10.1016/0890-5401(88)90007-7
[17] Cardelli,L.:类型系统,《计算机科学与工程手册》(2004)
[18] Cargill,T.:聚合:继承与成员对象,C++报告5,第1期,19-23(1993)
[19] Cargill,T.A.:争议:C++中反对多重继承的案例,计算系统4,第1期,69-82(1991)
[20] B·卡雷。;Geib,J.-M.:多重继承的观点概念,SIGPLAN注意到25,No.10,312-321(1990)
[21] Castagna,G.:面向对象编程:统一基础(1997)·Zbl 0871.68024号
[22] S.Chiba,Javassist–一个基于反射的Java编程向导,见:Proc。ACM OOPSLA C++和Java反思编程研讨会,1998年。
[23] 克利夫顿,C。;Millstein,T。;Leavens,G.T。;钱伯斯,C.:《Multijava:设计原理、编译器实现和应用,编程语言和系统的ACM事务》28,第3期,517-575(2006)
[24] Cointe,P.:元类是第一类:objvlisp模型,SIGPLAN公告22,第12期,156-167(1987)
[25] Compagnoni,A.B。;Pierce,B.C.:《高阶交集类型与多重继承》,《计算机科学中的数学结构》第6期,第5期,469-501(1996)·Zbl 0861.68054号
[26] 库克·W·。;西希尔。;Canning,P.:遗传不是亚型,125-135(1990)·Zbl 0837.68061号
[27] 杜卡斯,S。;O.尼尔斯特拉斯。;Schärli,N。;Wuts,R。;Black,A.:特性:细粒度重用机制,编程语言和系统上的ACM事务28,第2期,331-388(2005)
[28] R.Ducournau,《另一种基于框架的面向对象语言:YAFOOL参考手册》,Sema Group,Montrouge,France,1991年。
[29] Ducournau,R.:“真实世界”作为编程和建模中协变专门化的论据,Lncs 2426,3-12(2002)·Zbl 1014.68974号
[30] Ducournau,R.:完美散列作为一种近乎完美的子类型测试,《编程语言和系统上的ACM事务》30,第6期,第1-56页(2008年)
[31] Ducournau,R.:实现静态类型的面向对象编程语言,ACM comp。Surv公司。43,第4号(2011年)·Zbl 1293.68072号
[32] 杜库诺,R。;Habib,M.:关于多重继承的一些算法,Lncs 276243-252(1987)
[33] 杜库诺,R。;Habib,M.:掩蔽和冲突,或继承不是自己的,知识表示和编程语言中的继承层次,223-244(1991)
[34] 杜库诺,R。;哈比卜,M。;Huchard,M。;Mugnier,M.-L.:继承的单调冲突解决机制,SIGPLAN公告27,第10号,16-24(1992)
[35] 杜库诺,R。;哈比卜,M。;Huchard,M。;Mugnier,M.-L.:关于单调多重继承线性化的建议,SIGPLAN公告29,第10期,164-175(1994)
[36] 杜库诺,R。;哈比卜,M。;Huchard,M。;Mugnier,M.-L。;那不勒斯,A.:Le point sur l’héritage multiple,Techniques et science informatiques 14,No.3,309-345(1995)
[37] R.Ducournau,F.Morandat,J.Privat,《模块和类精化:面向对象语言的元建模方法》,技术代表LIRMM-07021,蒙彼利埃大学22007年。
[38] 杜库诺,R。;莫兰达,F。;Privat,J.:对具有多重继承和静态类型的面向对象实现的实证评估,SIGPLAN公告44,第10期,41-60(2009)
[39] Dugerdil,P.:objlog语言中的继承机制:多选择和多垂直的观点,知识表示和编程语言中的遗传层次,245-256(1991)
[40] Ernst,E.:传播类和方法组合,Lncs 1628,67-91(1999)
[41] Ernst,E.:安全动态多重继承,《北欧计算杂志》第9期,第1期,191-208(2002)·Zbl 1022.68022号
[42] Ernst,E.:《高等层次结构》,Lncs 2743、303-329(2003)
[43] 弗拉纳根,D。;松本,Y.:ruby编程语言(2008)
[44] 弗拉特,M。;克里希纳穆尔西,S。;Felleisen,M.:类和混合类,171-183(1998)
[45] 福曼,I.R。;丹福思,S.H.:《元类的使用》(1999)
[46] 伽玛,E。;Beck,K.:对eclipse的贡献:原理、模式和插件,(2003)
[47] Goldberg,A。;Robson,D.:Smalltalk:语言及其实现(1983)·Zbl 0518.68001号
[48] Goldberg博士。;芬德勒,R.B。;弗拉特,M:超级和内在:终于在一起了!,SIGPLAN公告39,No.10,116-129(2004)
[49] Grand,M.:Java语言参考(1997)
[50] Harbinson,S.P.:模块-3(1992)·Zbl 0757.68022号
[51] J.Hickey,《Objective Caml编程语言简介》,2006年。http://www.cs.caltech.edu/courses/cs134/cs134b/book.pdf。
[52] 霍蒂,J.:非单调遗传的一些直接理论,非单调推理2(1994)·Zbl 0796.03035号
[53] 霍夫迈耶,D。;Pugh,W.:SIGPLAN注意到39,No.12,92-106(2004),发现错误很容易
[54] Huchard,M.:另一个有问题的多重继承机制:虚拟继承案例中C++的构造和破坏,J.obj.Orient。程序。13,第4期,6-12(2000)
[55] M.Huchard,M.-L.Mugnier,M.Habib,R.Ducournau,走向独特的多重遗传线性化,收录于:Mrazik,a.(编辑),Proc。1991年9月,欧洲OOP。
[56] Igarashi,A。;Pierce,B.C.:《虚拟类型的基础》,Lncs 1628,161-185(1999)·Zbl 1012.68042号
[57] ILOG,1996年。功率等级参考手册,1.4版。伊洛格,轻轻地。
[58] ISO/IEC 14882:20032003年。编程语言–C++,国际标准化组织,瑞士日内瓦。
[59] Kiczales,G。;Rivières,J.Des;Bobrow,D.:元对象协议的艺术(1991)
[60] Kleene,S.C.:数理逻辑(1967)·兹伯利0149.24309
[61] Knudsen,J.L.:多重继承层次结构中的名称冲突,Lncs 32293-109(1988)
[62] Knuth,D.E.:计算机编程、排序和搜索的艺术3(1973)·Zbl 0302.68010号
[63] Krogdahl,S.:相似语言中的多重继承,第25位,第2期,318-326(1985)·Zbl 0566.68005号 ·doi:10.1007/BF01934377
[64] Kusmierek,J。;Bono,V.:卫生学方法——引入卫生学,Jot 10(2007)
[65] A.Lalande,《词汇技术与哲学批判》,法国新闻大学,1926年·JFM 52.0055.06号
[66] 利斯科夫,B.H。;Wing,J.M.:子类型的行为概念,编程语言和系统上的ACM事务16,第6期,1811-1841(1994)
[67] Madsen,O.L。;Möller-Pedersen,B.:虚拟类。SIGPLAN是面向对象编程中的一种强大机制,它注意到24,No.10,397-406(1989)
[68] Madsen,O.L。;莫勒-佩德森,B。;Nygaard,K.:beta编程语言中的面向对象编程,(1993)
[69] D.Malayeri,J.Aldrich,CZ:无钻石多重继承,2009年,第21-40页。
[70] 马西尼,G。;那不勒斯,A。;Colnet博士。;莱昂纳德,D。;Tombre,K.:面向对象语言(1991)·Zbl 0875.68222号
[71] 梅耶,B.:埃菲尔:语言,(1992)·Zbl 0779.68013号
[72] Meyer,B.:面向对象的软件构造(1997)·Zbl 0987.68516号
[73] Microsoft,C#语言规范,v0.28。技术报告,微软公司,2001年。
[74] Moon,D.:面向对象编程风格,SIGPLAN注意事项21,No.11,1-8(1986)
[75] Mössenböck,H.:oberon-2中的面向对象编程,(1993)·Zbl 0823.68015号
[76] O.尼尔斯特拉斯。;杜卡斯,S。;Schärli,N.:扁平化特征,对象技术杂志5,第4期,129-146(2006)
[77] Nystrom,N。;齐,X。;Myers,A.C.:JE:可伸缩软件组合的嵌套交集,SIGPLAN注意事项41,No.10,21-35(2006)
[78] Odersky,M。;勺子,L。;Venners,B.:《scala编程》,综合分步指南,(2008)
[79] Odersky,M。;Wadler,P.:《披萨到爪哇:将理论转化为实践》,146-159(1997)
[80] OMG,统一建模语言2.0上层结构规范,技术报告,对象管理小组,2004年。
[81] 普格,W。;Weddell,G.:多重继承的双向记录布局,SIGPLAN注意事项25,No.6,85-91(1990)
[82] D.Rayside,G.Campbell,《亚里士多德对分类的介绍》,载于:M.Huchard,R.Godin,A.Napoli(编辑),ECOOP’2000对象与分类研讨会,自然融合。RR LIRMM 2000-0952000年。
[83] 雷赛德·D。;Campbell,G.:亚里士多德对面向对象编程的理解,SIGPLAN注意到35,No.10,337-353(2000)
[84] D.Rayside,K.Kontogiannis,《面向对象编程的三段论结构》,摘自:Proc。ICSE’01,2001年,第113-122页。
[85] Reynolds,J.:编程语言forsythe的设计,类算法语言(1996)
[86] Sakkinen,M.:《C++继承原则批判》,《计算系统5》,第1期,69-110(1992)
[87] Shalit,A.:dylan参考手册:新的面向对象动态语言的权威指南,(1997)·Zbl 0900.68121号
[88] Shan,Y.-P。;Cargill,T。;考克斯,B。;库克·W·。;卢米斯,M。;斯奈德:多重继承对OOP至关重要吗?(面板),SIGPLAN通知28,第10号,360-363(1993)
[89] 尚德良,牛是动物吗?1996http://www.visviva.com/transframe/papers/covar.htm。
[90] Smaragdakis,Y。;Batory,D.:Mixin layers:一种面向对象的实现技术,用于细化和基于协作的设计,ACM软件工程和方法论事务11,No.2,215-255(2002)
[91] Snyder,J.:面向对象编程中的继承,知识表示和编程语言中的继承层次,153-171(1991)
[92] 斯蒂尔,G.L.:《口齿不清,语言》(1990)·Zbl 0757.68008号
[93] 斯特菲克,M。;Bobrow,D.:面向对象编程:主题和变化,AI杂志6,第4期,40-62页(1986)
[94] Stroustrup,B.:C++编程语言(2000)·Zbl 0825.68056号
[95] ,Lncs 4348(2006)
[96] Taivalsaari,A.:关于继承的概念,ACM计算调查28,第3期,438-479(1996)
[97] 托洛普,K。;Torgersen,M.:统一泛型:结合虚拟类型和参数化类的优点,Lncs 1628186-204(1999)
[98] M.Torgersen,虚拟类型是静态安全的,见:Elec.Proc。第五届面向对象语言基础研讨会,FOOL 51998。
[99] Touretzky,D.:遗传数学(1986)·Zbl 0675.68006号
[100] Ungar,D。;钱伯斯,C。;Chang,B。;Hölzle,U.:组织没有类、Lisp和符号计算的程序4,第3期,223-242(1991)
[101] Van Rossum,G.公司。;Jr.,F.L.Drake:《蟒蛇语言参考手册》(2003年9月)
[102] Vanhilst,M。;Notkin,D.:使用角色组件实现基于协作的设计,SIGPLAN通知31,No.10,359-369(1996)
[103] J.Viega,B.Tutt,R.Behrends,自动化委托是基于类的语言中多重继承的可行替代方案,技术代表CS-98-03,弗吉尼亚大学,弗吉尼亚州夏洛茨维尔,美国,1998年。
[104] Waldo,J.:《争议:C++中的多重继承案例》,《计算系统4》,第2期,157-171页(1991年)
[105] D.Weinreb,D.Moon,《口味:Lisp机器中的信息传递》,麻省理工学院人工智能实验室技术代表602,1980年。
[106] Wirth,N.:编程语言oberon,软件实践经验18,第7期,671-690(1988)·Zbl 0646.68012号
[107] Zibin,Y。;Gil,J.:动态类型语言中调度的增量算法,SIGPLAN通知38,第1期,126-138(2003)·兹比尔1321.68177
此参考列表基于出版商或数字数学图书馆提供的信息。它的项目与zbMATH标识符启发式匹配,并且可能包含数据转换错误。在某些情况下,zbMATH Open的数据对这些数据进行了补充/增强。这试图尽可能准确地反映原始论文中列出的参考文献,而不要求完整或完全匹配。