SlideShare una empresa de Scribd logo
Curso de Doctorado: Tecnologías 
de Objetos 
Grupo IMO 
Área de Lenguajes y Sistemas Informáticos 
Departamento de Informática 
J. Baltasar García Perez-Schofield 
http://webs.uvigo.es/jbgarcia/
Implementación de Lenguajes 
Orientados a Objetos
Terminología 
➲ Herencia: 
● Por concatenación: el nuevo objeto (B) se con-struye 
concatenando el objeto del que hereda (A) 
con el mismo objeto (B). 
● Por delegación: los objetos son independientes. 
Si un objeto B hereda de A, entonces, cuando no 
sea capaz de satisfacer un mensaje F, delegará 
(le pasará) ese mensaje F en el objeto A. 
➲ Comportamiento: El conjunto de métodos 
de un objeto (en muchos lenguajes, su 
clase). 
➲ Estado: los valores de los atributos de un 
objeto.
Implementación de Lenguajes 
Orientados a Objetos 
➲ Existen dos puntos de vista principales: 
● Integración de unas extensiones de orientación a 
objetos en un lenguaje tradicional, como C o 
Pascal. 
● Creación de un lenguaje totalmente nuevo. 
➲ Por otra parte, existen dos tipos principales 
de lenguajes orientados a objetos: 
● Aquellos basados en clases 
● Los que están basados en prototipos
Lenguajes basados en clases 
Extensión de un lenguaje 
tradicional para el soporte de 
extensiones de orientación a 
objetos
Implementación de Lenguajes 
Orientados a Objetos 
➲ Veremos la posibilidad de dotar a un 
lenguaje como C de unas extensiones de 
Orientación a objetos. 
➲ De hecho, la primera herramienta que 
Bjarne Stroustrup creó para poder compilar 
C++ (en aquel momento, “C con clases”), 
era un simple preprocesador.
Clases 
➲ La clase es una plantilla a partir de la cual 
se crean los objetos. 
class Coche { 
int numRuedas; 
int color; 
int combustible(); 
void arranca(); 
}; 
void Coche::arranca() { 
combustible--; 
}
Clases 
➲ La base de una clase es un registro (struct). 
➲ La única dificultad es que los registros no ad-miten 
métodos ... 
➲ ... pero puede simularse su pertenencia: 
struct Coche { 
int numRuedas; 
int color; 
int combustible; 
}v 
oid Coche_arranca(struct Coche &this) { 
this->combustible--; 
}
Métodos 
➲ Los métodos son funciones en C, que 
tienen un argumento this, que no es más 
que el objeto que está ejecutando ese 
método en un momento dado. 
➲ Es decir, this señala a la struct Coches 
apropiada para cada momento. 
➲ Así, todos los métodos tienen un argumento 
más del que declararíamos en nuestro “C 
con clases”.
Métodos estáticos 
➲ La única excepción a lo anterior son los 
métodos de clase o estáticos (notación 
C++). Éstos pertenecen a la clase, no al ob-jeto. 
En realidad, ésto significa que ese 
método, una vez traducido a función, NO 
posee un argumento extra llamado this.
Ejemplo de traducción 
➲ El siguiente programa: 
class Coche { 
public: 
int numRuedas; 
int color; 
int combustible; 
static void encontrarGasolinera(); 
void arranca(); 
}; 
//... 
int main(void) { 
Coche micoche; 
miCoche.color = 1; /* BLANCO */ 
micoche.arranca(); 
}
Ejemplo de traducción 
➲ Sería traducido como: 
struct Coche { 
int numRuedas; 
int color; 
}v 
oid Coche_encontrarGasolinera() { 
// ... 
}v 
oid Coche_arranca(struct Coche &this) { 
// ... 
}i 
nt main(void) 
{ 
struct Coche miCoche; 
miCoche.color = 1; /* BLANCO */ 
Coche_arranca(&miCoche); 
}
Compilación 
➲ Nótese que es posible, a pesar de todo, re-alizar 
una comprobación de tipos estricta 
como la que hace C++, en este preproce-sador 
de “C con clases” a C. 
➲ La comprobación estática de tipos, en tiem-po 
de compilación, es uno de los puntos 
más fuertes de C++, ya que es una forma 
de detectar errores antes de la ejecución de 
un programa. 
➲ Se pueden añadir fácilmente criterios de 
visibilidad (private, protected).
¿Qué quedaría por implementar? 
➲ La implementación que se ha presentado 
hasta ahora permite encapsulación direc-tamente, 
por lo que sería conveniente para 
la creación de TADS (Tipos Abstractos de 
Datos). 
➲ Podría implementarse la herencia de forma 
sencilla, (simplemente, añadiendo a una 
clase la definición de la clase de la que 
hereda), por concatenación. 
➲ Sin embargo, es más trabajoso soportar 
polimorfismo. Para ello, será necesaria una 
estructura como la vtable implementada en 
C++.
Lenguajes basados en clases 
Creación genérica de un lenguaje 
orientado a objetos desde cero
Clases y objetos 
➲ Será necesario distinguir, obligatoriamente, 
entre: 
● comportamiento (los métodos, que residirán en la 
clase, y la descripción de los atributos), y 
● el estado (los valores de los atributos, que re-sidirán 
en el objeto). 
➲ Es posible prescindir de las clases en tiem-po 
de ejecución, tal y como hace C++, o 
mantenerlas. 
➲ Si se mantienen, entonces esas estructuras 
son conocidas como metaobjetos.
Clases y objetos 
➲ Suponiendo la misma clase que la anterior: 
● Aunque no es necesario, los métodos pueden 
seguir implementándose como funciones del 
lenguaje al que se les pasa un puntero extra lla-mado 
this. 
● Existirá el objeto, con el estado, diferente, para 
cada objeto, y el metaobjeto, es decir, la clase, 
común a todos los objetos. 
● El metaobjeto es consultado para resolver las lla-madas 
a los atributos y métodos de los objetos
Representación esquemática de ob-jetos 
en memoria 
➲ El metaobjeto con-tiene 
los de-splazamientos 
de 
los atributos en el 
objeto y punteros a 
las funciones que 
actúan como 
métodos. 
➲ El objeto contiene 
únicamente el es-tado.
Representación esquemática de ob-jetos 
en memoria 
➲ Así, para resolver miCoche.color = 2;, 
● primero se busca la dirección de memoria que 
representa la referencia “miCoche”. 
● desde allí, se va a la metaclase (la información de 
la clase) “Coche”. 
● Se localiza el atributo “color”. 
● Se le suma a la referencia de “miCoche” el de-splazamiento 
de “color”. 
➲ Así, finalmente, se obtendría la traducción, 
si fuese lenguaje C, de “*((int *)miCoche 
+ 4) = 2;”
Tiempo de compilación o tiempo de 
ejecución 
➲ Lo anterior puede suceder en tiempo de 
compilación, o bien en tiempo de ejecución. 
● En compilación: - flexible, + comprobaciones. Sue-len 
ser lenguajes del tipo de C++. 
● En ejecución: + flexible, - comprobaciones. Sue-len 
ser lenguajes del tipo de SmallTalk, Python ... 
➲ Es todavía posible un tipo intermedio, como 
veremos, en el que un lenguaje como Self, 
basado en prototipos realiza comprobación 
estática de tipos al compilar. El ejemplo es 
Kevo.
Lenguajes basados en prototipos 
Creación genérica de un lenguaje 
orientado a objetos desde cero
Lenguajes basados en prototipos 
➲ Los lenguajes basados en prototipos no 
disponen de clases, sino que los nuevos 
objetos son copiados de otros objetos ya 
existentes. 
➲ Esos objetos son los prototipos. Sin embar-go, 
los nuevos objetos pueden ser modifi-cados 
al margen de los prototipos. 
➲ Es un modelo muy flexible y sencillo. 
➲ Engloba al modelo de clases.
Implementación 
➲ Puesto que cada objeto no depende de una 
clase y puede cambiar independientemente 
al margen del prototipo del que se copió, la 
estructura del objeto debe albergar no sólo 
el estado, sino también el comportamiento. 
● Métodos y atributos conviven en el mismo espacio 
en memoria para un objeto. 
➲ La herencia se implementa por delegación, 
si bien sería posible implementarla por con-catenación, 
como en Kevo.
Representación esquemática de ob-jetos 
en memoria 
➲ El objeto contiene 
métodos y atributos. 
➲ Cuando no puede 
satisfacer un men-saje, 
lo delega en su 
padre. 
➲ La herencia, por del-egación, 
puede ser 
dinámica.
Conclusiones
Modelos de Orientación a Objetos 
➲ Dos extremos del espectro de modelos ori-entados 
a objetos. 
● El modelo más restrictivo, en potencia, es el de 
clases. 
● Verificación de tipos en tiempo de compilación. 
● Herencia por concatenación. 
● El modelo más flexible, en potencia, es el de pro-totipos. 
● No hay casi comprobaciones en tiempo de compilación. 
● Herencia por delegación. 
➲ Sin embargo, es posible crear lenguajes 
que empleen modelos intermedios dentro 
de este rango.
Implementación 
➲ Las características que condicionan la im-plementación 
de un lenguaje son: 
● Herencia 
● Existencia de clases 
➲ Sin embargo, debe recordarse que es posi-ble 
separar la implementación en varias ca-pas. 
● es posible para un compilador de un lenguaje 
basado en clases generar código para una 
máquina virtual orientada a objetos y basada en 
prototipos.
Bibliografía 
➲ Bjarne Stroustrup, creador de C++: 
● Página personal 
● http://www.research.att.com/~bs/ 
● “El Lenguaje de programación C++” 
● http://www.research.att.com/~bs/3rd.html 
● “Diseño y evolución de C++” 
● http://www.research.att.com/~bs/dne.html 
● Otras publicaciones: 
● http://www.research.att.com/~bs/books.html 
➲ SmallTalk 
● Squeak: http://www.squeak.org/ 
● SmallTalk en general: http://www.esug.org/
Bibliografía 
➲ Self 
● Página web: http://research.sun.com/self/index.html 
● Implementación: 
http://research.sun.com/research/self/papers/elgin-thesis.html 
● Otros: 
http://research.sun.com/research/self/papers/papers.html 
➲ Kevo 
● http://burks.brighton.ac.uk/burks/foldoc/44/63.htm 
➲ Python 
● Lenguaje basado en clases, implementado sobre prototi-pos. 
● Página web: http://www.python.org/
Bibliografía 
➲ Búsqueda de artículos: 
● http://www.researchindex.com
Curso de Doctorado: Tecnologías 
de Objetos 
Grupo IMO 
Área de Lenguajes y Sistemas Informáticos 
Departamento de Informática 
J. Baltasar García Perez-Schofield 
http://webs.uvigo.es/jbgarcia/

