COM- Interface- Implementierung

Was ist COM

Die gebräuchliche Abkürzung COM steht für Component Object Model und ist eine von Microsoft 1992 entwickelte Technik zur Herstellung von Softwarekomponenten. Das Besondere ist dabei, dass diese Softwarekomponenten unabhängig von der Programmiersprache eingesetzt werden können. Sie ermöglichen also einerseits die Kommunikation der in einen bestimmten Prozess eingebundenen Komponenten und andererseits auch die dynamische Objekterzeugung. COM ermöglicht außerdem die erleichterte Wiederverwendung von Programmkomponenten, oft auch über Betriebssystemgrenzen hinweg.

Funktionsweise

Insgesamt funktioniert COM nach dem sogenannten Client-Server-Prinzip. Das bedeutet, dass ein COM-Client in dem COM-Server eine bestimmte COM-Komponente erzeugen kann. COM-Server und COM-Client werden dabei in einer COM-gestützten Programmiersprache erstellt.

Der Server

Der COM-Server ist entweder ein Laufzeitmodul oder ein ausführbares Programm, das bereits fertige COM-Komponenten anbieten oder neue erstellen kann. Man unterscheidet zwischen In-Process-, Local- und Remote-Servern. In-Process Server sind besonders schnell, haben aber dadurch auch den Nachteil, dass viel Speicherplatz benötigt wird, da jeder Prozess, der eine COM-Komponente nutzen möchte, diese in seinen eigenen Speicher integrieren muss. Die COM-Komponenten sind hier in einer DLL implementiert. DLL bedeutet so viel wie dynamische Programmbibliothek, in der Programmcodes, Daten und Ressourcen gespeichert werden können. Bei einem Local Server werden keine DLL aufgerufen, sondern es muss ein ausführbares Programm bei der Erzeugung einer COM-Komponente vorliegen. Dies hat den Vorteil, dass weniger Speicherplatz benötigt wird, weil Local Server nur einmal gestartet werden müssen und dann aber viele Clients gleichzeitig versorgen können. Außerdem können so Prozesse auf einen gemeinsamen Datenbestand zugreifen, wodurch erneut der benötigte Speicherplatz verringert wird. Diese gemeinsame Zugriffsbasis hat allerdings auch den Nachteil, dass sich Prozesse verlangsamen. Local Server arbeiten mit einem vereinfachten RPC-Protokoll, Remote Server hingegen arbeiten mit einem vollständig implementierten RPC-Protokoll. Dadurch werden Prozesse noch langsamer, selbst bei sehr geringer Netzwerkauslastung. Allerdings können mit einem Remote Server auch Server und Client mit unterschiedlichen Betriebssystemen verbunden werden. Hierbei wird die Technik DCOM (Distributed Component Object Model) verwendet.

Der Client

Der Client ist ein bestimmtes Programm, das zwei Funktionen wahrnehmen kann: erstens kann der Client eine COM-Komponente in einem COM-Server erzeugen und zweitens kann er die von einer COM-Komponente angebotenen Funktionen nutzen. Die Kommunikation zwischen Client und Server wird dabei im Allgemeinen durch COM-Schnittstellen, auch COM-Interfaces, vermittelt. Es wird unterschieden zwischen allgemeinen und vorgegebenen Schnittstellen und zwischen solchen, die speziell für eine bestimmte COM-Komponente definiert wurden und meist nur von dieser einen Komponente nutzbar sind. Eine COM-Komponente bietet also Funktionen an, die über eine oder mehrere Schnittstellen durch den Client vom COM-Server abrufbar sind. Die Nutzung mehrere Schnittstellen ist insbesondere dann wichtig, wenn Programme erweitert werden sollen ohne laufende Programme zu stören oder neu einrichten müssen.

Das Besondere an COM

COM ermöglicht eine Programmierung, die

  • sprachunabhängig
  • versionsunabhängig
  • plattformunabhängig
  • objektorientiert
  • ortsunabhängig
  • automatisierend

Das bedeutet im Einzelnen:

  • COM-Komponenten sind unabhängig von der Programmiersprache nutzbar
  • Neue Entwicklungen im Bereich der Software-Features können einfach in bestehende Anwendungen integriert werden. Traditionell kann es schnell zu Problemen kommen, wenn herstellerübergreifende Software-Komponenten mit neuen Funktionen ausgestattet werden sollen, wenn z.B. einige Komponenten überschrieben werden und so nicht mehr fehlerfrei funktionieren. Dieses Problem umgeht COM, indem es mehrere Schnittstellen anbietet und diese in einer einzigen Datei zusammenfasst, der sogenannten Header-Datei. So kann zum Beispiel eine Schnittstelle die herstellerübergreifenden Funktionen enthalten und die andere erweitert diese Softwarekomponenten.
  • Anwendungen im 64-Bit-System können auf Server im 32-Bit-System zugreifen und umgekehrt
  • COM-Komponenten werden objektorientiert erstellt
  • der Zugriff auf eine COM-Komponente erfolgt über eine zentrale Schaltstelle, daher ist es unerheblich wo eine COM-Komponente ursprünglich gespeichert ist
  • Automatisierung: bezeichnet die Steuerung von Prozessen über COM-Schnittstellen

COM-Interface

Interface bedeutet so viel wie Schnittstelle und ist der Bereich, der der Kommunikation zwischen Komponenten dient. Hier wird eine bestimmte Anzahl von Funktionen gespeichert, die auf die Erbringung einer vorher festgelegten Leistung ausgerichtet sind. Eine COM-Komponente implementiert ein Interface, wenn sie die durch das Interface bestimmte Leistung erfüllt. Wenn also der Client ein bestimmtes Interface aufruft, nimmt er jeweils die Funktionen einer bestimmten COM-Komponente in Anspruch. Der Anwender betrachtet also eine COM-Komponente ausschließlich als eine Ansammlung von Interfaces, da er eigentlich in den meisten Fällen nur an der spezifischen Leistung interessiert ist.Das COM-Interface-Konzept ist in seiner Anwendung dabei einzigartig und ermöglicht Anwendern einige innovative Möglichkeiten. Durch dieses Interface-Konzept kann eine Komponente fast unbemerkt durch eine andere ersetzt oder erweitert werden, wenn die neue Komponente alle Interfaces unterstützt, die auch die alte Komponente unterstützt hat. Eine Erweiterung der Funktionsfähigkeit und damit eine stetige und einfache Anpassung an neue Anforderungen oder veränderte Technologien, sind möglich, wenn die neue Komponente dann auch noch weitere Interfaces unterstützt. Attraktivität erlangt das COM-Interface-Konzept auch durch die Implementierungssprache IDL (Interface Definition Language), die C++ recht ähnlich ist und damit Anwendern einen erleichterten Umgang mit diesen Interfaces ermöglicht, da den meisten Anwendern C++ bekannt ist. Zugriffe können daher auch einfach in C++ erfolgen, da COM selbst die Sprache, die für eine Implementierung zu verwenden ist, nicht definitiv festlegt.