11. Komponenten Grundlagen der Programmierung 1 (Java)

10. Jan. 2006 ... Definition. Konfiguration. Anforderungs-Schnittstellen. Beispiel. Übersicht. Seite 3 . 10.1.2006,. Bernhard Humm: „Grundlagen der Pr...

15 downloads 606 Views 771KB Size
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