Praktikum OOAD - Fachbereich Informatik

Transcription

Praktikum OOAD - Fachbereich Informatik
Prof. Dr. Ralf Hahn
Praktikum OOAD
SS2016
Michael Guist
Version 1.1
Praktikum OOAD
I) Ziel des Praktikums
Dieses Praktikum dient dazu, die Inhalte der OOAD-Vorlesung zu vertiefen und zu ergänzen.
Es ist ein wichtiger Bestandteil Ihrer eigenen Prüfungsvorbereitung. Das Praktikum besteht
aus unabhängigen Aufgaben, die an den Terminen jeweils gelöst werden sollen. Bei den
Aufgaben geht es darum, einen bestimmten Sachverhalt zu modellieren. Hierzu verwenden
Sie das Werkzeug »MagicDraw«.
II) Gliederung des Praktikums
Nachfolgend sind die Themenschwerpunkte pro Praktikumstermin aufgelistet:
1. Erste Modellierung mit UML und MagicDraw
2. Use Cases
3. Klassendiagramme
4. Sequenzdiagramme
5. Zustandsdiagramme
III) Testat und Regeln
In der Regel wird in 2-er Teams gearbeitet, die das ganze Praktikum über gleich bleiben.
Die erfolgreiche Bearbeitung der Aufgaben ist Voraussetzung für das Testat von OOAD und
somit zur Zulassung zur Prüfung am Ende des Semesters.
Bitte beachten Sie die veröffentlichten Praktikumstermine und Ihr x/y-Raster. Es besteht
Anwesenheitspflicht. Unentschuldigtes Fehlen führt zum Nichtbestehen des Praktikums!
Zu Beginn jeder Aufgabe wird die Vorbereitung überprüft. Bei der Vorbereitung geht es
weniger um eine perfekte Lösung sondern darum, dass Sie sich intensiv mit dem Thema
beschäftigt haben. Nur dann können Sie im Praktikum entsprechende Fragen stellen und
erzielen den optimalen Vorbereitungseffekt für die Klausur am Ende des Semesters.
Die ideale Vorbereitung besteht darin, dass Sie die Aufgabe zuerst alleine angehen (wie in
einer Klausur) und dann mit Ihrem Praktikumspartner ein gemeinsames Ergebnis erarbeiten.
Dabei fallen Ihnen sicher einige Unklarheiten auf, die Sie im Praktikumstermin klären können
(d.h. vor der Klausur).
Fehlt die Vorbereitung, erhalten beide Teammitglieder eine gelbe Karte. Nach 2 gelben Karten
gilt das Praktikum als nicht bestanden!
Prof. Dr. Ralf Hahn
Michael Guist
Praktikum OOAD
SS2016
Version 1.1
IV) Praktikumsdurchführung
Das Praktikum findet im CASE-Labor D14/211 statt. Dort stehen Ihnen Linux-Rechner zur
Verfügung, auf welchen das CASE-Tool MagicDraw installiert ist. Sie können MagicDraw aber
auch auf Ihrem Laptop installieren, wenn Sie die Aufgaben lieber auf Ihrem Laptop bearbeiten
wollen. Es wird die UML in der Version 2.x verwendet.
Nützliche Informationen finden Sie auf der Labor-Homepage unter
https://www.fbi.h-da.de/labore/case/laborausstattung/magicdraw.html.
Eine kurze Einführung in das Betriebssystem befindet sich unter http://www.fbi.hda.de/labore/case/laborausstattung unter der Rubrik „Einführung in die Hard- und Software“.
Anforderungen zum Anmelden im CASE-Labor:
Sie verwenden im Praktikum Ihren persönlichen Filespace auf dem Netzwerkspeicher des
Fachbereich Informatik - genannt Userv. Diesen Speicher können Sie auch von zu Hause
rund um die Uhr erreichen. Falls Sie diesen Speicher zum ersten Mal nutzen, müssen Sie im
OBS unter „Passwort ändern“ ein Passwort für diesen Account eintragen.
Im Case-Labor benötigen Sie zur Anmeldung Ihren Userv-Account mit Passwort:
Username:
i konkateniert mit <h_da-account>
Beispiel: Hans Müller hat sthamuel als h_da-Account.
Dann ist der UServ-Account isthamuel
Passwort:
Ihr persönliches Labor-Passwort, das Sie in OBS gesetzt haben
Initialisierung der Praktikumsumgebung
Zu Beginn des ersten Praktikumstermins wird Ihr Account mit einem Skript für OOAD
eingerichtet. Wie das funktioniert, erklärt Ihnen Ihr Betreuer.
Am Ende des Praktikums
Beide Personen einer Arbeitsgruppe müssen Zugriff auf die Modelldaten haben (falls ein
Arbeitsgruppenmitglied krank ist). Sie sollten deshalb das Projekt am Ende der Übung
austauschen d. h. z. B. auf den Userv-Bereich des anderen kopieren.
Das können Sie mit dem folgenden Befehl in einer Konsole tun (Der Doppelpunkt am Ende
des Befehls ist wichtig!)
scp –r <<Mein_Ordner_oder_Datei>> <<istUser>>@userv-shell.fbi.h-da.de:
Prof. Dr. Ralf Hahn
Michael Guist
Praktikum OOAD
SS2016
Version 1.1
1. Praktikumsaufgabe
Ziel
Machen Sie sich mit der Bedienung des CASE-Tools MagicDraw vertraut.
Vorbereitung
Lesen Sie die Anleitung für MagicDraw:
https://www.fbi.h-da.de/fileadmin/Labor/case/MagicDraw/AnleitungMarcel_WS1516.pdf
Weitere Hinweise finden Sie auf der Webseite des CASE-Labors.
Lesen Sie Teil 2 der Aufgabe und überlegen Sie sich auf einem Blatt Papier welche Klassen
„Ihr“ Schachspiel haben soll.
Hinweis
Nutzen Sie diesen Termin, um sich mit dem mächtigen Programm vertraut zu machen und
dadurch später Fehler zu vermeiden. Beachten Sie, dass beide Praktikumspartner mit der
Praktikumsumgebung und insbesondere auch mit MagicDraw vertraut sein müssen. Es ist
deshalb wichtig, dass sie eigenständig experimentieren und die einzelnen Funktionen
ausprobieren. Bei Fragen und Problemen wenden Sie sich bitte an Ihren Betreuer.
Aufgabe
Entwerfen Sie ein Modell für ein Schachspiel!
1. Erzeugen Sie ein Paket (Package) mit dem Namen „Praktikum 1“ und erstellen Sie alle
Ergebnisse der heutigen Übung in diesem Paket.
2. Erstellen Sie ein Klassendiagramm mit dem Namen „Schach“. Es sollte 5-10 relevante
Klassen und deren Beziehungen enthalten. Tragen Sie diese Klassen in das
Klassendiagramm ein. Ziehen Sie einen gerichteten Pfeil (eine Assoziation) von einer
Klasse A zur Klasse B, wenn A die Klasse B „kennt“.
3. Wichtiger Lerneffekt ist hierbei, wie Klassen mit dem Klassendiagramm zusammenhängen. Löschen Sie eine Klasse aus dem Diagramm und fügen Sie sie erneut hinzu (mit
Drag&Drop aus der linken Leiste). Was passiert?
Was passiert, wenn Sie ein 2. Klassendiagramm anlegen und eine vorhandene Klasse
darauf einfügen? Benennen Sie die Klasse temporär um und prüfen Sie was in dem
anderen Diagramm passiert.
4. Überlegen Sie, welche Aspekte sich gut mit einem Klassendiagramm darstellen lassen
und welche nicht. Was ist der Unterschied; was fehlt?
5. Wenn Sie „Ihr Schachspiel“ mit Klassen und Beziehungen dargestellt haben, sind Sie
fertig. Vergessen Sie nicht, die Ergebnisse mit Ihrem Praktikumspartner auszutauschen.
Außerdem sollten Sie sich darüber verständigen, wie Sie die Vorbereitung für die nächste
Übung angehen.
Prof. Dr. Ralf Hahn
Michael Guist
Praktikum OOAD
SS2016
Version 1.1
2. Praktikumsaufgabe
Ziel
Die Funktionalität eines Systems aus Benutzersicht dokumentieren.
Vorbereitung
Schlagen Sie die Begriffe Use-Case und Trigger nach. Lesen Sie die Tipps zur textuellen
Beschreibung von Use Cases aus der Vorlesung.
Füllen Sie das Use Case Formular auf der nächsten Seite mit dem Use Case aus der Aufgabe.
Aufgabe
Es soll ein Festplattenrekorder entwickelt werden.
Das Gerät soll dem Endkunden eine bequeme Aufnahme von Sendungen ermöglichen:
Zum Programmieren einer Aufnahme muss zuerst die Taste „Programmierung“ gedrückt
werden. Dann wird eine Übersicht der Sendungen angezeigt. Hier kann mit den Pfeiltasten
zwischen den Sendern und Zeiten navigiert werden, um die gewünschte Sendung
auszuwählen. Mit „OK“ wird die Auswahl bestätigt. Dann erscheint ein Popup, das die
Aufnahmedaten zur endgültigen Bestätigung anzeigt. Durch erneutes Drücken von „OK“ wird
die Aufnahme programmiert und vom System gespeichert. Statt zu bestätigen kann der
Benutzer aber auch „Zurück“ drücken. In diesem Fall wird wieder die Sendungsübersicht
angezeigt.
Falls die ausgewählte Aufnahme sich mit einer anderen - zuvor programmierten - Sendung
überschneidet, wird statt des Bestätigungs-Popups ein anderes Popup gezeigt. Es zeigt den
Text „Konflikt“ und die Aufnahmedaten der betroffenen Sendungen für 5 Sekunden an. Die
Programmierung wird dann abgebrochen.
Am Ende des Use Cases ist die Liste der programmierten Aufnahmen stets widerspruchsfrei.
Entwerfen Sie Anwendungsfälle für den Festplattenrekorder.
1.
Erzeugen Sie ein Paket (Package) mit dem Namen „Praktikum 2“ und erstellen Sie alle
Ergebnisse der heutigen Übung in diesem Paket.
2.
Erstellen Sie ein Use Case Diagramm mit Ihrem Use Case.
3.
Beschreiben Sie den Anwendungsfall in MagicDraw. In der Spezifikation finden Sie
Felder für Goal, Basic Flow, Alternative Flow. Den Trigger tragen Sie als Schritt 0 im
Basic Flow ein. Beachten Sie die Schreibregeln für Anwendungsfälle aus der
Vorlesung.
4.
Entwerfen Sie selbst einen Use Case für die Funktionalität „Aufnahme löschen“.
Prof. Dr. Ralf Hahn
Praktikum OOAD
SS2016
Michael Guist
Version 1.1
Use Case Name
Primary Actor
Further Actors
Stakeh. +
Interests
(nennen Sie 2
Stakeholder und
deren Interessen)
Success
Guarantees
Minimal
Guarantees
Trigger
Basic Course
(Main Success
Scenario)
Alternative
Courses
----
Prof. Dr. Ralf Hahn
Praktikum OOAD
SS2016
Michael Guist
Version 1.1
3. Praktikumsaufgabe
Ziel
Lernen Sie die Ausdrucksmöglichkeiten und Grenzen von Klassendiagrammen.
Vorbereitung
Bearbeiten Sie die Aufgabe bis einschließlich Punkt 3. Wenn Sie sich mit Ihrem Partner auf
ein Ergebnis geeinigt haben, erstellen Sie in Ihrem Modell ein neues Paket „Praktikum 3“.
Darin legen Sie die vorgegebenen Klassen mit ihren Beziehungen an und ergänzen das
Diagramm gemäß der Aufgabe.
Als Leitlinie bei der Bestimmung der Klassen können Sie das Entwurfsprinzip
„Trennung von Zuständigkeiten“ verwenden:
Unterteile das System so in Teile, dass jeder Teil genau eine Aufgabe hat!
 Diese Aufgabe wird auch nur von diesem Teil erledigt
 Die Abgrenzung gegenüber anderen Teilen ist klar erkennbar
 Die Aufgabe ist genau und prägnant definiert und spiegelt sich
