Saltar al contenido

Diferencia principal entre lenguaje orientado a objetos y lenguaje basado en objetos

Esta reseña ha sido evaluado por nuestros expertos así garantizamos la veracidad de este tutorial.

Solución:

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 pueda tener cualquier objeto:

  • Constructor.
  • Métodos (es decir, funciones en JavaScript).
  • Propiedades (desde ECMA-Script 5, “getters/setters”).
  • Instancias.

En JavaScript, cualquier objeto tiene un prototipoincluyendo funciones. El prototipo en sí es una forma rudimentaria de agregar miembros del objeto a cualquier instancia recién creada del objeto completo.

var constructor = function()  ;
constructor.prototype.text = "hello world";

alert(new constructor().text); // This alerts hello world

Por qué JavaScript no es una programación orientada a objetos (Lenguaje de escritura? Porque no tiene ninguna 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 solo es reutilizar el identificador. No puede acceder a la implementación anterior del miembro en un objeto pseudoderivado.
  • Herencia: Para nada. Tal vez la cadena de prototipos sea comparable a la herencia, pero JavaScript (ECMA-Script 5.x o versiones anteriores) no tiene una herencia basada en la sintaxis como otros lenguajes basados ​​en programación orientada a objetos (es decir, Java, C#, Ruby, Python, VisualBasic.NET,… ).
  • Encapsulación. Sí, por supuesto, pero no hay forma de crear miembros de objetos internos o privados reales.

Quizás se me olvidó mencionar algún otro detalle, pero sinceramente creo que este es un buen resumen.

Actualización y resumen

La principal diferencia 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í, ES2015 y superior tienen una mejora importante que permite considerar una programación no completamente pero más cercana a una orientada a objetos: 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 código nuevo a la función.

Por cierto, ES2015 y superior todavía carece true encapsulación: ¿Dónde están los modificadores de acceso como private o public ¿aquí?En ningún lugar.

Y, al final del día, ES2015 y superior implementan programación orientada a objetos basada en clases, pero sigue siendo una capa de azúcar sintáctica sobre ECMAScript 5.x… El código anterior aún funciona con prototipos ocultos y funciona de la misma manera. como si lo codificara 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 nuevamente porque ES2020 ya ha propuesto modificadores de acceso y podremos considerar JavaScript como otro lenguaje que admita totalmente la programación orientada a objetos!

basado en objetos Los lenguajes incluyen básicamente cualquier lenguaje que ofrezca la capacidad integrada de crear y usar objetos fácilmente. Hay un criterio principal:

  • Encapsulación. Los objetos tienen una API adjunta, generalmente de tal manera que trabaja con el objeto más al 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 modelos 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 dado que las funciones son valores de primera clase en JavaScript, se pueden establecer como propiedades en el objeto y servir como la 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 heredar unas de otras.

Orientado a objetos Los lenguajes son lenguajes basados ​​en objetos que llevan las cosas un paso más allá. Tienen soporte incorporado 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, poder definir “Perro” como “Animal que puede ladrar y traer palos”.

    En los lenguajes modernos, por lo general toma la forma de un objeto clase heredar de otro objeto clase. Sin embargo, esto no es un requisito; Al contrario de lo que algunas personas intentarán decirte, la definición de programación orientada a objetos 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 A normalmente puede tomar una B en su lugar, pero no una clase C que no está relacionada con A. Java también tiene la interface palabra clave, que le permite definir un conjunto de comportamientos que debe implementar una clase. Cualquier objeto cuya clase explícitamente implements Xy por lo tanto implementa las funciones definidas en la interfaz X, califica como una instancia de tipo X.

    Otros lenguajes, como JavaScript, le permiten pasar cualquier objeto que desee. Siempre que el objeto presente la interfaz correcta, no importa exactamente qué tipo de objeto sea. Esto se llama “tipado de pato”, y es casi la forma más pura de polimorfismo que existe.

El solo uso de objetos no significa que esté haciendo OOP, incluso en un lenguaje completamente OO si no está implementando técnicas OO, es simplemente programación basada en objetos.

Si estás de acuerdo, tienes el poder dejar un escrito acerca de qué te ha parecido esta reseña.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *