Fachgebiete

Parallele und verteilte Systeme

Parallelität und Verteilung hängen eng miteinander zusammen: In einem verteilten System laufen auf jedem einzelnen Rechner mehrere Vorgänge parallel (echt parallel oder pseudoparallel) ab. Umgekehrt arbeitet ein Server im Rahmen eines Client-Server-Szenarios auf einem Rechner in der Regel parallel, um mehrere Clients gleichzeitig zu bedienen. Außerdem können verteilte Anwenungen, die für den Ablauf auf unterschiedlichen Rechnern vorgesehen sind, im Spezialfall auf einem einzigen Rechner parallel ausgeführt werden.

Die Entwicklung paralleler Anwendungen ist in der Regel anspruchsvoll, denn Programmcode, der bei rein sequenzieller Ausführung korrekt ist, kann im Fall einer parallelen Nutzung fehlerbehaftet sein, was für Neulinge oftmals nicht offensichtlich ist. Ein gutes Verständnis von Parallelität wird häufig im Zusammenhang mit Objektorientierung noch problematischer. Man muss begreifen lernen, dass es mehrere Objekte einer Klasse geben kann, dass aber ein einziges Objekt (quasi) gleichzeitig von mehreren Threads verwendet werden kann, d.h., dass dieselbe und unterschiedliche Methoden auf einem Objekt mehrfach parallel ausgeführt werden können. Durch den momentanen Trend im Bereich der Hardware hin zu so genannten Multicore-Architekturen kann man davon ausgehen, dass die Bedeutung der parallelen Anwendungsprogrammierung in Zukunft deutlich an Bedeutung gewinnen wird.

Bei derEntwicklung verteilter Anwendungen geht es um geeignete Kommunikationsprimitive wie synchroner oder asynchroner Nachrichtenaustausch oder verschiedene Varianten des Fern-Methodenaufrufs. Die Architektur verteilter Anwendungen ist heute eine mehrschichtige Architektur, typischer Weise bestehend aus einer grafischen Benutzeroberfläche für den Kunden, eventuell einem Web-Server, einem Anwendungs-Server und einer Datenbank.

Software-Komponenten

Der Begriff Komponente kommt vom lateinischen Wort "componere", was so viel wie "zusammensetzen" heißt. Eine Komponente ist also ein Teil eines zusammengesetzten Ganzen, wobei die Einzelteile nicht nur irgendwie zusammengestellt, sondern in funktional sinnvoller Weise miteinander verbunden worden sind.

Die Vorstellung von Komponenten im Software-Bereich entstand bereits Ende der 60er Jahre im Zusammenhang mit der sogenannten Software-Krise. Man hoffte damals, dass eine Software-Industrie für die Massenproduktion von Komponenten entstehen würde und dass diese Komponenten in den unterschiedlichsten Anwendungen wiederverwendbar wären. So wie Kinder mit denselben Bausteinen Häuser, Schiffe oder Flugzeuge bauen, sollte eine neue Anwendung lediglich durch das "Zusammenstecken" vorproduzierter Software-Komponenten entwickelt werden, wobei man dazu im Idealfall nicht einmal programmieren muss. Diese Hoffnung hat sich zumindest bis jetzt nicht erfüllt. Dennoch ist Komponenten-Software immer noch ein aktuelles Thema. So kann man beispielsweise die momentan weit verbreiteten Software-Plattformen für Enterprise Java Beans oder auch Android als Komponenten-Software sehen. Die Tatsache, dass sich das Thema Komponenten-Software schon so lange hält und kein vorübergehender "Hype" ist, wie manche andere Themen in der Informatik, zeigt, dass es wohl eine gewisse Substanz haben muss.

Analog zum Begriff objektorientierte Programmierung gibt es den Ausdruck komponentenorientierte (manchmal auch komponentenbasierte) Programmierung. Der Komponentenbegriff ist allerdings nicht ganz unproblematisch: Während es einen breiten Konsens gibt, was ein Objekt ist, ist dies für eine Komponente weit weniger klar. Eine Ursache dafür dürfte u.a. sein, dass das, was eine Komponente ist, vom verwendeten Komponenten-Framework abhängt.

Bei der Software-Entwicklung im Umfeld von Komponentensystemen geht es darum, vorhandene Komponentensysteme wie EJB, Spring oder Web-Frameworks zu nutzen oder zu erweitern. Auch das Implementieren neuer Komponentensysteme für spezifische Einsatzgebiete kommt vor.

Rainer Oechsle,  1. April 2015