23.12.2012 Aufrufe

Kapitel 5: Entwurf

Kapitel 5: Entwurf

Kapitel 5: Entwurf

MEHR ANZEIGEN
WENIGER ANZEIGEN

Erfolgreiche ePaper selbst erstellen

Machen Sie aus Ihren PDF Publikationen ein blätterbares Flipbook mit unserer einzigartigen Google optimierten e-Paper Software.

Überblick Dienstleistungen Bausteine Methodiken <strong>Entwurf</strong>smuster<br />

Teil V<br />

<strong>Entwurf</strong><br />

201


Überblick Dienstleistungen Bausteine Methodiken <strong>Entwurf</strong>smuster<br />

5.1 Überblick: <strong>Entwurf</strong><br />

• aus Anforderungen (Pflichtenheft, Produktmodell (OOA))<br />

Software-Architektur und Spezifikation der Systemkomponenten<br />

entwerfen<br />

• Software-Architektur:<br />

• Zerlegung in Systemkomponenten und Beziehungen hierzwischen<br />

• Systemkomponente: Klasse, Modul, . . .<br />

• bei vielen Komponenten ggfs. Strukturierung in Schichten<br />

202


Überblick Dienstleistungen Bausteine Methodiken <strong>Entwurf</strong>smuster<br />

Schichtenarchitektur<br />

• innerhalb von Schicht: beliebige Zugriffe zwischen Komponenten<br />

• zwischen Schichten:<br />

• Zugriff nur auf niedrigere Schichten<br />

• Ordnung z.B. strikt, linear (Bsp.: OSI) oder baumartig<br />

• enge Schnittstellen<br />

• Vor- und Nachteile:<br />

• übersichtlich<br />

• gute Wiederverwendbarkeit, Wartbarkeit und Testbarkeit<br />

• geringer Effizienzverlust (z.B. Fehlermeldungen durchreichen)<br />

• typisch: ≥ 3 Schichten<br />

203


Überblick Dienstleistungen Bausteine Methodiken <strong>Entwurf</strong>smuster<br />

Schichtenarchitektur: Typische Beispiele<br />

Web−Client Server Client<br />

Präsentation<br />

HTML<br />

Browser<br />

Webzugang<br />

JSP, Servlets, ASP, PHP<br />

Geschäftslogik<br />

EJB, .NET, PHP<br />

Datenhaltung<br />

RDBMS<br />

Präsentation<br />

Swing, VB<br />

204


Überblick Dienstleistungen Bausteine Methodiken <strong>Entwurf</strong>smuster<br />

<strong>Entwurf</strong>sentscheidungen<br />

• sequentiell ↔ parallel/verteilt/nebenläufig?<br />

Bsp.: verteilt → Client/Server<br />

• ein Benutzer ↔ mehrere Benutzer?<br />

→ Zugriffsrechte, Transaktionen?<br />

• Zuordnung der Schichten zu Client bzw. Server<br />

z.B. Client: Schichten 1+2, Server: 3, oder<br />

Client: 1, Server: 2+3, oder: C: 1+2a, S: 2b+3<br />

• unterschiedliche Plattformen nötig? → z.B. welche Sprache?<br />

• Wiederverwendung vorhandener Bausteine?<br />

205


Überblick Dienstleistungen Bausteine Methodiken <strong>Entwurf</strong>smuster<br />

<strong>Entwurf</strong>sentscheidungen (Fortsetzung)<br />

• ob und welche Hilfesysteme? (Hypertext?)<br />

• ob und welches DBMS (relational, OO)?<br />

• wie Benutzerschnittstelle? (GUI, . . . )<br />

• Einbinden von sonstigen Dienstleistungen?<br />

z.B. Business Rules Engine wie Drools (→ KI)<br />

• Ziel: möglichst viele und mächtige Dienstleistungen in Anspruch<br />

nehmen → Kostensenkung<br />

206


Überblick Dienstleistungen Bausteine Methodiken <strong>Entwurf</strong>smuster<br />

1. nicht graphisch<br />

5.2 Einbinden von Dienstleistungen<br />

5.2.1 Realisierung der Benutzeroberfläche<br />

2. GUI (graphical user interface)<br />

z.B. mit Frameworks wie Java AWT, Swing oder SWT<br />

3. HTML mit Formular und ggf. AJAX<br />

4. . . .<br />

unter Verwendung von Servlets, JSP, JSF, . . .<br />

207


Überblick Dienstleistungen Bausteine Methodiken <strong>Entwurf</strong>smuster<br />

Graphische Benutzerschnittstellen (GUIs)<br />

• Bibliothek zur Unterstützung von Fenstern, Menüs, Piktogrammen,<br />

Schaltflächen, Maus, . . .<br />

• GUI bemerkt, interpretiert und leitet Ereignisse weiter an<br />

Anwendung<br />

• Anwendung reagiert auf Ereignisse<br />

• Ereignisreihenfolge unvorhersehbar<br />

• → <strong>Entwurf</strong>: verwendet unabhängige Systemkomponenten<br />

• Kommunikation zwischen GUI und Anwendung über Callbacks:<br />

• Anwendung registriert Ereignisse,<br />

über die sie informiert werden will<br />

• Callback aktiviert bei Ereignis zugehörige Anwendungsmethode<br />

• Verbindung von Anwendung zu GUI über API<br />

208


Überblick Dienstleistungen Bausteine Methodiken <strong>Entwurf</strong>smuster<br />

Anwendung 3<br />

Anwendung 1<br />

¡ ¡ ¡ ¡<br />

¢¡¢¡¢¡¢¡¢¡¢<br />

¡<br />

¡ ¡ ¡ ¡ ¡<br />

¢¡¢¡¢¡¢¡¢¡¢<br />

£¡£¡£¡£¡£¡£¡£¡£¡£<br />

¤¡¤¡¤¡¤¡¤¡¤¡¤¡¤¡¤<br />

¢¡¢¡¢¡¢¡¢¡¢<br />

£¡£¡£¡£¡£¡£¡£¡£¡£<br />

¤¡¤¡¤¡¤¡¤¡¤¡¤¡¤¡¤<br />

¡ ¡ ¡ ¡ ¡<br />

¤¡¤¡¤¡¤¡¤¡¤¡¤¡¤¡¤<br />

£¡£¡£¡£¡£¡£¡£¡£¡£<br />

£¡£¡£¡£¡£¡£¡£¡£¡£<br />

¤¡¤¡¤¡¤¡¤¡¤¡¤¡¤¡¤<br />

¤¡¤¡¤¡¤¡¤¡¤¡¤¡¤¡¤<br />

£¡£¡£¡£¡£¡£¡£¡£¡£<br />

Einsatz eines GUI<br />

GUI<br />

API<br />

Programmierer<br />

Anwendung 2<br />

Anwendung 1<br />

Anwendung 3<br />

209


Überblick Dienstleistungen Bausteine Methodiken <strong>Entwurf</strong>smuster<br />

direkte Verarbeitung durch GUI<br />

FU1<br />

A<br />

B<br />

Fenster<br />

FU2<br />

Callback-Mechanismus mit Listen<br />

Benutzeraktion callback−Listen Anwendung<br />

button<br />

