Java是100%面向对象的吗?[已关闭]

2022-09-04 23:41:04

Java具有基元数据类型,它们不像Ruby那样从对象派生出来。那么,我们可以将Java视为100%面向对象的语言吗?另一个问题:为什么Java不以对象方式设计基元数据类型?


答案 1

当Java首次出现(版本1.x)时,JVM非常非常慢。不将原语实现为一等对象是他们为了速度目的而采取的妥协,尽管我认为从长远来看,这是一个非常糟糕的决定。

“面向对象”对很多人来说也意味着很多事情。你可以有基于类的OO(C++,Java,C#),或者你可以有基于原型的OO(Javascript,Lua)。

100%面向对象实际上并没有多大意义。Ruby 也有一些问题,你会不时遇到。

Java让我感到困扰的是,它没有提供有效地抽象思想,在它有问题的地方扩展语言的方法。每当这个问题被提出时(参见盖伊·斯蒂尔(Guy Steele)的《种植一种语言》(Growing a Language),就会给出“哦,不,但Joe Sixpack呢?”的论点。即使你设计了一种防止自己开枪的语言,意外的复杂性和实际的复杂性之间也是有区别的(参见没有银弹),平庸的开发人员总会找到创造性的方法来射击自己。

例如,Perl 5不是面向对象的,但它具有足够的可扩展性,它允许Moose,一个允许非常先进的技术来处理OO复杂性的对象系统。句法糖是没有问题的。


答案 2

否,因为它具有不是对象的数据类型(如 and )。我相信Smalltalk是真正面向对象的,但我对这种语言只有一点经验(大约两个月前)。intbyte

我也听说过Ruby人群的说法,但我对这种语言没有任何经验。

当然,这是使用“真正的OO”的定义,这意味着它只有对象,没有其他类型的对象。其他人可能不同意这个定义。


在对Python进行了一些研究之后(尽管我已经在其中编码了一年左右,但我不知道名称/对象的区别 - 我猜我更愚蠢),它可能确实是真正的OO。

以下代码工作正常:

#!/usr/bin/python
i = 7
print id(i)
print type(i)
print i.__str__()

输出:

6701648
<type 'int'>
7

所以即使是基整数在这里也是对象。