Java具有原始数据类型,这些原始数据类型不是像Ruby中的对象那样派生的。那么我们可以将Java视为100%面向对象的语言吗?另一个问题:Java为什么不设计原始数据类型以对象方式?
当Java首次出现(版本1.x)时,JVM确实非常缓慢。尽管从长远来看,这是一个非常糟糕的决定,但不将基元实现为一流的对象是出于速度目的而采取的一种折衷方案。
“面向对象”对于很多人来说也意味着很多事情。您可以具有基于类的OO(C ++,Java,C#),也可以具有基于原型的OO(Javascript,Lua)。
100%面向对象的意义并不大。Ruby还有一些您会不时遇到的问题。
Java让我感到困扰的是,它没有提供有效地抽象思想,将语言扩展到有问题的地方的手段。每当出现此问题时(请参阅盖伊·斯蒂尔(Guy Steele)的“成长语言”),“哦,是的,但是乔·西克斯帕克呢?” 给出了参数。即使您设计的语言可以防止自己被人用脚射击,但偶然的复杂性和实际的复杂性之间还是有区别的(请参阅No Silver Bullet),平庸的开发人员总是会找到创造性的方式来射击自己。
例如,Perl 5不是面向对象的,但是它具有足够的可扩展性,它允许使用Moose(一种对象系统),该对象系统允许使用非常先进的技术来处理OO的复杂性。和语法糖是没有问题的。