key event<br />

sizing event<br />

menucommand event<br />

button<br />

event<br />

Event− und<br />

Translation−<br />

Manager<br />

FU1<br />

FU2<br />

...<br />

press<br />

menu<br />

button<br />

release Proc 4<br />

... ...<br />

down<br />

up<br />

...<br />

Proc 1<br />

Proc 2<br />

...<br />

Proc 3<br />

key<br />

Proc 5<br />

Proc 6<br />

...<br />

callback<br />

Proc 1<br />

Menuevent(FU1)<br />

...<br />

case B: ...<br />

Proc 3<br />

on Buttonclick:<br />

if ...<br />

Proc 5<br />

InputControl::Keydown<br />

...<br />

case A: ...<br />

if (ASCIIChar(e)==X)<br />

210


Überblick Dienstleistungen Bausteine Methodiken <strong>Entwurf</strong>smuster<br />

Name<br />

Benutzerschnittstellen-Frameworks (Bsp. Java AWT)<br />

Kunde<br />

Abbruch<br />

Neu<br />

Mai<br />

1<br />

3<br />

AWTEventMulticaster<br />

...<br />

... ...<br />

ActionListener<br />

GUI<br />

4<br />

2<br />

Mai<br />

Object<br />

Component<br />

...<br />

FlowLayout<br />

Button Label TextComponent Container<br />

Programmierer erzeugt Objektnetz<br />

:Frame :Label :Button<br />

:Button<br />

label= "Neu"<br />

Text="Name"<br />

text= "Mai"<br />

5 "Mai"<br />

:TextField<br />

...<br />

... ... ... ...<br />

TextField Window<br />

label= "Abbruch"<br />

6<br />

Mai<br />

... ...<br />

Frame<br />

Anwendung<br />

Kunde<br />

Name<br />

Init<br />

Kunde<br />

Name= "Mai"<br />

211


Überblick Dienstleistungen Bausteine Methodiken <strong>Entwurf</strong>smuster<br />

Beispiel: Java AWT<br />

import java.awt.*; import java.awt.event.*;<br />

public class KundenGUI extends Frame<br />

}<br />

