“对象”是内存中的位置还是语言构造?

时间:2014-05-11 13:48:17

标签: oop object

维基百科defines an object为“内存中具有值且可能由标识符引用的位置。”

但“对象”似乎也是一种语言结构。例如,MDN defines a JavaScript object为“属性集合,属性是名称和值之间的关联。”

我想我要问的是:对象的语言结构和作为连续内存块的对象之间是否有任何关系?我原以为没有,但是在我所学的Coursera编译器课程中,教授似乎在程序中的类结构与内存中数据的实际布局之间建立了一对一的关系。现在我考虑一下,尽管继承会有所不同,但JavaScript对象的布局方式却有所不同。

1 个答案:

答案 0 :(得分:3)

对象是软件开发中非常通用的术语。它不仅具有不同的定义,而且可以引用不同的概念。

也许"默认"意思是(至少在OO理论中),该对象是已定义类的运行时实例(请参阅一些OO书以获取更多详细信息)。

即使在这种情况下,意义也不是没有歧义,因为类和对象可以存在于几个抽象层次上。两个极值是概念类(和对象)和实现类(对象)。

在第二种情况下,你可以明确地说对象也是“记忆中的位置”。 (在尽可能低的物理层面上)和"语言结构" (在编码层面)。在概念层面上,物理内存没有意义(没有正在执行的程序),所以在内存中没有位置"同时" UML语言构造"可以接受。 :)

Javascript对象不需要存在类,因此它们在这个意义上不是对象。它们是JS语言结构,在运行时也是内存中的位置"。

有时,非正式会话,它可以走得更远--Json对象,XML对象等。它显然与OO没有任何关系,我会说"对象"可以用像#34;元素"。

这样的中性替代

对于所有提到的对象类型,也可以说它们是"属性的集合,属性是名称和值之间的关联。"

所以,你提到的所有定义都是正确的。为了就这个问题达成一致,我们首先要确定具体的背景。