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
10. Gutes Programmieren
2. Einfache Programme
11. Komponenten
3. Kontrollstrukturen
12. Algorithmen und Datenstrukturen II
4. Objekt-Orientierung I
13. Objektorientierung II
5. Algorithmen und Datenstrukturen I
14. Rekursion
6. Interfaces
15. Design
7. Pakete
16. Die Java Klassenbibliothek I
8. Parametrisierte Typen (Generics)
17. Die Java Klassenbibliothek II
9. Fehler und Ausnahmen
Bernhard Humm: „Grundlagen der Programmierung I (Java)“. FH Darmstadt, WS 2005/2006
10.1.2006, Seite 2
Agenda
Agenda
Definition Definition Konfiguration Anforderungs-Schnittstellen Beispiel Übersicht
Bernhard Humm: „Grundlagen der Programmierung I (Java)“. FH Darmstadt, WS 2005/2006
10.1.2006, Seite 3
Definition
Das Automobil: ein komplexes komponenten-orientiertes System
Außensicht (Schnittstelle) des Fahrers: möglichst einfach Innensicht: komplex
Bernhard Humm: „Grundlagen der Programmierung I (Java)“. FH Darmstadt, WS 2005/2006
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)
Berechtigungskomponente operative Schnittstelle
B
AdminSchnittstelle
Berechtigungskern
A
Berechtigung GUI
R‘
S
RACFAdapter
DB-Zugriff
R
JDBC
RACF
Oracle
Außensicht (Nutzungssicht): Schnittstelle des Administrators (möglichst einfach)
Innensicht: komplex Bernhard Humm: „Grundlagen der Programmierung I (Java)“. FH Darmstadt, WS 2005/2006
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
Bernhard Humm: „Grundlagen der Programmierung I (Java)“. FH Darmstadt, WS 2005/2006
10.1.2006, Seite 6
Definition
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, – 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.
Bernhard Humm: „Grundlagen der Programmierung I (Java)“. FH Darmstadt, WS 2005/2006
10.1.2006, Seite 7
Agenda
Agenda
Definition Konfiguration Konfiguration Anforderungs-Schnittstellen Beispiel Übersicht
Bernhard Humm: „Grundlagen der Programmierung I (Java)“. FH Darmstadt, WS 2005/2006
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
Bernhard Humm: „Grundlagen der Programmierung I (Java)“. FH Darmstadt, WS 2005/2006
10.1.2006, Seite 9
Konfiguration
Interface + Implementation + Konfiguration Beispiel: List
MyMain (Konfiguration)
2
3
1
MyApplication
List
Bernhard Humm: „Grundlagen der Programmierung I (Java)“. FH Darmstadt, WS 2005/2006
ListImpl (z.B. ArrayList)
10.1.2006, Seite 10
Konfiguration
Interface + Implementation + Konfiguration public class MyApplication { private List myList;
1
public MyApplication(List list) { myList = list; } ... public start() { ... } } public class MyMain { ... public void doSomething() { List list = new ArrayList();
2
MyApplication appl = new MyApplication(list); appl.start(..);
3
... } } Bernhard Humm: „Grundlagen der Programmierung I (Java)“. FH Darmstadt, WS 2005/2006
10.1.2006, Seite 11
Agenda
Agenda
Definition Konfiguration Anforderungs-Schnittstellen Anforderungs-Schnittstellen Beispiel Übersicht
Bernhard Humm: „Grundlagen der Programmierung I (Java)“. FH Darmstadt, WS 2005/2006
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
Bernhard Humm: „Grundlagen der Programmierung I (Java)“. FH Darmstadt, WS 2005/2006
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 Exporteur
k
s‘
Adapter
Importeur
Bernhard Humm: „Grundlagen der Programmierung I (Java)“. FH Darmstadt, WS 2005/2006
s
h
10.1.2006, Seite 14
Agenda
Agenda
Definition Konfiguration Anforderungs-Schnittstellen Beispiel Beispiel Übersicht
Bernhard Humm: „Grundlagen der Programmierung I (Java)“. FH Darmstadt, WS 2005/2006
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.
Bernhard Humm: „Grundlagen der Programmierung I (Java)“. FH Darmstadt, WS 2005/2006
10.1.2006, Seite 16
Beispiel
javax.mail Hat alles, was man braucht. Aber… Vor lauter Bäumen sieht man den Wald nicht
Bernhard Humm: „Grundlagen der Programmierung I (Java)“. FH Darmstadt, WS 2005/2006
10.1.2006, Seite 17
Beispiel
Komponentendiagramm: javax.mail verbergen
4 MyMain (Konfiguration)
2
3 1 MyApplication
Mail
MailImpl
javax.mail
MailAdmin
Bernhard Humm: „Grundlagen der Programmierung I (Java)“. FH Darmstadt, WS 2005/2006
10.1.2006, Seite 18
Beispiel
Interface und Verwendung public interface Mail { public void send(String subject, String content); send }
1
public class MyApplication { private Mail port; port public MyApplication( .. IMailPort p, ..) { port = p; p ... } .. public void start() { ... port.send("Hi Otto", "alles klar?"); port.send } }
2
Bernhard Humm: „Grundlagen der Programmierung I (Java)“. FH Darmstadt, WS 2005/2006
10.1.2006, Seite 19
Beispiel
Implementation des Interface
public class MailImpl implements Mail { private String mailAddress;
3
public MailImpl(String MailImpl address) { mailAddress = addr; } public void send(String subject, String content) { send // komplizierte Aufrufe an die echte Mail } }
Bernhard Humm: „Grundlagen der Programmierung I (Java)“. FH Darmstadt, WS 2005/2006
10.1.2006, Seite 20
Beispiel
Konfiguration
public class MyMain {
4
public MyMain( .. ) { Mail port = new MailImpl(...) MailImpl(...); (...) MyApplication appl = new MyApplication(port port); port appl.start(); } .. }
Bernhard Humm: „Grundlagen der Programmierung I (Java)“. FH Darmstadt, WS 2005/2006
10.1.2006, Seite 21
Agenda
Agenda
Definition Konfiguration Anforderungs-Schnittstellen Beispiel Übersicht Übersicht
Bernhard Humm: „Grundlagen der Programmierung I (Java)“. FH Darmstadt, WS 2005/2006
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
Bernhard Humm: „Grundlagen der Programmierung I (Java)“. FH Darmstadt, WS 2005/2006
10.1.2006, Seite 23
Übersicht
Komponenten im Zusammenspiel
Konfiguration
U
S
A
S'
D
T
B
T'
E
C V
Das alles definiert C
Bernhard Humm: „Grundlagen der Programmierung I (Java)“. FH Darmstadt, WS 2005/2006
und das E
und das D
10.1.2006, Seite 24
Übersicht
Entkopplung über Schnittstellen: verschiedene Spielweisen Standardschnittstelle
Importeur
Exporteur
angebotene Schnittstelle
Exporteur
Importeur
angeforderte Schnittstelle
Exporteur
Importeur
angebotene Schnittstelle
angeforderte Schnittstelle
Importeur
Adapter
Bernhard Humm: „Grundlagen der Programmierung I (Java)“. FH Darmstadt, WS 2005/2006
Exporteur 10.1.2006, Seite 25