implements ActionListener{<br />

protected Kunde kunde = new Kunde();<br />

private Button Neu = new Button("Neu");<br />

private Button Abbruch = new Button("Abbruch");<br />

private Label textlabel = new Label("Name");<br />

private TextField Namensfeld = new TextField(10);<br />

public KundenGUI(){...}<br />

public void actionPerformed(ActionEvent event){...}<br />

static public void main(String[] args){<br />

new KundenGUI();}<br />

212


Überblick Dienstleistungen Bausteine Methodiken <strong>Entwurf</strong>smuster<br />

public KundenGUI(){<br />

super("KundenGUI");<br />

setLayout(new FlowLayout());<br />

Neu.addActionListener(this);<br />

Abbruch.addActionListener(this);<br />

Namensfeld.setEnabled(true);<br />

Namensfeld.setText("");<br />

add(textlabel); add(Namensfeld);<br />

add(Abbruch); add(Neu);<br />

setBounds(400,400,150,200);<br />

setVisible(true);}<br />

Beispiel: Java AWT (Fortsetzung)<br />

public void actionPerformed(ActionEvent event){<br />

try{<br />

if (event.getSource().equals(Neu))<br />

kunde.Init(Namensfeld.getText());<br />

else if (event.getSource().equals(Abbruch))<br />

dispose();}<br />

catch (Exception e){e.printStackTrace();}}<br />

public class Kunde {<br />

}<br />

protected String Name;<br />

public Kunde(){;}<br />

public void Init(String n){<br />

Name = n;}<br />

213


Überblick Dienstleistungen Bausteine Methodiken <strong>Entwurf</strong>smuster<br />

5.2.2 Realisierung der Datenhaltung<br />

• Dateien: nur geeignet bei Daten, die<br />

• einfach strukturiert sind<br />

• nicht von mehreren Systemen/Benutzern gleichzeitig verwendet<br />

• einfache (und unveränderliche) Zugriffsmechanismen haben und<br />

• kein (kompliziertes) Recovery nach Systemabsturz erfordern<br />

• relationales DBMS: heute üblich, → Datenbank-Vorlesungen<br />

• OO-DBMS: bei OO geeignet, aber gescheitert (?!)<br />

• objekt-relationales DBMS: Effizienz von RDBMS, Funktionalität<br />

vgl. OO-DBMS<br />

• deduktives DBMS:<br />

geeignet, wenn umfangreiche Datenhaltung und Inferenz benötigt<br />

(ggfs. Alternative zu: relationalem DBMS + Expertensystem)<br />

214


Überblick Dienstleistungen Bausteine Methodiken <strong>Entwurf</strong>smuster<br />

5.2.3 Verteilte Anwendungen<br />

• → Vorlesungen Verteilte Systeme, EAI<br />

• Verbindung der Prozesse z.B. durch<br />

• Sockets (TCP/IP, . . . )<br />

• CORBA (bei Client-Server-Architektur)<br />

• RMI, EJB (in Java EE)<br />

• .NET, DCOM, . . .<br />

• Web-Services auf Basis von SOAP, WSDL, UDDI<br />

• RESTful Web-Services auf Basis von HTTP (oft mit JSON)<br />

• Message Oriented Middleware<br />

215


Überblick Dienstleistungen Bausteine Methodiken <strong>Entwurf</strong>smuster<br />

Demarshalling<br />

Stumpf s<br />

Entfernte Methodenaufrufe<br />

Anwendung Objekt o<br />

Ergebnis<br />

Aufruf Aufruf o.m(args)<br />

o.m(args)<br />

s.m(args)<br />

s.m(args)<br />

Marshalling<br />

Demarshalling<br />

Verteiler<br />

...<br />

Ergebnis<br />

Marshalling<br />

Ergebnis<br />

216


Überblick Dienstleistungen Bausteine Methodiken <strong>Entwurf</strong>smuster<br />

5.2.3.1 Enterprise JavaBeans<br />

• Java-basierte Middleware für verteilte OO-Anwendungen<br />

• Komponenten (Beans) in EJB-Container (auf Server) bereitgestellt<br />

• EJB Container: z.B. IBM WebSphere, BEA WebLogic, JBoss . . .<br />

• Dienste des Containers: (u.a.)<br />

• Verwaltung und Suche von Beans (basierend auf JNDI)<br />

• Transaktionen (basierend auf JTS und JTA)<br />

• Persistenz<br />

• Zugriff auf entfernte Objekte (basierend auf RMI/IIOP bzw. JMS)<br />

• Ressourcenverwaltung (Instance Pooling, Bean-Ein-/Auslagerung)<br />

• Autorisierung und Authentifizierung (basierend auf JAAS)<br />

• Vorteil: Basisdienste bei Anwendungsentwicklung “geschenkt”<br />

• Nachteil: Overhead; keine Threads, keine BS-Aufrufe (wegen<br />

Transaktionen)<br />

217


Überblick Dienstleistungen Bausteine Methodiken <strong>Entwurf</strong>smuster<br />

Wo werden EJBs eingesetzt?<br />

• typische 4-Schichten-Architektur:<br />

• Client Tier (HTML)<br />

• Web Tier (JSP,Servlets)<br />

• Business Tier (EJB)<br />

• EIS Tier (DB)<br />

218


Überblick Dienstleistungen Bausteine Methodiken <strong>Entwurf</strong>smuster<br />

Arten von Beans<br />

• Entity: kapselt persistente Daten; Zugriff (z.B.) über Session Bean<br />

• Session-Bean: realisiert (z.B.) Use-Case<br />

nicht persistent; Zugriff basierend auf RMI (z.B. aus Servlet)<br />

• zustandslos: effizient, gemeinsam nutzbar durch mehrere Clients<br />

• zustandsbehaftet: exklusiv für einen Client;<br />

Zustand wird über eine Sitzung hinweg bewahrt; bei Absturz<br />

verloren<br />

• Message-driven Bean<br />

219


Überblick Dienstleistungen Bausteine Methodiken <strong>Entwurf</strong>smuster<br />

Aufbau eines Enterprise Java Beans<br />

• Remote Interface (bzw. Local Interface bei ausschließlich lokalem<br />

Zugriff): “Business”-Methoden (nur bei Session-Beans)<br />

• Verwaltungsoperationen (ab EJB 3 transparent)<br />

(z.B. Erzeugen, Löschen, Aktivieren, Passivieren)<br />

• Bean-Klasse:<br />

Implementierung der Business-Methoden (ab EJB 3: “POJO”)<br />

• optionaler Deployment Descriptor:<br />

• XML-Dokument zur Konfiguration eines Beans u.a. bzgl.<br />

Persistenz, Transaktionen und Primärschlüssel<br />

• ab EJB 3 i.d.R. durch Annotationen in Bean-Klasse ersetzt<br />

• alle zusammengefasst in .jar Archiv-Datei (Packaging)<br />

220


Überblick Dienstleistungen Bausteine Methodiken <strong>Entwurf</strong>smuster<br />

Remote<br />

Client<br />

EJB 3.0-Programmiermodell<br />

EJB−Container JVM<br />

Business<br />

Interface<br />

Local<br />

Client<br />

Container−erzeugte<br />

Wrapper−Klasse<br />

EJB−Klasse<br />

Middleware−Dienste:<br />

− Lebenszyklus−Management<br />

− Persistenz<br />

−Zugriffsschutz<br />

−Transaktionen<br />

...<br />

221


Überblick Dienstleistungen Bausteine Methodiken <strong>Entwurf</strong>smuster<br />

Deployment<br />

• Bean wird gemäß Deployment-Angaben konfiguriert und<br />

im Container bereitgestellt<br />

• hierbei werden Hilfsklassen zur Einbindung der Bean-Klasse in<br />

den Container automatisch erstellt und compiliert (u.a. Stubs,<br />

Skelette)<br />

• wahlweise komfortable Container-verwaltete Persistenz oder<br />

flexiblere Bean-verwaltete Persistenz (mit expliziten<br />

JDBC-Aufrufen)<br />

• wahlweise Container- oder Bean-verwaltete Transaktionen<br />

222


Überblick Dienstleistungen Bausteine Methodiken <strong>Entwurf</strong>smuster<br />

datum<br />

name<br />

adresse<br />

Ausleihe<br />

*<br />

1<br />

Benutzer<br />

Beispielanwendung: Bibliothek<br />

0..1<br />

1<br />

Exemplar<br />

Medium<br />

inventarnr<br />

* 1<br />

bezeichnung<br />

autor<br />

Buch CD<br />

isbn asin<br />

interpret<br />

223


Überblick Dienstleistungen Bausteine Methodiken <strong>Entwurf</strong>smuster<br />

package bibliothek;<br />

Entity: Klasse Benutzer<br />

import java.util.ArrayList; import java.util.Collection; import javax.persistence.*;<br />

@Entity<br />

public class Benutzer implements java.io.Serializable {<br />

protected int bid; /** Primärschlüssel */<br />

protected String name;<br />

protected String adresse;<br />

protected Collection ausleihen = new ArrayList();<br />

@Id @GeneratedValue(strategy=GenerationType.AUTO)<br />

public int getBid(){return bid;}<br />

public void setBid(int id){bid = id;}<br />

public String getName(){return name;}<br />

public void setName(String name){this.name = name;}<br />

public String getAdresse(){return adresse;}<br />

public void setAdresse(String adresse){this.adresse = adresse;}<br />

@OneToMany(cascade = CascadeType.ALL, mappedBy="benutzer")<br />

public Collection getAusleihen(){return ausleihen;}<br />

public void setAusleihen(Collection coll){ausleihen = coll;}<br />

public void addAusleihe(Ausleihe vorgang){ausleihen.add(vorgang);}<br />

public void removeAusleihe(Ausleihe vorgang){ausleihen.remove(vorgang);}<br />

} 224


Überblick Dienstleistungen Bausteine Methodiken <strong>Entwurf</strong>smuster<br />

...<br />

@Remote<br />

public interface BenutzerFassade {<br />

}<br />

...<br />

Beispiel: Session-Bean<br />

public void benutzerAnlegen(String name, String adresse) throws Exception;<br />

@PermitAll<br />

@Stateless<br />

public class Benutzerverwaltung implements BenutzerFassade{<br />

@PersistenceContext<br />

private EntityManager em;<br />

@TransactionAttribute(TransactionAttributeType.REQUIRED)<br />

public void benutzerAnlegen(String name, String adresse) throws Exception{<br />

}<br />

Query q = em.createQuery("SELECT COUNT(*) FROM Benutzer b WHERE b.name = :n");<br />

q.setParameter("n",name);<br />

if (((Long) q.getSingleResult()).intValue() == 0){<br />

Benutzer benutzer = new Benutzer();<br />

benutzer.setName(name);<br />

benutzer.setAdresse(adresse);<br />

em.persist(benutzer);}<br />

else throw new Exception("Name bereits verwendet");<br />

} 225


Überblick Dienstleistungen Bausteine Methodiken <strong>Entwurf</strong>smuster<br />

5.2.3.2 Webapplikationen<br />

Web−Client Server<br />

Präsentation<br />

HTML<br />

+ JavaScript?<br />

+Java−Applets?<br />

Browser<br />

Cookies<br />

HTTP mit HTML+Cookies<br />

HTTP mit Formularinhalt<br />

und Cookie<br />

Webzugang<br />

JSP, Servlets, ASP, PHP<br />

Geschäftslogik<br />

EJB, PHP, ...<br />

ggf. JDBC<br />

Datenhaltung<br />

RDBMS<br />

226


Überblick Dienstleistungen Bausteine Methodiken <strong>Entwurf</strong>smuster<br />

5.2.3.2.1 HTML<br />

• “Markup”-Sprache zur Beschreibung von Struktur (→ Tags), Inhalt<br />

und ggf. Layout einer Webseite<br />

• bietet u.a.: Text, Listen, Tabellen, Verweise, Bilder, Frames,<br />

Formulare<br />

• für jede HTML-Version eigene vordefinierte<br />

Dokumenten-Typ-Definition (DTD)<br />


Überblick Dienstleistungen Bausteine Methodiken <strong>Entwurf</strong>smuster<br />

Die wichtigsten Tags<br />

Tag-Name Funktion<br />

. . . deklariert eine HTML-Seite<br />

. . . enthält den Kopf der HTML-Seite<br />

. . . definiert den Titel der Seite<br />

. . . enthält den Körper der HTML-Seite<br />

. . . definiert eine Überschrift der Ebene n<br />

. . . setzt . . . in Fett-Schrift<br />

. . . setzt . . . in Kursiv-Schrift<br />

. . . bzw. beschränkt eine ungeordnete Liste,<br />

. . . bzw. eine nummerierte Liste<br />

. . . Listenelement<br />

. . . Absatz<br />

fügt eine horizontale Linie ein<br />

. . . vorformatierter Text; wird nicht umformatiert<br />

lädt ein Bild<br />

. . . fügt einen Link mit der Beschreibung . . . ein<br />

Kommentar<br />

228


Überblick Dienstleistungen Bausteine Methodiken <strong>Entwurf</strong>smuster<br />

Neuerungen in HTML5<br />

• neue semantische Markup-Elemente wie ,<br />

, , <br />

• Schlüssel-Wert-Paare (Microdata) für Suchmachinen<br />

• neue validierbare input-Typen wie tel, url, email, number für<br />

Formulare<br />

• Client-seitiger Speicherplatz (Web Storage, Indexed Database<br />

(inkl. Transaktionen), File API, Web SQL) ggf. auch über Dauer<br />

einer Sitzung hinaus<br />

• Möglichkeit von Offline-Applikationen<br />

• Gerätezugriff insbesondere für mobile Endgeräte<br />

(u.a. Geolocation API)<br />

229


Überblick Dienstleistungen Bausteine Methodiken <strong>Entwurf</strong>smuster<br />

Neuerungen in HTML5 (2)<br />

• Kommunikation über Websockets und Cross Document<br />

Messaging<br />

• Multimedia (Videos mit WebM, OGG, H.264; Audio) ohne Plug-ins<br />

• 2D- und 3D-Graphiken (u.a. SVG), MathML<br />

• Web Workers erlauben JavaScript-Berechnungen im Hintergrund<br />

(→ Threading)<br />

• XMLHttpRequest Level 2 (→ Ajax)<br />

• durch CSS3 verbessertes Geräte-abhängiges Layout<br />

230


Überblick Dienstleistungen Bausteine Methodiken <strong>Entwurf</strong>smuster<br />

• HTTP ist zustandslos<br />

Sitzungen<br />

• Rekonstruktion einer Sitzung aus Einzelzugriffen unmöglich<br />

• Trick: Sitzungsinformationen in versteckten Formularfeldern (s.u.),<br />

verlängerten URLs oder Cookies<br />

231


Überblick Dienstleistungen Bausteine Methodiken <strong>Entwurf</strong>smuster<br />

5.2.3.2.2 Cascading Style Sheets (CSS)<br />

• Layout-Eigenschaften werden durch Tags festgelegt, z.B.<br />

Einleitung<br />

• um diese nicht bei jedem Textelement wiederholen zu müssen,<br />

können Style-Sheets festgelegt werden, z.B.<br />

H2 text-align: center; color: red<br />

• festlegbare Eigenschaften: Farbe, Font-Familie, Font-Stil (z.B. italic),<br />

Font-Größe, Zeichenabstand, Wortabstand, Text-Dekoration (z.B.<br />

underline, blink), horizontale und vertikale Ausrichtung und Einrückung,<br />

Hintergrund-Farbe bzw. -Bild usw.<br />

• Einbindung z.B. durch -Tag im Head-Teil eines Dokuments<br />

232


Überblick Dienstleistungen Bausteine Methodiken <strong>Entwurf</strong>smuster<br />

5.2.3.2.3 Formulare<br />

• erlauben die interaktive Zusammenstellung von Informationen<br />

zur Übermittlung an eine Anwendung auf einem Server<br />

• Teil einer Web-Seite<br />

233


Überblick Dienstleistungen Bausteine Methodiken <strong>Entwurf</strong>smuster<br />

Tags in Formularen<br />

1) Beginn und Ende eines Formulars, z.B.<br />

