函数式编程具有非常优雅的Lambda微积分及其变体作为备份理论。OOP有这样的事情吗?什么是面向对象模型的抽象?
函数式编程具有非常优雅的Lambda微积分及其变体作为备份理论。OOP有这样的事情吗?什么是面向对象模型的抽象?
Answers:
有四种主要方法,尽管这些方法仅涉及可用方法的表面:
以下文档描述了对象模型核心与集合理论之间的联系:
这些文档介绍了实例的结构以及对象之间的继承关系。这样的结构可以被认为是OOP的最高可能抽象。它显示了该结构如何应用于特定的编程语言(Ruby,Python,Java,Scala,Smalltalk-80,Objective-C,CLOS,Perl,Dylan,JavaScript)以及本体语言(RDF Schema和OWL 2 Full)。
在文档中,采用类是对象的方法,以便核心结构是单分类的。在主要形式中,结构可以表示为(O, ϵ ,≤,.ec)其中
下图显示了根据Ruby对象模型的示例核心结构。绿色链接显示在自反传递还原继承关系,蓝色的链接显示在“包容减排”的隶属关系-从蓝色链接X点的至少容器X。powerclass映射.ec由水平蓝色链接形成。该地图图像中的对象是功率类(灰色)。在Ruby中,它们被称为特征类或单例类(不推荐使用后者)。对象s,u和v(粉红色)为终端,其余对象是继承根 r的后代。
r = BasicObject; c = Class; A = c.new(r); B = c.new(A); s = A.new; u = B.new; v = B.new; class << s; end; class << v; end
以上所有语言的对象模型的核心部分都可以看作是结构的专业化,没有或只有少量其他组成部分。从理论上讲,其他成分的最重要情况是Dylan引入的单例图(表示为.ɛϲ)。这使Dylan(如上所述)成为唯一不受左至右解释组成符号○的单调性条件(≤)○(ϵ)⊆(ϵ)的编程语言。
形式化对象模型核心和集合论之间联系的一种方法是通过在参考文档中称为元对象结构的结构族(O,≤,r,.ec,.ɛϲ),因为可以考虑x.ec或x.ɛϲ作为x的元对象。在这些结构中x.ec对每个对象定义X和x.ɛς对每个定义的有界(“小”)对象X。结构遵循以下九个公理。公理化使用定义性扩展,对于前八个公理(T表示集合终端对象-那些并非的后代- [R ,和.ec *是自反传递闭包.ec),而是涉及在过去的公理。
在最后一个公理中,ϖ是固定的极限序数,.d是由定义扩展得出的秩函数。获得对象隶属关系ϵ为((.ɛϲ)∪(.ec))○(≤)。根据最后一个公理,ϵ对有界对象集的区域限制等于(.ɛϲ)○(≤)。在引用的文档中,此关系称为有限成员资格,并表示为。作为一个重要特征,这种关系是有根据的。这与r相反,因为r ϵ r。事实证明,对象技术(核心技术)与集合论之间的主要对应关系可以表示为
∈∈
即,有界成员资格对应于良好基础的集合之间的集合成员资格。作为特例,等级+1的冯·诺伊曼局部宇宙是通过定义扩展的超对象结构。通常,每个抽象(ϖ + 1)- 上层结构 (O, ∊ )在定义上都等同于完整的元对象结构。每个元对象结构都可以忠实地嵌入到完整的元对象结构中,而完整的元对象结构又可以忠实地嵌入von Neumann宇宙中。
术语“ 基本结构”用于概括元对象结构。在这种概括中,.ec和.ɛϲ被允许(任意)部分,可能为空。特别是,有限的基本结构是可能的,最小结构仅包含继承根r。每个基本结构都可以通过幂级完成和单例完成而扩展为元对象结构,这又使基本结构可以忠实地嵌入到冯·诺伊曼宇宙中。