fbpx
Wikipedia

Programación basada en prototipos

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, Squeak y varios otros. 001-1467477-3/30/07/1971 hora:02:24:PM

Comparación de los prototipos y modelos de clase

Objetos de clases:

  • Una clase definida por su código fuente es estática.
  • Representa una definición abstracta del objeto.
  • Cada objeto es una instancia de una clase.
  • El legado se encuentra en las clases.

Objetos prototipos:

  • Un prototipo definido en su código fuente es mutable.
  • Es en sí mismo un objeto, así como otros.
  • Tiene una existencia física en la memoria.
  • Puede ser modificado y llamado.
  • Debe ser nombrado.
  • Un prototipo puede ser visto como un modelo ejemplar de una familia objeto.
  • Un objeto hereda propiedades (valores y métodos) de su prototipo.

Analógicamente

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.

Comparación con el modelo basado en clases

En lenguajes basados en clases los objetos pueden ser de dos tipos generales, las clases y las instancias. Las clases definen la disposición y la funcionalidad básicas de los objetos, y las instancias son objetos "utilizables" basados en los patrones de una clase particular. En este modelo, las clases actúan como colecciones de comportamiento (métodos) y estructuras que son iguales para todas las instancias, mientras que las instancias llevan los datos de los objetos. La distinción del papel se basa así sobre todo en una distinción entre la estructura y el comportamiento en un lado, y el estado en el otro.

Los entusiastas de la programación basada en prototipos a menudo argumentan que los lenguajes basados en clases animan un modelo del desarrollo que se centra primero en la taxonomía y las relaciones entre las clases. En cambio, la programación basada en prototipos intenta animar al programador que se centre en el comportamiento de un cierto sistema de ejemplos y después de clasificar estos objetos en objetos arquetipos que se utilizan más adelante en una manera similar a las clases. Como tal, muchos sistemas basados en prototipos animan la alteración de prototipos durante tiempo de ejecución, mientras que solamente muy pocos sistemas orientados a objeto, basados en clase (como el primer sistema orientados al objetos dinámicos, Smalltalk) permiten que las clases sean alteradas durante la ejecución de un programa.

Mientras que la amplia mayoría de sistemas basados en prototipos se refieren a lenguajes de programación interpretados y de tipos de datos dinámicos, es importante precisar que los sistemas de tipos de datos estáticos son técnicamente factibles. El lenguaje de programación de Omega que es basado en prototipos es un ejemplo de tal sistema, aunque según el Web site de Omega, Omega no es exclusivamente de tipos de datos estáticos, pero su "compilador puede elegir utilizar el tipo de dato estático donde es posible esto y puede mejorar la eficacia del programa.”

Construcción de objetos

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

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

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 

Como se puede apreciar, el prototipo no es un procedimiento o función real, es una representación de estos que puede ser utilizada para crear variables de procedimientos, en casos más complejos, métodos para objetos o "esqueletos" para Apis.

Implementaciones

  • Class::Prototyped Módulo Perl en CPAN para la programación orientada a objetos basada en prototipos (en inglés)
  • Pauscal Lenguaje de programación en español, basado en prototipos.

Referencias

  1. en:Prototype-based programming
  •   Datos: Q180868

