El mejor lugar para aprender Modelo de objetos componentes [cerrado]


13

Necesito aprender COM para mi proyecto actual. Soy un novato y no he podido encontrar buenos puntos de partida para COM. He estado buscando en MSDN y buscando en Google ... Encontré algunos artículos interesantes en codeproject.com, pero no estoy satisfecho. ¿Por qué usamos COM? ¿Por qué existe? ¿En qué lugares existe? ..... y así sucesivamente ... Entonces, ¿podría decirme dónde puedo encontrar respuestas a estas preguntas?


3
¿Por qué usamos COM? Principalmente tratamos de no hacerlo. ¿En qué lugares existe? Bases de código heredadas dolorosas, en general.
Carson63000

@carson actully estoy desarrollando un software de monitoreo donde necesito obtener valores de objetos "COM". De ahí que el nuevo encontrado de Quest ..
Chani

1
Si recuerdo bien, de los mejores 3 artículos web sobre COM, 2 estaba en MSDN (algún artículo de revista antiguo) y 1 estaba en CodeProject ... obviamente hay cientos de otros útiles, así que es como encontrar una aguja en el pajar. (y gracias Google por devolver solo sitios en el TLD ".com" cuando busco "COM" ...)
rwong

@ Carson63000 Tan cierto que duele ... voy a llorar en un rincón ahora.
Evicatos

Respuestas:


18
  • En primer lugar, COM es como la programación orientada a objetos. La interfaz COM es una interfaz abstracta.
  • COM tiene una ventaja sobre el OOP integrado de cada idioma en que puede tener clases COM implementadas en diferentes idiomas y / o compiladas por diferentes versiones de compiladores, y aún podrán interactuar. Esto se llama "interfaz binaria de aplicación" (ABI)
  • COM utiliza el recuento de referencias. Puede ser molesto al principio, pero tan pronto como aprenda sobre punteros inteligentes, su vida será mucho más fácil y descubrirá que el concepto de conteo de referencias es muy fácil de entender.
  • COM utiliza una forma extraña de conversión de clases, a saber, "Interfaz de consulta".

Aprender el IUnknown es el primer paso.

Una buena interfaz COM que es adecuada para el estudio de principiantes es la interfaz IStream. Puede practicar COM implementando la interfaz IStream utilizando muchos tipos de formas de almacenamiento de datos.


Añadido 28/09/2012:

Después de que se inventó el mecanismo COM, la gente de Microsoft descubrió que estos mecanismos abren la puerta a trucos de programación inusuales que no son OOP ortodoxos. En el nivel más bajo, IUnknown.QueryInterfacees solo un método; Puede hacer cualquier cosa. Estos trucos hacen que COM sea intimidante para los alumnos, ya que pueden invalidar el razonamiento básico que se puede tomar prestado de OOP.

La documentación de Microsoft en MSDN pasa mucho tiempo diciendo "COM no es ..." o "No asumas" explicando cómo estos trucos inusuales pueden romper tu código.

Los diseñadores de COM usan el Principio de sustitución de Liskov (la "L" en SÓLIDO ) para asegurarse de que sus múltiples interfaces y el uso de trucos no invaliden el razonamiento básico de OOP o la operación del programa.

Si su proyecto no usa estos trucos, está bien ver COM solo desde el punto de vista de OOP. Si su proyecto usa estos trucos, necesitará ver COM como código auto modificable.

(Broma: tuvimos que pasar tanto tiempo con L que generalmente ignoramos los otros cuatro principios).


9

La razón principal para COM es proporcionar una interfaz de comunicaciones orientada a objetos entre una aplicación y otras aplicaciones y archivos DLL que pueden vivir en diferentes espacios de memoria, y entre objetos que pueden tener diferentes representaciones internas de objetos.

Algo para recordar cuando se aprende COM es que en ese momento C ++ era el rey y las aplicaciones llamadas dll usaban C. No había ABI común (como dice @rwong) y COM era la solución de Microsoft.