im Namen des Teils wider
 Trenne Teile an denen sich (voraussichtlich) keine Änderungen ergeben,
von Teilen an denen sich wahrscheinlich Änderungen ergeben!
Vorteil von getrennten Zuständigkeiten:
Ein Systemteil, der nur eine Zuständigkeit hat, ändert sich nur, wenn an
dieser einen Zuständigkeit eine Änderung nötig wird! Das verbessert die
Wartbarkeit.
Wenn Sie die Zuständigkeiten sauber aufgeteilt haben, sollte jede Klasse genau eine Aufgabe
haben. Die Aufgabenbeschreibung lässt sich dann einfach und flüssig formulieren. Bei
Klassen, die gegen diese Regel verstoßen, verwenden Sie sehr schnell eine Aufzählung von
Punkten. Diese Klassen sollten Sie noch einmal durchdenken und eventuell aufteilen.
Prof. Dr. Ralf Hahn
Michael Guist
Praktikum OOAD
SS2016
Version 1.1
Aufgabe
Eine Bibliothek bietet ihren
Benutzern Medien, z.B.
Bücher, CDs und DVDs an.
Diese
sind
den
drei
Katalogen
„Allgemein“,
„Antiquarische Werke“ oder
„Gesetzestexte
und
Normen“ zugeordnet. Jeder
Benutzer hat einen Namen,
eine eindeutige Benutzernummer und ist für einen
oder mehrere Kataloge freigeschaltet. Es können nur Medien aus den freigeschalteten
Katalogen ausgeliehen bzw. vorgemerkt werden. Jedes Medium besitzt einen Titel und eine
Mediennummer. Da manche Medien recht beliebt sind, gibt es davon mehrere Exemplare.
Jedes Exemplar besitzt eine Inventarnummer, sowie die Regalnummer wo dieses Exemplar
zu finden ist.
1. Modellieren Sie die obigen Anforderungen ausgehend von dem vorgegebenen UML2
Klassendiagramm.
2. Tragen Sie in das Klassendiagramm die noch fehlenden Attribute, Multiplizitäten und
Navigationsrichtungen aus den obigen Anforderungen ein.
3. Ergänzen Sie die Methoden ausleihen() und vormerken(). Wählen Sie jeweils eine
sinnvolle Klasse aus und erweitern Sie die Methoden um erforderliche Parameter.
4. Vervollständigen Sie das Klassendiagramm, so dass man folgende Auswertungen
machen kann. Falls Sie deswegen weitere Klassen hinzufügen, so begründen Sie dies
mit einem Kommentar, den Sie der jeweiligen Klasse anhängen.