Más contenido relacionado

PDF
Curso de doctorado de Tecnología de Objetos: Sistemas Orientados a objetos y ...
DOCX
Que es visual c# eduardo sorto
PDF
Grupo 201
PPTX
Implicancias de uso de late binding
DOCX
cuestionario de Programación
PDF
Todo sobre C#
PDF
Polimorfismo
PDF
iNTRODUCCION AL LENGUAJE JAVA
Curso de doctorado de Tecnología de Objetos: Sistemas Orientados a objetos y ...
Que es visual c# eduardo sorto
Grupo 201
Implicancias de uso de late binding
cuestionario de Programación
Todo sobre C#
Polimorfismo
iNTRODUCCION AL LENGUAJE JAVA

La actualidad más candente (17)

PPSX
2.1 caracteristicas de lenguajes de programación
PDF
Cuestionario
DOCX
Trabajo programación (caracteristicas, versiones y desarrolladores de c#)
PDF
Reporte de visual c#(jose gonzalo estrada lopez)
PPTX
Presentacion progra
PPTX
Programacion orientada a objetos 2
PDF
Programación con java en Eclipse
DOCX
Lenguaje C sharp
DOCX
Consulta c++
PPT
Prog oo con_java
DOCX
Cuestionario
DOCX
Cuestionario
PDF
Aprenda qt4
PPT
Estructura basica de un programa
DOCX
Investigacion sobre carga de metodos
PPTX
Presentacion de clases en c#
2.1 caracteristicas de lenguajes de programación
Cuestionario
Trabajo programación (caracteristicas, versiones y desarrolladores de c#)
Reporte de visual c#(jose gonzalo estrada lopez)
Presentacion progra
Programacion orientada a objetos 2
Programación con java en Eclipse
Lenguaje C sharp
Consulta c++
Prog oo con_java
Cuestionario
Cuestionario
Aprenda qt4
Estructura basica de un programa
Investigacion sobre carga de metodos
Presentacion de clases en c#
Publicidad

Similar a Curso de doctorado Tecnología de Objetos: Implementación de lenguajes orientados a objetos. (20)

ODP
Prototype-based programming with PROWL.
ODP
Prototype-based, object-oriented programming
PDF
Desarrollo de Aplicaciones Web II - Sesión 05 - Evolución de los lenguajes PO...
DOCX
Cuestionario
DOCX
manual de C#
DOCX
Manual c# 2
DOCX
Manual de c#
PPTX
Caracteristicas de C Sharp
PDF
Clase4_Python-CTIC
DOC
PPT
Unidad 2 ProgramacióN Orientada A Objetos (Repaso)
PPTX
Consideraciones pragmatica
PPTX
_Concepto de interfaz_interfaz_interfaz_interfaz_interfaz_.pptx
DOCX
P2_Actividad 4 :Glosario de términos
DOCX
Lenguajes de programación orientados a objetos
PPTX
Programación Orientada a Objetos - herencia y polimorfismo
DOC
thy
PPT
Tema 1[1][1]
PPTX
Lenguaje de la programación orientada a objetos c#
Prototype-based programming with PROWL.
Prototype-based, object-oriented programming
Desarrollo de Aplicaciones Web II - Sesión 05 - Evolución de los lenguajes PO...
Cuestionario
manual de C#
Manual c# 2
Manual de c#
Caracteristicas de C Sharp
Clase4_Python-CTIC
Unidad 2 ProgramacióN Orientada A Objetos (Repaso)
Consideraciones pragmatica
_Concepto de interfaz_interfaz_interfaz_interfaz_interfaz_.pptx
P2_Actividad 4 :Glosario de términos
Lenguajes de programación orientados a objetos
Programación Orientada a Objetos - herencia y polimorfismo
thy
Tema 1[1][1]
Lenguaje de la programación orientada a objetos c#
Publicidad

Más de Baltasar García Perez-Schofield (8)

PDF
Presentación ESEI para IES Lauro Olmo
PDF
Post-graduate course: Object technology: Prototype-based object-oriented prog...
PDF
Curso de doctorado Tecnología de Objetos: Persistencia.
PDF
Post-graduate course: Object technology: Persistence.
PDF
Post-graduate course: Object technology: Implementation of object-oriented pr...
ODP
Learning object-oriented programming trough a visual tool at Cisti 2008
ODP
Charla invitada en oviedo: Evolución del soporte de persistencia
ODP
Cp3-- A module support tool for C++
Presentación ESEI para IES Lauro Olmo
Post-graduate course: Object technology: Prototype-based object-oriented prog...
Curso de doctorado Tecnología de Objetos: Persistencia.
Post-graduate course: Object technology: Persistence.
Post-graduate course: Object technology: Implementation of object-oriented pr...
Learning object-oriented programming trough a visual tool at Cisti 2008
Charla invitada en oviedo: Evolución del soporte de persistencia
Cp3-- A module support tool for C++

Último (20)

PDF
La Inteligencia Emocional - Fabian Goleman TE4 Ccesa007.pdf
DOC
Manual de Convivencia 2025 actualizado a las normas vigentes
PDF
LIBRO 2-SALUD Y AMBIENTE-4TO CEBA avanzado.pdf
PDF
Como usar el Cerebro en las Aulas SG2 NARCEA Ccesa007.pdf
PDF
La lluvia sabe por qué: una historia sobre amistad, resiliencia y esperanza e...
PDF
Esc. Sab. Lección 7. El pan y el agua de vida.pdf
PDF
MATERIAL DIDÁCTICO 2023 SELECCIÓN 1_REFORZAMIENTO 1° BIMESTRE_COM.pdf
PPTX
TEMA 1ORGANIZACIÓN FUNCIONAL DEL CUERPO, MEDIO INTERNO Y HOMEOSTASIS (3) [Aut...
PDF
Texto Digital Los Miserables - Victor Hugo Ccesa007.pdf
PDF
IPERC...................................
PDF
Telos 127 Generacion Al fa Beta - fundaciontelefonica
PDF
Integrando la Inteligencia Artificial Generativa (IAG) en el Aula
PDF
Mi Primer Millon - Poissant - Godefroy Ccesa007.pdf
PDF
informe tipos de Informatica perfiles profesionales _pdf
PDF
Escuelas Desarmando una mirada subjetiva a la educación
PDF
Iniciación Al Aprendizaje Basado En Proyectos ABP Ccesa007.pdf
PDF
Los hombres son de Marte - Las mujeres de Venus Ccesa007.pdf
PDF
Los10 Mandamientos de la Actitud Mental Positiva Ccesa007.pdf
DOCX
PLAN DE AREA DE CIENCIAS SOCIALES TODOS LOS GRUPOS
PPTX
MATEMATICAS GEOMETRICA USO TRANSPORTADOR
La Inteligencia Emocional - Fabian Goleman TE4 Ccesa007.pdf
Manual de Convivencia 2025 actualizado a las normas vigentes
LIBRO 2-SALUD Y AMBIENTE-4TO CEBA avanzado.pdf
Como usar el Cerebro en las Aulas SG2 NARCEA Ccesa007.pdf
La lluvia sabe por qué: una historia sobre amistad, resiliencia y esperanza e...
Esc. Sab. Lección 7. El pan y el agua de vida.pdf
MATERIAL DIDÁCTICO 2023 SELECCIÓN 1_REFORZAMIENTO 1° BIMESTRE_COM.pdf
TEMA 1ORGANIZACIÓN FUNCIONAL DEL CUERPO, MEDIO INTERNO Y HOMEOSTASIS (3) [Aut...
Texto Digital Los Miserables - Victor Hugo Ccesa007.pdf
IPERC...................................
Telos 127 Generacion Al fa Beta - fundaciontelefonica
Integrando la Inteligencia Artificial Generativa (IAG) en el Aula
Mi Primer Millon - Poissant - Godefroy Ccesa007.pdf
informe tipos de Informatica perfiles profesionales _pdf
Escuelas Desarmando una mirada subjetiva a la educación
Iniciación Al Aprendizaje Basado En Proyectos ABP Ccesa007.pdf
Los hombres son de Marte - Las mujeres de Venus Ccesa007.pdf
Los10 Mandamientos de la Actitud Mental Positiva Ccesa007.pdf
PLAN DE AREA DE CIENCIAS SOCIALES TODOS LOS GRUPOS
MATEMATICAS GEOMETRICA USO TRANSPORTADOR

Curso de doctorado Tecnología de Objetos: Implementación de lenguajes orientados a objetos.

  • 1. Curso de Doctorado: Tecnologías de Objetos Grupo IMO Área de Lenguajes y Sistemas Informáticos Departamento de Informática J. Baltasar García Perez-Schofield http://webs.uvigo.es/jbgarcia/
  • 2. Implementación de Lenguajes Orientados a Objetos
  • 3. Terminología ➲ Herencia: ● Por concatenación: el nuevo objeto (B) se con-struye concatenando el objeto del que hereda (A) con el mismo objeto (B). ● Por delegación: los objetos son independientes. Si un objeto B hereda de A, entonces, cuando no sea capaz de satisfacer un mensaje F, delegará (le pasará) ese mensaje F en el objeto A. ➲ Comportamiento: El conjunto de métodos de un objeto (en muchos lenguajes, su clase). ➲ Estado: los valores de los atributos de un objeto.
  • 4. Implementación de Lenguajes Orientados a Objetos ➲ Existen dos puntos de vista principales: ● Integración de unas extensiones de orientación a objetos en un lenguaje tradicional, como C o Pascal. ● Creación de un lenguaje totalmente nuevo. ➲ Por otra parte, existen dos tipos principales de lenguajes orientados a objetos: ● Aquellos basados en clases ● Los que están basados en prototipos
  • 5. Lenguajes basados en clases Extensión de un lenguaje tradicional para el soporte de extensiones de orientación a objetos
  • 6. Implementación de Lenguajes Orientados a Objetos ➲ Veremos la posibilidad de dotar a un lenguaje como C de unas extensiones de Orientación a objetos. ➲ De hecho, la primera herramienta que Bjarne Stroustrup creó para poder compilar C++ (en aquel momento, “C con clases”), era un simple preprocesador.
  • 7. Clases ➲ La clase es una plantilla a partir de la cual se crean los objetos. class Coche { int numRuedas; int color; int combustible(); void arranca(); }; void Coche::arranca() { combustible--; }
  • 8. Clases ➲ La base de una clase es un registro (struct). ➲ La única dificultad es que los registros no ad-miten métodos ... ➲ ... pero puede simularse su pertenencia: struct Coche { int numRuedas; int color; int combustible; }v oid Coche_arranca(struct Coche &this) { this->combustible--; }
  • 9. Métodos ➲ Los métodos son funciones en C, que tienen un argumento this, que no es más que el objeto que está ejecutando ese método en un momento dado. ➲ Es decir, this señala a la struct Coches apropiada para cada momento. ➲ Así, todos los métodos tienen un argumento más del que declararíamos en nuestro “C con clases”.
  • 10. Métodos estáticos ➲ La única excepción a lo anterior son los métodos de clase o estáticos (notación C++). Éstos pertenecen a la clase, no al ob-jeto. En realidad, ésto significa que ese método, una vez traducido a función, NO posee un argumento extra llamado this.
  • 11. Ejemplo de traducción ➲ El siguiente programa: class Coche { public: int numRuedas; int color; int combustible; static void encontrarGasolinera(); void arranca(); }; //... int main(void) { Coche micoche; miCoche.color = 1; /* BLANCO */ micoche.arranca(); }
  • 12. Ejemplo de traducción ➲ Sería traducido como: struct Coche { int numRuedas; int color; }v oid Coche_encontrarGasolinera() { // ... }v oid Coche_arranca(struct Coche &this) { // ... }i nt main(void) { struct Coche miCoche; miCoche.color = 1; /* BLANCO */ Coche_arranca(&miCoche); }
  • 13. Compilación ➲ Nótese que es posible, a pesar de todo, re-alizar una comprobación de tipos estricta como la que hace C++, en este preproce-sador de “C con clases” a C. ➲ La comprobación estática de tipos, en tiem-po de compilación, es uno de los puntos más fuertes de C++, ya que es una forma de detectar errores antes de la ejecución de un programa. ➲ Se pueden añadir fácilmente criterios de visibilidad (private, protected).
  • 14. ¿Qué quedaría por implementar? ➲ La implementación que se ha presentado hasta ahora permite encapsulación direc-tamente, por lo que sería conveniente para la creación de TADS (Tipos Abstractos de Datos). ➲ Podría implementarse la herencia de forma sencilla, (simplemente, añadiendo a una clase la definición de la clase de la que hereda), por concatenación. ➲ Sin embargo, es más trabajoso soportar polimorfismo. Para ello, será necesaria una estructura como la vtable implementada en C++.
  • 15. Lenguajes basados en clases Creación genérica de un lenguaje orientado a objetos desde cero
  • 16. Clases y objetos ➲ Será necesario distinguir, obligatoriamente, entre: ● comportamiento (los métodos, que residirán en la clase, y la descripción de los atributos), y ● el estado (los valores de los atributos, que re-sidirán en el objeto). ➲ Es posible prescindir de las clases en tiem-po de ejecución, tal y como hace C++, o mantenerlas. ➲ Si se mantienen, entonces esas estructuras son conocidas como metaobjetos.
  • 17. Clases y objetos ➲ Suponiendo la misma clase que la anterior: ● Aunque no es necesario, los métodos pueden seguir implementándose como funciones del lenguaje al que se les pasa un puntero extra lla-mado this. ● Existirá el objeto, con el estado, diferente, para cada objeto, y el metaobjeto, es decir, la clase, común a todos los objetos. ● El metaobjeto es consultado para resolver las lla-madas a los atributos y métodos de los objetos
  • 18. Representación esquemática de ob-jetos en memoria ➲ El metaobjeto con-tiene los de-splazamientos de los atributos en el objeto y punteros a las funciones que actúan como métodos. ➲ El objeto contiene únicamente el es-tado.
  • 19. Representación esquemática de ob-jetos en memoria ➲ Así, para resolver miCoche.color = 2;, ● primero se busca la dirección de memoria que representa la referencia “miCoche”. ● desde allí, se va a la metaclase (la información de la clase) “Coche”. ● Se localiza el atributo “color”. ● Se le suma a la referencia de “miCoche” el de-splazamiento de “color”. ➲ Así, finalmente, se obtendría la traducción, si fuese lenguaje C, de “*((int *)miCoche + 4) = 2;”
  • 20. Tiempo de compilación o tiempo de ejecución ➲ Lo anterior puede suceder en tiempo de compilación, o bien en tiempo de ejecución. ● En compilación: - flexible, + comprobaciones. Sue-len ser lenguajes del tipo de C++. ● En ejecución: + flexible, - comprobaciones. Sue-len ser lenguajes del tipo de SmallTalk, Python ... ➲ Es todavía posible un tipo intermedio, como veremos, en el que un lenguaje como Self, basado en prototipos realiza comprobación estática de tipos al compilar. El ejemplo es Kevo.
  • 21. Lenguajes basados en prototipos Creación genérica de un lenguaje orientado a objetos desde cero
  • 22. Lenguajes basados en prototipos ➲ Los lenguajes basados en prototipos no disponen de clases, sino que los nuevos objetos son copiados de otros objetos ya existentes. ➲ Esos objetos son los prototipos. Sin embar-go, los nuevos objetos pueden ser modifi-cados al margen de los prototipos. ➲ Es un modelo muy flexible y sencillo. ➲ Engloba al modelo de clases.
  • 23. Implementación ➲ Puesto que cada objeto no depende de una clase y puede cambiar independientemente al margen del prototipo del que se copió, la estructura del objeto debe albergar no sólo el estado, sino también el comportamiento. ● Métodos y atributos conviven en el mismo espacio en memoria para un objeto. ➲ La herencia se implementa por delegación, si bien sería posible implementarla por con-catenación, como en Kevo.
  • 24. Representación esquemática de ob-jetos en memoria ➲ El objeto contiene métodos y atributos. ➲ Cuando no puede satisfacer un men-saje, lo delega en su padre. ➲ La herencia, por del-egación, puede ser dinámica.
  • 26. Modelos de Orientación a Objetos ➲ Dos extremos del espectro de modelos ori-entados a objetos. ● El modelo más restrictivo, en potencia, es el de clases. ● Verificación de tipos en tiempo de compilación. ● Herencia por concatenación. ● El modelo más flexible, en potencia, es el de pro-totipos. ● No hay casi comprobaciones en tiempo de compilación. ● Herencia por delegación. ➲ Sin embargo, es posible crear lenguajes que empleen modelos intermedios dentro de este rango.
  • 27. Implementación ➲ Las características que condicionan la im-plementación de un lenguaje son: ● Herencia ● Existencia de clases ➲ Sin embargo, debe recordarse que es posi-ble separar la implementación en varias ca-pas. ● es posible para un compilador de un lenguaje basado en clases generar código para una máquina virtual orientada a objetos y basada en prototipos.
  • 28. Bibliografía ➲ Bjarne Stroustrup, creador de C++: ● Página personal ● http://www.research.att.com/~bs/ ● “El Lenguaje de programación C++” ● http://www.research.att.com/~bs/3rd.html ● “Diseño y evolución de C++” ● http://www.research.att.com/~bs/dne.html ● Otras publicaciones: ● http://www.research.att.com/~bs/books.html ➲ SmallTalk ● Squeak: http://www.squeak.org/ ● SmallTalk en general: http://www.esug.org/
  • 29. Bibliografía ➲ Self ● Página web: http://research.sun.com/self/index.html ● Implementación: http://research.sun.com/research/self/papers/elgin-thesis.html ● Otros: http://research.sun.com/research/self/papers/papers.html ➲ Kevo ● http://burks.brighton.ac.uk/burks/foldoc/44/63.htm ➲ Python ● Lenguaje basado en clases, implementado sobre prototi-pos. ● Página web: http://www.python.org/
  • 30. Bibliografía ➲ Búsqueda de artículos: ● http://www.researchindex.com
  • 31. Curso de Doctorado: Tecnologías de Objetos Grupo IMO Área de Lenguajes y Sistemas Informáticos Departamento de Informática J. Baltasar García Perez-Schofield http://webs.uvigo.es/jbgarcia/