Oop 一个面向对象的类型系统能否由一种具有面向对象类型系统的语言来实现? 假设你有一个想象的类型系统,用于虚构的脚本语言,例如C++编写的,脚本语言中的每个类型和对象在底层实现语言中都有相应的类型和对象。这个虚拟类型系统中的基类是一个名为Object的类,所有其他类都必须派生自该类。现在,您有了另一个名为HashTable的类,它是所有变量存储的基础,我可能会说这是错误的:名称空间是通过将一个对象与另一个对象关联的HashTable实现的,全局变量是通过HashTable存储的,而且,就问题而言,实例变量也存储在HashTable中

Oop 一个面向对象的类型系统能否由一种具有面向对象类型系统的语言来实现? 假设你有一个想象的类型系统,用于虚构的脚本语言,例如C++编写的,脚本语言中的每个类型和对象在底层实现语言中都有相应的类型和对象。这个虚拟类型系统中的基类是一个名为Object的类,所有其他类都必须派生自该类。现在,您有了另一个名为HashTable的类,它是所有变量存储的基础,我可能会说这是错误的:名称空间是通过将一个对象与另一个对象关联的HashTable实现的,全局变量是通过HashTable存储的,而且,就问题而言,实例变量也存储在HashTable中,oop,implementation,scripting-language,Oop,Implementation,Scripting Language,实例变量是这样的:每个对象都有一个哈希表来存储其实例变量。然而,HashTable必须从Object派生,因此每个HashTable都有一个HashTable来存储其实例变量。每个哈希表的每个哈希表都有一个哈希表,以此类推 我的问题是,这种类型的系统可以以面向对象的方式在底层C++代码中实现吗?如果不采取预防措施,程序将进入一个无限循环,仅仅实例化一个对象就会导致堆栈溢出,因为它将实例化一个哈希表,该哈希表将调用对象的父构造函数,该构造函数将实例化一个哈希表 对于这个设计缺陷,是否有任何可行的解

实例变量是这样的:每个对象都有一个哈希表来存储其实例变量。然而,HashTable必须从Object派生,因此每个HashTable都有一个HashTable来存储其实例变量。每个哈希表的每个哈希表都有一个哈希表,以此类推

我的问题是,这种类型的系统可以以面向对象的方式在底层C++代码中实现吗?如果不采取预防措施,程序将进入一个无限循环,仅仅实例化一个对象就会导致堆栈溢出,因为它将实例化一个哈希表,该哈希表将调用对象的父构造函数,该构造函数将实例化一个哈希表

对于这个设计缺陷,是否有任何可行的解决办法,不涉及破坏所需的OO设计——每种类型在底层代码中都有其推论类型


请原谅这篇文章中的语法,英语不是我的第一语言,我可能没有以可理解的方式解释一些事情。

实现两种不同的哈希表类型:一种用于用户代码UserHashTable,派生自Object,因此不违反您的everything is Object规则,另一个用于内部使用CoreHashTable来实现您的类型系统


[编辑]CoreHashTable可以自动转换为UserHashTable,例如UserHashTable可以包含指向CoreHashTable的内部智能指针。

实现两种不同的HashTable类型:一种用于用户代码UserHashTable,派生自Object,因此不会违反您的everything is Object规则,另一个用于内部使用CoreHashTable来实现您的类型系统

[编辑]CoreHashTable可以自动转换为UserHashTable,例如UserHashTable可以包含指向CoreHashTable的内部智能指针。

是。您可以用另一种编程语言模拟自己的对象系统

这个概念被称为虚拟对象系统

O.O.编程语言有自己的对象系统。我所说的对象系统,不是指O.O.库或O.O.类层次结构。我所说的对象系统是指它声明和使用类和对象的方式

但是,有时,您的编程语言不是面向对象的,或者即使是面向对象的,也缺少一些东西。C和Java没有真正的属性&事件,C和objectpascal有

当O.O开始时,许多程序员使用非O.O编程语言,学习O.O。有些程序员自己制作了C语言到C++预处理器Objy-C,有些甚至做了完整的编译器。 有些人模仿他们。程序员在概念上认为,他使用的是类和对象,但在代码中,使用的是结构和指针

我见过几个虚拟对象系统,其中一组类或对象由另一种编程语言模拟

有一次,我使用了一个名为Borland database Engine的数据库连接工具,在该工具中,开发人员可以将数据读写到数据库、表和字段等对象中

一个著名的是GLib库GObject是根对象,用于GNU/Linux的GNome可视化界面。它是在普通C中完成的,但是使用指针模拟对象和类

更多信息:

从概念上讲,您希望使用一组对象,但在代码中,您的概念类没有类声明,而是使用另一种O.O.编程语言将一些数据存储在哈希表中。是的,可以做到。

是的。您可以用另一种编程语言模拟自己的对象系统

这个概念被称为虚拟对象系统

O.O.编程语言有自己的对象系统。我所说的对象系统,不是指O.O.库或O.O.类层次结构。我所说的对象系统是指它声明和使用类和对象的方式

但是,有时,您的编程语言不是面向对象的,或者即使是面向对象的,也缺少一些东西。C和Java没有真正的属性&事件,C和objectpascal有

当O.O开始时,许多程序员使用非O.O编程语言,学习O.O。有些程序员自己制作了C语言到C++预处理器Objy-C,有些甚至做了完整的编译器。 及 有些人模仿他们。程序员在概念上认为,他使用的是类和对象,但在代码中,使用的是结构和指针

我见过几个虚拟对象系统,其中一组类或对象由另一种编程语言模拟

有一次,我使用了一个名为Borland database Engine的数据库连接工具,在该工具中,开发人员可以将数据读写到数据库、表和字段等对象中

一个著名的是GLib库GObject是根对象,用于GNU/Linux的GNome可视化界面。它是在普通C中完成的,但是使用指针模拟对象和类

更多信息:


从概念上讲,您希望使用一组对象,但在代码中,您的概念类没有类声明,而是使用另一种O.O.编程语言将一些数据存储在哈希表中。是的,可以做到。

我不确定这是否可行,因为脚本语言必须能够访问直接存储实例变量的哈希表,而无需中间操作,因此它们必须与该语言可用的普通哈希表类型相同。CoreHashTable可以自动转换为UserHashTable,甚至在不复制数据的情况下也能高效地工作。将延长我原来的职位…我不确定这是否有效,因为脚本语言必须能够访问直接存储实例变量的哈希表,而无需中间操作,因此它们必须与该语言可用的普通哈希表的类型相同。CoreHashTable可以自动转换为UserHashTable,甚至可以高效地转换为UserHashTable,而无需复制数据。也许你的问题应该是:我如何用面向对象的编程语言模拟对象系统,或者使用哈希表?也许你的问题应该是:我如何用面向对象的编程语言模拟对象系统,或者使用哈希表?