... <br />

• ACTION-Attribut definiert URL des Verarbeitungsprogramms<br />

• METHOD-Attribut bestimmt Methode der Übertragung an den<br />

Server:<br />

GET: Eingaben werden als Teil der URL übertragen<br />

Zugriff aus CGI-Skript über Umgebungsvariablen<br />

QUERY_STRING und/oder PATH_INFO<br />

POST: Eingaben in “Payload” übertragen und über<br />

Standardeingabe an CGI-Skript geleitet<br />

234


Überblick Dienstleistungen Bausteine Methodiken <strong>Entwurf</strong>smuster<br />

2) Text- und Passwort-Eingabe<br />

Tags in Formularen (2)<br />

<br />

<br />

3) Knöpfe<br />

<br />

<br />

<br />

4) Radio-Knöpfe und Ankreuzfelder<br />

<br />

<br />

235


Überblick Dienstleistungen Bausteine Methodiken <strong>Entwurf</strong>smuster<br />

5) Menüs und Scroll-Listen<br />

Tags in Formularen (3)<br />

<br />

Telgte<br />

Greven<br />

<br />

• bei SIZE > 1: Scroll-Liste (ggfs. MULTIPLE)<br />

6) Textfelder<br />

<br />

<br />

7) Datei (mit Browser) auswählen und an Server schicken<br />

<br />

Beispiele siehe Webseite<br />

236


Überblick Dienstleistungen Bausteine Methodiken <strong>Entwurf</strong>smuster<br />

5.2.3.2.4 Java-Applets<br />

• Applet-Tag wird eingebunden in Web-Seite<br />

• das zugehörige Applet (d.h. eingeschränkte Java-Programmstück)<br />

wird vom Server geladen und beim Client ausgeführt<br />

• ohne Einschränkungen könnten Applets beim Client Schäden<br />

anrichten<br />

• daher: Java-Byte-Code wird von der abstrakten Maschine JVM<br />

interpretiert<br />

• unsichere Operationen werden hierbei abgefangen (z.B. keine<br />

Festplattenzugriffe, Kommunikation nur mit dem Server)<br />

• Applets erweitern Web-Seiten um die Ausdruckskraft einer<br />

Programmiersprache (insbesondere auch: Grafik, Audio)<br />

237


Überblick Dienstleistungen Bausteine Methodiken <strong>Entwurf</strong>smuster<br />

5.2.3.2.5 JavaScript<br />

• von Netscape entwickelte Skriptsprache<br />

• typischer Einsatz in Web-Seiten<br />

• Java-ähnliche Syntax<br />

• JavaScript-Programmstücke werden vom Browser beim Client<br />

ausgeführt<br />

• erlaubt Interaktion zwischen Web-Seite und Benutzer ohne<br />

Rückgriff auf den Server<br />

• Kernelement von AJAX<br />

238


Überblick Dienstleistungen Bausteine Methodiken <strong>Entwurf</strong>smuster<br />

• Formulare validieren<br />

• html-Seiten generieren<br />

Was können JavaScripte?<br />

