Die Community zu .NET und Classic VB.
Menü

COM als Middleware - Seite 5

 von 

2.0 COM Server
Nächste Seite >>
1.3 Middleware-Architekturen
<< Vorherige Seite

1.4 Komponentenspezifische Begriffserklärungen  

Objekte sind Strukturen zur Modellierung von Anwendungen. Es ist zwischen Klassen und Objekten zu unterschieden. Klassen enthalten den eigentlichen Code, Objekte bilden die Instanzen derselben. Eine instanzierte Klasse, also das Objekt, besteht aus Datenstrukturen, den so genannten Attributen und aus Funktionen auf diese Daten, den Methoden. Durch diesen Zugriff ist der Zustand des Objekts [die Werte seiner Attribute] änderbar. Methoden bilden die Schnittstelle bei der Kommunikation. Ein Objekt besitzt entlang der Kapselung auch die Fähigkeit der Vererbung und der Polymorphie. Neben einer strukturierteren Programmumsetzung, wirken sich diese Eigenschaften positiv auf die Wiederverwendbarkeit und somit auch auf Entwicklungs- und Wartungskosten aus. Im folgenden soll kurz auf allgemeine Begriffe der Objektorientierung in Bezug auf die Komponentenentwicklung eingegangen werden.

1.4.1 Kapselung

Ein Objekt ist durch die Zusammenfassung seiner drei Merkmale Zustand, Verhalten und Name vollständig beschrieben. Im Unterschied zur prozeduralen Programmierung fordert der objektorientierte Ansatz keine Trennung von Daten und Funktionalität. Der Zugriff auf die Information eines Objekts erfolgt ausschließlich nachrichtenbasiert über seine öffentlichen Methoden; integrierte Daten entziehen sich dem Betrachter. Diese Bedingung wird als Kapselung bezeichnet und gewährleistet einen sicheren Umgang mit den in einem Objekt abgelegten Informationen. Kapselung ermöglicht die strukturierte Lösung eines Problems durch in sich geschlossenen Teillösungen. Objekte identischen Verhaltens aber verschiednen Zustands, formen Instanzen einer konkreten Klasse und enthalten funktionale Implementierungen. Nicht instanzierbare, attributlose Klassen mit integrierten Funktionsprototypen ohne Codeumsetzung [abstrakte Operatoren] erfüllen die Bedingung einer abstrakten Klasse, gängiger unter der Bezeichnung Interface oder Schnittstelle. Eine vererbte abstrakte Klasse repräsentiert ein allgemeines Konzept, indem sie die zu implementierende Funktionalität einer konkreten Unterklasse festlegt, sie generiert einen polymorphen Datentyp. Eine auf diese Art erzeugte Schnittstelle bestimmt die Kommunikation mit einem referenzierenden Client.

1.4.2 Vererbung

Vererbung bildet die Basis der Wiederverwendbarkeit. Sie bezeichnet die Relation, bzw. Assoziation einer Oberklasse, auch allgemeine Klasse genannt [Generalisierung] zu einer Unterklasse [Spezialisierung]. Eine Unterklasse [abgeleitete Klasse] adaptiert bzw. erbt die Attribute und Methoden ihrer Vaterklasse und kann die dadurch vorhandenen Implementierungen manipulieren oder erweitern. Liegt eine Einfachvererbung vor, bezieht sich die Unterklasse auf genau eine Oberklasse, bei Mehrfach- bzw. multipler Vererbung besitzt eine Unterklasse mehr als eine Vaterklasse.

Nicht alle Programmiersprachen [beispielsweise Java und Visual Basic] und Middleware-Architekturen [z. B.: COM] unterstützen die direkte Umsetzung einer solchen Komposition, sondern deren spezialisierte Formen Containment und Aggregation:

Containment beschreibt die Beziehung ein oder mehrer Unterklassen zu ihrer Oberklasse [Container]. Die Schnittstellen der Spezialisierungen sind nur für den Container sichtbar, für einen Client des Containers hingegen bleiben sie transparent. Enthalten die Unterklassen weitere Spezialisierungen, so gelten die gleichen Bedingungen; der bisherige Container stellt sich der tiefsten Klasse als Client, die direkte Unterklasse dann als Container usw. dar.
Delegation ist die Anwendung des Containments. Der Container verpackt alle oder ausgesuchte Methoden seiner eingeschlossenen Klassen in eigene, neue und legt nur diese offen. Aufrufe folgen daher rekursiv dem top-down Prinzip, d. h. verlaufen von außen nach innen. Externe Operationen auf Unterobjekte richten sich stets an die Schnittstellen des Containers, der diese an das Unterobjekt weiterreicht, bzw. delegiert.
Aggregation bildet die Sonderform des Containments. Die im Container, jetzt als Aggregator bezeichnet, eingeschlossenen Unterobjekte [Aggregate] legen entgegen der Delegation ihre Schnittstellen parallel zur Oberklasse und damit nach außen offen. Zugriffe auf Methoden finden nun direkt und nicht mehr mittelbar statt, so dass neue Implementierungen entfallen. Bei der Instanzierung des Aggregators erfolgt automatisch je eine Erstellung der aggregierten Objekte.

1.4.3 Polymorphie

Polymorphie garantiert im allgemeinen aus einer Variablen heraus die gerichtete Zustellung von Operationen auf Methoden gleichen Namens unterschiedlicher Objekttypen. Eine polymorphe Variable ist daher befähigt unterschiedliches Verhalten anzunehmen. Die Objektorientierung definiert mit Daten- und Funktionspolymorphie zwei Ausprägungen der Polymorphie:

Datenpolymorphie prädestiniert eine Variable Instanzen verschiedener Objekttypen aufzunehmen. Hierbei gilt es zwischen den typenbezogenen, wie in C++, und den typenlosen Deklarationsbedingungen, beispielsweise PERL, zu unterscheiden. Variante Datentypen gestatten die Aufnahme jedes beliebigen Objekttyps, bei typenbehafteten hingegen sind lediglich der Typ selbst, sowie dessen Untertypen zulässig. VB implementiert beide Ausprägungen und unterstützt speziell ungetypte Variablen in Form der Schlüsselwörter Objekt und Variant.
Funktionspolymorphie ermöglicht die Operation auf unterschiedliche Objekttypen über einen einheitlichen Methodenamen. Im Ausgangspunkt stehen neben der Benennung einer Funktion auch deren Prototyp, nicht aber das tatsächlich referenzierte Objekt als Information zur Verfügung. Visual Basic unterstützt Funktionspolymorphie durch die Anweisung Implements.

Die Kombination aus Daten- und Funktionspolymorphie ermöglicht das späte Binden, auch dynamische Binden oder Late Binding genannt, von Objekten an einen Bezeichner zur Laufzeit.

1.4.4 UML

Die Unified Modeling Language [UML] ist eine 1996 veröffentlichte universelle Beschreibungssprache der OMG zur Konzeption und Dokumentation objektorientierter Systeme. Sie prägt mittlerweile die in der Praxis am breitesten eingesetzte Sprache zur Spezifizierung, Visualisierung und Konstruktion von Softwaresystemen. UML fördert die Entwicklung modularer Programmierung und verfolgt den Anspruch dem Verständnis eines Entwicklers, als auch dem eines Auftraggebers zu genügen. Der Entwurfsprozess mittels UML erfährt Unterstützung durch eine Reihe sogenannter CASE-Werkzeuge [Computer Aided Software Engineering], wie beispielsweise Microsofts VISIO oder Paul Hensgens Umbrello. UML erlaubt über die eigentlichen Darstellungsmöglichkeiten hinaus eine reale Codeentwicklung, auch in rekursiver Richtung. Die Modellierungssprache definiert neben anderen, folgende wichtige Strukturdiagramme, die die verschiedenen Aspekte eines Systementwurfs verdeutlichen sollen:

Klassendiagramm: Beschreibt Klassen, Interfaces, Pakete in objektorientierten Modellen sowie deren Relationen zueinander.
Objektdiagramm: Zeigt Objekte und ihre Beziehungen zu einem bestimmten Zeitpunkt.
Komponentendiagramm: Ist die grafische Darstellung eines Systems. Es zeigt neben den Komponenten selbst auch deren gegenseitige Abhängigkeiten, sowie deren Schnittstellen.
Nächste Seite >>
2.0 COM Server
<< Vorherige Seite
1.3 Middleware-Architekturen