Kapitel 5: Entwurf
Kapitel 5: Entwurf
Kapitel 5: Entwurf
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