• die Browserumgebung ändern (Farbe,. . . )<br />

• html-Dokumente laden<br />

• Web-Seiten Benutzer- bzw. Umgebungs-abhängig aufbereiten<br />

• Bedienkomfort wie bei einer Desktop-Applikation bieten<br />

(z.B. Drag & Drop, Tool-Tips)<br />

• Beispiele siehe Web-Seite<br />

239


Überblick Dienstleistungen Bausteine Methodiken <strong>Entwurf</strong>smuster<br />

Was ist bei JavaScript eingeschränkt?<br />

• Zugriff auf lokale Dateien<br />

• Netzwerk-Operationen<br />

• Multithreading (nur simulierbar)<br />

240


Überblick Dienstleistungen Bausteine Methodiken <strong>Entwurf</strong>smuster<br />

5.2.3.2.6 Cookies<br />

• sind kurze Informationen, die der Client einer Seite zuordnet und<br />

lokal speichert (mit Verfallsdatum)<br />

• verleihen dem Browser ein Gedächtnis<br />

• z.B.: beim erneuten Besuch einer Web-Seite brauchen<br />

Informationen nicht neu eingegeben zu werden<br />

• werden in HTTP-Nachricht an den Server mitübertragen<br />

• werden bei der Übertragung i.allg. nicht geschützt<br />

241


Überblick Dienstleistungen Bausteine Methodiken <strong>Entwurf</strong>smuster<br />

Bestandteile eines Cookies<br />

• Domäne: erzeugender Webserver (≤ 20 Cookies pro Client und Domäne)<br />

• Pfad im Dateibaum des Servers mit Programmen, die Cookie verwenden dürfen<br />

• sicher?: wenn ja: Cookie wird nur an sicheren Server weitergegeben<br />

• bei Ablauf der “gültig-bis”-Zeit wird Cookie gelöscht<br />

• entsprechendes Überschreiben erzwingt Löschen<br />

• Anwendung: z.B. Warenkorb, benutzerbezogene Informationsaufbereitung,<br />

CRM (Benutzerprofile), Log-in-Informationen<br />

242


Überblick Dienstleistungen Bausteine Methodiken <strong>Entwurf</strong>smuster<br />

5.2.3.2.7 Java-Servlets<br />

• werden von Java-Laufzeitgebung interpretiert, die in den<br />

Webserver (z.B. Apache) integriert wird<br />

• erlauben die dynamische Generierung von Web-Seiten<br />

• zur Bearbeitung einer Anfrage:<br />

neuer Thread in JVM (statt neuer Prozess)<br />

Client<br />

Internet<br />

Webserver<br />

HTML<br />

API<br />

response request<br />

JVM<br />

Servlet<br />

DB<br />

243


Überblick Dienstleistungen Bausteine Methodiken <strong>Entwurf</strong>smuster<br />

Java-Servlets (Fortsetzung)<br />

• Servlets werden z.B. in speziellem Verzeichnis gesammelt<br />

• Server wird so konfiguriert, dass bei Zugriff hierauf<br />

das jeweilige Servlet ausgeführt wird<br />

• Anfrage an ein Servlet über HTTP, z.B.:<br />

http://servername/servlets/Welcome?name=Ute+Mai<br />

• Parameterübergabe und Ergebnis nicht über<br />

Umgebungsvariablen bzw. Standardein-/ausgabe sondern<br />

komfortabler über vorgegebene Anfrage- und Antwort-Objekte<br />

(Argumente von doGet)<br />

244


Überblick Dienstleistungen Bausteine Methodiken <strong>Entwurf</strong>smuster<br />

import java.io.*;<br />

import javax.servlet.*;<br />

import javax.servlet.http.*;<br />

Beispiel: Java-Servlet<br />

