80 likes | 201 Views
TEMA IMPLEMENTACION DE LEGUAJES ORIENTADOS A OBJETO. Métodos Métodos virtuales Herencia simple y múltiple Templates. Características de los Lenguajes Orientados a. Herencia Simple Múltiple Sobrecarga Objeto sobre el que se aplica el método Parámetros Parámetros y valor de retorno
E N D
TEMA IMPLEMENTACION DE LEGUAJESORIENTADOS A OBJETO Métodos Métodos virtuales Herencia simple y múltiple Templates
Características de los Lenguajes Orientados a • Herencia • 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
Llamada a Métodos • Enlace estático • El 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
Representación de los Objetos Campos 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
Herencia Múltiple y Referencias • Conversió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 Campos de A C B A B A o D Campos de A A A o C
Tablas Virtuales • Tabla virtual • Guarda 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
Tablas Virtuales y Herencia Múltiple class 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 Tabla virtual de C metodos de B desp a1 C o A TVCA Objeto de C b1 B::mb2 TVB B::mb1 A::ma2 C::ma1 Objeto de B Tabla virtual de B Tabla virtual de C metodos de A
Templates • El mismo concepto • Templates • Tipos de datos abstractos • Tipos genéricos • Tipos de datos paramétricos • Template de una clase template <class PixT> class Image { … } • Template de un método template <class PixT> PixT Image<PixT>::GetPixel(int x, int y); • Instanciación Image<char> im; im.GetPixel(10,20);