11. Komponenten Grundlagen der Programmierung 1 (Java) Fachhochschule Darmstadt Haardtring 100 D-64295 Darmstadt Prof. Dr. Bernhard Humm FH Darmstadt, 10. Januar 2006
Einordnung im Kontext der Vorlesung 1. Einführung 2. Einfache Programme 3. Kontrollstrukturen 4. Objekt-Orientierung I 5. Algorithmen und Datenstrukturen I 6. Interfaces 7. Pakete 8. Parametrisierte Typen (Generics) 10. Gutes Programmieren 11. Komponenten 12. Algorithmen und Datenstrukturen II 13. Objektorientierung II 14. Rekursion 15. Design 16. Die Java Klassenbibliothek I 17. Die Java Klassenbibliothek II 9. Fehler und Ausnahmen 10.1.2006, Seite 2
Agenda Agenda Definition Konfiguration Anforderungs-Schnittstellen Beispiel Übersicht 10.1.2006, Seite 3
Definition Das Automobil: ein komplexes komponenten-orientiertes System Außensicht (Schnittstelle) des Fahrers: möglichst einfach Innensicht: komplex Außensicht (Schnittstelle) der Werkstatt: möglichst einfach 10.1.2006, Seite 4
Definition Komplexe Software-Systeme werden komponentenorientiert entworfen (Beispiel: Berechtigungskomponente) Außensicht (Nutzungssicht): operative Schnittstelle des Anwendungsprogrammierers (möglichst einfach) operative Schnittstelle B Berechtigungskomponente Berechtigungskern Admin- Schnittstelle A Berechtigung GUI Außensicht (Nutzungssicht): Schnittstelle des Administrators (möglichst einfach) R S RACF- Adapter DB-Zugriff R JDBC RACF Oracle Innensicht: komplex 10.1.2006, Seite 5
Definition Definition A software component is a unit of composition with * contractually specified interfaces and * explicit context dependencies only. A software component can be * deployed independently and is * subject to composition by third parties. C. Szyperski, Component Software, p. 34. Addison-Wesley, 1998 10.1.2006, Seite 6
Komponente: die wesentliche Einheit des Design und der Implementierung Komponenten bieten Dienste mit klar definierten Schnittstellen an, haben definierte Abhängigkeiten von Diensten anderer Komponenten, können unabhängig von anderen Komponenten entwickelt werden, können unabhängig von anderen Komponenten verwendet werden, sind beim Zusammenbau konfigurierbar, Definition machen definierte Annahmen (Wenn sich Grundannahmen ändern, wird der Aufwand hoch sein), können mit anderen Komponenten zu größeren Einheiten (z.b. Anwendungen) zusammengebaut werden, ohne die Implementierung der Komponenten zu verändern. 10.1.2006, Seite 7
Agenda Agenda Definition Konfiguration Anforderungs-Schnittstellen Beispiel Übersicht 10.1.2006, Seite 8
Konfiguration Komponenten, Schnittstellen und Konfiguration Jede Komponente exportiert (implementiert) eine oder mehrere Schnittstellen Jede Komponenten importiert beliebig viele Schnittstellen (NICHT Komponenten) Schnittstelle definiert Operationen mit Syntax, Semantik, Protokoll kann nicht-funktionale Eigenschaften fordern: Performance, Robustheit, Rechengenauigkeit beschreibt das beobachtbare Verhalten einer Komponente Konfiguration versieht eine Komponente mit Implementierungen der importierten Schnittstellen 10.1.2006, Seite 9
Konfiguration Interface + Implementation + Konfiguration Beispiel: List MyMain (Konfiguration) 2 3 MyApplication 1 List ListImpl (z.b. ArrayList) 10.1.2006, Seite 10
Konfiguration Interface + Implementation + Konfiguration public class MyApplication { private List mylist; } public MyApplication(List list) { mylist = list; }... public start() {... } public class MyMain {... public void dosomething() { List list = new ArrayList(); 1 2 } } MyApplication appl = new MyApplication(list); appl.start(..);... 3 10.1.2006, Seite 11
Agenda Agenda Definition Konfiguration Anforderungs-Schnittstellen Beispiel Übersicht 10.1.2006, Seite 12
Anforderungs-Schnittstellen Anforderungsschnittstellen Selbst bei vorbildlicher Verwendung von Schnittstellen bleiben Nachteile: Durch jedes Import-Statement handelt sich eine Komponente eine explizite Abhängigkeit zu einer anderen Komponente ein. Import der Schnittstelle! Die importierte Schnittstelle unterliegt i.a. nicht der Kontrolle des Entwicklers! Die importierte Schnittstelle ist i.a. viel breiter als die von der Komponente benötigte Funktionalität. Anforderungsschnittstellen 10.1.2006, Seite 13
Anforderungs-Schnittstellen Anforderungsschnittstellen Eine Anforderungsschnittstelle enthält genau die importierte Funktionalität einer Komponente (k), ist ein Teil der importierenden Komponente, wird mit der Schnittstelle (s) der exportierenden Komponente (h) über einen Adapter (Glue-Code) verknüpft. Der Adapter wird während der Initialisierung der Anwendung konfiguriert. Konfiguration Importeur Exporteur Adapter k s s h 10.1.2006, Seite 14
Agenda Agenda Definition Konfiguration Anforderungs-Schnittstellen Beispiel Übersicht 10.1.2006, Seite 15
Beispiel Verschicken von Mail Anforderungen: Eine Anwendung soll Mails an eine feste Adresse senden. Eine Mail besitzt nur zwei Parameter: Betreff und Textkörper Keine Verteiler, kein Empfang, keine Anhänge, keine Verwaltung der versandten Mails. 10.1.2006, Seite 16
javax.mail Hat alles, was man braucht. Aber Vor lauter Bäumen sieht man den Wald nicht Beispiel 10.1.2006, Seite 17
Beispiel Komponentendiagramm: javax.mail verbergen MyMain (Konfiguration) 4 2 3 1 MyApplication Mail MailImpl javax.mail MailAdmin 10.1.2006, Seite 18
Beispiel Interface und Verwendung public interface Mail { public void send(string subject, String content); } 1 public class MyApplication { private Mail port; public MyApplication(.. IMailPort p,..) { port = p;... }.. public void start() {... port.send("hi Otto", "alles klar?"); } } 2 10.1.2006, Seite 19
Beispiel Implementation des Interface public class MailImpl implements Mail { private String mailaddress; 3 public MailImpl(String address) { mailaddress = addr; } } public void send(string subject, String content) { // komplizierte Aufrufe an die echte Mail } 10.1.2006, Seite 20
Beispiel Konfiguration public class MyMain { public MyMain(.. ) { 4 } }.. Mail port = new MailImpl(...) (...); MyApplication appl = new MyApplication(port port); appl.start(); 10.1.2006, Seite 21
Agenda Agenda Definition Konfiguration Anforderungs-Schnittstellen Beispiel Übersicht 10.1.2006, Seite 22
Übersicht Komponenten und Packages Java bietet (wie die meisten aktuellen Programmiersprachen) keine explizite Unterstützung für Komponenten Packages können für die Implementierung von Komponenten verwenden werden 10.1.2006, Seite 23
Übersicht Komponenten im Zusammenspiel Konfiguration U S A S' D C V T B T' E Das alles definiert C und das E und das D 10.1.2006, Seite 24
Übersicht Entkopplung über Schnittstellen: verschiedene Spielweisen Standardschnittstelle Importeur Exporteur angebotene Schnittstelle Importeur Exporteur angeforderte Schnittstelle Importeur Exporteur angeforderte Schnittstelle angebotene Schnittstelle Importeur Adapter Exporteur 10.1.2006, Seite 25