public class Welcome extends HttpServlet{<br />

public void doGet(HttpServletRequest req,<br />

HttpServletResponse res)<br />

throws ServletException, IOException{<br />

String name = req.getParameter("name");<br />

if ((name==null) || (name.length()==0))<br />

name = "Unbekannter";<br />

res.setContentType("text/html");<br />

PrintWriter out =res.getWriter();<br />

}<br />

out.println("\n<br />

\n<br />

Hallo<br />

\n<br />

");<br />

out.println("\n<br />

Hallo "+name+".<br />

");<br />

out.println("\n<br />

out.close();}<br />

");<br />

245


Überblick Dienstleistungen Bausteine Methodiken <strong>Entwurf</strong>smuster<br />

Vorteile von Servlets<br />

• Servlets ggf. über mehrere Anfragen hinweg im Hauptspeicher<br />

• Code ggf. gemeinsam genutzt<br />

• Servlet und Applet können kontinuierlich über beliebiges Protokoll<br />

(auch verschlüsselt) kommunizieren<br />

• Kommunikation von Servlets untereinander über gemeinsame<br />

Variablen/Objekte synchronisiert durch Java-“Monitore”<br />

• Servlets bieten komfortable Methoden zur Aufrechterhaltung einer<br />

Sitzung (session tracking; intern basierend auf Low-Level-Techniken wie<br />

Cookies)<br />

• (lange) Datenbanktransaktionen können hiermit leicht realisiert werden<br />

• Datenbankverbindungen (ggf. auch Connection-Pools) bleiben geöffnet<br />

246


Überblick Dienstleistungen Bausteine Methodiken <strong>Entwurf</strong>smuster<br />

5.2.3.2.8 JavaServer Pages (JSP)<br />

• Nachteil von Servlets: wenn Webseiten aus viel vorgefertigtem<br />

Text mit wenig Logik generiert werden, besteht das Servlet fast<br />

nur aus Ausgabe-Anweisungen<br />

• dann übersichtlicher: Logik (Java) in HTML-Seite integrieren<br />

• hierzu: JSP<br />

• JSP-Code wird intern in Servlets transformiert<br />

• eigene Tag-Libraries erlauben Trennung von Webdesign und Logik<br />

247


Überblick Dienstleistungen Bausteine Methodiken <strong>Entwurf</strong>smuster<br />

<br />

Hallo<br />

<br />

JSP-Beispiel<br />

JSP-Beispiel 1: Hallo<br />

<br />

out.println("Hallo!");<br />

else out.println("Hallo "+request.getParameter("name")+"!");<br />

Herzlich willkommen!<br />

<br />

248


Überblick Dienstleistungen Bausteine Methodiken <strong>Entwurf</strong>smuster<br />

<br />

Quadrat<br />

<br />

<br />

JSP-Beispiel<br />

<br />

JSP-Beispiel 2: Quadrat<br />

<br />

<br />

Das Quadrat der von Ihnen eingegebenen Zahl ist<br />

.<br />

<br />

<br />

249


Überblick Dienstleistungen Bausteine Methodiken <strong>Entwurf</strong>smuster<br />

Vordefinierte Variablen<br />

• verwendbar im Java-Code innerhalb einer JSP-Seite<br />

• HttpServletRequest request<br />

• HttpServletResponse response<br />

• javax.servlet.jsp.JspWriter out<br />

• HttpSession session<br />

• ServletContext application<br />

• javax.servlet.jsp.PageContext pageContext<br />

250


Überblick Dienstleistungen Bausteine Methodiken <strong>Entwurf</strong>smuster<br />

JSP-Features<br />

Java-Code c wird ausgeführt<br />

Java-Ausdruck e wird ausgewertet<br />

und das Ergebnis als String eingefügt<br />

Java-Deklaration d wird vor der<br />

Hauptservlet-Methode (doGet) in das generierte Servlet eingefügt<br />

Direktive d wird zur Transformationszeit ausgeführt<br />

z.B. Cookies abschalten, Fehlerbehandlungsseite festlegen,<br />

Datei einfügen<br />

JavaBean (�= EJB) einfügen<br />

<br />

Datei zur Zugriffszeit einfügen<br />

<br />

Zugriff umlenken<br />

<br />

251


Überblick Dienstleistungen Bausteine Methodiken <strong>Entwurf</strong>smuster<br />

Frameworks für Benutzerschnittstellen von<br />

Webapplikationen<br />

• Struts 2 basiert auf <strong>Entwurf</strong>smuster Model-View-Controller (MVC)<br />

• JavaServer Faces ebenfalls basierend auf MVC<br />

• (z.B.) EJBs für Model, JSP für View<br />

• insbesondere geeignet für komplexe Systeme von dynamischen<br />

Webseiten<br />

252


Überblick Dienstleistungen Bausteine Methodiken <strong>Entwurf</strong>smuster<br />

5.2.3.3 Web-Services<br />

• Kommunikation zwischen Client und Server über<br />

XML-Format SOAP<br />

• Beschreibung von Webservices in WSDL<br />

(Web Services Description Language)<br />

• Suche passender Dienste mit UDDI (Universal<br />

Description, Discovery, and Integration)<br />

• Potential: führende Integrationsinfrastruktur<br />

(“kleinster gemeinsamer Nenner”)<br />

• Nachteil: (z.Z.) unzureichende Sicherheit und<br />

Transaktionsunterstützung<br />

Client SOAP Server<br />

Web Service Protokollstapel<br />

Entdeckung UDDI<br />

Beschreibung<br />

Verpackung<br />

Übertragung<br />

WSDL<br />

SOAP<br />

HTTP, SMTP, FTP<br />

253


Überblick Dienstleistungen Bausteine Methodiken <strong>Entwurf</strong>smuster<br />

5.2.3.3.1 SOAP<br />

• XML-Format zur Kodierung von entfernten Aufrufen (RPC) von<br />

Web-Services und deren Antworten<br />

• Vorteil(?): über HTTP (Port 80) wird Firewall meist durchdrungen<br />

SOAP−Envelope<br />

SOAP−Header<br />

Header−Block<br />

Header−Block<br />

SOAP−Body<br />

Nachrichten−Body<br />

254


Überblick Dienstleistungen Bausteine Methodiken <strong>Entwurf</strong>smuster<br />

Beispiel: SOAP-Anfrage<br />

<br />

<br />

<br />

<br />

48149<br />

<br />

<br />

<br />

(angelehnt an: E. Cerami: Web Services, O’Reilly, 2002)<br />

255


Überblick Dienstleistungen Bausteine Methodiken <strong>Entwurf</strong>smuster<br />

Beispiel: SOAP-Antwort<br />

<br />

<br />

<br />

<br />

23<br />

<br />

<br />

<br />

256


Überblick Dienstleistungen Bausteine Methodiken <strong>Entwurf</strong>smuster<br />

SOAP<br />

• Typen: neben üblichen Basistypen (int,float) auch Arrays,<br />

Strukturen und XML<br />

• bei Fehler: spezielle fault-Antwort ( ˆ= Exception)<br />

• durch Header: u.a. optionale Zugangskontrolle,<br />

Transaktionsverwaltung<br />

• unübersichtliche XML-Struktur wird in Client- und Server-Code<br />

durch Java-Klassen versteckt<br />

• Implementierungen: z.B. Apache SOAP (→ Tomcat), MS SOAP<br />

Toolkit<br />

257


Überblick Dienstleistungen Bausteine Methodiken <strong>Entwurf</strong>smuster<br />

Beispiel: Wetter-Web-Service in Java<br />

public class WeatherService{<br />

}<br />

public int getWeather(String zipcode) {<br />

return 23;}<br />

• wird deployed (z.B. in Webcontainer Tomcat)<br />

258


Überblick Dienstleistungen Bausteine Methodiken <strong>Entwurf</strong>smuster<br />

5.2.3.3.2 WSDL<br />

• Format zur Beschreibung von Web-Services<br />

<br />

<br />

<br />

<br />

<br />

Datentypen<br />

Nachrichten<br />

Operationen<br />

Übertragungsprotokolle<br />

Zugriffsadresse<br />

259


Überblick Dienstleistungen Bausteine Methodiken <strong>Entwurf</strong>smuster<br />

Beispiel: WSDL-Beschreibung des Wetter-Web-Service<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

260


Überblick Dienstleistungen Bausteine Methodiken <strong>Entwurf</strong>smuster<br />

WSDL-Beispiel (Fortsetzung)<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

261


Überblick Dienstleistungen Bausteine Methodiken <strong>Entwurf</strong>smuster<br />

<br />

WSDL-Beispiel (Fortsetzung)<br />

WSDL File for Weather Service<br />

<br />

<br />

262


Überblick Dienstleistungen Bausteine Methodiken <strong>Entwurf</strong>smuster<br />

5.2.3.4 RESTful Webservices<br />

• basieren direkt auf HTTP statt auf SOAP<br />

• Adressierung von Ressourcen über Uniform Resource Locator<br />

(URI)<br />

• idempotente HTTP-Methoden POST, GET, PUT und DELETE zur<br />

Realisierung von Erzeugen, Lesen, Ändern und Löschen einer<br />

Ressource<br />

• Repräsentation von Inhalten meist im kompakteren JSON-Format<br />

statt mit SOAP<br />

• REST = representational state transfer<br />

• Trend: gewinnen wegen höherer Effizienz an Beliebtheit<br />

gegenüber SOAP-basierten Webservices<br />

263


Überblick Dienstleistungen Bausteine Methodiken <strong>Entwurf</strong>smuster<br />

Modul<br />

5.3 Bausteine einer Software-Architektur<br />

• kapselt Operationen (Funktionen) und ggfs. Daten<br />

• Trennung von Schnittstelle und Rumpf (Implementierung)<br />

(getrennt compilierbar, Geheimnisprinzip)<br />

• Zugriff auf Datenstruktur ausschließlich über vorgegebene Operationen<br />

• dadurch: Änderungen von Datenstrukturen und Operationen lokal<br />

begrenzt<br />

• Schnittstelle wird in <strong>Entwurf</strong>sphase spezifiziert:<br />

• Aufgabe<br />

• Ein-/Ausgabe-Parameter, Vor- und Nachbedingungen der<br />

Operationen<br />

• ggfs. Leistungsmerkmale (Platzbedarf, . . . )<br />

264


Überblick Dienstleistungen Bausteine Methodiken <strong>Entwurf</strong>smuster<br />

Funktionsmodul<br />

Modularten<br />

• enthält ≥ 1 Funktion, die Eingaben in Ausgaben transformiert<br />

(kein Gedächtnis!)<br />

• funktionale Abstraktion in Programmiersprache<br />

realisiert durch Funktion oder Prozedur<br />

Datenobjektmodul<br />

• Kapselung von Zugriffsoperationen und Daten (→ Gedächtnis)<br />

• realisiert ein abstraktes Datenobjekt<br />

• Abhängigkeiten zwischen Zugriffsoperationen<br />

durch Algebraische Spezifikation oder Automaten beschreiben<br />

265


Überblick Dienstleistungen Bausteine Methodiken <strong>Entwurf</strong>smuster<br />

Datentypmodul<br />

Modularten (2)<br />

• realisiert einen abstrakten Datentyp<br />

(ggfs. mit Parametern, ≥ 1 Objekt)<br />

• Instanzen sind Datenobjekte<br />

Klasse<br />

• wie Datentypmodul, jedoch zusätzlich Vererbung<br />

• nur bei OO (und dort auschließlich)<br />

266


Überblick Dienstleistungen Bausteine Methodiken <strong>Entwurf</strong>smuster<br />

generic<br />

Beispiel: Polymorphes Datentypmodul in Ada<br />

Max: natural := 100,<br />

type ElementT is private;<br />

package WarteschlangeT is<br />

procedure insert(Element: in ElementT;<br />

Status: out StatusT);<br />

procedure delete(Element: out ElementT;<br />

end Warteschlange;<br />

Status: out StatusT);<br />

package body Warteschlange is<br />

... Deklaration von Variablen und Typen<br />

z.B. head, tail<br />

... Implementierung von insert , delete<br />

begin<br />

head := 0;<br />

tail := 0;<br />

end Warteschlange<br />

Verwendung:<br />

package QueueF is<br />

new WarteschlangeT(10,float);<br />

package QueueI is<br />

...<br />

new WarteschlangeT(5,int);<br />

QueueF.insert(3.5,Status);<br />

QueueI.insert(2,Status);<br />

267


Überblick Dienstleistungen Bausteine Methodiken <strong>Entwurf</strong>smuster<br />

• Funktionsmodule:<br />

Eignung der Modultypen<br />

• Steuerung und Koordination<br />

• Transformation<br />

• komplizierte Auswertung<br />

• als Hilfsdienst in Datenstrukturen als<br />

funktionale Zwischenschicht zwischen Datenabstraktionen<br />

• Datenobjektmodule:<br />

• komplexes Einzelobjekt (z.B. Hypertext)<br />

• Sammlung von Objekten (z.B. Stack)<br />

• Datentypmodule:<br />

• bei mehreren gleichartigen komplexen Einzelobjekten oder<br />

Kollektionen<br />

268


Überblick Dienstleistungen Bausteine Methodiken <strong>Entwurf</strong>smuster<br />

Einbindungsalternativen von Modulen<br />

a) Import: Entwerfer erlaubt Import eines Moduls explizit<br />

b) Schachtelung: (vgl. innere Klassen in Java)<br />

• blockstrukturierte Programmiersprachen haben<br />

baumstrukturierte Gültigkeitsbereiche<br />

module A<br />

module B<br />

module C<br />

module D<br />

... B ... A ... C ...<br />

module E<br />

... E ... A ...<br />

• Modul hat Zugriff auf Kinder, Geschwister, Vorfahren und deren<br />

Geschwister<br />

• ein Modul mit darunterhängendem Enthaltenseinsbaum heißt<br />

Teilsystem<br />

269


Überblick Dienstleistungen Bausteine Methodiken <strong>Entwurf</strong>smuster<br />

Vor- und Nachteile der Schachtelung<br />

• Vorteil: Hilfsmodule außerhalb des Teilsystems unsichtbar<br />

(Geheimnisprinzip)<br />

• Nachteil: Blockstruktur erzwingt z.T. schlechte Modulanordnung, Bsp.:<br />

• Hilfsmodul H wird von M und M ′ benutzt<br />

• H daher unter einem gemeinsamen Vorfahren V von M und M ′<br />

anordnen<br />

• H für sein Abstraktionsniveau zu hoch<br />

• Verletzung des Geheimnisprinzips<br />

lokale Benutzbarkeit<br />

V V<br />

H<br />

M M’ M M’<br />

allgemeine<br />

Benutzbarkeit<br />

H<br />

270


Überblick Dienstleistungen Bausteine Methodiken <strong>Entwurf</strong>smuster<br />

Moduleinbindung bei Schichtenarchitektur<br />

Schicht 2<br />

Schicht 1<br />

Schicht 0<br />

• innerhalb einer Schicht: Schachtelung, z.T. auch import<br />

• zwischen Schichten: import<br />

271


Überblick Dienstleistungen Bausteine Methodiken <strong>Entwurf</strong>smuster<br />

5.4 <strong>Entwurf</strong>smethodiken<br />

• herkömmliche Methodiken: (Details s. Balzert)<br />

• Strukturierter <strong>Entwurf</strong> (SD): → Hierarchie von Funktionsmodulen<br />

• Modularer <strong>Entwurf</strong> (MD): → Funktions-, Datenobjekt- und<br />

Datentyp-Module<br />

• Objektorientierter <strong>Entwurf</strong> (OOD):<br />

• → System von Klassen und Paketen<br />

• Ausganspunkt: OOA-Modell (ohne Optimierungen, Assoziationen<br />

bidirektional, . . . )<br />

• Schritte bei OOD:<br />

1) Architekturentwurf<br />

