Entwurf

Werbung
Überblick
Dienstleistungen
Bausteine
Methodiken
Entwurfsmuster
Teil V
Entwurf
201
Überblick
Dienstleistungen
Bausteine
Methodiken
Entwurfsmuster
5.1 Überblick: Entwurf
• aus Anforderungen (Pflichtenheft, Produktmodell (OOA))
Software-Architektur und Spezifikation der Systemkomponenten
entwerfen
• Software-Architektur:
• Zerlegung in Systemkomponenten und Beziehungen hierzwischen
• Systemkomponente: Klasse, Modul, . . .
• bei vielen Komponenten ggfs. Strukturierung in Schichten
202
Überblick
Dienstleistungen
Bausteine
Methodiken
Entwurfsmuster
Schichtenarchitektur
• innerhalb von Schicht: beliebige Zugriffe zwischen Komponenten
• zwischen Schichten:
• Zugriff nur auf niedrigere Schichten
• Ordnung z.B. strikt, linear (Bsp.: OSI) oder baumartig
• enge Schnittstellen
• Vor- und Nachteile:
• übersichtlich
• gute Wiederverwendbarkeit, Wartbarkeit und Testbarkeit
• geringer Effizienzverlust (z.B. Fehlermeldungen durchreichen)
• typisch: ≥ 3 Schichten
203
Überblick
Dienstleistungen
Bausteine
Methodiken
Entwurfsmuster
Schichtenarchitektur: Typische Beispiele
Web−Client
Präsentation
HTML
Browser
Server
Client
Webzugang
Präsentation
JSP, Servlets, ASP, PHP
Swing, VB
Geschäftslogik
EJB, .NET, PHP
Datenhaltung
RDBMS
204
Überblick
Dienstleistungen
Bausteine
Methodiken
Entwurfsmuster
Entwurfsentscheidungen
• sequentiell ↔ parallel/verteilt/nebenläufig?
Bsp.: verteilt → Client/Server
• ein Benutzer ↔ mehrere Benutzer?
→ Zugriffsrechte, Transaktionen?
• Zuordnung der Schichten zu Client bzw. Server
z.B. Client: Schichten 1+2, Server: 3, oder
Client: 1, Server: 2+3, oder: C: 1+2a, S: 2b+3
• unterschiedliche Plattformen nötig? → z.B. welche Sprache?
• Wiederverwendung vorhandener Bausteine?
205
Überblick
Dienstleistungen
Bausteine
Methodiken
Entwurfsmuster
Entwurfsentscheidungen (Fortsetzung)
• ob und welche Hilfesysteme? (Hypertext?)
• ob und welches DBMS (relational, OO)?
• wie Benutzerschnittstelle? (GUI, . . . )
• Einbinden von sonstigen Dienstleistungen?
z.B. Business Rules Engine wie Drools (→ KI)
• Ziel: möglichst viele und mächtige Dienstleistungen in Anspruch
nehmen → Kostensenkung
206
Überblick
Dienstleistungen
Bausteine
Methodiken
Entwurfsmuster
5.2 Einbinden von Dienstleistungen
5.2.1 Realisierung der Benutzeroberfläche
1. nicht graphisch
2. GUI (graphical user interface)
z.B. mit Frameworks wie Java AWT, Swing oder SWT
3. HTML mit Formular und ggf. AJAX
unter Verwendung von Servlets, JSP, JSF, . . .
4. . . .
207
Überblick
Dienstleistungen
Bausteine
Methodiken
Entwurfsmuster
Graphische Benutzerschnittstellen (GUIs)
• Bibliothek zur Unterstützung von Fenstern, Menüs, Piktogrammen,
Schaltflächen, Maus, . . .
• GUI bemerkt, interpretiert und leitet Ereignisse weiter an
Anwendung
• Anwendung reagiert auf Ereignisse
• Ereignisreihenfolge unvorhersehbar
• → Entwurf: verwendet unabhängige Systemkomponenten
• Kommunikation zwischen GUI und Anwendung über Callbacks:
• Anwendung registriert Ereignisse,
über die sie informiert werden will
• Callback aktiviert bei Ereignis zugehörige Anwendungsmethode
• Verbindung von Anwendung zu GUI über API
208
Überblick
Dienstleistungen
Bausteine
Methodiken
Entwurfsmuster
Einsatz eines GUI
Programmierer
Anwendung 3
Anwendung 3
GUI
Anwendung 2
Anwendung 1
Anwendung 1
API
209
Überblick
Dienstleistungen
Bausteine
Methodiken
Entwurfsmuster
Callback-Mechanismus mit Listen
Benutzeraktion
callback−Listen
Anwendung
callback
direkte Verarbeitung durch GUI
Proc 1
sizing event
Fenster
FU1
A
FU2
menucommand event
B
button
menu
Menuevent(FU1)
FU1
Proc 1
case A: ...
FU2
...
Proc 2
...
button
event
case B: ...
...
Proc 3
button
press
on Buttonclick:
Proc 3
if ...
release Proc 4
...
...
Proc 5
InputControl::Keydown
key event
if (ASCIIChar(e)==X)
key
Event− und
down
Proc 5
Translation−
up
...
Proc 6
...
Manager
...
210
Überblick
Dienstleistungen
Bausteine
Methodiken
Entwurfsmuster
Benutzerschnittstellen-Frameworks (Bsp. Java AWT)
Object
...
AWTEventMulticaster
...
Component
FlowLayout
......
...
ActionListener
Button
Label
TextComponent
...
Mai
...
Window
...
1
GUI
Programmierer erzeugt
4
Abbruch
Neu
...
TextField
Kunde
Name
...
Container
:Frame
Objektnetz
:Label
Text="Name"
3
2
Mai
:Button
label= "Neu"
Anwendung
:Button
Kunde
label= "Abbruch"
Name
5 "Mai"
:TextField
text="Mai"
...
Frame
6
Mai
Init
Kunde
Name= "Mai"
211
Überblick
Dienstleistungen
Bausteine
Methodiken
Entwurfsmuster
Beispiel: Java AWT
import java.awt.*;
import java.awt.event.*;
public class KundenGUI extends Frame
implements ActionListener{
protected Kunde kunde = new Kunde();
private Button Neu
= new Button("Neu");
private Button Abbruch = new Button("Abbruch");
private Label textlabel = new Label("Name");
private TextField Namensfeld = new TextField(10);
public KundenGUI(){...}
public void actionPerformed(ActionEvent event){...}
static public void main(String[] args){
new KundenGUI();}
}
212
Überblick
Dienstleistungen
Bausteine
Methodiken
Entwurfsmuster
Beispiel: Java AWT (Fortsetzung)
public KundenGUI(){
public class Kunde {
super("KundenGUI");
protected String Name;
setLayout(new FlowLayout());
public Kunde(){;}
Neu.addActionListener(this);
public void Init(String n){
Abbruch.addActionListener(this);
Name = n;}
Namensfeld.setEnabled(true);
}
Namensfeld.setText("");
add(textlabel);
add(Abbruch);
add(Namensfeld);
add(Neu);
setBounds(400,400,150,200);
setVisible(true);}
public void actionPerformed(ActionEvent event){
try{
if (event.getSource().equals(Neu))
kunde.Init(Namensfeld.getText());
else if (event.getSource().equals(Abbruch))
dispose();}
catch (Exception e){e.printStackTrace();}}
213
Überblick
Dienstleistungen
Bausteine
Methodiken
Entwurfsmuster
5.2.2 Realisierung der Datenhaltung
• Dateien: nur geeignet bei Daten, die
• einfach strukturiert sind
• nicht von mehreren Systemen/Benutzern gleichzeitig verwendet
• einfache (und unveränderliche) Zugriffsmechanismen haben und
• kein (kompliziertes) Recovery nach Systemabsturz erfordern
• relationales DBMS: heute üblich, → Datenbank-Vorlesungen
• OO-DBMS: bei OO geeignet, aber gescheitert (?!)
• objekt-relationales DBMS: Effizienz von RDBMS, Funktionalität
vgl. OO-DBMS
• deduktives DBMS:
geeignet, wenn umfangreiche Datenhaltung und Inferenz benötigt
(ggfs. Alternative zu: relationalem DBMS + Expertensystem)
214
Überblick
Dienstleistungen
Bausteine
Methodiken
Entwurfsmuster
5.2.3 Verteilte Anwendungen
• → Vorlesungen Verteilte Systeme, EAI
• Verbindung der Prozesse z.B. durch
• Sockets (TCP/IP, . . . )
• CORBA (bei Client-Server-Architektur)
• RMI, EJB (in Java EE)
• .NET, DCOM, . . .
• Web-Services auf Basis von SOAP, WSDL, UDDI
• RESTful Web-Services auf Basis von HTTP (oft mit JSON)
• Message Oriented Middleware
215
Überblick
Dienstleistungen
Bausteine
Methodiken
Entwurfsmuster
Entfernte Methodenaufrufe
Anwendung
Ergebnis
Aufruf
s.m(args)
Stumpf s
Demarshalling
Marshalling
...
Objekt o
o.m(args)
Ergebnis
Verteiler
Demarshalling
Marshalling
Ergebnis
216
Überblick
Dienstleistungen
Bausteine
Methodiken
Entwurfsmuster
5.2.3.1 Enterprise JavaBeans
• Java-basierte Middleware für verteilte OO-Anwendungen
• Komponenten (Beans) in EJB-Container (auf Server) bereitgestellt
• EJB Container: z.B. IBM WebSphere, BEA WebLogic, JBoss . . .
• Dienste des Containers: (u.a.)
• Verwaltung und Suche von Beans (basierend auf JNDI)
• Transaktionen (basierend auf JTS und JTA)
• Persistenz
• Zugriff auf entfernte Objekte (basierend auf RMI/IIOP bzw. JMS)
• Ressourcenverwaltung (Instance Pooling, Bean-Ein-/Auslagerung)
• Autorisierung und Authentifizierung (basierend auf JAAS)
• Vorteil: Basisdienste bei Anwendungsentwicklung “geschenkt”
• Nachteil: Overhead; keine Threads, keine BS-Aufrufe (wegen
Transaktionen)
217
Überblick
Dienstleistungen
Bausteine
Methodiken
Entwurfsmuster
Wo werden EJBs eingesetzt?
• typische 4-Schichten-Architektur:
• Client Tier (HTML)
• Web Tier (JSP,Servlets)
• Business Tier (EJB)
• EIS Tier (DB)
218
Überblick
Dienstleistungen
Bausteine
Methodiken
Entwurfsmuster
Arten von Beans
• Entity: kapselt persistente Daten; Zugriff (z.B.) über Session Bean
• Session-Bean: realisiert (z.B.) Use-Case
nicht persistent; Zugriff basierend auf RMI (z.B. aus Servlet)
• zustandslos: effizient, gemeinsam nutzbar durch mehrere Clients
• zustandsbehaftet: exklusiv für einen Client;
Zustand wird über eine Sitzung hinweg bewahrt; bei Absturz
verloren
• Message-driven Bean
219
Überblick
Dienstleistungen
Bausteine
Methodiken
Entwurfsmuster
Aufbau eines Enterprise Java Beans
• Remote Interface (bzw. Local Interface bei ausschließlich lokalem
Zugriff): “Business”-Methoden (nur bei Session-Beans)
• Verwaltungsoperationen (ab EJB 3 transparent)
(z.B. Erzeugen, Löschen, Aktivieren, Passivieren)
• Bean-Klasse:
Implementierung der Business-Methoden (ab EJB 3: “POJO”)
• optionaler Deployment Descriptor:
• XML-Dokument zur Konfiguration eines Beans u.a. bzgl.
Persistenz, Transaktionen und Primärschlüssel
• ab EJB 3 i.d.R. durch Annotationen in Bean-Klasse ersetzt
• alle zusammengefasst in .jar Archiv-Datei (Packaging)
220
Überblick
Dienstleistungen
Bausteine
Methodiken
Entwurfsmuster
EJB 3.0-Programmiermodell
EJB−Container JVM
Remote
Local
Client
Client
Middleware−Dienste:
− Lebenszyklus−Management
− Persistenz
−Zugriffsschutz
Business
Container−erzeugte
Interface
Wrapper−Klasse
−Transaktionen
...
EJB−Klasse
221
Überblick
Dienstleistungen
Bausteine
Methodiken
Entwurfsmuster
Deployment
• Bean wird gemäß Deployment-Angaben konfiguriert und
im Container bereitgestellt
• hierbei werden Hilfsklassen zur Einbindung der Bean-Klasse in
den Container automatisch erstellt und compiliert (u.a. Stubs,
Skelette)
• wahlweise komfortable Container-verwaltete Persistenz oder
flexiblere Bean-verwaltete Persistenz (mit expliziten
JDBC-Aufrufen)
• wahlweise Container- oder Bean-verwaltete Transaktionen
222
Überblick
Dienstleistungen
Bausteine
Methodiken
Entwurfsmuster
Beispielanwendung: Bibliothek
Ausleihe
Exemplar
0..1
datum
1
inventarnr
Medium
*
1
bezeichnung
*
1
Benutzer
Buch
CD
name
autor
interpret
adresse
isbn
asin
223
Überblick
Dienstleistungen
Bausteine
Methodiken
Entwurfsmuster
Entity: Klasse Benutzer
package bibliothek;
import java.util.ArrayList;
import java.util.Collection;
import javax.persistence.*;
@Entity
public class Benutzer implements java.io.Serializable {
protected int bid;
/** Primärschlüssel */
protected String name;
protected String adresse;
protected Collection<Ausleihe> ausleihen = new ArrayList<Ausleihe>();
@Id @GeneratedValue(strategy=GenerationType.AUTO)
public int getBid(){return bid;}
public void setBid(int id){bid = id;}
public String getName(){return name;}
public void setName(String name){this.name = name;}
public String getAdresse(){return adresse;}
public void setAdresse(String adresse){this.adresse = adresse;}
@OneToMany(cascade = CascadeType.ALL, mappedBy="benutzer")
public Collection<Ausleihe> getAusleihen(){return
ausleihen;}
public void setAusleihen(Collection<Ausleihe> coll){ausleihen = coll;}
public void addAusleihe(Ausleihe vorgang){ausleihen.add(vorgang);}
public void removeAusleihe(Ausleihe vorgang){ausleihen.remove(vorgang);}
}
224
Überblick
Dienstleistungen
Bausteine
Methodiken
Entwurfsmuster
Beispiel: Session-Bean
...
@Remote
public interface BenutzerFassade {
public void benutzerAnlegen(String name, String adresse) throws Exception;
}
...
@PermitAll
@Stateless
public class Benutzerverwaltung implements BenutzerFassade{
@PersistenceContext
private EntityManager em;
@TransactionAttribute(TransactionAttributeType.REQUIRED)
public void benutzerAnlegen(String name, String adresse) throws Exception{
Query q = em.createQuery("SELECT COUNT(*) FROM Benutzer b WHERE b.name = :n");
q.setParameter("n",name);
if (((Long) q.getSingleResult()).intValue() == 0){
Benutzer benutzer = new Benutzer();
benutzer.setName(name);
benutzer.setAdresse(adresse);
em.persist(benutzer);}
else throw new Exception("Name bereits verwendet");
}
}
225
Überblick
Dienstleistungen
Bausteine
Methodiken
Entwurfsmuster
5.2.3.2 Webapplikationen
Web−Client
Server
HTTP mit HTML+Cookies
Präsentation
HTML
+ JavaScript?
+Java−Applets?
Browser
HTTP mit Formularinhalt
und Cookie
Webzugang
JSP, Servlets, ASP, PHP
Geschäftslogik
EJB, PHP, ...
ggf. JDBC
Datenhaltung
Cookies
RDBMS
226
Überblick
Dienstleistungen
Bausteine
Methodiken
Entwurfsmuster
5.2.3.2.1 HTML
• “Markup”-Sprache zur Beschreibung von Struktur (→ Tags), Inhalt
und ggf. Layout einer Webseite
• bietet u.a.: Text, Listen, Tabellen, Verweise, Bilder, Frames,
Formulare
• für jede HTML-Version eigene vordefinierte
Dokumenten-Typ-Definition (DTD)
<!DOCTYPE HTML PUBLIC //W3C//DTD HTML 4.0 Transitional//EN»
• Aufbau eines HTML-Dokuments:
ASCII-Datei mit Inhalt, Tags und Meta-Informationen u.a. für
Suchmaschinen
• Meta-Informationen: Autor, Schlüsselworte, verwendeter Editor,
Klassifikation
227
Überblick
Dienstleistungen
Bausteine
Methodiken
Entwurfsmuster
Die wichtigsten Tags
Tag-Name
Funktion
<HTML> . . . </HTML>
deklariert eine HTML-Seite
<HEAD> . . . </HEAD>
enthält den Kopf der HTML-Seite
<TITLE> . . . </TITLE>
definiert den Titel der Seite
<BODY> . . . </BODY>
enthält den Körper der HTML-Seite
<Hn> . . . </Hn>
definiert eine Überschrift der Ebene n
<B> . . . </B>
setzt . . . in Fett-Schrift
<I> . . . </I>
setzt . . . in Kursiv-Schrift
<UL> . . . </UL> bzw.
beschränkt eine ungeordnete Liste,
<OL> . . . </OL>
bzw. eine nummerierte Liste
<LI> . . . </LI>
Listenelement
<P> . . . </P>
Absatz
<HR>
fügt eine horizontale Linie ein
<PRE> . . . </PRE>
vorformatierter Text; wird nicht umformatiert
<IMG SRC="Adresse"/ >
lädt ein Bild
<A HREF="URL"> . . . </A>
fügt einen Link mit der Beschreibung . . . ein
<!-- . . . -->
Kommentar
228
Überblick
Dienstleistungen
Bausteine
Methodiken
Entwurfsmuster
Neuerungen in HTML5
• neue semantische Markup-Elemente wie <section>,
<article>, <header>, <footer>
• Schlüssel-Wert-Paare (Microdata) für Suchmachinen
• neue validierbare input-Typen wie tel, url, email, number für
Formulare
• Client-seitiger Speicherplatz (Web Storage, Indexed Database
(inkl. Transaktionen), File API, Web SQL) ggf. auch über Dauer
einer Sitzung hinaus
• Möglichkeit von Offline-Applikationen
• Gerätezugriff insbesondere für mobile Endgeräte
(u.a. Geolocation API)
229
Überblick
Dienstleistungen
Bausteine
Methodiken
Entwurfsmuster
Neuerungen in HTML5 (2)
• Kommunikation über Websockets und Cross Document
Messaging
• Multimedia (Videos mit WebM, OGG, H.264; Audio) ohne Plug-ins
• 2D- und 3D-Graphiken (u.a. SVG), MathML
• Web Workers erlauben JavaScript-Berechnungen im Hintergrund
(→ Threading)
• XMLHttpRequest Level 2 (→ Ajax)
• durch CSS3 verbessertes Geräte-abhängiges Layout
230
Überblick
Dienstleistungen
Bausteine
Methodiken
Entwurfsmuster
Sitzungen
• HTTP ist zustandslos
• Rekonstruktion einer Sitzung aus Einzelzugriffen unmöglich
• Trick: Sitzungsinformationen in versteckten Formularfeldern (s.u.),
verlängerten URLs oder Cookies
231
Überblick
Dienstleistungen
Bausteine
Methodiken
Entwurfsmuster
5.2.3.2.2 Cascading Style Sheets (CSS)
• Layout-Eigenschaften werden durch Tags festgelegt, z.B.
<H2 ALIGN=center><FONT COLOR=red>Einleitung</FONT></H2>
• um diese nicht bei jedem Textelement wiederholen zu müssen,
können Style-Sheets festgelegt werden, z.B.
H2 text-align: center; color: red
• festlegbare Eigenschaften: Farbe, Font-Familie, Font-Stil (z.B. italic),
Font-Größe, Zeichenabstand, Wortabstand, Text-Dekoration (z.B.
underline, blink), horizontale und vertikale Ausrichtung und Einrückung,
Hintergrund-Farbe bzw. -Bild usw.
• Einbindung z.B. durch <LINK>-Tag im Head-Teil eines Dokuments
232
Überblick
Dienstleistungen
Bausteine
Methodiken
Entwurfsmuster
5.2.3.2.3 Formulare
• erlauben die interaktive Zusammenstellung von Informationen
zur Übermittlung an eine Anwendung auf einem Server
• Teil einer Web-Seite
233
Überblick
Dienstleistungen
Bausteine
Methodiken
Entwurfsmuster
Tags in Formularen
1) Beginn und Ende eines Formulars, z.B.
<FORM ACTION="/cgi-bin/script1.pl" METHOD="GET" > ... </FORM>
• ACTION-Attribut definiert URL des Verarbeitungsprogramms
• METHOD-Attribut bestimmt Methode der Übertragung an den
Server:
GET: Eingaben werden als Teil der URL übertragen
Zugriff aus CGI-Skript über Umgebungsvariablen
QUERY_STRING und/oder PATH_INFO
POST: Eingaben in “Payload” übertragen und über
Standardeingabe an CGI-Skript geleitet
234
Überblick
Dienstleistungen
Bausteine
Methodiken
Entwurfsmuster
Tags in Formularen (2)
2) Text- und Passwort-Eingabe
<INPUT TYPE="text" NAME="Kunde">
<INPUT TYPE="password" NAME="passwd">
3) Knöpfe
<INPUT TYPE="submit" VALUE="Abschicken">
<INPUT TYPE="image" SRC="bild.gif">
<INPUT TYPE="reset" VALUE="Formular löschen">
4) Radio-Knöpfe und Ankreuzfelder
<INPUT TYPE="radio" NAME="zahlungsmittel" VALUE="bar">
<INPUT TYPE="checkbox" NAME="mit Abendessen">
235
Überblick
Dienstleistungen
Bausteine
Methodiken
Entwurfsmuster
Tags in Formularen (3)
5) Menüs und Scroll-Listen
<SELECT NAME="wohnort" SIZE=1>
<OPTION>Telgte
<OPTION>Greven
</SELECT>
• bei SIZE > 1: Scroll-Liste (ggfs. MULTIPLE)
6) Textfelder
<TEXTAREA ROWS=5 COLS=20 NAME="bemerkung">
</TEXTAREA>
7) Datei (mit Browser) auswählen und an Server schicken
<INPUT TYPE="file" SIZE=20>
Beispiele siehe Webseite
236
Überblick
Dienstleistungen
Bausteine
Methodiken
Entwurfsmuster
5.2.3.2.4 Java-Applets
• Applet-Tag wird eingebunden in Web-Seite
• das zugehörige Applet (d.h. eingeschränkte Java-Programmstück)
wird vom Server geladen und beim Client ausgeführt
• ohne Einschränkungen könnten Applets beim Client Schäden
anrichten
• daher: Java-Byte-Code wird von der abstrakten Maschine JVM
interpretiert
• unsichere Operationen werden hierbei abgefangen (z.B. keine
Festplattenzugriffe, Kommunikation nur mit dem Server)
• Applets erweitern Web-Seiten um die Ausdruckskraft einer
Programmiersprache (insbesondere auch: Grafik, Audio)
237
Überblick
Dienstleistungen
Bausteine
Methodiken
Entwurfsmuster
5.2.3.2.5 JavaScript
• von Netscape entwickelte Skriptsprache
• typischer Einsatz in Web-Seiten
• Java-ähnliche Syntax
• JavaScript-Programmstücke werden vom Browser beim Client
ausgeführt
• erlaubt Interaktion zwischen Web-Seite und Benutzer ohne
Rückgriff auf den Server
• Kernelement von AJAX
238
Überblick
Dienstleistungen
Bausteine
Methodiken
Entwurfsmuster
Was können JavaScripte?
• Formulare validieren
• html-Seiten generieren
• die Browserumgebung ändern (Farbe,. . . )
• html-Dokumente laden
• Web-Seiten Benutzer- bzw. Umgebungs-abhängig aufbereiten
• Bedienkomfort wie bei einer Desktop-Applikation bieten
(z.B. Drag & Drop, Tool-Tips)
• Beispiele siehe Web-Seite
239
Überblick
Dienstleistungen
Bausteine
Methodiken
Entwurfsmuster
Was ist bei JavaScript eingeschränkt?
• Zugriff auf lokale Dateien
• Netzwerk-Operationen
• Multithreading (nur simulierbar)
240
Überblick
Dienstleistungen
Bausteine
Methodiken
Entwurfsmuster
5.2.3.2.6 Cookies
• sind kurze Informationen, die der Client einer Seite zuordnet und
lokal speichert (mit Verfallsdatum)
• verleihen dem Browser ein Gedächtnis
• z.B.: beim erneuten Besuch einer Web-Seite brauchen
Informationen nicht neu eingegeben zu werden
• werden in HTTP-Nachricht an den Server mitübertragen
• werden bei der Übertragung i.allg. nicht geschützt
241
Überblick
Dienstleistungen
Bausteine
Methodiken
Entwurfsmuster
Bestandteile eines Cookies
• Domäne: erzeugender Webserver (≤ 20 Cookies pro Client und Domäne)
• Pfad im Dateibaum des Servers mit Programmen, die Cookie verwenden dürfen
• sicher?: wenn ja: Cookie wird nur an sicheren Server weitergegeben
• bei Ablauf der “gültig-bis”-Zeit wird Cookie gelöscht
• entsprechendes Überschreiben erzwingt Löschen
• Anwendung: z.B. Warenkorb, benutzerbezogene Informationsaufbereitung,
CRM (Benutzerprofile), Log-in-Informationen
242
Überblick
Dienstleistungen
Bausteine
Methodiken
Entwurfsmuster
5.2.3.2.7 Java-Servlets
• werden von Java-Laufzeitgebung interpretiert, die in den
Webserver (z.B. Apache) integriert wird
• erlauben die dynamische Generierung von Web-Seiten
• zur Bearbeitung einer Anfrage:
neuer Thread in JVM (statt neuer Prozess)
Webserver
HTML
Client
Internet
DB
API
response
request
JVM
Servlet
243
Überblick
Dienstleistungen
Bausteine
Methodiken
Entwurfsmuster
Java-Servlets (Fortsetzung)
• Servlets werden z.B. in speziellem Verzeichnis gesammelt
• Server wird so konfiguriert, dass bei Zugriff hierauf
das jeweilige Servlet ausgeführt wird
• Anfrage an ein Servlet über HTTP, z.B.:
http://servername/servlets/Welcome?name=Ute+Mai
• Parameterübergabe und Ergebnis nicht über
Umgebungsvariablen bzw. Standardein-/ausgabe sondern
komfortabler über vorgegebene Anfrage- und Antwort-Objekte
(Argumente von doGet)
244
Überblick
Dienstleistungen
Bausteine
Methodiken
Entwurfsmuster
Beispiel: Java-Servlet
import java.io.*;
import javax.servlet.*;
out.println("<HTML>\n
import javax.servlet.http.*;
<HEAD>\n
<TITLE>Hallo
public class Welcome extends HttpServlet{
</TITLE>\n
public void doGet(HttpServletRequest req,
HttpServletResponse res)
</HEAD>");
out.println("<BODY>\n
throws ServletException, IOException{
<H1>Hallo "+name+".
String name = req.getParameter("name");
if ((name==null) || (name.length()==0))
</H1>");
out.println("</BODY>\n
name = "Unbekannter";
res.setContentType("text/html");
PrintWriter out =res.getWriter();
</HTML>");
out.close();}
}
245
Überblick
Dienstleistungen
Bausteine
Methodiken
Entwurfsmuster
Vorteile von Servlets
• Servlets ggf. über mehrere Anfragen hinweg im Hauptspeicher
• Code ggf. gemeinsam genutzt
• Servlet und Applet können kontinuierlich über beliebiges Protokoll
(auch verschlüsselt) kommunizieren
• Kommunikation von Servlets untereinander über gemeinsame
Variablen/Objekte synchronisiert durch Java-“Monitore”
• Servlets bieten komfortable Methoden zur Aufrechterhaltung einer
Sitzung (session tracking; intern basierend auf Low-Level-Techniken wie
Cookies)
• (lange) Datenbanktransaktionen können hiermit leicht realisiert werden
• Datenbankverbindungen (ggf. auch Connection-Pools) bleiben geöffnet
246
Überblick
Dienstleistungen
Bausteine
Methodiken
Entwurfsmuster
5.2.3.2.8 JavaServer Pages (JSP)
• Nachteil von Servlets: wenn Webseiten aus viel vorgefertigtem
Text mit wenig Logik generiert werden, besteht das Servlet fast
nur aus Ausgabe-Anweisungen
• dann übersichtlicher: Logik (Java) in HTML-Seite integrieren
• hierzu: JSP
• JSP-Code wird intern in Servlets transformiert
• eigene Tag-Libraries erlauben Trennung von Webdesign und Logik
247
Überblick
Dienstleistungen
Bausteine
Methodiken
Entwurfsmuster
JSP-Beispiel 1: Hallo
<HTML>
<HEAD><TITLE>Hallo</TITLE>
<BODY>
<H2>JSP-Beispiel</H2>
<% if (request.getParameter("name") == null)
out.println("Hallo!");
else out.println("Hallo "+request.getParameter("name")+"!");
%>
<it>Herzlich willkommen!</it>
</BODY></HTML>
248
Überblick
Dienstleistungen
Bausteine
Methodiken
Entwurfsmuster
JSP-Beispiel 2: Quadrat
<HTML>
<HEAD><TITLE>Quadrat</TITLE>
<BODY>
<%@ include file = "/kopf.html" %>
<H2>JSP-Beispiel</H2>
<%@ page session="false" %>
<%@ page errorpage = "/error.jsp" %>
<% String vorname = request.getParameter("vorname");
String nachname = request.getParameter("nachname");
int z = Integer.parseInt(request.getParameter("zahl"));
if ((vorname == null) || (nachname == null))
throw new Exception("Bitte geben Sie Ihren Namen an!");
else out.println("Hallo "+vorname+" "+nachname+"!"); %>
Das Quadrat der von Ihnen eingegebenen Zahl <%= z %> ist
<font color=red><%= quadrat(z) %></font>.
<%@ include file = "/fuss.html" %>
</BODY></HTML>
<%! private int quadrat(int x){return x*x;} %>
249
Überblick
Dienstleistungen
Bausteine
Methodiken
Entwurfsmuster
Vordefinierte Variablen
• verwendbar im Java-Code innerhalb einer JSP-Seite
• HttpServletRequest request
• HttpServletResponse response
• javax.servlet.jsp.JspWriter out
• HttpSession session
• ServletContext application
• javax.servlet.jsp.PageContext pageContext
250
Überblick
Dienstleistungen
Bausteine
Methodiken
Entwurfsmuster
JSP-Features
<% c %>
Java-Code c wird ausgeführt
<%= e %>
Java-Ausdruck e wird ausgewertet
<%! d %>
Java-Deklaration d wird vor der
<%@ d %>
Direktive d wird zur Transformationszeit ausgeführt
und das Ergebnis als String eingefügt
Hauptservlet-Methode (doGet) in das generierte Servlet eingefügt
z.B. Cookies abschalten, Fehlerbehandlungsseite festlegen,
Datei einfügen
<jsp:useBean . . . >
JavaBean (6= EJB) einfügen
</jsp:useBean>
<jsp:include page ="/my.jsp" >
Datei zur Zugriffszeit einfügen
</jsp:include>
<jsp:forward page="login.jsp">
Zugriff umlenken
</jsp:foward>
251
Überblick
Dienstleistungen
Bausteine
Methodiken
Entwurfsmuster
Frameworks für Benutzerschnittstellen von
Webapplikationen
• Struts 2 basiert auf Entwurfsmuster Model-View-Controller (MVC)
• JavaServer Faces ebenfalls basierend auf MVC
• (z.B.) EJBs für Model, JSP für View
• insbesondere geeignet für komplexe Systeme von dynamischen
Webseiten
252
Überblick
Dienstleistungen
Bausteine
Methodiken
Entwurfsmuster
5.2.3.3 Web-Services
• Kommunikation zwischen Client und Server über
XML-Format SOAP
Client
SOAP
Server
• Beschreibung von Webservices in WSDL
(Web Services Description Language)
• Suche passender Dienste mit UDDI (Universal
Description, Discovery, and Integration)
• Potential: führende Integrationsinfrastruktur
(“kleinster gemeinsamer Nenner”)
Web Service Protokollstapel
Entdeckung
UDDI
Beschreibung
WSDL
Verpackung
SOAP
Übertragung
HTTP, SMTP, FTP
• Nachteil: (z.Z.) unzureichende Sicherheit und
Transaktionsunterstützung
253
Überblick
Dienstleistungen
Bausteine
Methodiken
Entwurfsmuster
5.2.3.3.1 SOAP
• XML-Format zur Kodierung von entfernten Aufrufen (RPC) von
Web-Services und deren Antworten
• Vorteil(?): über HTTP (Port 80) wird Firewall meist durchdrungen
SOAP−Envelope
SOAP−Header
Header−Block
Header−Block
SOAP−Body
Nachrichten−Body
254
Überblick
Dienstleistungen
Bausteine
Methodiken
Entwurfsmuster
Beispiel: SOAP-Anfrage
<?xml version=’1.0’ encoding=’UTF-8’?>
<SOAP-ENV:Envelope
xmlns:SOAP-ENV="http://www.w3.org/2001/09/soap-envelope/"
xmlns:xsi="http//www.w3.org/2001/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<SOAP-ENV:Body>
<ns1:getWeather
xmlns:ns1="urn:examples:weatherservice"
SOAP-ENV:encodingStyle="http://www.w3.org/2001/09/soap-encoding/">
<zipcode xsi:type="xsd:string">48149</zipcode>
</ns1:getWeather>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
(angelehnt an: E. Cerami: Web Services, O’Reilly, 2002)
255
Überblick
Dienstleistungen
Bausteine
Methodiken
Entwurfsmuster
Beispiel: SOAP-Antwort
<?xml version=’1.0’ encoding=’UTF-8’?>
<SOAP-ENV:Envelope
xmlns:SOAP-ENV="http://www.w3.org/2001/09/soap-envelope/"
xmlns:xsi="http//www.w3.org/2001/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<SOAP-ENV:Body>
<ns1:getWeatherResponse
xmlns:ns1="urn:examples:weatherservice"
SOAP-ENV:encodingStyle="http://www.w3.org/2001/09/soap-encoding/">
<return xsi:type="xsd:int">23</return>
</ns1:getWeatherResponse>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
256
Überblick
Dienstleistungen
Bausteine
Methodiken
Entwurfsmuster
SOAP
• Typen: neben üblichen Basistypen (int,float) auch Arrays,
Strukturen und XML
• bei Fehler: spezielle fault-Antwort (=
ˆ Exception)
• durch Header: u.a. optionale Zugangskontrolle,
Transaktionsverwaltung
• unübersichtliche XML-Struktur wird in Client- und Server-Code
durch Java-Klassen versteckt
• Implementierungen: z.B. Apache SOAP (→ Tomcat), MS SOAP
Toolkit
257
Überblick
Dienstleistungen
Bausteine
Methodiken
Entwurfsmuster
Beispiel: Wetter-Web-Service in Java
public class
public int
WeatherService{
getWeather(String zipcode) {
return 23;}
}
• wird deployed (z.B. in Webcontainer Tomcat)
258
Überblick
Dienstleistungen
Bausteine
Methodiken
Entwurfsmuster
5.2.3.3.2 WSDL
• Format zur Beschreibung von Web-Services
<definitions>
<types>
Datentypen
<messages>
Nachrichten
<porttype>
Operationen
<binding>
Übertragungsprotokolle
<service>
Zugriffsadresse
259
Überblick
Dienstleistungen
Bausteine
Methodiken
Entwurfsmuster
Beispiel: WSDL-Beschreibung des Wetter-Web-Service
<?xml version="1.0" encoding="UTF-8"?>
<definitions name="WeatherService"
targetNamespace="http://www.ecerami.com/wsdl/WeatherService.wsdl"
xmlns="http://schemas.xmlsoap.org/wsdl/"
xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
xmlns:tns="http://www.ecerami.com/wsdl/WeatherService.wsdl"
xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<message name="getWeatherRequest">
<part name="zipcode" type="xsd:string"/>
</message>
<message name="getWeatherResponse">
<part name="temperature" type="xsd:int"/>
</message>
<portType name="Weather_PortType">
<operation name="getWeather">
<input message="tns:getWeatherRequest"/>
<output message="tns:getWeatherResponse"/>
</operation>
</portType>
260
Überblick
Dienstleistungen
Bausteine
Methodiken
Entwurfsmuster
WSDL-Beispiel (Fortsetzung)
<binding name="Weather_Binding" type="tns:Weather_PortType">
<soap:binding style="rpc"
transport="http://schemas.xmlsoap.org/soap/http"/>
<operation name="getWeather">
<soap:operation soapAction=""/>
<input>
<soap:body
encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"
namespace="urn:examples:weatherservice"
use="encoded"/>
</input>
<output>
<soap:body
encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"
namespace="urn:examples:weatherservice"
use="encoded"/>
</output>
</operation>
</binding>
261
Überblick
Dienstleistungen
Bausteine
Methodiken
Entwurfsmuster
WSDL-Beispiel (Fortsetzung)
<service name="Weather_Service">
<documentation>WSDL File for Weather Service</documentation>
<port binding="tns:Weather_Binding" name="Weather_Port">
<soap:address
location="http://localhost:8080/soap/servlet/rpcrouter"/>
</port>
</service>
</definitions>
262
Überblick
Dienstleistungen
Bausteine
Methodiken
Entwurfsmuster
5.2.3.4 RESTful Webservices
• basieren direkt auf HTTP statt auf SOAP
• Adressierung von Ressourcen über Uniform Resource Locator
(URI)
• idempotente HTTP-Methoden POST, GET, PUT und DELETE zur
Realisierung von Erzeugen, Lesen, Ändern und Löschen einer
Ressource
• Repräsentation von Inhalten meist im kompakteren JSON-Format
statt mit SOAP
• REST = representational state transfer
• Trend: gewinnen wegen höherer Effizienz an Beliebtheit
gegenüber SOAP-basierten Webservices
263
Überblick
Dienstleistungen
Bausteine
Methodiken
Entwurfsmuster
5.3 Bausteine einer Software-Architektur
Modul
• kapselt Operationen (Funktionen) und ggfs. Daten
• Trennung von Schnittstelle und Rumpf (Implementierung)
(getrennt compilierbar, Geheimnisprinzip)
• Zugriff auf Datenstruktur ausschließlich über vorgegebene Operationen
• dadurch: Änderungen von Datenstrukturen und Operationen lokal
begrenzt
• Schnittstelle wird in Entwurfsphase spezifiziert:
• Aufgabe
• Ein-/Ausgabe-Parameter, Vor- und Nachbedingungen der
Operationen
• ggfs. Leistungsmerkmale (Platzbedarf, . . . )
264
Überblick
Dienstleistungen
Bausteine
Methodiken
Entwurfsmuster
Modularten
Funktionsmodul
• enthält ≥ 1 Funktion, die Eingaben in Ausgaben transformiert
(kein Gedächtnis!)
• funktionale Abstraktion in Programmiersprache
realisiert durch Funktion oder Prozedur
Datenobjektmodul
• Kapselung von Zugriffsoperationen und Daten (→ Gedächtnis)
• realisiert ein abstraktes Datenobjekt
• Abhängigkeiten zwischen Zugriffsoperationen
durch Algebraische Spezifikation oder Automaten beschreiben
265
Überblick
Dienstleistungen
Bausteine
Methodiken
Entwurfsmuster
Modularten (2)
Datentypmodul
• realisiert einen abstrakten Datentyp
(ggfs. mit Parametern, ≥ 1 Objekt)
• Instanzen sind Datenobjekte
Klasse
• wie Datentypmodul, jedoch zusätzlich Vererbung
• nur bei OO (und dort auschließlich)
266
Überblick
Dienstleistungen
Bausteine
Methodiken
Entwurfsmuster
Beispiel: Polymorphes Datentypmodul in Ada
generic
Max: natural := 100,
type ElementT is private;
package WarteschlangeT is
procedure insert(Element: in ElementT;
Status: out StatusT);
procedure delete(Element: out ElementT;
Status: out StatusT);
end Warteschlange;
package body Warteschlange is
... Deklaration von Variablen und Typen
z.B. head, tail
Verwendung:
package QueueF is
new WarteschlangeT(10,float);
package QueueI is
new WarteschlangeT(5,int);
...
QueueF.insert(3.5,Status);
QueueI.insert(2,Status);
... Implementierung von insert , delete
begin
head := 0;
tail := 0;
end Warteschlange
267
Überblick
Dienstleistungen
Bausteine
Methodiken
Entwurfsmuster
Eignung der Modultypen
• Funktionsmodule:
• Steuerung und Koordination
• Transformation
• komplizierte Auswertung
• als Hilfsdienst in Datenstrukturen als
funktionale Zwischenschicht zwischen Datenabstraktionen
• Datenobjektmodule:
• komplexes Einzelobjekt (z.B. Hypertext)
• Sammlung von Objekten (z.B. Stack)
• Datentypmodule:
• bei mehreren gleichartigen komplexen Einzelobjekten oder
Kollektionen
268
Überblick
Dienstleistungen
Bausteine
Methodiken
Entwurfsmuster
Einbindungsalternativen von Modulen
a) Import: Entwerfer erlaubt Import eines Moduls explizit
b) Schachtelung: (vgl. innere Klassen in Java)
• blockstrukturierte Programmiersprachen haben
baumstrukturierte Gültigkeitsbereiche
module A
module B
module C
module D
... B ... A ... C ...
module E
... E ... A ...
• Modul hat Zugriff auf Kinder, Geschwister, Vorfahren und deren
Geschwister
• ein Modul mit darunterhängendem Enthaltenseinsbaum heißt
Teilsystem
269
Überblick
Dienstleistungen
Bausteine
Methodiken
Entwurfsmuster
Vor- und Nachteile der Schachtelung
• Vorteil: Hilfsmodule außerhalb des Teilsystems unsichtbar
(Geheimnisprinzip)
• Nachteil: Blockstruktur erzwingt z.T. schlechte Modulanordnung, Bsp.:
• Hilfsmodul H wird von M und M 0 benutzt
• H daher unter einem gemeinsamen Vorfahren V von M und M 0
anordnen
• H für sein Abstraktionsniveau zu hoch
• Verletzung des Geheimnisprinzips
V
V
H
M
M’
M
M’
allgemeine
Benutzbarkeit
H
lokale Benutzbarkeit
270
Überblick
Dienstleistungen
Bausteine
Methodiken
Entwurfsmuster
Moduleinbindung bei Schichtenarchitektur
Schicht 2
Schicht 1
Schicht 0
• innerhalb einer Schicht: Schachtelung, z.T. auch import
• zwischen Schichten: import
271
Überblick
Dienstleistungen
Bausteine
Methodiken
Entwurfsmuster
5.4 Entwurfsmethodiken
• herkömmliche Methodiken: (Details s. Balzert)
• Strukturierter Entwurf (SD): → Hierarchie von Funktionsmodulen
• Modularer Entwurf (MD): → Funktions-, Datenobjekt- und
Datentyp-Module
• Objektorientierter Entwurf (OOD):
• → System von Klassen und Paketen
• Ausganspunkt: OOA-Modell (ohne Optimierungen, Assoziationen
bidirektional, . . . )
• Schritte bei OOD:
1) Architekturentwurf
2) Implementierungsentwurf
272
Überblick
Dienstleistungen
Bausteine
Methodiken
Entwurfsmuster
Architekturentwurf
• Anbindung an Benutzerschnittstelle, Datenhaltung und
Systemschnittstellen
• Verteilung im Netz
• Anpassung, Erweiterung und Verfeinerung des OOA-Modells
zu OOD-Modell (auch in UML)
• OO unterstützt Wiederverwendung; daher beim Entwurf
überprüfen, ob Klassenbibliotheken oder Halbfabrikate
wiederverwendbar
273
Überblick
Dienstleistungen
Bausteine
Methodiken
Entwurfsmuster
Implementierungsentwurf
• Anpassung an Zielsprache
• dazu u.a. ggfs. Transformation von Mehrfachvererbung in
Einfachvererbung bzw. Elimination von Vererbung
274
Überblick
Dienstleistungen
Bausteine
Methodiken
Entwurfsmuster
Klassenbibliotheken
• oft kommerziell angeboten oder in Programmierumgebung
• z.B. für GUI, Graphik, grundlegende Datenstrukturen,
Datenbankzugriff, IPC
• übliche Topologien:
• Baum: nutzt Vererbung, aber komplizierte Handhabung, z.B. in GUI
• flach: einfache Handhabung, z.B. bei grundlegenden
Datenstrukturen
• Wald: Kompromiss
• Framework: anpassbares System kooperierender Klassen
275
Überblick
Dienstleistungen
Bausteine
Methodiken
Entwurfsmuster
Halbfabrikate
• z.B. für Hilfe, Rechtschreibeprüfung, Silbentrennung, Diagramme
• erstrebenswert: unabhängig von Sprache und Plattform, verteilbar
• Ansätze für Interoperabilität:
• CORBA
• .NET (Microsoft; COM, DCOM)
• Webservices (→ Service-oriented Architecture (SOA))
276
Überblick
Dienstleistungen
Bausteine
Methodiken
Entwurfsmuster
Entwurfsmuster
• wiederkehrendes Entwurfsproblem für das bewährte Lösung
existiert
• siehe: E. Gamma et al.: Entwurfsmuster, Addison Wesley, 2009.
277
Überblick
Dienstleistungen
Bausteine
Methodiken
Entwurfsmuster
5.4.1 Architekturentwurf
Erweiterung des OOA-Modells um
• weitere Klassen (z.B. “technisch” bedingte)
• Richtungsangaben für Assoziation und Aggregationen
• Kommentare
• um Sichtbarkeitsangaben für Attribute und Operationen
(public,protected,private)
• Klassenattribute und Klassenoperationen
278
Überblick
Dienstleistungen
Bausteine
Methodiken
Entwurfsmuster
5.4.1.1 Anbindung an eine relationale Datenbank
OO-Zwischenschicht transformiert:
1) Klassen in Relationen
2) Beziehungen in Fremdschlüssel (und z.T. Klassen)
3) Vererbung in System von Relationen (Details s. Balzert)
4) komplexe Typen in Basistypen
5) OO-Zugriffsmethoden in SQL
• hierfür Middleware, z.B. JDO, EJB (Entity-Beans), Hibernate,
JDBC
279
Überblick
Dienstleistungen
Bausteine
Methodiken
Entwurfsmuster
Transformation von Klassen in Relationen
Person
Nr.
Name
OID
Nr
create table Person
( OID
number(8) not null,
Nr
number(8) not null,
Vorname
char(20),
Person
Vorname
Nachname
• Abb. von Attributtyp auf
SQL-Typ
• OID-Spalte hinzufügen
Nachname char(20) not null,
• optionale Attribute festlegen
primary key (Nr) );
• ggfs. Index anlegen
create secondary index PersonIndex
on Person(Nachname);
280
Überblick
Dienstleistungen
Bausteine
Methodiken
Entwurfsmuster
Beziehungen in Fremdschlüssel umwandeln
(vgl. Vorlesung Datenmanagement)
• bei 1 : m-Assoziation/Aggregation:
K1
A1
A2
K2
1
OID1
K1
A1
K2
A2
OID2
A3
A4
OID1
* A3
A4
• bei n : m-Assoziation/Aggregation (n, m > 1):
K1
A1
A2
K2
*
OID1
K1
A1
A2
OID2
K2
A3
A4
K1-2
OID1 OID2
* A3
A4
281
Überblick
Dienstleistungen
Bausteine
Methodiken
Entwurfsmuster
5.4.1.2 Verteilung der Anwendung
• OOD-Modell aufteilen in Client-OOD-Modell und
Server-OOD-Modell
• Verknüpfung von Client und Server z.B. über CORBA oder EJB
• Behandlung von Klassenattributen, selbstdefinierte Typen,
Aufzählungstypen in eigene Klasse “herausziehen”
• falls Objektverwaltung erforderlich (von CORBA nicht unterstützt!),
wird hierfür Hilfsklasse wie zur Behandlung von Klassenattributen
angelegt
282
Überblick
Dienstleistungen
Bausteine
Methodiken
Entwurfsmuster
5.4.2 Implementierungsentwurf
• Anpassung an Zielprogrammiersprache
• z.B. durch Elimination mehrfacher Vererbung
1. Aggregation von Rollen
2. Abflachen zu einfacher Hierarchie
• oder durch vollständige Elimination von Vererbung
283
Überblick
Dienstleistungen
Bausteine
Methodiken
Entwurfsmuster
Aggregation von Rollen
Fahrzeug
Ort
km/h
bewegen
Fahrzeug
Ort
km/h
1
1..2
Rolle
Flugzeug
max. Flughöhe
bewegen
Schiff
Tiefgang
bewegen
Wasserflugzeug
bewegen
bewegen
Flugzeug
max. Flughöhe
bewegen
Schiff
Tiefgang
bewegen
284
Überblick
Dienstleistungen
Bausteine
Methodiken
Entwurfsmuster
Abflachen zu einfacher Hierarchie
Fahrzeug
Ort
km/h
bewegen
Flugzeug
max. Flughöhe
bewegen
Wasserflugzeug
max. Flughöhe
Tiefgang
bewegen
Schiff
Tiefgang
bewegen
285
Überblick
Dienstleistungen
Bausteine
Methodiken
Entwurfsmuster
Vollständige Elimination von Vererbung
• bei Sprachen ohne Vererbung (z.B. Ada)
• Übernahme aller Attribute und Operationen der Oberklassen
in jede (konkrete) Klasse
Flugzeug
Ort
km/h
max. Flughöhe
bewegen
Wasserflugzeug
Ort
km/h
max. Flughöhe
Tiefgang
bewegen
Schiff
Ort
km/h
Tiefgang
bewegen
286
Überblick
Dienstleistungen
Bausteine
Methodiken
Entwurfsmuster
Weitere Anpassung an Zielsprache
• Namenskonventionen beachten
• alle Basistypen müssen unterstützt werden
• Verwaltungsoperationen (Konstruktoren, Destruktoren,
Initialisierung, Verwaltung von Assoziationen und Aggregationen,
Lesen und Schreiben von Attributen) ggfs. ergänzen
• ggfs. Containerklassen für Objektverwaltung hinzufügen
• Sichtbarkeit festlegen (+,-,#)
• Objekt-Lebenszyklen (z.B. Harel-Automaten) in Algorithmen
transformieren
287
Herunterladen