E N D
1. Introducción a COM, DCOM y ATL Edwin Montoya
3. Reutilización de objetos Hechos
OO
Desarrollo basado en componentes
Consecuencia -> reutilización
El desarrollo hoy en día debe enfocarse a “pegar” lógicamente componentes y desarrollar componentes de NEGOCIO que faciliten la reutilización
Problemas de la reutilización
Multiples lenguajes
Multiples S.O.
Aún en mismos lenguajes – compatibilidad binaria –
4. Lenguajes Orientados a Objetos Como se puede realizar código?
Cut & Paste dentro de un mismo lenguaje
En OO dependiendo del lenguaje (C++, Java)
Se tiene abstracción, encapsulamiento y herencia
Encapsulamiento y Herencia facilita la reutilización de forma limitada
El problema es estos objetos NO pueden ser reutilizados en otros lenguajes
Tambien existe incompatibilidades entre lenguajes iguales
Binario y aún en fuente.
5. Modelos de Componentes Solución a los problemas planteados anteriormente
Un Modelo de Componentes es una especificación en la que se define entre otros:
Estructura de componente, comunicación entre componentes, manipulación por parte de los ambientes de desarrolladores.
Existen 3 modelos:
COM, JavaBeans y CORBA
CORBA en sí mismo NO es un modelo de componentes.
Permite que componentes u objetos escritos en diferentes lenguajes se comuniquen entre sí
JavaBean muy ligado a Java
COM es una especificación binaria
Un objeto COM puede crearse usando cualquier lenguaje, lo que importa es que la imagen binaria de ese objeto cumpla con la especificación COM
Que es COM?
COM es una especificación que define modelos de componentes binarios.
COM NO es un Sistema, COM NO es una Librería.
6. Estructura de COM Concepto Fundamental de COM:
Separación entre la Interfaz Pública de un Componente y si Implementación.
Interfaces COM, tablas de métodos o clases de objetos
Un componente COM es un objeto que Implementa una o más interfaces.
Tablas de punteros a métodos
Terminología:
Componente COM: Análogo a un objeto C++ aunque difiere
Interfaz COM: conjunto de servicios expuestos por un componente COM, físicamente la interfaz es una tabla de punteros
Servidor: los componentes COM se alojan en DLL o EXE. Son contenedores.
Cliente: aplicación que hace uso e los servicios de un componente COM
7. ¿Qué es una Interfaz? Un usuario de un componente COM NO tiene porque conocer la implementación.
Basta con conocer las interfaces disponibles en el objeto.
Una INTERFAZ es una tabla formada por PUNTEROS a métodos implementados por un cierto objeto.
Una Interfaz es como una clase abstracta.
Al crear un Componente COM hay que decidir que Interfaces implementará.
Implementar una Interfaz significa que el objeto a crear tendrá que codificar TODOS los métodos indicados en ella.
Para utilizar un cierto objeto, solo es preciso saber como recuperar un puntero a cualquiera de sus interfaces.
8. Estructura de una Interfaz Una interfaz es una tabla con punteros a funciones.
Equivalente a una clase abstracta
9. Class IArchivo
{
public:
virtual __stdcall HRESULT Abrir(…) = 0;
virtual __stdcall HRESULT Escribir(…) = 0;
virtual __stdcall HRESULT Leer(…) = 0;
virtual __stdcall HRESULT Cerrar()= 0;
};
La clase IArchivo es abstracta, no se puede instanciar, no hay constructor o destructor
10. ¿Qué es un objeto COM? Un objeto COM es el motor que ejecuta los metodos definidos en las interfaces.
Se utiliza el mecanismo de herencia para obtener la espec de la interfaz y otros aspectos COM.
Se crea una nueva clase que derive de todas las interfaces COM.
Otros aspectos COM:
Control de ciclo de vida
Resolución de interfaces
Se utiliza la interfaz IUnkown para este objetivo
En conclusión un objeto COM implementará todos los métodos de todas las interfaces definidas + los métodos de la interfaz Iunknown
Un cliente NUNCA tiene acceso directo al objeto, lo hace a través de un puntero a una de sus interfaces de negocio o a través de IUnknown
11. Estructura de un objeto
12. ¿Qué es un servidor COM? Un objeto COM no existe de forma aislada, forman parte de Servidores COM. (Contenedores)
Hay dos clases de servidores:
DLL: Se ejecuta en el mismo espacio de direcciones del cliente
Ejecutables: Se ejecuta otro programa con el cual se debe comunicar el cliente, ya sea mediante IPC (local) o RPC (remoto)
Los servidores además de alojar y ejecutar los componentes realizan otras funciones como:
Registrar componentes
Crear factorias
13. Estructura de un servidor El contenedor de primer nivel (servidor COM), es como una caja que cuenta con 3 elementos:
(1) Clases de objetos, (2) Factorias y (3) Funciones adicionales como registro del servidor u obtención de una factoria para un cierto objeto.
14. Más sobre Interfaces Interfaz: simple tabla de punteros mediante la cual es posible llamar a metodos disponibles en un objeto.
Como codificar una interfaz independiente del lenguaje?
Que representa la interfaz IUnknown?
LENGUAJE IDL – Interface Definitio Languaje -
IDL hace COM independiente del lenguaje
IDL es un lenguaje descriptivo
Se utilizará MIDL (Microsoft IDL) que viene con Visual C++
Interface IArchivo: IUnknown {
HRESULT Abrir([in] LPOLESTR nombre);
HRESULT Escribir([in] LPOLESTR datos, [in] int longitud);
HRESULT Leer([in] LPOLESTR datos, [in] int longitud, [out, retval] int* bytesleidos);
HRESULT Cerrar();
};
15. Más sobre IDL Solo se soporta la herencia simple, NO Multiple
Todo método retorna HRESULT el cual indica condición o no de error.
Que pasa si un método retorna algún valor?
Atributo retval
[out, retval] tipo* …
El precompilador MIDL toma un archivo *.idl y genera una Librería de Tipos, Archivos header para c/c++, modulo de código que contendrá identificadores de interfaces y objetos, proxys.
La librería de tipos es la que se utiliza en otros lenguajes diferentes a c/c++. P.e. Visual Basic
16. La Interfaz IUknown Un objeto para que sea COM tiene que implementar la interface IUnknown
Objetivo:
Ciclo de vida
Resolución de interfaces
Ciclo de vida
AddRef()
Release()
Resolución de interfaces
QueryInterface
17. Identificador de Objetos e Interfaces Los nombre de objetos e interfaces son elementos con ambito reducido y válidos solo en una cierta aplicación o entorno de desarrollo.
Se utilizan identificadores conocidos como GUID
Global Unique Identifier
Teoricamente son irrepetibles en el tiempo y espacio.
128 bits de longitud
CLSID (Class Identifier), GUID que identifican componentes COM
IID (Interface Identifier), GUID que identifican interfaces
18. Mecanismos de puesta en marcha Puesta en marcha para un componente localizado en una DLL
Contiene varias interfaces de las cuales nos interesa: Iarchivo
El IID de la Interfaz es IID_IArchivo
El CLSID del componente es CLSID_IArchivo
Funciones básicas:
CoInitialize()
CoCreateInstance()
Localización del servidor:
Se invoca CoInitialize()
Y luego CoCreateInstance() facilitando en CLSID
La asociación del CLSID y el servidor es el Registro de Windows
Si el servidor es una DLL utiliza la subclave: InprocServer32
Otros casos son: LocalServer32 ó RemoteServer32
19. Obtención de la factoria En vez de llamar a CoCreateInstance() se usaria CoGetClassObject(), esto implica usar los métodos de la Interface IClassFactory.
20. Introducción a DCOM (1) Distributed COM
Utilizado en Clientes y Servidores outprocess
Si están en la misma máquina:
LIPC (Local Interprocess Communication)
21. Introducción a DCOM (2) Utilizado en Clientes y Servidores en máquinas diferentes
22. Procesos subrogados Se puede utilizar servidores remotos dentro de proceso utilizando un proceso sustituto o subrogado, cuya finalidad es poner en marcha al componente cargando la DLL.
Un solo servidor puede ejecutar varios componentes
Es como un contenedor remoto
23. Marshaling Preparación de datos (parámetros y retornos) antes de realizar la transferencia por la red.
Marshaling/demarshaling
No hay necesidad en InProcess
Se utiliza NDR: Network Data Representation
MTS y COM+
El MTS (Microsoft Transaction Server) a parte de servir a la gestion de transacciones.
Para que un servidor COM pueda instalarse en MTS es preciso que sea un servidor dentro de proceso (dll)
El MTS cuenta con un mecanismo de Exploración/Registro y generación de archivos de instalación para los clientes.
Esta misma funcionalidad se conoce en W2K como COM+.
Con COM+ el desarrollo, distribución e instalacione de aplicaciones distribuidas es mucho más sencilla
24. Introducción a ATL Active Template Library es un mecanismo de creación de componentes COM bajo Visual C++ que facilita su desarrollo y registro.
Viene con Visual C++.