Erfolgreiche ePaper selbst erstellen
Machen Sie aus Ihren PDF Publikationen ein blätterbares Flipbook mit unserer einzigartigen Google optimierten e-Paper Software.
Activation (auch als Compound Document<br />
bezeichnet) bestehen.<br />
Das Component Object Model ist<br />
eine Sammlung von Klassen mit den jeweiligen<br />
Schnittstellen (Interfaces).<br />
Entscheidender Unterschied zwischen<br />
gängigen Betrachtungsweisen der<br />
Objektorientierung und dem COM-<br />
Konzept ist die Tatsache, daß ein COM-<br />
Objekt mehrere Interfaces anbieten<br />
kann. Ein spezielles Interface wird dabei<br />
immer unterstützt, das Unknown-Interface.<br />
Unknown bietet als wesentliche<br />
Methode die Query-Interface-Methode<br />
an. Mit Query-Interface können weiterführende<br />
Interfaces abgefragt werden.<br />
Physisch stellt ein Interface immer eine<br />
Menge von Funktionszeigern dar. Ein<br />
C++-Objekt (oder auch Small-Talkoder<br />
Java-Objekt) hat immer nur ein Interface.<br />
Dieses Interface setzt sich aus<br />
den eigenen öffentlichen Attributen<br />
und Methoden und denen der Mutterklassen<br />
zusammen. Dieses Interface ist<br />
somit eindeutig durch die Klasse bestimmt.<br />
Ein Abfragen nach weiteren Interfaces<br />
ist sinnlos. COM dagegen kennt<br />
keine Vererbung. Die Anhäufung von<br />
Interfaces soll im COM die Vererbung<br />
ersetzen.<br />
COM-Verbindungen beginnen mit<br />
der Suche der Klassen-Kennung<br />
(CLSID) in der Registrierungsdatei. Der<br />
Suchbegriff setzt sich aus dem Komponenten-,<br />
Klassen- und Versionsbezeichner<br />
zusammen (z.B. Excel.Application.5).<br />
Eine COM-API-Funktion kann<br />
eindeutige CLSIDs, die sich aus Zeitstempel<br />
und Netzwerkkennung zusammensetzen,<br />
generieren.<br />
Über die CLSID wird der gesuchte<br />
Server gestartet und ein Metaklassenobjekt<br />
zur Objektgenerierung (class<br />
factory) im Server instanziert. Diese<br />
Class Factory instanziert schließlich das<br />
gesuchte Server-Objekt. Bei COM-<br />
Klassen, die über Visual C++ angelegt<br />
wurden, ist die Class Factury-Klasse<br />
eine Kindklasse von COleObject-<br />
Factory. Diese Kindklasse wird über einen<br />
Makro DECLARE_OLECREATE<br />
eingerichtet. Über das Query-Interface<br />
erhält man vom Serverobjekt das gesuchte<br />
Interface. Die Lokalität des<br />
Serverobjekts kann dabei im selben Prozeßrahmen<br />
des Clients (In-Proc-Server)<br />
oder als COM-Objekt lokal oder remote<br />
sein. Innerhalb des Clients befindet sich<br />
dann ein Proxy-Objekt, das die Schnittstellen<br />
des Servers nachbildet. Die<br />
Kommunikation zwischen Proxy und<br />
dem Gegenüber im Server (Stub) wird<br />
über COM abgewickelt.<br />
Ziel dieses 1989 gegründeten und herstellerunabhängigen<br />
Konsortiums war die<br />
Bereitstellung einer geeigneten Infrastruktur<br />
für verteilte objektorientierte Programme<br />
auf heterogenen Netzwerken. Um die<br />
Standardisierung in geordnete Bahnen zu<br />
lenken, hat die OMG eine Referenzarchitektur<br />
OMA (Object Management Architecture)<br />
definiert, deren Bestandteile die<br />
beteiligten Mitglieder schrittweise mit Inhalt<br />
füllen.<br />
Der Object Request Broker (ORB) ist<br />
Kern der OMA. Seine primäre Aufgabe besteht<br />
in der Übermittlung von Methodenaufrufen<br />
von einer Client-Applikation zu<br />
einem entfernten Objekt sowie in der<br />
Rückmeldung von Fehlern und Ergebnissen.<br />
Corba ist das Kürzel für ,,Common Object<br />
Request Broker Architecture“. Corba<br />
ist allerdings mehr als ein bloßer Mechanismus<br />
für Methodenaufruf zwischen Prozessen.<br />
Der Zugriff auf entfernte Objekte soll<br />
auch unabhängig von Programmiersprachen<br />
erfolgen. Ein solches Objektmodell<br />
findet sich in der Corba-Spezifikation. Jedes<br />
Objekt ist Instanz eines Interface-Typs.<br />
Ein Interfacetyp repräsentiert eine Klasse<br />
mit möglicherweise mehreren Elternklassen.<br />
Unterstützung findet dabei Schnitt-<br />
COM oder ActiveX-Controls kennzeichnen<br />
sich durch Schnittstellen, die<br />
als Methoden (Diensterbringung) und<br />
Eigenschaften (Properties) verfügbar<br />
sind. Einige Standard-Eigenschaften<br />
(Stock-Properties), wie Schriftart-Einstellung<br />
oder Farbeinstellung sind bereits<br />
vorbereitet. Stock-Properties können<br />
einfach in ActiveXControls<br />
integriert werden. Grundsätzlich sollten<br />
Merkmale, die gesetzt und gelesen<br />
werden und zudem ein Attribut zur<br />
Datenhaltung erfordern, als Properties<br />
realisiert werden. Methoden sollen die<br />
Services des Controls sein. Für den Einsatz<br />
des Controls spielt es kaum eine<br />
Rolle, ob für bestimmte Aufgaben Properties<br />
oder Methoden eingesetzt werden.<br />
An ihren Container können COM-<br />
Controls über Events Botschaften zurücksenden.<br />
Gerade diese Events verschieben<br />
das sonst übliche<br />
Client/Server-Verhältnis in ein PeertoPeer-Verhältnis.<br />
Das Control selber<br />
kann beliebig komplexe Darstellungen<br />
übernehmen. Von einfachen Eingabefeldern<br />
bis zu aufwendigen TabControls<br />
mit integrierten Listen, die je Zeile wieder<br />
Controls enthalten, sind COM-Controls<br />
möglich und üblich. Gerade hier<br />
sollte die Zielsetzung sein, bestehende<br />
Projekte auf Controls zu verteilen und so<br />
auch über Active X verfügbar zu ma-<br />
OMG und Corba<br />
stellenvererbung, nicht jedoch Implementierungsvererbung.<br />
Damit eine Applikation<br />
auf ein Corba-Objekt zugreifen kann,<br />
muß die Interoperabilität zwischen dem<br />
Aufrufer und dem entfernten Objekt gewährleistet<br />
sein. In Corba gibt es zu diesem<br />
Zweck eine eigene Schnittstellenbeschreibungssprache<br />
namens IDL (Interface Definition<br />
Language). IDL enthält ausschließlich<br />
Elemente zur Datenbeschreibung<br />
und keinerlei Anweisungskonstrukte.<br />
Die Syntax ist an C++ angelehnt.<br />
Im Corba-Standard 1.2 fehlt eine Spezifikation,<br />
wie die Kopplung verschiedener<br />
Corba-Implementierungen aussehen soll.<br />
Das hat zu fehlender Interoperabilität zwischen<br />
den Produkten unterschiedlicher<br />
Hersteller geführt. Der Nachfolgestandard<br />
Corba 2.0 legt nun fest, wie Corba-Produkte<br />
auf Basis vorhandener Kommunikationsprotokolle<br />
miteinander zusammenarbeiten<br />
müssen. Einzig die Kooperation auf Basis<br />
von TCP/IP ist verpflichtend, alles andere<br />
optional. Wollen zwei beliebige Broker<br />
über TCP/IP Informationen austauschen,<br />
müssen sie hierfür das standardisierte IIOP<br />
(Internet Inter ORB Protocol) benutzen. ❏<br />
chen. Bei neuen Projekten bietet sich ein<br />
solcher modularer, komponentenbasierender<br />
Ansatz besonders an.<br />
ActiveX-Steuerelemente können auf<br />
HTML-Seiten plaziert und über Skripten-Sprachen<br />
(JavaScript von Netscape<br />
und Visual Basic Script von Microsoft)<br />
verknüpft werden. Für die Bearbeitung<br />
von Skripten sorgen im Internet-Explorer<br />
eigenständige Komponenten, die<br />
Scripten Engines. Der HTML-Viewer<br />
weiß also nicht, in welcher Sprache ein<br />
auszuführendes Script geschrieben ist.<br />
Statt dessen erzeugt er eine Instanz, der<br />
zum Skript gehörenden Scripten-Engine<br />
und veranlaßt sie dazu, mit der Ausführung<br />
des Skriptes zu beginnen.<br />
Die für den Informationsaustausch<br />
zwischen Viewer und Scripten-Engine<br />
notwendigen Schnittstellen definiert<br />
die Spezifikation des ActiveX-Scripting.<br />
Scripten-Engines werden in der<br />
Regel als prozeßinterner Server implementiert,<br />
wodurch jede beliebige Anwendung<br />
als Skripten-Host arbeiten<br />
kann, wenn sie eine Scripten-Engine<br />
lädt und von ihr gesteuert wird.<br />
Beim Einpflanzen von Controls auf<br />
HTML-Seiten können die persistenten<br />
Eigenschaften des Controls bearbeitet<br />
werden. Mögliche persistente Eigenschaften<br />
sind Voreinstellungen des Controls<br />
oder vorgegebene Auswahl-Daten<br />
bis hin zu Multimedia-Daten. Die Per-<br />
66 <strong>monitor</strong> 4/<strong>97</strong>