showPopularMedia (int n) — Welche Medien wurden mehr als n mal ausgeliehen?

showLazyUsers (int n) — Welche Benutzer haben etwas schon mehr als n mal zu
spät zurückgegeben?

showItemHistory (Exemplar e) — Wer hatte das Exemplar e wann ausgeliehen?

showUserHistory (Benutzer b) — Was hatte der Benutzer b wann ausgeliehen?
5. Überprüfen Sie das gesamte Diagramm auf Vollständigkeit. Beachten Sie
Multiplizitäten, Navigationsrichtungen und Leserichtungen.
Prof. Dr. Ralf Hahn
Michael Guist
Praktikum OOAD
SS2016
Version 1.1
4. Praktikumsaufgabe
Ziel
In diesem Praktikum geht es um Sequenzdiagramme.
Vorbereitung
Machen Sie sich vertraut mit der Notation und Bedeutung von Sequenzdiagrammen.
Analysieren Sie die vorgegebenen Klassen mit ihren Methoden und legen Sie die Klassen
mit den Methoden und Beziehungen in Ihrem Modell an. Legen Sie zusätzlich eine Klasse
myApp an. Von einem Objekt dieser Klasse aus sollen im Sequenzdiagramm die Aufrufe
der Grafikmethoden erfolgen.
Entwerfen Sie ein Sequenzdiagramm, welches Das Bild anlegt, aber noch nicht
abspeichert (letzteres sollen Sie erst am Praktikumstermin umsetzen).
Aufgabe
Beschreiben Sie in einem UML-Sequenzdiagramm, wie in Java eine
JPEG-Datei erzeugt wird, die ein graues Rechteck auf schwarzem
Hintergrund zeigt. Ein Bild im Speicher ist eine Instanz der Klasse
BufferedImage. Unmittelbar nach dem Erzeugen eines solchen
Objektes sind alle Bildpixel auf schwarz gesetzt, es muss also nur ein
graues Rechteck gezeichnet werden. Setzen Sie beliebige Werte für
die Bildbreite, Bildhöhe, sowie die Position und Größe des grauen
Rechtecks. Vergessen Sie nicht, das Bild abzuspeichern.
Gegeben sind folgende Klassen und Methoden (reduziert auf die benötigte Funktionalität):
Achten Sie darauf, dass Ihr Sequenzdiagramm korrekt ist. Das betrifft insbesondere die
Verwendung der Pfeile für synchrone und asynchrone Aufrufe.
Prof. Dr. Ralf Hahn
Praktikum OOAD
Michael Guist
SS2016
Version 1.1
Für das Sequenzdiagramm stehen Ihnen folgende Methoden zur Verfügung:
// Konstruktor von BufferedImage um eine Bildinstanz zu erzeugen.
// Verwenden Sie BufferedImage.TYPE_INT_RGB für den letzten Parameter
public BufferedImage (int width, int height, imageType: int)
// Graphics2D ist von Graphics abgeleitet
public Graphics2D BufferedImage.createGraphics ()
// Farbe setzen, in der gemalt werden soll z.B. auf RGB_GREEN
public void Graphics2D.setColor (Color c)
// Rechteck an die Stelle (x,y) mit Ausdehnung width x height zeichnen
public void Graphics2D.fillRect (int x, int y, int width, int height)
// Konstruktor von File um ein (leeres) File aus einem Dateinamen erzeugen
public File (String pathname)
// Bild in eine Datei schreiben.
// BufferedImage implementiert das Interface RenderedImage
// Verwenden Sie “JPG“ als Formatnamen
public static boolean ImageIO.write(RenderedImage im, String formatName, File out
Prof. Dr. Ralf Hahn
Praktikum OOAD
Michael Guist
SS2016
Version 1.1
5. Praktikumsaufgabe
Ziel
In diesem Praktikum geht es um UML-Zustandsdiagramme.
Vorbereitung
Machen Sie sich vertraut mit den verschiedenen Arten von Verhalten innerhalb eines
Zustands und den verschiedenen Transitionen.
Entwerfen Sie in MagicDraw ein Zustandsdiagramm. Zur Vereinfachung dürfen Sie
während der Vorbereitung davon ausgehen, dass der Text unmittelbar vor dem EOFZeichen weder mit einer Ziffer, noch mit einem Punkt oder Komma endet.
Aufgabe
Modellieren Sie mit Hilfe des
Fragments auf der rechten Seite
einen Konverter (Sie dürfen die
Zustände
gerne
umbenennen).
Dieser Konverter liest einen Text aus
der Eingabe und schreibt einen
entsprechend konvertierten Text in
die Ausgabe. Dabei wandelt er alle
Zahlen innerhalb des Textes vom
englischen Zahlenformat in das deutsche Zahlenformat um und lässt alles andere im Text
unverändert. Beachten Sie dabei folgende Punkte.
1. Im englischsprachigen Text werden Tausendergruppen durch Kommas getrennt und
Nachkommastellen werden durch einen Punkt abgetrennt. Im deutschen Zahlenformat
gibt es hingegen keine Tausendergruppen, und Nachkommastellen werden durch ein
Komma abgetrennt. Zur Vereinfachung dürfen Sie davon ausgehen, dass alle Zahlen in
dem Text stets syntaktisch korrekt nach dieser Regel dargestellt sind.
2. Eine beliebige Zahl kann unmittelbar vor den Satzzeichen Komma oder Punkt stehen.
3. Der Text wird mit einem end of file Zeichen („EOF“) abgeschlossen.
4. In Ihrem Zustandsdiagamm können Sie folgende Methoden verwenden:
-
char read () — liefert bei jedem Aufruf das nächste Zeichen der Eingabe.
-
void write (char z) — schreibt das Zeichen z in die Ausgabe.
Beispiel: Bei dem englischsprachigen Text
He paid $1,356,725 for 1,234.5 units. Not more than 27, but less than 30 cents<EOF>
soll der Konverter
He paid $1356725 for 1234,5 units. Not more than 27, but less than 30 cents<EOF>
in den Ausgabestrom schreiben.