java - sirve - que es una clase en programacion
Diferencia entre el lenguaje orientado a objetos y el lenguaje basado en objetos. (7)
Quiero saber cuál es la diferencia central entre
Orientado a objetos y lenguajes basados en objetos
He leído muchos post, todos ellos están diciendo dos cosas
El lenguaje orientado a objetos es compatible con todas las características de los OOP y el lenguaje basado en objetos no es compatible con todas las características de los OOP, como el polimorfismo y la herencia.
Están dando ejemplo de javascript como basado en objeto y java como orientado a objeto
Me gusta este post de stackoverflow
Diferencia entre lenguaje orientado a objetos y basado en objetos.
Pero quiero saber cuál es la diferencia principal entre ambos conceptos, independientemente de cualquier idioma.
Tengo la respuesta
Finalmente tengo la cosa
Gracias a Matías Fidemraizer
Respuesta que no depende de ningún idioma, no depende de ninguna característica, la diferencia de núcleo para la cual estoy buscando
El lenguaje que a su vez contiene objetos se denomina lenguaje basado en objetos y el lenguaje con los siguientes conceptos orientados a objetos se conoce como lenguaje orientado a objetos
OOP y OBP son tipos de lenguajes de programación que siguen diferentes principios.
OOP : sigue polimorfismo, herencia y encapsulación (PIE).
- Ejemplos : Java, .Net, etc. OOP es nuevo en comparación con OBP
OBP : sigue el polimorfismo y la encapsulación.
- Ejemplos : Ada, Visual Basic (VB) y Fortran 90. OBP es antiguo
El solo hecho de usar objetos no significa que esté haciendo OOP, incluso en un lenguaje totalmente OO si no está implementando técnicas OO, es simplemente programación basada en objetos.
Hay 4 elementos principales que un lenguaje de programación debe cumplir para ser un verdadero lenguaje orientado a objetos. Estos son: Abstracción, Encapsulación, Modularidad y Jerarquía.
Sin embargo, podemos llamar a un objeto de lenguaje basado si eso es compatible con los primeros elementos. Tan pronto como un lenguaje de programación soporta el concepto de Objeto, inherentemente soporta los primeros tres elementos, ya que son una característica inherente de un Objeto.
JavaScript como lenguaje no puede decirse como un lenguaje orientado a objetos sino basado en objetos, ya que no admite la jerarquía (especialmente la herencia).
JavaScript es un lenguaje orientado a prototipos.
Puede construir objetos reales a partir de una función constructora y tiene casi cualquier característica que cualquier objeto podría tener:
- Constructor.
- Métodos (es decir, funciones en JavaScript).
- Propiedades (desde ECMA-Script 5, "getters / setters").
- Instancias.
En JavaScript, cualquier objeto tiene un prototipo , incluyendo funciones . El prototipo en sí es una forma rudimentaria de agregar miembros de objetos a cualquier instancia recién creada de todo el objeto.
var constructor = function() { };
constructor.prototype.text = "hello world";
alert(new constructor().text); // This alerts hello world
¿Por qué JavaScript no es un lenguaje de programación (scripting) orientado a objetos? Debido a que no tiene una característica que se ajuste a los requisitos de la definición de programación orientada a objetos:
- Polimorfismo : No. Puede cambiar el comportamiento de un miembro prototipo, pero esto es solo reutilizar el identificador. No puede acceder a la implementación anterior del miembro en un objeto pseudo-derivado .
- Herencia : en absoluto . Tal vez la cadena de prototipos podría ser comparable a la herencia, pero JavaScript (ECMA-Script 5.xo versiones anteriores) no tiene herencia basada en la sintaxis como otros lenguajes basados en OOP (es decir, Java, C #, Ruby, Python, VisualBasic.NET, ... ).
- Encapsulacion Sí, por supuesto, pero no hay forma de crear miembros reales o privados de objetos internos.
Quizás olvidé mencionar algún otro detalle, pero sinceramente creo que este es un buen resumen.
Actualización y resumen
La diferencia principal es que un lenguaje de programación orientado a objetos tiene las características que debe tener un paradigma orientado a objetos para ser considerado un lenguaje de programación orientado a objetos. Por lo tanto, JavaScript, por ahora, no es un lenguaje de programación orientado a objetos real porque carece de polimorfismo y herencia reales .
Actualización: ¿ES2015 y superior cambiaron la situación?
Estéticamente hablando, sí, el ES2015 y superior tiene una mejora importante que permite considerar una programación no orientada pero más cercana a un objeto: el azúcar sintáctico para llamar a la súper clase .
Por ejemplo:
class A {
doStuff() {
console.log("hello world");
}
}
class B extends A {
doStuff() {
super.doStuff();
console.log("...and goodbye!");
}
}
Esto es polimorfismo . Una clase más especializada puede anular su clase base para cambiar completamente el comportamiento de una función o hacer lo que la base ya estaba haciendo, agregando un nuevo código a la función.
BTW, ES2015 y superiores aún carecen de encapsulación verdadera: ¿ dónde están los modificadores de acceso como private
o public
aquí? En ninguna parte
Y, al final del día, ES2015 y superior implementan la POO basada en clases, pero sigue siendo una capa de azúcar sintáctica en la parte superior de ECMAScript 5.x ... El código anterior aún funciona con prototipos debajo de los capuchones y funciona de la misma manera Como si lo codificaras en 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!");
};
Esperemos tener que actualizar esta respuesta de nuevo porque ES2020 ya ha propuesto modificadores de acceso y ¡podremos considerar a JavaScript como otro lenguaje que es totalmente compatible con la programación orientada a objetos!
Lenguaje orientd objeto
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
Lenguaje basado en objetos
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.
Espero, esto aclarará tus dudas.
Los lenguajes de programación orientados a objetos siguen todos los conceptos que pertenecen a OOP.
El lenguaje de programación basado en objetos tiene objetos construidos, por lo que no hay necesidad de crear objetos y también sigue los conceptos OOP, excepto la herencia,
Los lenguajes basados en objetos incluyen básicamente cualquier lenguaje que ofrezca la capacidad incorporada para crear y usar objetos fácilmente. Hay un criterio importante:
Encapsulacion Los objetos tienen una API adjunta, normalmente de tal manera que trabajas con el objeto más diciéndole qué hacer que ejecutando alguna función en él.
La mayoría de los lenguajes basados en objetos definen objetos en términos de "clases", que son básicamente planos para un objeto. La clase establece la estructura interna del objeto y define la API.
Sin embargo, esta no es la única manera. En JavaScript, por ejemplo, los objetos realmente no tienen "clases". Cualquier objeto puede tener las propiedades que quiera. Y como las funciones son valores de primera clase en JavaScript, se pueden establecer como propiedades en el objeto y servir como API del objeto.
En lo que respecta a los lenguajes basados en objetos, pero no orientados a objetos, un buen ejemplo sería Visual Basic (no las cosas de .net; estoy hablando de VB6 y VBA). Las clases existen, pero no pueden heredarse unas de otras.
Los lenguajes orientados a objetos son lenguajes basados en objetos que llevan las cosas un paso más allá. Han incorporado soporte para los otros dos pilares de OOP:
Herencia. Los objetos deben tener la capacidad de ser (y ser vistos como) especializaciones de algún otro objeto. Esto significa, por ejemplo, ser capaz de definir "Perro" como "Animal que puede ladrar y buscar palos".
En los lenguajes modernos, por lo general toma la forma de la clase de un objeto heredada de la clase de otro objeto. Esto no es un requisito, sin embargo; Al contrario de lo que algunas personas intentarán decirle, la definición de POO no requiere clases en absoluto.
Polimorfismo. El código debe poder usar un objeto sin saber o preocuparse exactamente de qué tipo es.
La mayoría de los lenguajes (especialmente los tipificados estáticamente) definen el polimorfismo en términos de clases y herencia. Si tiene una clase B que hereda de A, el código que requiere una referencia a una A normalmente puede tomar una B, pero no una clase C que no esté relacionada con A. Java también tiene la palabra clave de la
interface
, que le permite definir un conjunto de comportamientos que una clase debe implementar. Cualquier objeto cuya claseimplements X
explícitamenteimplements X
, y por lo tanto implementa las funciones definidas en la interfaz X, califica como una instancia de tipo X.Otros idiomas, como JavaScript, le permiten pasar cualquier objeto que le guste. Mientras el objeto presente la interfaz correcta, no importa exactamente qué tipo de objeto es. Esto se denomina "tipificación de pato" y es casi la forma más pura de polimorfismo que existe.