Technische Universität München Fakultät für Informatik Lehrstuhl IV: Software & Systems Engineering Markus Pister, Dr. Bernhard Rumpe WS 2002/2003 Lösungsblatt 9 17. Dezember 2002 www4.in.tum.de/~rumpe/se Übungen zur Softwaretechnik Aufgabe 20 : Sichtbarkeiten a) Leiter können ihren Namen auslesen Name protected ; gleiches Paket => Ja b) Leiter können ihre ID auslesen ID private ; andere Klasse => nein c) Büroangestellte können ihre ID auslesen ID private ; andere Klasse => nein d) Büroangestellte können ihren Namen auslesen Name protected ; Oberklasse => ja e) Büroangestellte können ihre Berwertung auslesen Bewertung package; anderes Paket => nein f) Büroangestellte können den Kredit von Kunden auslesen Kredit protected; anderes Paket, keine Oberklasse => nein g) Personen können den Namen anderer Personen auslesen Name protected; gleiche Klasse => ja h) Personen können die ID anderer Personen auslesen ID private; gleiche Klasse => ja i) Leiter können den Kredit von Kunden auslesen Kredit protected; gleiches Paket => Ja für Java ; andere Klasse => nein für UML Aufgabe 21 : Verfeinerung a) Ermitteln von Klassen Eine Möglichkeit wäre, entsprechend Aufgabe 19) eine Webapplikation zu erstellen, die die Daten verwaltet. Zur Speicherung der Daten benötigt man eine Persistenzklasse, die die Daten speichert. Ebenfalls benötigt man eine Klasse, die die Ausgabe und Eingabe von Daten handhabt. Eine Applikationsklasse kann die Verarbeitung der Daten übernehmen und eine weitere Klasse den Seitenfluss der Anwendung. Konkret gibt es bei diesem Vorschlag also folgende Klassen: Controller (Seitenfluss) Application (Verarbeitung der Daten) Storage (Zugriff auf JDBC) generierte JSP-Klasse (für Ein und Ausgabe) Request (enthält HTML-Formulardaten) Seite 1 von 6
b) Einzeichen der implementierungsnahen Klassen Entsprechend der Lösung aus Aufgabe 19) werden hier die Klassen gemäß dem Schichten- Muster angewandt. Die Klassen JSP, Controller, Application und Storage sind dementsprechend über unidirektionale Assoziationen verbunden. Die hier gegebene Lösung ist noch nicht komplett, zeigt aber bereits die Kernelemente auf. c) Einzeichnen wichtiger Operationen Die Operationen sind in den Objekten des Schichten-Musters abgelegt. Die in Aufgabe 15 ermittelte Datenstruktur wird von der Applikationsschicht bearbeitet. Diese Schicht reicht die Daten entsprechend an die Klassen Storage und Controller weiter. In dieser Lösung werden nur ein paar der nötigen Operationen angegeben. Seite 2 von 6
d) Eintragen der Sichtbarkeiten Möchte man Sichtbarkeiten festlegen, so müssen bereits die Pakete Das in dieser Lösung verwendete Programm nutzt eine Spezialisierung der UML in dem die Sichtbarkeit package mit ~ ausgedrückt wird. Alternativ zu diesem Lösungsvorschlag könnte man mit der Sichtbarkeit protected zulassen, dass in einem anderen Paket eine neue angepasste Version der Software entwickelt wird, die auf die bestehenden Operationen zugreifen kann. Seite 3 von 6
Aufgabe 22 : Entwurfsmuster State a) Umsetzen des Statecharts mittels des Musters State Die Klasse Verkauf hält ihren aktuellen Zustand in einem Attribut. Weitere Attribute dienen zur Unterstützung der Ausgabe des Automaten. So muss zum Beispiel bei der Ausgabe der Nachricht Rechnung die Bankverbindung angegeben werden. Die Start-Transition wird im Konstruktor der Klasse ausgeführt. Des Weiteren existiert noch eine Methode für das Unmarschalling der Nachrichten.!" " "! # $ $$# $ % & ' ( ) * $$, *,, # $ & % - (. & - ) % /, $, - 0 # $ % 1 % 2 2 ' ( ) / $$, $, - 0 *, $, - 3 *, $, - 4 *, $, - 5 # $ 2 %. % &. % # 2 % & / 6 $, $, - 0 *, $, - 3 *, $, - 4 # $ % 1 - ) 1 ) % % ( 7 ' ( ) /, $, - 0 *, $, - 3 *, $, - 4 / 8, $, 9! :! Seite 4 von 6
$$ *, * * *, * 6 $ *, *, ; $!" " "! 3 4 5 # $ $$# $ & % % < - ( ( 1 ) - % * $$ *, * *, # $ $$# $ % 1 - % 1 ) % - '. 1 & - ) *, # $ $$# $ % & % ( 7 % * *, * 8, $!. 6 $ =1 $$ 6 6 $ >! 6 $ *, * 8, $!. 6 $ =1 $$ 6 6 $ >! Die Automaten senden ihre Nachrichten über ein Framework, welches in diesem Falle in der Klasse Handler abgelegt ist. Dieses Framework hat die Aufgabe, einerseits bei asynchronen Nachrichten den Prozess entsprechend anzupassen und die ausgehenden Nachrichten an den richtigen Adressaten zu senden. Seite 5 von 6
b) Behandlung von Zustandshierarchien Wie immer gibt es bei der Behandlung von Zustandshierarchien verschiedene Konzepte für deren Umsetzung in Java. Ein Konzept ist, die hierarchischen Zustände aufzulösen und dann den flachen Automaten mit den bereits bekannten Methoden umzusetzen. => c) Muster State vs. Fallunterscheidung Das Muster State erlaubt eine sehr flexible und einfache Anpassung und Einführung neuer Zustände. Der Nachteil ist jedoch, dass viele Klassen benötigt werden, und so sowohl der Programmieraufwand bei der erstmaligen Erstellung, wie auch der Rechenaufwand bei der Ausführung des Automaten höher ist. ANHANG: Was Sie nach dieser Übung können sollten. Die Bedeutung der Sichtbarkeiten erklären Den Unterschied zwischen UML in der Analyse und UML beim Design erklären Das Entwurfsmuster State anwenden und erklären Hierarchische Zustände auflösen Ein Statechart entsprechend des Musters State in Java umsetzen. Seite 6 von 6