我已经听过很多关于Ruby的信息,甚至Javascript可能是"真正的"面向对象语言,而C++和C#则是面向类(或基于模板)的语言.真正的OO是什么意思,这对于类/模板方法有什么好处?
这是一个用于促进语言的主观术语.我曾经看过,与C++相比,C#和Java是真正的面向对象语言,因为一切都必须在一个类中(没有全局函数或变量),并且所有对象都从一个Object类继承.
对于Ruby,它可能指的是Ruby如何将所有东西视为一个对象,所以你可以写1.to_s
,而不是像str(1)
或String.valueOf(1)
.这是因为Ruby不区分值和引用变量.在Javascript中没有类,您只需创建可以克隆以供重用的可扩展对象,这种编程风格称为基于原型的编程.
另一方面,C++被宣传为一种多范式语言,允许您使用多种方法,如面向对象,通用和过程编程.它并不拘泥于一种范式.
但是,这只是一个主观用语,可能意味着什么.一般来说,它指的是语言是否更加强调对象而不是其他语言元素,如函数,模板等.维基百科关于SmallTalk的文章将其称为"纯粹的"面向对象语言,该描述也适用于Ruby:
Smalltalk是一种"纯粹的"OO语言,这意味着与Java和C++不同,作为对象的值和作为原始类型的值之间没有区别.在Smalltalk中,诸如整数,布尔值和字符之类的原始值也是对象,在某种意义上它们是相应类的实例,并且通过发送消息来调用它们上的操作.程序员可以更改实现原始值的类,以便可以为其实例定义新行为 - 例如,实现新的控制结构 - 甚至可以更改其现有行为.这个事实总结在常见的短语"在Smalltalk中,一切都是一个对象"(更准确地表达为"所有值都是对象",