Probablemente valga la pena echar un vistazo a Active Template Library (ATL) para Visual Studio, lo que hace que sea un poco más fácil usar COM también.

Un par de libros que encontré útiles en la é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


7

Originalmente aprendí sobre COM del libro Learning DCOM (DCOM es solo una extensión de COM, el libro trata principalmente de COM). Tiene más de diez años y debería ser barato si lo usa (ya que COM ya no es exactamente atractivo, ni siquiera en el mundo de Microsoft, aunque todavía se usa para interoperabilidad).

La razón principal para que exista COM es facilitar el desarrollo basado en componentes, lo que básicamente significa que, en lugar de vincular bibliotecas cuando compila su código, hace referencia a una interfaz (la descripción de cómo comunicarse con un componente externo) y utiliza alguna implementación de que cuando despliegas Subraya la mayor parte de la tecnología propia de Microsoft.

El sistema admite algunas características que eran geniales antes de que todo se gestionara (como el recuento de referencias y la autodescripción (a través de IDispatch)).


5

COM es un estándar creado en los años 90 para permitir que diferentes piezas de software se comuniquen entre sí. Lo más importante es el estándar binario que permite que una pieza de software cree o se una a un objeto y luego llame a esa interfaz. Esto le permite hacer cosas como crear una DLL en C ++ a la que puede llamar una página ASP (objetos COM), o crear un control en Delphi que puede colocar en un cuadro de diálogo VB (controles ActiveX) u hoja de cálculo de Excel. Cuando pega una imagen en Word, también usa COM, incrustando una aplicación separada en Word. Menos popular es DCOM, que es llamar a objetos remotos, generalmente hay formas más simples de hacerlo.

Entonces, Com / ActiveX / DCOM era muy popular hace 10 años con VB, VBA, C ++ / ATL, Delphi. Sin embargo, Dotnet es mucho más simple y C # ha reemplazado la mayoría del uso de COM y VB, etc.

Todavía hay muchas interfaces COM allí que existen a las que puede llamar desde una aplicación dotnet o Java o C ++. (No dices)

Si necesita llamar a las interfaces COM, VB es la forma más sencilla de hacerlo. En Dotnet 4.0 C # tiene la palabra clave dinámica que hace que sea mucho más fácil llamar a las interfaces IDispatch, lo que probablemente sea una gran solución que debe considerar.

Si necesita conocer muchos detalles, realmente necesita usar C ++ y ATL, llame a las API de C como CoCreateInstance. Sin embargo, evite esto si puede, ya que es una tecnología antigua y no es muy útil, siga las recomendaciones anteriores.

No estoy seguro de qué software de monitoreo está viendo, pero es probable que esté disponible a través de las clases System.Management en dotnet.


2

Los siguientes podrían ser útiles COM overviewM:

El primer video habla sobre la idea general de crear componentes binarios para reutilizar códigos escritos en diferentes idiomas (independientes del idioma) y están en diferentes máquinas (procesos) (ubicación independiente / transparente). Esta tecnología se usa en algunas compañías de software para integrarse con otro software (compañías) en lugar de comprar su software e integrarlo en el suyo o escribir los códigos desde cero en sus sistemas.

Esta tecnología tiene tres versiones diferentes (implementaciones):

OLE / COM / DCOM / ActiveX para desarrolladores de C ++ (ATL se utiliza para facilitar el trabajo del programador)

JavaBeans / RMI / EJB para desarrolladores Java

CORBA / IIOP

Solo piense en ello como una tecnología que resulta útil cuando tiene su software escrito en Java y desea agregarle una funcionalidad que ya existe en un paquete pero que está escrito en C ++ e incluso tal vez esté ubicado en una máquina diferente, no en Su máquina local. ¿Cómo se llama "nuevo", cómo se hacen objetos y se llaman métodos a partir de ellos?

Los siguientes libros que he visto personas que codifican COM tienen cualquiera de ellos en sus estanterías:

  • Taller de desarrolladores para COM y ATL 3.0

  • Inside Com

  • COM esencial

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.