Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Oop 是一个「;“对象”;内存中的位置还是语言结构?_Oop_Object - Fatal编程技术网

Oop 是一个「;“对象”;内存中的位置还是语言结构?

Oop 是一个「;“对象”;内存中的位置还是语言结构?,oop,object,Oop,Object,Wikipedia是“内存中具有值且可能由标识符引用的位置” 但“对象”似乎也是一种语言结构。例如,作为“属性的集合,属性是名称和值之间的关联。” 我想我要问的是:一个对象的语言结构和一个作为连续内存块的对象之间有没有关系?我原以为没有,但在我正在学习的Coursera编译器课程中,教授似乎在程序中的类结构和内存中数据的实际布局之间建立一对一的关系。现在我想起来了,JavaScript对象以类似的方式布局是有意义的,尽管继承是不同的。对象是软件开发中非常通用的术语。不仅是对象有不同的定义,而且它

Wikipedia是“内存中具有值且可能由标识符引用的位置”

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


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

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

也许“默认”的意思(至少在OO理论中)是,该对象是一个已定义类的运行时实例(有关更多详细信息,请参阅一些OO书籍)

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

在第二种情况下,您可以明确地说对象也是“内存中的位置”(在尽可能低的物理级别上)和“语言构造”(在编码级别上)。在概念层面上,物理内存没有意义(没有正在执行的程序),因此没有“内存中的位置”,而“UML语言构造”是可以接受的

Javascript对象不要求类存在,所以从这个意义上讲它们不是对象。它们是JS语言结构,在运行时也会“存储在内存中的位置”

有时,在非正式的对话中,它甚至可以走得更远——Json对象、XML对象等等。它显然与OO无关,我想说的是,“对象”可以被一些中性的东西(如“元素”)代替

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


所以,你提到的所有定义都是正确的。为了达成一致,我们应该首先设定具体的上下文。

根据上下文,“对象”一词有几种不同的含义。我不是OOP方面的权威,但我认为这会因语言实现的不同而有所不同,即使是在给定的平台上。我的意思是,程序中的所有内容显然都是在内存中表示的,但是在Opera中JavaScript实现的后台会发生什么呢?这可能意味着类结构和内存中数据布局的一对一映射,但这取决于平台实现。对于C++这样的语言,编译成本机代码而不是在java或Python之类的虚拟机中进行解释或运行,我认为对象的直接内存表示更为可能。RAM是一种“随机访问内存”的原因。为了让事情变得更简单,你可以把它想象成一个连续块的存储器,但实际上,它对计算机的分配位置和分配内容没有什么区别。我将指的是一个“内存中有一个位置”的对象,即一个对象的实例。也就是说,你可以有很多“对象”,但你可能没有全部使用它们。@Jongware如果我可以挑出细节,那么说一个对象是一个类的实例,术语“对象”意味着一个实例化的类不是更准确吗?