programación, basada, prototipos, también, llamada, programación, basado, instancias, classless, estilo, programación, orientada, objetos, cual, objetos, creados, mediante, instanciación, clases, sino, mediante, clonación, otros, objetos, mediante, escritura, . Programacion basada en prototipos 1 tambien llamada programacion basado en instancias o classless es un estilo de programacion orientada a objetos en el cual los objetos no son creados mediante la instanciacion de clases sino mediante la clonacion de otros objetos o mediante la escritura de codigo 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 mas canonico ejemplo de lenguaje prototipado es el lenguaje Self desarrollado por David Ungar y Randall Smith Sin embargo el paradigma sin clases esta comenzando a popularizarse y ya ha sido implementado en lenguajes de programacion como JavaScript Pauscal Cecil NewtonScript Io MOO REBOL Squeak y varios otros 001 1467477 3 30 07 1971 hora 02 24 PM Indice 1 Comparacion de los prototipos y modelos de clase 2 Analogicamente 3 Comparacion con el modelo basado en clases 4 Construccion de objetos 5 La Critica 6 Prototipos en Pauscal 6 1 Implementaciones 7 ReferenciasComparacion de los prototipos y modelos de clase EditarObjetos de clases Una clase definida por su codigo fuente es estatica Representa una definicion abstracta del objeto Cada objeto es una instancia de una clase El legado se encuentra en las clases Objetos prototipos Un prototipo definido en su codigo fuente es mutable Es en si mismo un objeto asi como otros Tiene una existencia fisica en la memoria Puede ser modificado y llamado Debe ser nombrado Un prototipo puede ser visto como un modelo ejemplar de una familia objeto Un objeto hereda propiedades valores y metodos de su prototipo Analogicamente EditarUn ejemplo de instancia en un lenguaje de programacion visual seria tomar o arrastrar un objeto de la barra de herramientas o de la lista de librerias 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 boton original si a cada boton le cambiamos el nombre tendremos 10 botones que heredan las mismas propiedades y metodos del objeto original Tenemos como resultado que con un solo boton 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 metodos 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 algun nuevo atributo las instancias lo heredaran puesto que son una copia del objeto original Comparacion con el modelo basado en clases EditarEn lenguajes basados en clases los objetos pueden ser de dos tipos generales las clases y las instancias Las clases definen la disposicion y la funcionalidad basicas de los objetos y las instancias son objetos utilizables basados en los patrones de una clase particular En este modelo las clases actuan como colecciones de comportamiento metodos y estructuras que son iguales para todas las instancias mientras que las instancias llevan los datos de los objetos La distincion del papel se basa asi sobre todo en una distincion entre la estructura y el comportamiento en un lado y el estado en el otro Los entusiastas de la programacion basada en prototipos a menudo argumentan que los lenguajes basados en clases animan un modelo del desarrollo que se centra primero en la taxonomia y las relaciones entre las clases En cambio la programacion basada en prototipos intenta animar al programador que se centre en el comportamiento de un cierto sistema de ejemplos y despues de clasificar estos objetos en objetos arquetipos que se utilizan mas adelante en una manera similar a las clases Como tal muchos sistemas basados en prototipos animan la alteracion de prototipos durante tiempo de ejecucion mientras que solamente muy pocos sistemas orientados a objeto basados en clase como el primer sistema orientados al objetos dinamicos Smalltalk permiten que las clases sean alteradas durante la ejecucion de un programa Mientras que la amplia mayoria de sistemas basados en prototipos se refieren a lenguajes de programacion interpretados y de tipos de datos dinamicos es importante precisar que los sistemas de tipos de datos estaticos son tecnicamente factibles El lenguaje de programacion de Omega que es basado en prototipos es un ejemplo de tal sistema aunque segun el Web site de Omega Omega no es exclusivamente de tipos de datos estaticos pero su compilador puede elegir utilizar el tipo de dato estatico donde es posible esto y puede mejorar la eficacia del programa Construccion de objetos EditarEn lenguajes basados en prototipos no hay clases explicitas y objetos heredan directamente de otros objetos con los que estan vinculados a traves de una propiedad a menudo llamados prototipo como en el caso de Javascript Hay dos metodos de construccion de nuevos objetos La creacion ex nihilo de la nada de un objeto o por medio de la clonacion de un objeto existente El primero se apoya a traves de algun tipo de objeto literal declaraciones donde los objetos se pueden definir en tiempo de ejecucion a traves de una sintaxis especial como Prototipo y pasan directamente a una variable Aunque la mayoria de los sistemas den apoyo a una variedad de clonacion la creacion de objetos ex nihilo no es tan prominente En lenguajes basados en clases una nueva instancia se construye a traves de la funcion constructora de clase una funcion especial que se reserva un bloque de memoria para los miembros propiedades y metodos del objeto y devuelve una referencia a ese bloque Un conjunto opcional de argumentos del constructor se puede pasar a la funcion y por lo general se llevan a cabo en propiedades La instancia resultante heredara todos los metodos y propiedades que se han definido en la clase que actua como una especie de plantilla a partir de la cual se pueden construir objetos con tipo similares Los sistemas que soportan la creacion de objetos ex nihilo permiten que los nuevos objetos se creen a partir de cero y sin clonacion 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 raiz a menudo llamado Objeto que se establece como el prototipo por defecto para todos los demas objetos creados en tiempo de ejecucion y que lleva metodos comunmente necesarios por ejemplo una funcion ToString para devolver una descripcion del objeto como una cadena Un aspecto util de la creacion de objetos ex nihilo es garantizar que la ranura de un nuevo objeto propiedades y metodos es que los nombres no tienen conflictos de espacio de nombres con el objeto Objeto de nivel superior En la implementacion JavaScript de Mozilla se puede hacer esto estableciendo la propiedad proto de un objeto de nueva construccion en nulo La clonacion 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 vinculo explicito mediante delegacion o parecido a su prototipo y los cambios en el prototipo causa cambios correspondientes en su clon Otros sistemas como el lenguaje de programacion Forth como Kevo no propagan el cambio a partir del prototipo de esta manera lugar de seguir un modelo mas concatenativa los cambios en los objetos clonados no se propagan automaticamente a traves de los descendientesLos 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 estatico para los lenguajes de programacion de tipo dinamico vease el tipo de datos Por lo general estas preocupaciones se refieren a la correccion 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 analogos a los tipos en lenguajes orientados a objetos mas tipos estaticos que sirven ese papel y se proponen ofrecer garantias contractuales a sus instancias y para los usuarios de sus casos que se comportaran de alguna manera dada En cuanto a la eficiencia clases declarando simplifica muchas optimizaciones del compilador que permiten el desarrollo de metodo eficiente y de busqueda de instancia variable Para el lenguaje mismo mucho tiempo de desarrollo se destino a desarrollar compilar e interpretar las tecnicas para mejorar el rendimiento de los sistemas basados en prototipos frente a los sistemas basados en clases La Critica EditarUna critica comun cometido contra lenguajes basados en prototipos es que la comunidad de desarrolladores de software no esta familiarizado con ellos a pesar de la popularidad y el mercado de programacion de JavaScript Este nivel de conocimiento de los sistemas basados en prototipos parece ir en aumento con la proliferacion de frameworks de JavaScript y el complejo uso de JavaScript como madura la Web Prototipos en Pauscal EditarEn 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 Como se puede apreciar el prototipo no es un procedimiento o funcion real es una representacion de estos que puede ser utilizada para crear variables de procedimientos en casos mas complejos metodos para objetos o esqueletos para Apis Implementaciones Editar Class Prototyped Modulo Perl en CPAN para la programacion orientada a objetos basada en prototipos en ingles Pauscal Lenguaje de programacion en espanol basado en prototipos Referencias Editar en Prototype based programming Datos Q180868 Obtenido de https es wikipedia org w index php title Programacion basada en prototipos amp oldid 132365376, wikipedia, wiki, leyendo, leer, libro, biblioteca,

español

, española, descargar, gratis, descargar gratis, mp3, video, mp4, 3gp, jpg, jpeg, gif, png, imagen, música, canción, película, libro, juego, juegos