Melhor lugar para aprender o Modelo de Objeto Componente [fechado]

13

Preciso aprender COM para o meu projeto atual. Sou novato e não consegui encontrar bons pontos de partida para o COM. Eu estive pesquisando no MSDN e pesquisando no Google ... Encontrei alguns artigos interessantes no codeproject.com, mas não estou satisfeito. Por que usamos o COM? Por que isso existe? Em que lugares existe? ..... e assim por diante .. Então, por favor, diga-me onde posso encontrar respostas para essas perguntas?

Chani
fonte
3
Por que usamos o COM? Principalmente tentamos não. Em que lugares existe? Bases de código legadas dolorosas, geralmente.
Carson63000 #
@ Carson Actully Estou desenvolvendo um software de monitoramento em que preciso buscar valores de objetos "COM". Daí a nova missão encontrada ..
Chani
1
Se bem me lembro, dos 3 melhores artigos da Web sobre COM, 2 foram no MSDN (algum artigo antigo da revista) e 1 no CodeProject ... obviamente existem centenas de outros úteis, então é como encontrar uma agulha no palheiro. (e graças do Google para retornar apenas sites na ".com" TLD quando eu procurar 'COM' ...)
rwong
@ Carson63000 Tão verdade que dói ... vai chorar em um canto agora.
Evicatos

Respostas:

18
  • Em primeiro lugar, o COM é como a programação orientada a objetos. A interface COM é uma interface abstrata.
  • O COM tem uma vantagem sobre o OOP interno de cada idioma, na medida em que você pode ter classes COM implementadas em diferentes idiomas e / ou compiladas por diferentes versões de compiladores, e eles ainda poderão interoperar. Isso é chamado de "interface binária do aplicativo" (ABI)
  • COM usa contagem de referência. Pode ser irritante no começo, mas assim que você aprender sobre indicadores inteligentes, sua vida será muito mais fácil e você descobrirá que o conceito de contagem de referência é muito fácil de entender.
  • O COM usa uma maneira estranha de conversão de classe, ou seja, "Query Interface".

Aprender o IUnknown é o primeiro passo.

Uma boa interface COM adequada para o estudo de iniciantes é a interface IStream. Você pode praticar o COM implementando a interface IStream usando vários tipos de maneiras de armazenar dados.


Adicionado 2012/09/28:

Após a invenção do mecanismo COM, as pessoas da Microsoft descobriram que esses mecanismos abrem as portas para truques incomuns de programação que não são ortodoxos. No nível mais baixo, IUnknown.QueryInterfaceé apenas um método; pode fazer qualquer coisa. Esses truques tornam a COM intimidante para os alunos, porque podem invalidar o raciocínio básico que pode ser emprestado da OOP.

A documentação da Microsoft no MSDN gasta muito tempo dizendo "COM não é ..." ou "Não faça suposição", explicando como esses truques incomuns podem quebrar seu código.

Os designers de COM usam o Princípio de Substituição de Liskov (o "L" no SOLID ) para garantir que suas múltiplas interfaces e o uso de truques não invalidem o raciocínio básico de OOP ou a operação do programa.

Se o seu projeto não usar esses truques, não há problema em ver o COM apenas do ponto de vista do OOP. Se o seu projeto usar esses truques, você precisará ver o COM como código auto-modificável.

(Piada: Tivemos que gastar tanto tempo com L que normalmente ignoramos os outros quatro princípios.)

rwong
fonte
9

O principal motivo do COM é fornecer uma interface de comunicação orientada a objetos entre um aplicativo e outros aplicativos e dlls que podem viver em diferentes espaços de memória e entre objetos que podem ter diferentes representações internas de objetos.

Algo para lembrar ao aprender COM é que, na época, o C ++ era o rei e os aplicativos chamados dll usando C. Não havia ABI comum (como @rwong diz) e o COM era a solução da Microsoft.

Provavelmente vale a pena dar uma olhada na ATL (Active Template Library) para visual studio, o que facilita um pouco o uso do COM também.

Alguns livros que achei úteis na época

http://www.amazon.com/Essential-COM-Don-Box/dp/0201634465/ref=sr_1_1?ie=UTF8&qid=1304946825&sr=8-1

