Komponenten ermöglichen eine Strukturierung von komplexen Software-Systemen. Unter einer Software-Komponente versteht man ein Teil einer Software, die über Schnittstellen eine kohärente Funktionalität darlegt und die durch eine Kapselung ihrer Implementierung eine gewisse Eigenständigkeit bietet. Die umfassende Verwendung von Komponenten wirkt sich sowohl wirtschaftlich wie auch auf die angewendeten Entwicklungsprozesse aus. Dabei sind mögliche Vorteile u.a. geringere Kosten durch die schnellere Entwicklung, eine höhere Qualität oder eine bessere Erweiterbarkeit und Anpassbarkeit einer Software.
Ein Komponentenmodell definiert einen Rahmen für die Entwicklung und Ausführung von Komponenten. Im Zusammenhang mit dem Komponentenmodell werden noch die Begriffe Komponenten-Umgebung und Komponenten-Architektur unterschieden. Einige bekannte Komponentenmodelle sind: JavaBeans, CORBA, ActiveX/(D) COM, Enterprise JavaBeans, .NET oder das von der OSGi spezifizierte Komponentenmodell. Die folgenden Erläuterungen berücksichtigen die Sicht einer singulären Software-Komponente und eines übergeordneten Komponentenmodells.
Der Begriff der Software-Komponente wird in der Literatur häufig in Abhängigkeit vom Kontext mit unterschiedlicher Bedeutung versehen. Deshalb wird an dieser Stelle im allgemeinen Sinne eine Software-Komponente als eine zusammengesetzte Einheit mit vertraglich spezifizierten Schnittstellen in ihrem jeweiligen Kontext verstanden. Dabei kann eine Software-Komponente immer auch unabhängig von Dritten verwendet werden und wiederum auch Bestandteil anderer Komponenten sein. Software-Komponenten haben eine kohärente Funktionalität und durch deren Kapselung in einer Implementierung besitzen Komponenten eine authentische Eigenständigkeit, die mit einer losen Kopplung an ihre Umgebung gebunden ist. Im Folgenden eine Zusammenstellung der Charakteristika von Komponenten:
Ein im Zusammenhang mit Komponenten häufig verwendeter Begriff ist die sogenannte Granularität. Aus Sicht der Komponenten unterscheidet man im Allgemeinen:
- Feinkörnige Granularität für eher passive Komponenten.
- Mittelkörnige Granularität für aktive Komponenten, die Interaktionen und die Wiederverwendung von komplexeren Funktionen er-möglichen.
- Grobkörnige Granularität für aktive Komponenten deren Funktionen zwar direkt wiederverwendet werden können, jedoch komplexe Schnittstellen und eine aufwändige Parametrisierung vorweisen. Auch sind grobkörnige Komponenten zumeist mit steuernden oder kontrollierenden Funktionen ausgestattet.
- Die Zusammensetzung und Verknüpfung von Komponenten.
- Die Kommunikation und das Zusammenwirken von Komponenten.
- Welche Mechanismen und Dienste - zum Beispiel für Verteilung, Persistenz oder Sicherheit - eine Komponente von seiner Infrastruktur bereitgestellt werden.
Auf einige bekannte Komponentenmodelle soll hier noch skizzenhaft näher eingegangen
werden:
- Das sind sogenannte visuelle manipulierbare Java-Komponenten, wobei eine Bean jeweils durch eine Klasse implementiert wird.
- Die Schnittstelle wird gemäß den Vorgaben gestaltet.
- Hauptsächlich für GUI-Elemente mittlerer Granularität.
- Verteilung sowie Verbunddokumente werden nicht direkt unterstützt.
- Common Object Request Broker Architecture ist Bestandteil der Object Management Architecture (OMA), wurde von der Object Management Group (OMG) spezifiziert und findet Anwendung in verteilten, heterogenen Systemen.
- Es sind Objektmodell und Object Request Broker (ORB) der Infrastruktur implementiert ( Middleware).
- Schnittstellenbeschreibung ist unabhängig von einer bestimmten Programmiersprache in CORBA-IDL (Interface Definition Language) definiert.
- Ist ein Server-basiertes Komponentenmodell, das plattformunabhängig und für verteilte Systeme gedacht ist.
- Ist Java-spezifisch und über CORBA sind auch heterogene Komponenten möglich.
- Die Spezifikation definiert Basisdienste u.a. für Persistenz, Sicherheit sowie Kommunikation.