2) Implementierungsentwurf<br />

272


Überblick Dienstleistungen Bausteine Methodiken <strong>Entwurf</strong>smuster<br />

Architekturentwurf<br />

• Anbindung an Benutzerschnittstelle, Datenhaltung und<br />

Systemschnittstellen<br />

• Verteilung im Netz<br />

• Anpassung, Erweiterung und Verfeinerung des OOA-Modells<br />

zu OOD-Modell (auch in UML)<br />

• OO unterstützt Wiederverwendung; daher beim <strong>Entwurf</strong><br />

überprüfen, ob Klassenbibliotheken oder Halbfabrikate<br />

wiederverwendbar<br />

273


Überblick Dienstleistungen Bausteine Methodiken <strong>Entwurf</strong>smuster<br />

• Anpassung an Zielsprache<br />

Implementierungsentwurf<br />

• dazu u.a. ggfs. Transformation von Mehrfachvererbung in<br />

Einfachvererbung bzw. Elimination von Vererbung<br />

274


Überblick Dienstleistungen Bausteine Methodiken <strong>Entwurf</strong>smuster<br />

Klassenbibliotheken<br />

• oft kommerziell angeboten oder in Programmierumgebung<br />

• z.B. für GUI, Graphik, grundlegende Datenstrukturen,<br />

Datenbankzugriff, IPC<br />

• übliche Topologien:<br />

• Baum: nutzt Vererbung, aber komplizierte Handhabung, z.B. in GUI<br />

• flach: einfache Handhabung, z.B. bei grundlegenden<br />

Datenstrukturen<br />

• Wald: Kompromiss<br />

• Framework: anpassbares System kooperierender Klassen<br />

275


Überblick Dienstleistungen Bausteine Methodiken <strong>Entwurf</strong>smuster<br />

