Component Object Model
Predefinição:Emtradução2 Component Object Model (COM) é uma plataforma da Microsoft para componentes de software lançada em 1993. Ela é usada para permitir a comunicação entre processos e a criação dinâmica de objetos em qualquer linguagem de programação que suporte a tecnologia. O termo COM é frequentemente usado no desenvolvimento de software para se referir a um grupo de tecnologias que incluem OLE, OLE Automation, ActiveX, COM+ e DCOM. Apesar de introduzido em 1993, a Microsoft não iniciou a divulgação ampla do nome antes de 1997.
A essência da COM é uma maneira independente de linguagem de implementar objetos de forma que eles possam ser utilizados em diferentes ambientes dos quais foram criados, mesmo entre diferentes máquinas. A COM permite a reutilização de objetos sem o conhecimento de sua implementação interna pois força o desenvolvedor a fornecer uma interface bem definida, que está separada da implementação. As diferentes semânticas na alocação de memória entre linguagens de programação são resolvidas ao tornar os objetos responsáveis por sua própria criação e destruição, através de contagem de referência. A conversão entre diferentes interfaces de um objeto são obtidas através da função QueryInterface()
. O método preferível de herdar em COM é a criação de sub-objetos (chamada agregação) para as chamadas de método os quais são delegados.
Apesar de ter sido implementado em diversas plataformas, a COM é usada em sua maioria no Microsoft Windows. Espera-se que ela seja subtituída ou pelo menos estendida pela plataforma Microsoft .NET, suportando então Web Services através da Windows Communication Foundation (WCF). A DCOM em redes utiliza formatos binários proprietários, enquanto a WCF utiliza troca de mensagem SOAP baseada em XML. COM também compete com CORBA e Java Beans como um sistema para componentes de software.
História
Um dos primeiros métodos de comunicação entre processos no Windows foi o DDE, que permitia o envio e recebimento de mensagens na chamada "conversação" entre aplicações. Essa tecnologia era a base da OLE, que era uma das tecnologias mais inovadoras introduzidas no Windows 3.0. Conversações por texto e do Windows não se mostraram tão flexíveis para permitir o compartilhamento de funcionalidades de aplicações de uma maneira extensível. Então, para o lançamento da versão 3.1 do Windows foi criada a COM como um novo fundamento do sistema, e a OLE foi alterada para a OLE2.
O Visual Basic introduziu o VBX (extensões empacotadas na forma de DLL) que permitia a criação de objetos a serem posicionados graficamente em um formulário e manipulados através de propriedades e métodos. Isso foi adaptado posteriormente para outras linguagens, assim como foi feito no Visual C++. Os controles COM (OCX) tornaram se um substituto do VBX.
Anthony Williams, um dos mais notáveis pensadores na criação da arquitetura COM, distribuiu alguns artigos internos da Microsoft em pró dos componentes de software: Object Architecture: Dealing With the Unknown – or – Type Safety in a Dynamically Extensible Class Library (1988) e On Inheritance: What It Means and How To Use It (1990). Várias dessas idéias resultaram na primeira arquitetura orientada a objeto da Microsoft, OLE. A OLE foi construída sobre a DDE e desenvolvida especificamente para documentos compostos. Ela foi introduzida no Microsoft Word e no Microsoft Excel em 1991, e depois incluída no Windows, a começar na versão 3.1 de 1992. Uma exemplo de um documento composto é uma planilha eletrônica embarcada em um documento de texto do Word: caso mudanças sejam feitas na mesma planilha aberta no Excel, ela são atualizadas automaticamente no documento do Word.
Em 1991 a Microsoft introduziu o Visual Basic Extension (VBX) no Visual Basic 1.0. Em 1993 a empresa lançou a OLE 2. Enquanto a primeira versão era focada em documentos compostos, tanto COM quanto OLE 2 foram desenvolvidas para componentes de software em geral. Em 1994 os controles OLE (OCX) foram introduzidos como sucessores dos controles VBX. Na mesma época a Microsoft declarou que a OLE 2 seria conhecida somente como OLE.
No início de 1996 a Microsoft encontrou novo uso para os controles personalizados OLE, expandido o navegador Internet Explorer para apresentar o conteúdo, renomeando algumas partes da OLE relacionadas ao ActiveX, e gradualmente renomeando todas as tecnologias OLE para ActiveX, exceto a tecnologia de documentos compostos que estava em uso no Microsoft Office. No mesmo ano a DCOM foi introduzida como uma resposta a CORBA.
Tecnologias relacionadas
COM foi uma plataforma bastante influente no desenvolvimento de software do Windows, por isso influenciou o desenvolvimento de várias tecnologias de suporte.
COM+
Para fornecer aos desenvolvedores suporte a transações distribuídas, e melhor gerenciamento de memória e processamento, assim como para posicionar o Windows como uma alternativa a outros sistemas operacionais corporativos, a Microsoft introduziu a tecnologia Microsoft Transaction Server no Windows NT Service Pack 4.
No Windows 2000, tal extensão significativa à COM foi incorporada ao sistema operacional e renomeada COM+. Na mesma época a DCOM foi reconsiderada como uma entidade separada.
DCOM
.NET
A plataforma COM foi substituída pela Microsoft .NET, com a Microsoft focando seu marketing exclusivamente à essa nova plataforma. A COM era geralmente usada para interoperar códigos complexos e de grande desempenho com interfaces ao usuário em Visual Basic ou ASP.
Para algumas extensões a COM agora foi depreciada em favor da .NET. Já que a .NET fornece ferramentas de desenvolvimento rápido similares ao Visual Basic tanto para Windows Forms quanto para Web Forms com JIT, o código de alto desempenho pode ser implementado em C#.
Apesar disso, a COM permanece como uma tecnologia viável com importante base de software legado. Por exemplo, a SDK, popular renderizador do DirectX 3D, é baseado em COM. A COM também ideal para o controle de scripts de aplicações como o Office ou o Internet Explorer pois fornece uma interface para chamar métodos de obetos COM de um script, ao invés de necessitar o conhecimento de uma API em tempo de compilação.
Vários serviçõs fornecidos pela COM+ ainda são importantes em aplicações .NET corporativas, tais como transações e filas de componentes.
Segurança da Internet
A idéia da Microsoft de embarcar conteúdo ativo em páginas web como componentes COM/ActiveX (ao invés de, por exemplo, applets Java), criaram uma uma combinação de problemas no Internet Explorer que lideraram a uma explosão de infecções por vírus de computador, trojan e spyware. a Empresa reconheceu o problema com o ActiveX ainda em 1996 quando Charles Fitzgerald, gerente de programas do time de Java da Microsoft disse que "Se você quer segurança na 'Rede', desligue seu computador. ... Nós nunca declaramos que o ActiveX é intrinsecamente seguro." [1] Como os componentes COM e ActiveX são executados como código nativo na máquina hospedeira, existem algumas pequenas restrições que o código pode fazer. Vários desse problemas foram rediscutidos pela introdução da "assinatura de código" (baseada em assinatura digital) e também na plataforma .NET.
Detalhes técnicos
Programadores COM constroem software usando componentes compatíveis com a COM. Diferentes tipos de componentes são identificados por identificadores de classe (CLSIDs), que são identificadores globais únicos (GUID). Cada componente COM expõe sua funcionalidade através de uma ou mais interfaces. As diferentes interfaces suportadas por um componente são distinguidas umas das outras através de identificadores de interface (IID), que também são GUID.
Interfaces COM possuem implementações em diversas linguagens, como C, C++, Visual Basic e diversas linguagens interpretadas da plataforma Windows. Todo acesso aos componentes é feito através de métodos das interfaces. Isso permite técnicas como programação interprocessos, até mesmo intercomputadores, este último utilizando DCOM.
Interfaces
Todos os componentes COM devem implementar pelo menos a interface padrão IUnknown
, e, portanto, todas as interfaces COM são derivadas de IUnknown
. Essa interface consiste de três métodos: AddRef()
e Release()
, que implementam a contagem de referências e o controle do tempo de vida das interfaces; e QueryInterface()
, que ao especificar um IID permite ao invocador obter referências às diferentes interfaces que o componentes implementa. O efeito de QueryInterface()
é similar ao dynamic_cast<>
em C++ ou conversões de tipo em Java e C#.
As interfaces de componentes COM são necessárias para exibir as propriedades reflexivas, simétricas e transitivas. A propriedade reflexiva refere-se à habilidade da chamada QueryInterface()
de uma dada interface a retornar uma mesma instância da interface. A propriedade simétrica necessita que quanto uma interface B é obtida de uma interface A via QueryInterface()
, a interface A também pode ser obtida da interface B da mesma forma. A propriedade transitiva é similar à simétrica, mas requer que se a interface B pode ser obtida da interface A e a interface C pode ser obtida da interface B, então a interface C deve poder ser obtida da interface A.
Uma interface consiste de um ponteiro para uma tabela de funções virtuais que contém uma lista de ponteiros para as funções que implementam as funções declaradas na interface, na mesma ordem que foram declaradas. Essa técnica de passagem de estruturas de ponteiros de função é bastante similiar à usada pelo OLE 1.0 para comunicar com suas bibliotecas de sistema.
A COM especifica várias outras interfaces padrão usadas para permitir a comunicação inter-componentes. Por exemplo, uma interface dessas é a IStream
, que é exposta por componentes que possuem semânticas de fluxos de dados (como o componente FileStream
, usado para ler e escrever arquivos). Ela possui os métodos esperados Read
e Write
para realizar a leitura e escrita de fluxos de dados.
Ver também
Ligações externas
- «Tecnologias Microsoft COM» (em inglês)