http://www.amazon.com/Understanding-ActiveX-OLE-Developers-Technology/dp/1572312165/ref=pd_sim_b_4

hth

daven11
fonte
7

Eu aprendi originalmente sobre COM no livro Learning DCOM (DCOM é apenas uma extensão do COM, o livro é principalmente sobre COM). Ele tem mais de dez anos e deve ser barato se você o usar (já que o COM não está mais exatamente quente, nem mesmo no mundo da Microsoft, embora ainda seja usado para interoperabilidade).

O principal motivo da existência do COM é facilitar o desenvolvimento baseado em componentes, o que basicamente significa que, em vez de vincular bibliotecas ao compilar seu código, você faz referência a uma interface (a descrição de como se comunicar com um componente externo) e usa alguma implementação de quando você implanta. Está subjacente à maior parte da tecnologia da Microsoft.

O sistema oferece suporte a alguns recursos que eram interessantes antes de tudo ser gerenciado (como contagem de referência e auto-descrição (por meio do IDispatch)).

Deckard
fonte
5

COM é um padrão criado nos anos 90 para permitir que diferentes partes de software conversem entre si. O mais importante é o padrão binário que permite que um software crie ou ligue a um objeto e, em seguida, chame a interface. Isso permite que você faça coisas como criar uma DLL em C ++, que pode ser chamada por uma página ASP (Objetos COM), ou criar um controle no Delphi, que você pode colocar em uma caixa de diálogo VB (controles ActiveX) ou planilha do Excel. Quando você cola uma imagem no Word, ele também usa COM, incorporando um aplicativo separado ao Word. Menos popular é o DCOM, que é para chamar objetos remotos, geralmente existem maneiras mais simples de fazer isso.

Então, o Com / ActiveX / DCOM era muito popular há 10 anos com VB, VBA, C ++ / ATL, Delphi. O Dotnet é muito mais simples e o C # substituiu a maioria dos usos de COM e VB, etc.

Ainda existem muitas interfaces COM existentes que você pode querer chamar de um aplicativo dotnet ou Java ou C ++. (Você não diz)

Se você precisar chamar interfaces COM, o VB é a maneira mais simples de fazer isso. No Dotnet 4.0, o C # possui a palavra-chave dinâmica, que facilita a chamada de interfaces IDispatch, o que provavelmente é uma ótima solução.

Se você precisa conhecer muitos detalhes, realmente precisa usar C ++ e ATL, chame as APIs C como CoCreateInstance. Evite isso se você puder, como sua tecnologia antiga e não for muito útil, siga as recomendações acima.

Não sei ao certo qual software de monitoramento você está procurando, mas provavelmente estará disponível através das classes System.Management no dotnet.

Richard
fonte
2

Os itens a seguir podem ser úteis COM overviewM:

O primeiro vídeo fala sobre a idéia geral de criar Componentes Binários para reutilizar códigos escritos em diferentes idiomas (independentes do idioma) e estão em diferentes máquinas (processos) (independentes do local / transparentes). Essa tecnologia é usada em algumas empresas de software para integrar-se a outros softwares (empresas) em vez de comprar seus softwares e incorporá-los a eles próprios ou escrever os códigos do zero em seus sistemas.

Essa tecnologia possui três versões diferentes (implementações):

OLE / COM / DCOM / ActiveX para desenvolvedores de C ++ (ATL é usado para facilitar o trabalho do programador)

Desenvolvedores JavaBeans / RMI / EJB para Java

CORBA / IIOP

Pense nisso como uma tecnologia que é útil quando você tem seu software escrito em Java e deseja adicionar uma funcionalidade que já existe em um pacote, mas que está escrita em C ++ e, talvez, esteja localizada em uma máquina diferente e não em sua máquina local. Como você chama "new", como você cria objetos e chama métodos a partir deles?

Os seguintes livros que vi pessoas que codificam COM têm um deles em suas estantes:

  • Workshop do desenvolvedor para COM e ATL 3.0

  • Inside Com

  • COM essencial

Mahshid Zeinaly
fonte