我想知道的是什么样的核心区别
面向对象和基于对象的语言
我读过许多后所有的人都这么说了两件事
面向对象的语言支持OOPS和基于对象的语言的所有功能,不支持像多态和继承OOPS的所有功能。
它们是可以基于对象和Java作为面向对象给予例子的JavaScript
像这样的职位的计算器
面向对象和面向对象语言之间的区别
但我想知道什么是两个概念之间最核心的区别,无论任何语言。
得到的答案
最后得到的东西
感谢Matías Fidemraizer
答案是不依赖于任何语言,不依赖于任何功能,核心differnce对此我loooking是
其本身包含对象的语言被称为基于对象的语言,并与语言如下面向对象的概念被称为面向对象的语言
JavaScript是一种面向原型的语言。
它可以从一个构造函数建立实际的对象,它有几乎所有的功能,任何对象可能有:
- 构造函数。
- 方法(即JavaScript函数)。
- 属性(因为ECMA脚本5, “getter / setter方法”)。
- 实例。
在JavaScript中,任何对象都有一个原型 ,包括功能 。 原型本身是添加对象成员到整个对象的任何新创建的实例的一个基本方式。
var constructor = function() { };
constructor.prototype.text = "hello world";
alert(new constructor().text); // This alerts hello world
为什么JavaScript是不是面向对象的编程(脚本)的语言吗? 因为它没有的功能,适合面向对象编程的定义的要求:
- 多态性 : 没有 。 你可以改变一个原型成员的行为,但是这仅仅是重复使用的标识符。 你是不是能够访问伪派生的对象先前执行成员。
- 继承 : 不是。 也许原型链可能比得上继承,但JavaScript的(ECMA脚本5.x或更早版本)没有基于语法的继承像其他基于面向对象的语言(如Java和C#,红宝石,Python和VisualBasic.NET,... )。
- 封装 。 是的,当然,但有没有方法来创建实际的私有或内部对象成员。
也许我忘了提一些其他细节,但老实说,我认为这是一个很好的总结。
更新和汇总
最核心的区别是一种面向对象的编程语言有一个面向对象的范例必须拥有的功能,被认为是一种面向对象的编程语言。 因此,JavaScript的,就目前而言,并不是一个实际的面向对象的编程语言,因为它缺少实际的多态性和继承 。
更新:是否ES2015及以上改变了这种局面?
美观上讲是,ES2015及以上有让考虑不充分,但更接近于一个面向对象编程的主要改进:语法糖打电话给超类 。
例如:
class A {
doStuff() {
console.log("hello world");
}
}
class B extends A {
doStuff() {
super.doStuff();
console.log("...and goodbye!");
}
}
这是多态 。 更专业的类可以覆盖其基类都彻底改变一个函数的行为或做什么的基础已经在做,增加新代码的功能。
BTW,ES2015及以上仍然缺乏真正的封装: 哪里都像访问修饰符private
或public
这里? 无处 。
而且,在这一天,ES2015的结束和实现上述的基于类的OOP,但它仍然是ECMAScript的5.x的顶部的语法糖层...上面的代码仍然工作与罩下的原型,它的工作方式相同因为如果你会在ECMAScript中5.x中它的代码:
function A() {
}
A.prototype.doStuff = function() {
console.log("hello world");
};
function B() {
}
B.prototype = Object.create(A.prototype);
B.prototype.doStuff = function() {
A.prototype.doStuff.call(this);
console.log("...and goodbye!");
};
但愿我需要因为ES2020已经提出访问修饰符再次更新这个答案,我们就可以考虑的JavaScript这完全支持面向对象的编程另一种语言!
基于对象的语言包括基本上,它提供了内置的能力,轻松地创建和使用对象的任何语言。 有一个重要标准:
封装。 对象必须重视他们的API,通常在您与对象工作更告诉它什么比在其上运行的一些功能做这样的方式。
大多数基于对象的语言中的“类”,这基本上是为对象的蓝图来定义对象。 类勾画出所述物体的内部结构,并限定了API。
这是不是唯一的方式,虽然。 在JavaScript中,例如,对象真的没有“类”。 任何对象都可以有它想要的任何属性。 而且,由于函数是在JavaScript一流的价值,它们可以被设置为对象的属性,并作为对象的API。
至于对象为基础的,但是面向-没有对象的语言去,一个很好的例子是Visual Basic中(而不是.NET的东西,我说的是VB6和VBA)。 类存在,但不能相互继承。
面向对象的语言是基于对象的语言是拿东西了一步。 他们已经内置了对OOP的另外两个支柱支撑:
遗产。 对象必须必须的能力(和被视为)一些其它物体的特殊化。 这意味着,例如,可以定义“狗”作为“动物能够树皮和取棒”。
在现代语言中,它通常需要一个对象的类从另一个对象的类继承的形式。 这是不是必需的,虽然, 相反,有些人会尝试告诉你,OOP的定义并不在所有需要的类。
多态性。 代码必须能够使用一个对象,而不知道或关心究竟它是什么类型。
大多数语言(尤其是静态类型的)中的类和继承来定义多态性。 如果你有一个B类从A继承,这需要到A的引用通常可以利用一个B,而不是代码,而不是一些C类是不相关的Java A.也有interface
关键字,它可以让你定义一组行为的类必须实现。 任何对象的类显式地implements X
,从而实现了对接口X定义的函数,有资格作为X类型的一个实例
其他语言,如JavaScript,让你通过任何你喜欢的对象。 只要对象提供合适的接口,不要紧它到底是什么样的对象。 这就是所谓的“鸭打字”,这是非常接近的多态性的最纯粹的形式存在。
只需使用对象并不意味着你正在做的OOP,即使是在一个完全面向对象的语言,如果你没有实现面向对象的技术是简单地基于对象的编程。
有迹象表明,编程语言必须为了成为一个真正的面向对象的语言符合4个大要素。 它们是:抽象,封装,模块化和层次。
然而,我们可以称之为基于语言对象如果支持第一有元素。 只要一个编程语言支持对象的概念,本质上它支持前三个元素,因为它们是对象的固有特征。
JavaScript作为一种语言,不能说一个面向对象的,但基于对象的语言,因为它不支持体系(尤其是继承)。
面向对象的编程语言遵循属于OOP所有的概念。
基于对象的编程语言有对象ibuilt所以没有必要创建对象和它也遵循除了传承OOP概念,
对象orientd语言
Object-orientd language supports all the features of OOPs
Object-orientd language does not has in-built object
Object-orientd languages are C++, C#, Java etc
基于对象的语言
Object-based language doesn't support all the features of OOPs like Polymorphism and Inheritance
Object-based language has in-built object like JavaScript has window object.
Object-based languages are JavaScript, VB etc.
希望,这将澄清你的疑问。