Quartas à Tarde no DEI 12 de Abril de 2000 Programação Orientada aos COMponentes 1 Componentes Agenda • Introdução • Tutorial • Casos Práticos – I2S: Reengenharia via COM – IDT: Engenharia usando COM 2 Programação As Grandes Promessas • “não reinventar a roda” – Reutilização – Interoperabilidade • Facilidade de Manutenção – Flexibilidade – Evolução 3 Programação Evolução da Programação Unidade estrutural Relação com nível anterior Linguagem máquina Programação estruturada POO Programa Subrotina Objecto Unidade de Programa delimitada Subrotinas + memória local persistente Linguagem prog. (bib. suporte) Linguagem prog. (bib. suporte) _ Dependências Processador 4 Programação Problemas Identificados • Reutilização – Diferenças linguagens de programação – Diferenças entre versões do mesmo compilador – Controlo de versões • Interoperabilidade – Diferenças entre compiladores e linkers – Diferenças entre arquitecturas 5 Programação Problemas Identificados (cont.) • Flexibilidade – Incompatibilidades entre bibliotecas – Isolamento das funcionalidades – Controlo de versões – Necessidade de recompilação ‘completa’ da aplicação • Evolução – Incompatibilidades entre bibliotecas – Diferenças entre versões do SO & hardware – Necessidade de recompilação ‘completa’ 6 Programação O Que Se Pretende 7 Componentes Conceitos Genéricos • Componente – Unidade de execução que encapsula funcionalidades • Interface – “Ponto de acesso” às funcionalidades do IUnknown componente Interf ace1 Interf ace2 Componente 8 Componentes Componentes & Interfaces IUnknown IAritBasica IAritAv ancada CompAritmetica interface IAritBasica { long Adicionar(long iN1, long iN2); long Subtrarir(long iN1, long iN2); long Multiplicar(long iN1, long iN2); long Dividir(long iN1, long iN2); }; interface IAritAvancada { long Potencia(long base, long expoente); }; coclass CoAritmetica { [default] interface IAritBasica; interface IAritAvancada; }; 9 Componentes Arquitectura Geral Listagem de T itulos (Biblioteca) IUnknown Form Ficheiro Editar Programa de Email IUnknown IUnknown Componente1 CompEmail1 Componente5 IUnknown IUnknown IUnknown Utilizador Componente2 IUnknown Componente4 CompEmail2 componente3 Sistema Operativo IUnknown CompSO1 IUnknown CompSO2 IUnknown CompSO3 IUnknown CompSO4 10 Componentes Vantagens • Reutilização • Interoperabilidade – Arquitectura (hardware + S.O.) – Linguagem de programação • Actualização de componentes sem recompilação da aplicação ou até mesmo sem reinicialização • “Controlo” de versões • Encapsulam detalhes de 11 Componentes Modelos de Componentes • COM, DCOM, COM+ • CORBA • Java / RMI 12 COM Introdução • Standard binário – Reutilização em grande escala (sem código fonte) – Suporte multi-linguagem • • • • Parte integrante do SO Windows DCOM para plataformas não-Windows Auto-activação! Auto-desactivação! (usando ATL/MFC) 13 COM Introdução (cont.) • Localização transparente • Múltiplas interfaces por objecto • Interfaces standard – Persistência; Notificação; Structured storage; etc. • Programação com abordagem procedimental (stateless) • Serviços – Transacções; Eventos; invocação Off-line; etc. 14 COM Programação de Aplicações • Componente – – – – – definir um interface utilizando IDL atribuir CLSID e identificador programático gerar código proxy/stub implementar métodos da interface Tratar de contagem de instancias • Servidor – Implementar "class factory" • Registar Classes de componentes • Cliente – criar instância do objecto e obter ponteiro de interface 15 COM Programação COM/ATL (Visual Studio) • Criar Componentes usando wizard – definir um interface utilizando wizard – implementar métodos da interface • VS Regista automaticamente as Classes • Cliente – criar instância do objecto e obter ponteiro de interface – invocar métodos 16 Componentes Conclusões Listagem de T itulos (Biblioteca) IUnknown Form Ficheiro Editar Programa de Email IUnknown IUnknown Componente1 CompEmail1 Componente5 IUnknown IUnknown IUnknown Utilizador Componente2 IUnknown Componente4 CompEmail2 componente3 Sistema Operativo IUnknown CompSO1 IUnknown CompSO2 IUnknown CompSO3 IUnknown CompSO4 17