E N D
1. Introduccin a COM, DCOM y ATL Edwin Montoya
3. Reutilizacin de objetos Hechos
OO
Desarrollo basado en componentes
Consecuencia -> reutilizacin
El desarrollo hoy en da debe enfocarse a pegar lgicamente componentes y desarrollar componentes de NEGOCIO que faciliten la reutilizacin
Problemas de la reutilizacin
Multiples lenguajes
Multiples S.O.
An en mismos lenguajes compatibilidad binaria
4. Lenguajes Orientados a Objetos Como se puede realizar cdigo?
Cut & Paste dentro de un mismo lenguaje
En OO dependiendo del lenguaje (C++, Java)
Se tiene abstraccin, encapsulamiento y herencia
Encapsulamiento y Herencia facilita la reutilizacin de forma limitada
El problema es estos objetos NO pueden ser reutilizados en otros lenguajes
Tambien existe incompatibilidades entre lenguajes iguales
Binario y an en fuente.
5. Modelos de Componentes Solucin a los problemas planteados anteriormente
Un Modelo de Componentes es una especificacin en la que se define entre otros:
Estructura de componente, comunicacin entre componentes, manipulacin 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 especificacin binaria
Un objeto COM puede crearse usando cualquier lenguaje, lo que importa es que la imagen binaria de ese objeto cumpla con la especificacin COM
Que es COM?
COM es una especificacin que define modelos de componentes binarios.
COM NO es un Sistema, COM NO es una Librera.
6. Estructura de COM Concepto Fundamental de COM:
Separacin entre la Interfaz Pblica de un Componente y si Implementacin.
Interfaces COM, tablas de mtodos o clases de objetos
Un componente COM es un objeto que Implementa una o ms interfaces.
Tablas de punteros a mtodos
Terminologa:
Componente COM: Anlogo a un objeto C++ aunque difiere
Interfaz COM: conjunto de servicios expuestos por un componente COM, fsicamente la interfaz es una tabla de punteros
Servidor: los componentes COM se alojan en DLL o EXE. Son contenedores.
Cliente: aplicacin 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 implementacin.
Basta con conocer las interfaces disponibles en el objeto.
Una INTERFAZ es una tabla formada por PUNTEROS a mtodos 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 mtodos 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
Resolucin de interfaces
Se utiliza la interfaz IUnkown para este objetivo
En conclusin un objeto COM implementar todos los mtodos de todas las interfaces definidas + los mtodos de la interfaz Iunknown
Un cliente NUNCA tiene acceso directo al objeto, lo hace a travs de un puntero a una de sus interfaces de negocio o a travs 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 adems 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 obtencin de una factoria para un cierto objeto.
14. Ms 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. Ms sobre IDL Solo se soporta la herencia simple, NO Multiple
Todo mtodo retorna HRESULT el cual indica condicin o no de error.
Que pasa si un mtodo retorna algn valor?
Atributo retval
[out, retval] tipo*
El precompilador MIDL toma un archivo *.idl y genera una Librera de Tipos, Archivos header para c/c++, modulo de cdigo que contendr identificadores de interfaces y objetos, proxys.
La librera 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
Resolucin de interfaces
Ciclo de vida
AddRef()
Release()
Resolucin de interfaces
QueryInterface
17. Identificador de Objetos e Interfaces Los nombre de objetos e interfaces son elementos con ambito reducido y vlidos solo en una cierta aplicacin 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 bsicas:
CoInitialize()
CoCreateInstance()
Localizacin del servidor:
Se invoca CoInitialize()
Y luego CoCreateInstance() facilitando en CLSID
La asociacin 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. Obtencin de la factoria En vez de llamar a CoCreateInstance() se usaria CoGetClassObject(), esto implica usar los mtodos de la Interface IClassFactory.
20. Introduccin a DCOM (1) Distributed COM
Utilizado en Clientes y Servidores outprocess
Si estn en la misma mquina:
LIPC (Local Interprocess Communication)
21. Introduccin a DCOM (2) Utilizado en Clientes y Servidores en mquinas 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 Preparacin de datos (parmetros 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 Exploracin/Registro y generacin de archivos de instalacin para los clientes.
Esta misma funcionalidad se conoce en W2K como COM+.
Con COM+ el desarrollo, distribucin e instalacione de aplicaciones distribuidas es mucho ms sencilla
24. Introduccin a ATL Active Template Library es un mecanismo de creacin de componentes COM bajo Visual C++ que facilita su desarrollo y registro.
Viene con Visual C++.