sábado, 1 de agosto de 2009

Conclusiones.

Una de las principales contribuciones de este artículo ha sido la justificación de que la no
utilización de clases puede aportar ventajas sustanciales al modelo de objetos. Además se han
perfilado las ideas básicas de un modelo poco conocido, pero que ha sido ampliamente estudiado y
debatido en la comunidad científica.
Lenguajes con prototipos como Self , basado en la utilización de delegación, suponen un
enfoque bastante nuevo de programación orientada a objetos, que permite explotar el cambio
dinámico en el estado y/o comportamiento de objetos, para su adaptación a nuevas necesidades,
algo que sucede a menudo y que no está resuelto en el modelo tradicional basado en clases. Otros
como Kevo, y su modelo de concatenación de slots, produce un grado alto de localidad en cada
objeto, que los hace especialmente apropiados para ambientes distribuidos, aspecto fundamental
hoy en día, si tenemos en cuenta que cada vez las redes de computadores cobran mayor
importancia.
Todas estas ideas plasmadas en diferentes lenguajes de programación, no tratan de ser
alternativas a los lenguajes tradicionales basados en clases, sino que constituyen diferentes
propuestas que explotan algunas de las características del modelo de prototipos, pero que distan de
constituir proyectos que realmente puedan utilizarse en el desarrollo comercial de software.

Limitaciones.

Las principales limitaciones del modelo basado en prototipos, que son necesarias resolver para
Que este modelo esté listo para satisfacer las demandas de la industria del software, son:

Implementación complicada: los prototipos dan lugar a numerosos problemas técnicos que
Necesitan resolverse y que hace que las herramientas de programación no sean muy eficientes. Es
Difícil conservar la identidad de los objetos y las relaciones entre ellos, ya que continuamente se
Están manipulando prototipos y una modificación a uno de ellos puede tener un efecto adverso en
Objetos creados con posterioridad (problema conocido como alteración o corrupción del prototipo
[Blaschek 94]).

Falta de herramientas apropiada: la mayoría de los lenguajes basados en prototipos
Existentes hoy en día son proyectos de investigación, que no han sido distribuidos comercialmente y
que por tanto no se han utilizado por un gran número de programadores, como por ejemplo sucede
Con C++ o Smalltalk.

Falta de metodologías: para conseguir que los sistemas basados en prototipos estén
Preparados para el desarrollo de aplicaciones (hoy en día cada vez de mayor complejidad) es
Necesario disponer de metodologías y herramientas automáticas que guíen el proceso de desarrollo
De software. La principal cuestión que hay que tener en cuenta para resolver estos problemas es
Decidir si se pueden adaptar las metodologías actuales basadas en clases o si por el contrario
Interesa crear nuevas metodologías que partan de cero y se centren en los aspectos básicos de los sistemas basados en prototipos.


VENTAJAS

Permiten cambios individuales: en los sistemas basados en clases todos los objetos de una
Misma clase tienen las mismas propiedades, cuando se necesita realizar cualquier cambio, hay que
Realizarlo sobre la clase y no es posible efectuarlo sobre los objetos individuales. O lo que es similar,
Si la definición de una clase cambia, todas sus instancias deben adaptarse a tal cambio. Sin embargo,
En los lenguajes basados en prototipos es posible realizar cambios individuales a objetos sin afectar
A otros objetos. Esta adaptación de cada objeto permite una especialización individual requerida en
Numerosas ocasiones en la programación orientada a objetos.

Facilitan la construcción de redes de objetos: un programa orientado a objetos se
Caracteriza porque está formado por una red de objetos que interactúan entre sí. Es importante, por
Tanto, no sólo la descripción de los objetos, sino cómo se conectan, cuándo se crean, qué relaciones
Se establecen entre ellos, etc. Como las clases son descripciones estáticas se necesita un esfuerzo
Extra para describir el comportamiento dinámico de la red de objetos que conforman el sistema. En
Los sistemas basados en prototipos, se utiliza un acercamiento mucho más directo, ya que los objetos
Se crean realmente y es más fácil enlazar unos con otros.

Permiten comportamiento dinámico: una característica que dota de mayor flexibilidad a los
Sistemas orientados a objetos, es la posibilidad de cambiar la estructura y/o el comportamiento de
Los objetos en tiempo de ejecución. En lenguajes basados en clases esto sólo es posible si se
Dispone de algún mecanismo para modificar la propia clase. En lenguajes como C++, no hay nada
Parecido y para modificar la clase hay que modificar el código fuente. Otros, como Smalltalk,
Permiten modificación dinámica de objetos a través del concepto de meta-clase, pero su uso lleva
Asociado problemas conceptuales que complican aún más el modelo. Hay lenguajes basados en
Prototipos como Self, donde es posible cambiar dinámicamente el comportamiento de un objeto
Simplemente cambiando su padre.

