You are on page 1of 24

| 

   

  

| 

© À  
    
©      

 

©     
OLE (1991) para creación de documentos compuestos
Previo a OLE -> portapapel y DDE
En 1993 apareció OLE 2.0 el cual dio origen a COM
Con OLE 2.0 aparece ³automaticación´ -> controles OLE u
OCX

2   

-
   !

© ‰
OO
Desarrollo basado en componentes
Consecuencia -> reutilización
©  
   "
   

#
$

      

   
 %& | ' 
 


© ( 
  


Multiples lenguajes
Multiples S.O.
Aún en mismos lenguajes ± compatibilidad binaria ±

2   

 
!  

!

©    

 )
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.

2   

    

© ü
  
 


 
© *       

  
' 
    
Estructura de componente, comunicación entre componentes, manipulación
por parte de los ambientes de desarrolladores.
© + , 
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
© Ë  )
COM es una especificación que define modelos de componentes binarios.
© %   ü
 %  
 "
-
2   




©   . 
 
  
Separación entre la Interfaz Pública de un Componente y si
Implementación.
Interfaces COM, tablas de métodos o clases de objetos
© *       ! ' | 


 /  
-
Tablas de punteros a métodos
©  "

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

2   

'Ë0  
| 
)

© * 
      %   '   

 
 -
© 1

   
  
       !-
© *
|%-.2  




 (*%- ü
0
 
     !-
Una Interfaz es como una clase abstracta.
©  
     
 '  ' | 

 
/-
© | 
 
| 
  
'   !

  / '

   ü  0  
  
-
© (


    !    
  

  

'
   
-

2   


 
| 


© *
 
  


  
  -
Equivalente a una clase abstracta

| 
 | 



  



2   


 |3
4
 
3
 55
 ‰-ü*  678 9 :;
3
 55
 ‰-ü*  678 9 :;
3
 55
 ‰-ü* 678 9 :;
3
 55
 ‰-ü* 
689 :;
<;

© 

 |3 


     


 
    

2   

'Ë0    ! )

© *  !    ' !


    

  
-
© ü 
 
   


   
  

 
  
 -
© ü 

3

 ' 3  
 
  
 -
© 
 
Control de ciclo de vida
Resolución de interfaces
Se utiliza la interfaz IUnkown para este objetivo
©      !  
/   0 

 
  
  
 =  0  
 
 | > 
© *   %*%   
 
  !  


30 
  

   
   

30 
|* > 

2   


   !


 
| 
|"#$



|  ! 



2   

'Ë0   3 )

© *  !  +  





 


 ü3 - 6   8
© ‰
  
  3
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)
©  3
/ 
!
  !
 
   


    
Registrar componentes
Crear factorias

2   


  3

©       3 63 8  




!
'  
 ,  
(1) Clases de objetos, (2) Factorias y (3) Funciones adicionales como
registro del servidor u obtención de una factoria para un cierto objeto.

&' |"#$

|  ! 

| % %
(
')*+
(
', -.
/

2   

/   | 


© | 
  

   
 

    



       !-
©  
 
 
       
!)
© Ë  

 
 |* >  )
© %&*? | @ | 
   

! A
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();
};

2   

/   |

© ü  

 
 % 
©  0 
‰-ü*  
  
 
   -
© Ë 

  0 

B 3
)
Atributo retval
[out, retval] tipo* «
©  
 | 

3 C-   


 "
  3 
 

D==
   '   /  
 
 
   ! +-
© 
 "
   
'  
 
 
!  
D==- (-- E
 1


2   


| 
 |*> 

© *  ! 

' 
  '  
 

 
 |* > 
© !3
Ciclo de vida
Resolución de interfaces
©   3

AddRef()
Release()
© -   

ËueryInterface

2   

| 
  !  | 


©      !   


    

    3/   




     
-
© ü 
 
    &*|
Îlobal Unique Identifier
Teoricamente son irrepetibles en el tiempo y espacio.
128 bits de longitud
© ü| 6 
 | 8 &*| '  

  
© || 6| 
 | 8 &*| '  
 


2   


  
 


© (
 



    

  

©    3

  
  
 
   
 |
3
©  ||  
| 
  ||5|3
©  ü|      ü|5|3
© .   /

CoInitialize()
CoCreateInstance()
© 

  3
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

2   

   



©  3  


 
| 
68  


& 
 !68  

  0  

| 
 | 
.
-

2   

| 
 6F8

©  
© *
     ü3 
© ü /  

/'

LIPC (Local Interprocess Communication)

 &(
0(-! ü    
|


 

|0

*-! ! 


|  *&(
2   

| 
 6G8

© *
     ü3  /'

 


 
 &(
|
 0(-!
ü  

0

 

*-! ! 


|  *&(
2   

(  


© ü  
 3     

      
 



     


    



-
© *  3  !
 3
   
©       

2   



 

© (

  
 6
/   8
  

 


 
 
-
©

 D

 
© % 
 
  | (
© ü 
%- %> 

- 


© ü  =
©  ü 6  

 ü38

  3


 

 -
© (

'  3 
 

  ü   '

 3     68
©  ü  
  
  +
 D- 
 
 
3   

 

  -
© 

 

     ÀGH  =-
©  =  
     

  

 
 
   /  

2   

| 


© 3 
  
   
  

   
! E
 == ' 



  -
© E   E
 ==-

2   

You might also like