Komponenten spielen in vielen Bereichen der Technik eine bedeutende Rolle. Die modulare Bauweise ermöglicht ein individuelles Zusammenstellen und Erweitern verschiedenster Systeme. Es liegt deshalb nahe, dieses Konzept auch auf die Software-Entwicklung anzuwenden. Einige Ziele, die damit erreicht werden sollen, sind: Wiederverwendbarkeit von Software. Bessere Wartbarkeit der Applikationen durch vereinfachte Analyse und Erweiterbarkeit. Die Entwicklung verteilter Anwendungen, die durch den Boom des Internets an Bedeutung gewonnen haben, soll durch Software-Komponenten noch attraktiver werden. Vereinfachung der Programmierung durch Verwendung von Komponenten. Programme können aus einer beliebigen Anordnung von Komponenten erstellt werden. Die weitere Ausbreitung der visuellen Programmierung, bei der kaum eine Programmzeile mehr per Hand geschrieben werden müsste, könnte eine mögliche Konsequenz sein. Betriebssysteme können als komponentenunterstützende Umgebungen aufgefasst werden [Szyper97]. Sie dienen als gemeinsame Grundlage für alle Komponenten z. B. des Dateisystems. Die Komponenten eines Betriebssystems sind die Anwendungen. Von ähnlichem Charakter ist das Plug-In-Konzept. Mit Plug-Ins lassen sich bspw. Internet-Browser wie Netscape um neue Eigenschaften erweitern. An diesen beiden Beispielen lässt sich bereits ein Unterschied zwischen Software-Komponenten und Klassen, wie sie in der OOP verwendet werden, erkennen. Während Klassen in den seltensten Fällen eigenständige Programmteile sind, trifft dies für Komponenten zu. Die Integration von Klassen in bestehende oder entstehende Programme ist, sofern überhaupt möglich, Programmierern vorbehalten. Die Integration von Komponenten (wenn bspw. ein Plug-In als Komponente aufgefasst wird) kann dagegen sogar von Endbenutzern vorgenommen werden. Allgemein setzt die sinnvolle Verwendung von Klassen aber ein Fachwissen voraus. Aus den technischen Vorteilen, die sich durch Komponenten ergeben, entstehen darüber hinaus auch wirtschaftliche Vorteile. Das Konzept erlaubt eine schnellere Entwicklung von Software, da kommerzielle und selbst erstellte Komponenten zu Programmen zusammengefügt werden können. Anstatt neue komplette Versionen der Software zu erstellen, können einzelne Komponenten durch verbesserte ersetzt werden („Evolution ersetzt Revolution" [Szyper97]). Wirtschaftliche Aspekte spielen bei der Einführung von Komponenten-Software allgemein eine wichtige Rolle, da sie der Vereinfachung dienen und unter Kostenaspekten von Nutzen sind. Um zu gewährleisten, dass Komponenten nebeneinander und miteinander funktionieren und interagieren, ist die Entwicklung und Einhaltung gewisser Standards notwendig. Werden diese Standards eingehalten, so können Komponenten verschiedener Hersteller austauschbar verwendet werden. Dazu können die Konzepte der OOP passend ergänzt werden. Eines der wesentlichen Konzepte der OOP, das für die Komponenten-orientierte Programmierung (Component Oriented Programming, COP) unabdingbar ist, ist die Polymorphie, die eng mit der Vererbung verknüpft ist (Siehe Polymorphie.). Auch die oben betrachtete Kapselung (Siehe Kapselung) ist für Software-Komponenten bedeutsam. Ebenso wie in der OOP spielen nach außen hin sichtbare Schnittstellen in der COP eine entscheidende Rolle. Allerdings wird es sich bei Software-Komponenten üblicherweise um Subsysteme handeln, die ein bestehendes System erweitern, das als Grundlage dient. Unterstützt die Sprache lediglich die Kapselung von Objekten, so kann es bei der Verwendung vieler Objekte für eine Komponente sehr schwierig werden, diese sauber von anderen abzugrenzen. Durch das Zusammenfassen der für eine Komponente benötigten Objekte können die Vorbedingungen, welche Objekte und Komponenten vorhanden sein müssen, besser formuliert und überprüft werden. Bezüglich der Kapselung haben Software-Komponenten deswegen Black-Box-Charakter. Verschiedene Firmen haben in den letzten Jahren Produkte zur Entwicklung von Software-Komponenten auf den Markt gebracht, u. a. Microsoft mit DCOM [Chap96], OLE [Chap96] und ActiveX [Chap96], die Object Management Group (OMG) mit CORBA und OMA [Omg99] und Sun mit Java und JavaBeans [Java99]. Hierzu sei auf Kapitel 9 verwiesen, in dem die Konzepte und die Ansatzmöglichkeiten von JavaBeans erläutert werden.