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.