Halbfabrikate<br />

• z.B. für Hilfe, Rechtschreibeprüfung, Silbentrennung, Diagramme<br />

• erstrebenswert: unabhängig von Sprache und Plattform, verteilbar<br />

• Ansätze für Interoperabilität:<br />

• CORBA<br />

• .NET (Microsoft; COM, DCOM)<br />

• Webservices (→ Service-oriented Architecture (SOA))<br />

276


Überblick Dienstleistungen Bausteine Methodiken <strong>Entwurf</strong>smuster<br />

<strong>Entwurf</strong>smuster<br />

• wiederkehrendes <strong>Entwurf</strong>sproblem für das bewährte Lösung<br />

existiert<br />

• siehe: E. Gamma et al.: <strong>Entwurf</strong>smuster, Addison Wesley, 2009.<br />

277


Überblick Dienstleistungen Bausteine Methodiken <strong>Entwurf</strong>smuster<br />

Erweiterung des OOA-Modells um<br />

5.4.1 Architekturentwurf<br />

• weitere Klassen (z.B. “technisch” bedingte)<br />

• Richtungsangaben für Assoziation und Aggregationen<br />

• Kommentare<br />

• um Sichtbarkeitsangaben für Attribute und Operationen<br />

(public,protected,private)<br />

• Klassenattribute und Klassenoperationen<br />

278


Überblick Dienstleistungen Bausteine Methodiken <strong>Entwurf</strong>smuster<br />

5.4.1.1 Anbindung an eine relationale Datenbank<br />

OO-Zwischenschicht transformiert:<br />

1) Klassen in Relationen<br />

2) Beziehungen in Fremdschlüssel (und z.T. Klassen)<br />

3) Vererbung in System von Relationen (Details s. Balzert)<br />

4) komplexe Typen in Basistypen<br />

5) OO-Zugriffsmethoden in SQL<br />

• hierfür Middleware, z.B. JDO, EJB (Entity-Beans), Hibernate,<br />

JDBC<br />

279


Überblick Dienstleistungen Bausteine Methodiken <strong>Entwurf</strong>smuster<br />

create table Person<br />

Transformation von Klassen in Relationen<br />

Person OID<br />

Nr.<br />

Name<br />

( OID number(8) not null,<br />

Nr number(8) not null,<br />

Vorname char(20),<br />

Nachname char(20) not null,<br />

primary key (Nr) );<br />

create secondary index PersonIndex<br />

on Person(Nachname);<br />

Nr<br />

Person<br />

Vorname Nachname<br />

• Abb. von Attributtyp auf<br />

SQL-Typ<br />

• OID-Spalte hinzufügen<br />

• optionale Attribute festlegen<br />

• ggfs. Index anlegen<br />

280


Überblick Dienstleistungen Bausteine Methodiken <strong>Entwurf</strong>smuster<br />

Beziehungen in Fremdschlüssel umwandeln<br />

(vgl. Vorlesung Datenmanagement)<br />

• bei 1 : m-Assoziation/Aggregation:<br />

A1<br />

A2<br />

K1<br />

K2<br />

K1 K2<br />

OID1 A1 A2 OID2 A3 A4 OID1<br />

1 * A3<br />

A4<br />

• bei n : m-Assoziation/Aggregation (n, m > 1):<br />

A1<br />

A2<br />

K1<br />

K2<br />

K1 K2<br />

OID1 A1 A2 OID2 A3 A4<br />

* * A3<br />

A4<br />

K1-2<br />

OID1 OID2<br />

281


Überblick Dienstleistungen Bausteine Methodiken <strong>Entwurf</strong>smuster<br />

5.4.1.2 Verteilung der Anwendung<br />

• OOD-Modell aufteilen in Client-OOD-Modell und<br />

Server-OOD-Modell<br />

• Verknüpfung von Client und Server z.B. über CORBA oder EJB<br />

• Behandlung von Klassenattributen, selbstdefinierte Typen,<br />

Aufzählungstypen in eigene Klasse “herausziehen”<br />

• falls Objektverwaltung erforderlich (von CORBA nicht unterstützt!),<br />

wird hierfür Hilfsklasse wie zur Behandlung von Klassenattributen<br />

angelegt<br />

282


Überblick Dienstleistungen Bausteine Methodiken <strong>Entwurf</strong>smuster<br />

5.4.2 Implementierungsentwurf<br />

• Anpassung an Zielprogrammiersprache<br />

• z.B. durch Elimination mehrfacher Vererbung<br />

1. Aggregation von Rollen<br />

2. Abflachen zu einfacher Hierarchie<br />

• oder durch vollständige Elimination von Vererbung<br />

283


Überblick Dienstleistungen Bausteine Methodiken <strong>Entwurf</strong>smuster<br />

Fahrzeug<br />

Ort<br />

km/h<br />

bewegen<br />

Flugzeug<br />

max. Flughöhe<br />

bewegen<br />

bewegen<br />

Wasserflugzeug<br />

Aggregation von Rollen<br />

Schiff<br />

Tiefgang<br />

bewegen<br />

Ort<br />

km/h<br />

bewegen<br />

Flugzeug<br />

max. Flughöhe<br />

bewegen<br />

Fahrzeug<br />

1<br />

1..2<br />

Rolle<br />

Schiff<br />

Tiefgang<br />

bewegen<br />

284


Überblick Dienstleistungen Bausteine Methodiken <strong>Entwurf</strong>smuster<br />

Flugzeug<br />

max. Flughöhe<br />

bewegen<br />

Abflachen zu einfacher Hierarchie<br />

Fahrzeug<br />

Ort<br />

km/h<br />

bewegen<br />

Wasserflugzeug<br />

max. Flughöhe<br />

Tiefgang<br />

bewegen<br />

Schiff<br />

Tiefgang<br />

bewegen<br />

285


Überblick Dienstleistungen Bausteine Methodiken <strong>Entwurf</strong>smuster<br />

Vollständige Elimination von Vererbung<br />

• bei Sprachen ohne Vererbung (z.B. Ada)<br />

• Übernahme aller Attribute und Operationen der Oberklassen<br />

in jede (konkrete) Klasse<br />

Flugzeug Wasserflugzeug Schiff<br />

Ort Ort Ort<br />

km/h<br />

km/h km/h<br />

max. Flughöhe max. Flughöhe Tiefgang<br />

bewegen<br />

Tiefgang<br />

bewegen<br />

bewegen<br />

286


Überblick Dienstleistungen Bausteine Methodiken <strong>Entwurf</strong>smuster<br />

Weitere Anpassung an Zielsprache<br />

• Namenskonventionen beachten<br />

• alle Basistypen müssen unterstützt werden<br />

• Verwaltungsoperationen (Konstruktoren, Destruktoren,<br />

Initialisierung, Verwaltung von Assoziationen und Aggregationen,<br />

Lesen und Schreiben von Attributen) ggfs. ergänzen<br />

• ggfs. Containerklassen für Objektverwaltung hinzufügen<br />

• Sichtbarkeit festlegen (+,-,#)<br />

• Objekt-Lebenszyklen (z.B. Harel-Automaten) in Algorithmen<br />

transformieren<br />

287

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!