Adecuados para entornos distribuidos: los prototipos contienen tanto su estado como su
Comportamiento, y son independientes de las restricciones de las clases, esto los hace especialmente
Útiles en situaciones en las que los objetos deben migrar de un nodo a otro. En un lenguaje basado
En clases, un objeto consta de dos partes: su instancia y su clase, sin alguna de las dos el objeto está
Incompleto (sin la instancia no tiene estado y sin la clase no tendría comportamiento). En un sistema
Distribuido, esto plantea el problema de que siempre que se maneje un objeto, hay que manejar la
Clase a la que pertenece. Si por ejemplo, el objeto obj que pertenece a la clase clase_obj, se envía
De un entorno local a un entorno remoto, hay dos posibilidades: que el entorno remoto que va a
Utilizar el objeto disponga en su jerarquía de una copia de la clase clase_obj, o sino cuando se envía
El objeto obj, también debe enviarse su correspondiente clase clase_obj.

MODELO

No existe un modelo estándar de sistema basado en prototipos, por el contrario, lenguajes
Existentes (Ágora, Cecil, Kevo, Newton Script, Obliq, Omega, Self, etc.) presentan características
Muy diferentes entre sí. Aspecto importante teniendo en cuenta que los conceptos del lenguaje tienen
una influencia considerable en la manera en la que un programador aborda la solución de un
Problema dado. Algunas de las variaciones principales vienen dadas en función de:

El mecanismo de compartir propiedades: en el lenguaje Self [Ungar 87], por ejemplo,
Gracias a la delegación y a la utilización de objetos de rasgos, es posible concentrar en un objeto
Comportamiento común. Esto conduce a obtener una jerarquía, con dos categorías de objetos:
Objetos de rasgos, que representan comportamiento compartido, y objetos de datos, que son los
Objetos reales. En el lenguaje Kevo [Taivalsaari 92], por el contrario, el sistema mantiene
Automáticamente una jerarquía de comportamiento, las variables compartidas se implementan en un
Objeto especial llamado Roto.

La propagación de cambios en los objetos: en Self los cambios afectan a un objeto individual
y se utiliza la delegación para aplicar los cambios a un grupo de objetos. Sin embargo cambios
Globales a la estructura de todos los objetos de un cierto tipo no son fáciles de aplicar. Para superar
Esta limitación, el lenguaje Kevo utiliza operaciones de módulo, que permiten aplicar cambios a
Objetos individuales o a grupos de objetos.

El modelo de herencia: existen dos estrategias básicas para implementar la herencia:
Delegación y concatenación o copia (independientemente de si el sistema está basado en clases o en
Prototipos) [Taivalsaari 96]. La delegación [Stein 87] se utiliza en Self y permite delegar la
Responsabilidad de la ejecución de un método. En Self un objeto está formado por un conjunto de
Slots con nombre que pueden evaluarse por medio de mensajes, la evaluación de un slot siempre
Devuelve un objeto. Cada objeto contiene un slot etiquetado con parten, que contiene una
Referencia a otro objeto padre cuyas propiedades serán compartidas. Si un mensaje recibido por un
Objeto no puede ligarse dentro del mismo, se delega la responsabilidad para seleccionar el método a
Su objeto padre. Como los slots son asignables y por tanto se pueden modificar, es posible cambiar
Dinámicamente el comportamiento de un objeto. Otro modelo diferente es el del lenguaje Kevo, que
Implementan la herencia por copia de slots. Los objetos no comparten slots, cada uno mantiene su
Propia copia lógica. Omega [Blasheck 94] utiliza un modelo más tradicional de herencia basado en
Copia. La delegación es más eficiente en espacio y la copia en tiempo, ya que simplifica el proceso
De resolución de mensajes.

El modelo de tipos: al igual que los lenguajes con clases, los basados en prototipos pueden
Utilizar asignación de tipos estática o dinámica, pero tanto la delegación como la posibilidad de
Realizar cambios individuales impide la utilización del modelo estático. Por esta razón Self y Kevo
Son lenguajes tapeados dinámicamente, ambos tienen en común la característica de permitir cambios
Individuales a objetos sin afectar a otros objetos: dos objetos similares, tras sufrir cambios en su
Estructura, interface o comportamiento, pertenecerán a diferentes tipos. De la misma manera, la
Delegación de Self hace que la interface de un objeto cambie cuando cambia la de su padre. Por
Otro lado, el modelo estático de tipos, evita errores al permitir al compilador verificar el uso
Apropiado de las variables declaradas de un tipo. Omega prohibe delegación y cambios individuales
De objetos y opta por un modelo de tipos estático.



DEFINICION

