4、机制、对不同程序设计模型的支持以及所支持的对象模型来区别不同的OOP语言。下面我将深入语言特性的细节。编译期类型检查 vs. 运行期类型检查类型的强壮性是评价程序设计语言的重要标准。涉及到类型检查的内容包括对已存在的方法的调用,方法的参数的类型,数组边界的检查,等等。C++、Java和Object Pascal多或多或少的支持编译期类型检查,其中,C++的类型检查最弱,而Java的最强。原因是,C++保留了对C语言的支持,而C语言虽然支持编译期类型检查,却极其微弱。例如,C和C++认为所有数字类型都是兼容的(虽然向整型变量赋浮点数值时编译器会报警)。在Object Pascal和Java
5、语言中,布尔值与整型数值不同,而字符类型则是另一个完全不兼容的类型。虽然Java虚拟机在运行期“翻译”比特码,但并不表示它放弃了编译期类型检查。相反,在Java中类型检查进行的相当彻底。另外一些OOP语言,例如Smalltalk和CLOS,则在运行期进行类型检查。混合OOP语言 vs. 纯OOP语言另一个区别存在于纯的和混合的OOP语言之间。纯OOP语言只允许应用一种程序设计模型:OOP。你可以声明类和方法,但不能使用老式的普通函数、过程和全局变量。在以上三种语言中,只有Java是纯OOP语言(Eiffel和Smalltalk也是),初看上去纯OOP是个很好的主意,然而,你最终还是会使用
7、据类型(虽然它提供了对传统类型的类封装)。普通对象模型 vs. 对象引用模型OOP语言之间存在的第三个主要区别在于它们的对象模型。一些比较传统的OOP语言允许程序员在栈、堆和静态存储区中创建对象。在这些语言中,一个类的变量(实例)对应于内存中的一个对象。C++就是这样工作的。之后的OOP语言倾向于使用另一种模型,称为对象引用模型。在这个模型中,每个对象都动态的创建于堆中,一个类的变量实际上是一个指向内存中的对象的引用或句柄(技术上类