Programación basada en prototipos


La programación basada en prototipos es un estilo de programación orientada a objetos en el que la reutilización del comportamiento (conocida como herencia ) se realiza mediante un proceso de reutilización de objetos existentes que sirven como prototipos . Este modelo también se puede conocer como programación prototípica , orientada a prototipos, sin clases o basada en instancias .

La programación basada en prototipos utiliza objetos generalizados, que luego pueden clonarse y ampliarse. Utilizando la fruta como ejemplo, un objeto "fruta" representaría las propiedades y la funcionalidad de la fruta en general. Un objeto "banana" se clonaría del objeto "fruit" y se agregarían propiedades generales específicas de las bananas. Cada objeto "banana" individual se clonaría a partir del objeto "banana" genérico. Compare con el paradigma basado en clases , donde una clase de "fruta" se ampliaría con una clase de "plátano" .

El primer lenguaje de programación orientado a prototipos fue Self , desarrollado por David Ungar y Randall Smith a mediados de la década de 1980 para investigar temas en el diseño de lenguajes orientados a objetos. Desde finales de la década de 1990, el paradigma sin clases se ha vuelto cada vez más popular. Algunos lenguajes orientados actuales prototipo son JavaScript (y otros ECMAScript implementaciones como JScript y flash 's ActionScript 1.0), Lua , Cecil , NewtonScript , Io , Ioke , MOO , REBOLy AHK .

Hace prototipos de objetos y luego ... crea nuevas instancias. Los objetos son mutables en JavaScript, por lo que podemos aumentar las nuevas instancias, dándoles nuevos campos y métodos. Estos pueden actuar como prototipos para objetos incluso más nuevos. No necesitamos clases para hacer muchos objetos similares ... Los objetos heredan de los objetos. ¿Qué podría estar más orientado a objetos que eso? [1]

Los defensores de la programación basada en prototipos argumentan que anima al programador a centrarse en el comportamiento de algún conjunto de ejemplos y solo luego se preocupa por clasificar estos objetos en objetos arquetípicos que luego se usan de manera similar a las clases . [2] Muchos sistemas basados ​​en prototipos fomentan la alteración de prototipos durante el tiempo de ejecución , mientras que solo unos pocos sistemas orientados a objetos basados ​​en clases (como el sistema dinámico orientado a objetos, Common Lisp , Dylan , Objective-C , Perl , Python , Ruby o Smalltalk ) permiten modificar las clases durante la ejecución de un programa.

Casi todos los sistemas basados ​​en prototipos se basan en lenguajes interpretados y tipados dinámicamente . Sin embargo, los sistemas basados ​​en lenguajes tipados estáticamente son técnicamente viables. El lenguaje Omega discutido en Programación basada en prototipos [3] es un ejemplo de tal sistema, aunque según el sitio web de Omega, incluso Omega no es exclusivamente estático, sino que su "compilador puede optar por utilizar enlaces estáticos donde sea posible y puede mejorar la eficiencia de un programa ".