Los prototipos constituyen un nuevo concepto en el modelo de objetos, que es utilizado en
Lenguajes como Self u Omega en sustitución de las clases para la construcción de objetos. La
Estructura y comportamiento de un conjunto de objetos no se describe mediante una clase, sino a
Través de un prototipo, que no es más que un objeto prefabricado, con una estructura, contenido y
Comportamiento predefinido, que se utiliza para crear nuevos objetos mediante un proceso de copia
[Blaschek 94].
En los lenguajes basados en clases, los objetos se crean mediante un algoritmo (Figura 1). Cada
Clase determina la estructura, el comportamiento, y los valores iníciales de las variables de instancia
Del objeto recientemente creado. Sólo pueden crearse objetos de clases existentes y para crear un
Objeto con una estructura y/o comportamiento diferente es obligatorio definir previamente una nueva
Clase. En contraste, los prototipos son ya objetos inicializados, ocupan almacenamiento y tienen
Estado propio. Cada nuevo objeto se crea copiando un prototipo (Figura 1), proceso a través del
Cual adquiere la misma estructura, estado y comportamiento que el prototipo de partida.
Posteriormente puede adaptarse mediante cambios individuales.
es un estilo de programación orientada a objetos en el cual, las "clases" no están presentes, y la re-utilización de procesos (conocida como herencia en lenguajes basados en clases) se obtiene a través de la clonación de objetos ya existentes, que sirven de prototipos, extendiendo sus funcionalidades. Este modelo es conocido como orientado a prototipos, o programación basada en instancias.
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, Cecil, NewtonScript, Ío, MOO, REBOL y varios otros.


INTRODUCCION

El objetivo fundamental de este artículo es presentar las características básicas de la
Programación orientada a objetos con prototipos, como una forma diferente de abordar el
Desarrollo de software. La mayoría de herramientas orientadas a objetos están basadas en la
Utilización de clases, sin embargo, los lenguajes basados en prototipos no utilizan ninguna noción
Formal de clase, los objetos se crean mediante un proceso de copia o clonación, a partir de otros
Objetos ya existentes o prototipos.
La distinción entre el modelo de clases y el de prototipos refleja una disputa filosófica tradicional
Acerca de la representación de abstracciones [Taivalsaari 97]. Platón vio formas (estables,
Abstractas, descripciones "ideales" de cosas) que tienen una existencia más real que las instancias de
Esas cosas. Lenguajes basados en clases, como Smalltalk o C++, son platónicos en su uso explícito
De clases para representar similitud entre colecciones de objetos. Lenguajes basados en prototipos,
Como Self, Omega o Kevo, representan otra visión en la cual no se confía tanto en la ventajosa
Categorización y clasificación, sino que se intenta que los conceptos del dominio del problema sean
Tan tangibles e intuitivos como sea posible.
Un argumento típico a favor del acercamiento basado en prototipos, lo constituye el hecho de
Que parece ofrecer mejores resultados tratar primero con ejemplos específicos y después con generalizaciones de estos, que inicialmente comprender los principios generales de abstracción, para
Posteriormente aplicarlos a casos particulares [Lieberman 86].
Este artículo comienza con una revisión del papel que desempeñan las clases en la programación
Orientada a objetos. A continuación se introducen los aspectos básicos de la creación de objetos
Mediante prototipos. Se hace un estudio comparativo de diversos lenguajes con prototipos
Existentes y se presentan sus principales diferencias. Se describen algunas de las ventajas y
Limitaciones de los sistemas basados en prototipos, para finalizar con algunas conclusiones generales
Sobre este nuevo enfoque de programación.
La educación virtual, en línea o e-learning, se caracteriza por utilizar las
Tecnologías de Información y Comunicación (TIC) en los procesos de
enseñanza-aprendizaje. Esta modalidad se debe abordar desde una perspectiva
Diferente a la formación convencional o presencial. El cambio más importante no
Es, como menciona Seaone la tecnología [11], sino el modelo formativo
Subyacente. El alumno se convierte en la parte central del proceso de
enseñanza-aprendizaje y se responsabiliza de su propio aprendizaje. Aunque en
La formación convencional también pudiera presentarse esta característica, en la
Educación virtual esto es esencial. Lo que implica, entre otros aspectos, que
Debe cambiarse la forma de acercar los contendidos al alumno.
Los tutores en línea, quienes son una pieza clave en esta modalidad, en muchas
Ocasiones realizan las funciones de planeación, diseño instrucciones y
Evaluación. Además de atender de manera casi personalizada a los alumnos
Virtuales para motivarlos, responder sus dudas y proporcionar seguimiento a su
Proceso de aprendizaje. Lo anterior implica una tarea desgastante para el tutor
[8]. Por tal motivo, los recursos didácticos deben convertirse en sus aliados y
Acercar lo mejor posible los contenidos a los alumnos, facilitando la comprensión
y la asimilación de los temas.
Realizar recursos didácticos que cumplan estas expectativas es una tarea
Costosa que implica una inversión de tiempo y recursos, ya que se requiere de
Una búsqueda exhaustiva de información, de un diseño instruccional adecuado y
Del diseño de actividades de autoevaluación que faciliten el aprendizaje. Es
Importante además, realizar estos recursos de acuerdo a los diferentes estilos
De aprendizaje, para lo que es recomendable utilizar tecnología de multimedia.
Los Objetos de Aprendizaje (OA) tienen su origen en el paradigma de
Orientación a objetos y se conceptualizaron con el propósito principal de reutilizar
Recursos. Existen diversas definiciones de los OA que incluso se contraponen
[4]. Sin embargo, para efectos de este trabajo se utiliza la definición propuesta
En el Portal Educativo del Ministerio de Educación Nacional de Colombia,
Considerado como uno de los tres mejores portales de América Latina y el

No hay comentarios:

Publicar un comentario en la entrada