当前位置:  开发笔记 > 编程语言 > 正文

Java 100%面向对象吗?

如何解决《Java100%面向对象吗?》经验,为你挑选了6个好方法。

Java具有原始数据类型,它不像Ruby中的对象派生.那么我们可以将Java视为100%面向对象的语言吗?另一个问题:为什么Java没有设计原始数据类型的对象方式?



1> Alexandru Ne..:

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

"面向对象"对许多人来说也意味着很多东西.你可以拥有基于类的OO(C++,Java,C#),或者你可以拥有基于原型的OO(Javascript,Lua).

100%面向对象并不意味着太多,真的.Ruby也会遇到你不时会遇到的问题.

让我困扰Java的是它没有提供有效抽象思想的方法,而是将语言扩展到有问题的地方.每当提出这个问题时(参见Guy Steele的"成长语言"),"哦,不,但Joe Sixpack怎么样?" 给出了论证.即使你设计的语言可以防止自己在脚下射击,但是偶然的复杂性和真正的复杂性之间存在差异(参见No Silver Bullet),而平庸的开发人员总是会找到创造性的方式来拍摄自己.

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



2> paxdiablo..:

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

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

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


看来,经过对Python的一些研究(我不知道名字/对象的区别,尽管已经编写了一年左右的时间 - 我猜的更加愚弄我),它确实可能真的是OO.

以下代码工作正常:

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

输出:

6701648

7

所以即使是基本整数也是这里的对象.


@donut,这可能是因为True是绑定到真实对象的名称.如果需要,可以将其重新绑定到false对象.不幸的是你似乎无法用'True = True'将它绑定回来,虽然你可以做'True = not True'来创建一个新的真实对象(该死的你是虐待狂).
你可以在Python中做'True = False',它确实改变了True的值.但我不能以同样的方式搞乱整数.在某人的代码中坚持约5分钟可能会很有趣.

3> Remus Rusanu..:

要实现真正的100%OO认为Smalltalk,例如,一切都是对象,包括编译器本身,甚至if语句:ifTrue:是一个带有代码块参数的布尔消息.



4> J S..:

问题在于,面向对象的定义并不是很明确,可能意味着很多事情.本文将更详细地解释该问题:http: //www.paulgraham.com/reesoo.html

此外,Alan Kay(Smalltalk的发明者和"面向对象"这一术语的作者(?))着名地说,在考虑OOP时他没有考虑过C++.所以我认为这也适用于Java.

语言完全是OO(无论那意味着什么)是可取的,因为它意味着更好的正交性,这是一件好事.但鉴于Java在其他方面无论如何都不是非常正交,其OO不完整性的一小部分在实践中可能无关紧要.



5> PeterMmm..:

Java不是100%OO.Java可能会达到99%的OO(想想自动装箱,Scala).我想说Java现在是87%的OO.

为什么java不将原始数据类型设计为对象方式?

早在90年代就有性能原因,同时Java保持向后兼容.所以他们不能把它们拿出来.


87%?让我想起:http://dilbert.com/strips/comic/2008-05-08/
但他们错了!Java显然是88.4%的OO.
我很高兴听到你有确切的数字.
抱怨这个答案的人只是无知.Sun Java 6u15是87.0%+/ - 0.2%OO.

6> 小智..:

不,Java不是,因为它具有原始数据类型,它们与对象不同(它们没有方法,实例变量等).另一方面,Ruby完全是OOP.一切都是对象.我可以做这个:

1.class

它将返回1的类(Fixnum,基本上是一个数字).你不能用Java做到这一点.

推荐阅读
mobiledu2402851203
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有