Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Ir a la navegaciónIr a la búsqueda
Programación basada en prototipos,1 también llamada programación basado
en instancias o classless, es un estilo de programación orientada a objetos en el
cual los objetos no son creados mediante la instanciación de clases sino mediante
la clonación de otros objetos o mediante la escritura de código por parte del
programador. De esta forma los objetos ya existentes pueden servir de prototipos
para los que el programador necesite crear.
El original (y el más canónico) ejemplo de lenguaje prototipado es el lenguaje Self,
desarrollado por David Ungar y Randall Smith. Sin embargo el paradigma sin
clases está comenzando a popularizarse y ya ha sido implementado en lenguajes
de
programación como JavaScript, Pauscal, Cecil, NewtonScript, Ío, MOO, REBOL, S
queak y varios otros. 001-1467477-3/30/07/1971 hora:02:24:PM
Índice
Analógicamente[editar]
Un ejemplo de instancia en un lenguaje de programación visual, sería tomar o
arrastrar un objeto de la barra de herramientas o de la lista de librerías y colocarlo
en el escritorio o escenario de trabajo (estamos creando una instancia de ese
objeto, una copia). Si arrastramos 10 botones al entorno visual de trabajo,
estamos creando una instancia del botón original, si a cada botón le cambiamos el
nombre, tendremos 10 botones que heredan las mismas propiedades y métodos
del objeto original. Tenemos como resultado que con un solo botón hicimos 10 y
nuestro archivo pesara como si tuviese uno solo.
De esta forma, partiendo de lo que conforma a un objeto original (propiedades y
métodos) se reutilizan sus funciones creando una instancia del mismo en distintas
partes del programa donde se necesite. Si el objeto original cambia o le es
agregado algún nuevo atributo, las instancias lo heredaran puesto que son una
copia del objeto original.
Construcción de objetos[editar]
En lenguajes basados en prototipos no hay clases explícitas y objetos heredan
directamente de otros objetos con los que están vinculados a través de una
propiedad, a menudo llamados prototipo como en el caso de Javascript. Hay dos
métodos de construcción de nuevos objetos: La creación ex nihilo ("de la nada")
de un objeto o por medio de la clonación de un objeto existente. El primero se
apoya a través de algún tipo de objeto literal, declaraciones donde los objetos se
pueden definir en tiempo de ejecución a través de una sintaxis especial
como Prototipo y pasan directamente a una variable. Aunque la mayoría de los
sistemas den apoyo a una variedad de clonación, la creación de objetos ex nihilo
no es tan prominente.
En lenguajes basados en clases, una nueva instancia se construye a través de la
función constructora de clase, una función especial que se reserva un bloque de
memoria para los miembros (propiedades y métodos) del objeto y devuelve una
referencia a ese bloque. Un conjunto opcional de argumentos del constructor se
puede pasar a la función y por lo general se llevan a cabo en propiedades. La
instancia resultante heredará todos los métodos y propiedades que se han
definido en la clase, que actúa como una especie de plantilla a partir de la cual se
pueden construir objetos con tipo similares.
Los sistemas que soportan la creación de objetos ex nihilo permiten que los
nuevos objetos se creen a partir de cero y sin clonación a partir de un prototipo
existente. Estos sistemas proporcionan una sintaxis especial para especificar las
propiedades y comportamientos de los nuevos objetos sin referencia a los objetos
existentes. En muchos idiomas de prototipo existe un objeto raíz, a menudo
llamado Objeto, que se establece como el prototipo por defecto para todos los
demás objetos creados en tiempo de ejecución y que lleva métodos comúnmente
necesarios, por ejemplo una función ToString() para devolver una descripción
del objeto como una cadena. Un aspecto útil de la creación de objetos ex nihilo es
garantizar que la ranura de un nuevo objeto (propiedades y métodos) es que los
nombres no tienen conflictos de espacio de nombres con el objeto Objeto de nivel
superior. (En la implementación JavaScript de Mozilla, se puede hacer esto
estableciendo la propiedad __proto__ de un objeto de nueva construcción en
nulo.)
La clonación se refiere a un proceso mediante el cual un nuevo objeto se
construye copiando el comportamiento de un objeto existente (su prototipo). El
nuevo objeto entonces lleva todas las cualidades de la original. A partir de ahora,
el nuevo objeto se puede modificar. En algunos sistemas, el objeto secundario
resultante mantiene un vínculo explícito (mediante delegación o parecido) a su
prototipo, y los cambios en el prototipo causa cambios correspondientes en su
clon. Otros sistemas, como el lenguaje de programación Forth-como Kevo, no
propagan el cambio a partir del prototipo de esta manera, lugar de seguir un
modelo más concatenativa, los cambios en los objetos clonados no se propagan
automáticamente a través de los descendientes
Los defensores de los modelos de objetos basados en clases que critican a los
sistemas basados en prototipos a menudo tienen preocupaciones similares a las
preocupaciones de los defensores de los sistemas de tipo estático para los
lenguajes de programación de tipo dinámico (véase el tipo de datos). Por lo
general, estas preocupaciones se refieren a: la corrección, la seguridad, la
previsibilidad, la eficiencia y la falta de familiaridad del programador.
En los tres primeros puntos, las clases son a menudo vistos como análogos a los
tipos (en lenguajes orientados a objetos más tipos estáticos que sirven ese papel)
y se proponen ofrecer garantías contractuales a sus instancias, y para los usuarios
de sus casos, que se comportarán de alguna manera dada.
En cuanto a la eficiencia, clases declarando simplifica muchas optimizaciones del
compilador que permiten el desarrollo de método eficiente y de búsqueda de
instancia variable. Para el lenguaje mismo, mucho tiempo de desarrollo se destinó
a desarrollar, compilar e interpretar las técnicas para mejorar el rendimiento de los
sistemas basados en prototipos frente a los sistemas basados en clases.
La Crítica[editar]
Una crítica común cometido contra lenguajes basados en prototipos es que la
comunidad de desarrolladores de software no está familiarizado con ellos, a pesar
de la popularidad y el mercado de programación de JavaScript. Este nivel de
conocimiento de los sistemas basados en prototipos parece ir en aumento con la
proliferación de frameworks de JavaScript y el complejo uso de JavaScript como
madura la Web.
Prototipos en Pauscal[editar]
En Pauscal es posible crear prototipos que son generalmente utilizados para
crear variables de procedimientos, un simple ejemplo es:
Importar "Utiles.prp"
Prototipo MsgBox(Parametro1:Cadena):Entero
Var VariableDeProcedimiento:MsgBox ' Apunta al procedimiento
VariableDeProcedimiento@ = Mensaje@ ' La variable apunta al
procedimiento Mensaje.
VariableDeProcedimiento("Hola Mundo!")
Fin