![]() |
1
6
一般来说,OOP和程序编程都是抽象的,只存在于源代码级。一旦程序编译成可执行的机器代码,这些抽象就不复存在。因此,一种特定的语言是OOP还是procedural与它使用的内存区域无关,也与执行过程中指令的位置无关。 操作系统本身通常不知道或不关心某个特定的可执行文件是用OOP还是过程语言编写的。它只关心可执行文件是否使用与其本机指令集兼容的二进制操作码,以及可执行文件是否具有它能理解的ABI(二进制接口)。 |
![]() |
2
3
这是个好问题。 鉴于作为客体构成 功能 数据 实现 把它分开。这样做的方式是,代码被分割并存储到RO段中。RW区域中的一个对象有一种方法可以引用RO区域中的代码。代码和数据的耦合只在概念上由人工程序员和类型检查器使用,以确保您不会违反规则和原则。 一种类似Java/C的语言通常会使每个对象都有一个 标签 这 或 通过它可以到达所述物体的内容物。当方法需要引用字段时,它知道预先指定的顺序,因此它可以执行相应的操作。请注意,解决继承问题需要一些技巧,但这是这个想法的关键所在。 类似Python/Ruby的语言通常会使对象成为散列表,其中方法是指向RO区域中代码的指针(前提是该语言是编译的,而不是通过字节码解释器运行)。函数调用是通过查找哈希表内容并跟随代码指针进行的。字段也在同一哈希表中查找。 随着这些基础知识的深入,大多数实现都会使用一些技巧来避免跟踪指针以找到要调用的函数。他们试图找出并缩小对单个函数的可能调用。然后他们可以用直接调用正确的函数来代替查找,这是一个更快的解决方案。 语义学 作为对象的一部分查看字段和方法。这个 实施 把它们分成反渗透和反渗透两部分。因此不需要操作系统支持。 |
![]() |
3
1
哎呀,不是这样说的。我不知道你在哪里读到的,如果你加上一个有帮助的引语。 是 变量,所以你所知道的变量对对象来说是正确的。在像C#(.net框架)这样的语言中,对象只能存储在堆中,因为它们是所谓的引用类型。在C++中,它们可以在任何地方生存。
由此我得出结论,你认为函数是对象。并非所有OOP语言都是这样。它来自函数语言,其中函数是第一类对象。函数在大多数情况下是不可变的,并且放在只读部分。
|