1 TEMA IMPLEMENTACION DE LEGUAJES ORIENTADOS A OBJETOMétodos Métodos virtuales Herencia simple y múltiple Templates
2 Características de los Lenguajes Orientados aHerencia Simple Múltiple Sobrecarga Objeto sobre el que se aplica el método Parámetros Parámetros y valor de retorno Coerciones Clase derivada a clase base Aplicación implicita de constructores de un parámetro Definidas por el programador Enlace objeto método Estático (en tiempo de compilación) Dinámico (en ejecución) Introspección Objetos genéricos Templates Tipos de datos paramétricos
3 Llamada a Métodos Enlace estático Enlace dinámicoEl objeto al que se aplica un método se pasa por referencia al método como primer argumento Obj.m(x,y) Aplicación de un método de clase base a clases derivadas La representación de los objetos de la clase base tiene que estar incluida en la representación de la clase derivada Enlace dinámico Hay que identificar la clase del objeto para poder decidir que método se tiene que aplicar y x &Obj PC ED Vars
4 Representación de los ObjetosCampos de C Class C: A,B {…} Sin funciones virtuales Campos de B C B Campos de A A Class A {…} A con funciones virtuales Campos de A A Apuntadore a los métodos virtuales TVA Tabla virtual de A Campos de B Class B: A {…} B Campos de A A Apuntadore a los métodos virtuales TVB Tabla virtual de B
5 Herencia Múltiple y ReferenciasConversión de los apuntadores Un apuntador a una objeto A se puede convertir a apuntador a objetos de las clases base de A Herencia simple El apuntador a A es el mismo para todas las clases base Herencia múltiple El apuntador a A no apunta a todas las clase base de A Hay que aplicar el desplazamiento de la clase base para convertir los apuntadores Class C: A,B {…} Class D: A {…} Campos de C Campos de D D Campos de B C B Campos de A A B A o D Campos de A A A o C
6 Tablas Virtuales Tabla virtualGuarda apuntadores a las funciones virtuales Las clases con funciones virtuales o sus derivadas tienen tablas virtuales que se pueden utilizar para identificar sus objetos (implementación de la introspección) Una clase hereda las tablas virtuales de sus clases base, pero modifica su contenido. class A { int a1; virtual void ma1(); virtual void ma2(); } class B: A { int b1; void ma1(); } b1 a1 A::ma2 a1 A::ma2 TVA A::ma1 TVAB B::ma1 Objeto de A Tabla virtual de A Tabla virtual de B Objeto de B
7 Tablas Virtuales y Herencia Múltipleclass A { int a1; virtual void ma1(); virtual void ma2(); } class B { int b1; virtual void mb1(); virtual void mb2(); } this=this-desp jmp C:mb1 class C: A, B { int c1; void ma1(); void mb1(); } Codigo C::mb1 a1 A::ma2 c1 B::mb2 TVA A::ma1 Objeto de A b1 C::mb1’ Tabla virtual de A B TVCB desp Tabla virtual de C metodos de B a1 C o A TVCA Objeto de C b1 B::mb2 TVB B::mb1 A::ma2 Objeto de B Tabla virtual de B C::ma1 Tabla virtual de C metodos de A
8 Templates El mismo concepto Template de una claseTipos de datos abstractos Tipos genéricos Tipos de datos paramétricos Template de una clase template