You are on page 1of 2

Reflexión

• Técnica que permite a un sistema mantener


información sobre si mismo (meta-información) y
utilizar dicha información para cambiar su
comportamiento (adaptación).
Lenguajes de Programación 2

Programació
Programación Orientada a Objetos
Reflexió
Reflexión

LP2 2008-
2008-1 Diapositiva 1 LP2 2008-
2008-1 Diapositiva 2

Reflexión RTTI
• Ejemplos de uso: • Uno de los aspectos de la reflexión es la
– Verificación de errores en tiempo de compilación. Identificación de Tipos en Tiempo de Ejecución (RTTI).
– Entornos de desarrollo con componentes. • Consiste en determinar si un objeto puede ser
– Programas orientados a dar servicios. manejado como un tipo determinado de dato.

LP2 2008-
2008-1 Diapositiva 3 LP2 2008-
2008-1 Diapositiva 4
RTTI RTTI
• C++: dynamic_cast • Java: instanceof
#include <iostream.h>
iostream.h> class Base { }
#include <typeinfo.h>
typeinfo.h>
class Derivada extends Base { }
class Base { public:
public: virtual void Imprimir() { ... } };
class Derivada : public Base { public:
public: virtual void Imprimir() { ... } };
class RTTI {
static void Identificar( Base obj ) {
void Identificar( Base* pObj ) {
if ( obj instanceof Derivada ) System.out.println("Objeto
System.out.println("Objeto 'Derivada'");
Derivada* pDer = dynamic_cast<Derivada
dynamic_cast<Derivada*>(*>(pObj
pObj);
);
else System.out.println("Objeto
System.out.println("Objeto 'Base'");
if ( pDer != 0 ) cout << "Objeto 'Derivada'" << endl;
endl;
}
else cout << "Objeto 'Base'" << endl;
endl;
public static void main(
main( String args[]
args[] ) {
}
Identificar( new Base( ) );
void main()
main() {
Identificar( new Derivada( ) );
Identificar( new Base( ) );
}
Identificar( new Derivada( ) );
}
}

LP2 2008-
2008-1 Diapositiva 5 LP2 2008-
2008-1 Diapositiva 6

RTTI
• C#: is
using System;
System;
class Base { }
class Derivada : Base { }

class CSharpRTTI {
static void Identificar(Base obj)
obj) {
if ( obj is Derivada ) Console.WriteLine("Objeto
Console.WriteLine("Objeto 'Derivada'");
else Console.WriteLine("Objeto
Console.WriteLine("Objeto 'Base'");
}
public static void Main()
Main() {
Identificar(new Base());
Identificar(new Derivada());
}
}

LP2 2008-
2008-1 Diapositiva 7

You might also like