Aufgaben - DHBW Stuttgart
Transcrição
Aufgaben - DHBW Stuttgart
Übungsaufgaben zur Vorlesung Software-Engineering II © Florian Unger, Stand 2014-01 Übungsaufgaben zur Vorlesung Objektorientiertes Software-Engineering I. Vorbemerkungen Die vorliegenden Übungsaufgaben sind für die Vertiefung der Vorlesungsinhalte gedacht. Neben der Vermittlung des Wissens über Syntax und Anwendungsmöglichkeiten der UML ist es Ziel der Vorlesung, die Fähigkeit zur Bearbeitung konkreter Problemstellungen zu vermitteln. Ohne ein praktische Einüben ist dieses Lernziel aber nicht zu erreichen. Dieses Einüben ist Ziel der vorliegenden Übungsaufgaben. Alle Aufgaben sind zur selbständigen Bearbeitung durch Sie als Teilnehmer der Vorlesung gedacht. Gerne können Sie diese Aufgaben gemeinsam mit anderen Studierenden bearbeiten. Diskussionen über mögliche Lösungswege sind dabei durchaus fruchtbar. Die Aufgaben beinhalten teilweise Lösungshinweise. Komplette Lösungen für die Aufgaben stehen nicht zur Verfügung. Grund hierfür ist, daß eine fertige Musterlösung abweichende eigene Lösungen abqualifiziert. Das ist nicht erwünscht: Bei vielen Aufgaben gibt es unterschiedliche korrekte Lösungsmöglichkeiten. Darüberhinaus soll das Nichtvorhandensein einer Musterlösung die eigene Erarbeitung einer Lösung sowie die gemeinsame Diskussion eines Lösungsvorschlags in der Vorlesung fördern. Dies dient wesentlich mehr dem Lernerfolg als das Abheften einer fertigen Lösung. Die Vorlesung behandelt die UML und ist jeweils auf den aktuellsten Stand dieser Modellierungssprache angepaßt. Entsprechend werden die Aufgaben jeweils soweit erforderlich an den Vorlesungsinhalt angepaßt. Der Inhalt der Vorlesung ist im Umfang nicht immer gleich. Insbesondere der Umfang der in der Vorlesung besprochenen Design-Patterns ändert sich. Einige der im Abschnitt über Design Patterns angegebenen Aufgaben können Sie daher evtl. nicht bearbeiten. Viele der Aufgaben sind direkt den Klausuren aus Vorjahren entnommen. Die Bearbeitung der Aufgaben ist daher zur Klausurvorbereitung geeignet. Seite 1 Übungsaufgaben zur Vorlesung Software-Engineering II © Florian Unger, Stand 2014-01 II. Anforderungsanalyse A. JB-Heroes: Erstellung eines Fragenkataloges Folgende Projektbeschreibung sei gegeben: Die JB-Heroes GmbH, ein Lieferant von Jukeboxen, wendet sich an Ihr Unternehmen: Sie will eine Software-Steuerung für eine neuartige Jukebox entwickeln lassen. Einem knapp gehaltenen Anschreiben entnehmen Sie eine kurze Charakterisierung der von JB-Heroes geplanten Produktinnovation: [...] JB-Heroes geht mit der Zeit: Das Gerät verfügt nicht mehr wie früher über physische Tonträger, sondern über elektronisch gespeicherte Musikstücke. Des Weiteren sollen nicht mehr wie früher nur Einzeltitel abgespielt werden können. Die Steuerung erfolgt per Software. [...] Weiterhin erhalten Sie vom Jukebox-Hersteller folgenden Anforderungskatalog als Anlage zu dem Anschreiben: • • • • • • • • • • Die Jukebox muss verschiedene Titel in einem Titelpool enthalten können. Der Betreiber der Jukebox pflegt diesen Titelpool: Er fügt neue Titel hinzu oder löscht bestehende Titel. Für Titel sind neben den Tondaten die Bezeichnung, der Interpret, die Spieldauer sowie das Entstehungsjahr obligatorisch angegeben. Die Titel sollen von der Website des Herstellers herunter geladen werden können. Dort liegen die Titel vollständig mit allen erforderlichen Daten vor. Alternativ stehen dem Betreiber von JB-Heroes im Abonnement gelieferte Titelsammlungen auf Datenträgern zur Verfügung, aus denen er auswählen kann. In einer optionalen Erweiterungsstufe soll der Betreiber Titel aus dem Internet herunterladen können, wobei der Betreiber alle gängigen Tonformate verwenden können soll. Die Metadaten muss er selber hinzufügen oder sie werden aus der verwendeten Quelle übernommen. Benutzer dürfen einzelne Titel oder Playlisten auswählen und abspielen. Auswahl von Titeln ist möglich nach Interpret oder Bezeichnung. Die Auswahl von Playlisten erfolgt nach deren Name. Der Preis für einzelne Titel kann vom Betreiber allgemein festgelegt werden. Alle Titel haben dann den gleichen Preis. Alternativ kann der Preis nach der Spielzeit des Titels bestimmt werden, dann konfiguriert der Betreiber einen Minutenpreis. Für Playlisten ist der Preis dann abhängig von der Anzahl der Titel bzw. der Gesamtspielzeit, jeweils abzüglich eines konfigurierbaren Prozentsatzes. Der Preis von Titeln und Playlisten muss dem Benutzer vor dem Auswählen angezeigt werden. Bevorrechtigte Benutzer (vom Betreiber verwaltet) dürfen Playlisten erstellen (anlegen, verändern, löschen). In einer Playliste sind Titel aus dem Titelpool in einer vom anlegenden Benutzer festgelegten Reihenfolge enthalten. Statt eines Titels kann man eine ganze Playliste abspielen (in zufälliger oder vorgegebener Reihenfolge). Bevorrechtigte Benutzer müssen kein Geld einwerfen, sie werden von der SoftwareSteuerung abgerechnet: Der Betreiber kann aus der Jukebox wöchentlich automatisch erstellte Abrechnungen ablesen. Für jede gespielte Playliste wird dem Eigentümer der Liste ein Anteil des Preises gutgeschrieben. Der Anteil ist vom Betreiber konfigurierbar, z.B. 10%. Nur Eigentümer oder der Betreiber dürfen Playlisten verändern oder löschen. Der Betreiber kann aus dem Gerät wöchentlich automatisch erstellte Statistiken abrufen, z.B. welche Titel und welche Playlisten wie oft gespielt worden sind. Die JB-Heroes GmbH bittet in ihrem Anschreiben, anhand der Anforderungen ein Angebot zu erstellen. Der Leiter „Project Services“ Ihres Unternehmensbereichs überträgt Ihnen die Aufgabe, die weitere Vorgehensweise und die Kommunikation mit JB-Heroes in die Hand zu nehmen. Seite 2 Übungsaufgaben zur Vorlesung Software-Engineering II © Florian Unger, Stand 2014-01 Bitte versetzen Sie sich in die geschilderte Situation des Projektleiters in diesem Projekt. Die übliche Vorgehensweise in der Praxis ist, mit dem Kunden Kontakt aufzunehmen und zur Klärung offener Fragen einen Gesprächstermin auszumachen. Hierfür erhält der Kunde einen Fragenbogen vorab, damit ihm eine Vorbereitung auf das Gespräch möglich ist, etwa durch Befragung von Fachoder Technikexperten. Ein solcher Fragebogen muss also in einer für den Kunden verständlichen Form abgefasst sein, damit eine solche Vorbereitung möglich ist. Die Fragen müssen so vollständig abgefasst sein, dass der Auftragnehmer eine genaue Vorstellung des gesamten Vorhabens gewinnen kann. Nach einem Gespräch muss es möglich sein, die zu erbringenden Leistungen zu beschreiben, nicht zu erbringende Leistungen klar abzugrenzen, eine Aufwandsabschätzung vorzunehmen, die benötigten Skills und Ressourcen zu benennen, einen groben Projektplan (WBS) zu erstellen, sowie ein bindendes Angebot zu erstellen. Ihre Aufgabe: Erstellen Sie den Fragenkatalog an den Projektleiter von JB-Heroes GmbH mit denjenigen Anforderungen, die Ihnen aus dem Anforderungskatalog klärungsbedürftig erscheinen. Hinterfragen Sie auch klare Festlegungen, wenn dies aus Ihrer Erfahrung heraus sinnvoll erscheint. Lösungshinweis: In der Vorlesung werden die von Ihnen erarbeiteten Fragen mit dem Projektleiter der JB-Heroes GmbH besprochen. Daraus ergibt sich für alle Teilnehme der Vorlesung ein einheitliches Bild der Anforderungen. Sie benötigen diese Ergebnisse für weitere folgende Aufgaben. B. JB-Heroes: Abgrenzung funktionale von nichtfunktionalen Anforderungen Bitte gehen Sie vom Anforderungskatalog und von den Ergebnissen des Gespräches mit dem Projektleiter der JBHeroes aus. a) Grenzen Sie funktionale von den nicht funktionalen Anforderungen ab. Für die folgenden Aufgaben sind nur noch die funktionalen Anforderungen relevant. b) Erstellen Sie Listen von Akteuren und Anwendungsfällen. Die Liste der Anwendungsfälle muss die Namen der Anwendungsfälle, sowie je Anwendungsfall die Akteure beinhalten, die dem Anwendungsfall zugeordnet sind. Seite 3 Übungsaufgaben zur Vorlesung Software-Engineering II © Florian Unger, Stand 2014-01 III. Anwendungsfallmodellierung A. JB-Heroes: Erstellung eines Anwendungsfalldiagramm Gehen Sie von den von Ihnen bereits erarbeiteten Listen der Anwendungsfälle sowie der Akteure für JB-Heroes aus. Erstellen Sie ein Anwendungsfalldiagramm aus diesen Listen. Hierfür müssen Sie über die Listen der Anwendungsfälle hinaus: Beziehungen der Anwendungsfälle untereinander ermitteln Beziehungen der Akteure untereinander ermitteln B. JB-Heroes: Beschreibung eines Anwendungsfalles Beschreiben Sie einen Anwendungsfall in Textform. Sofern vorhanden, wählen Sie hierfür einen Anwendungsfall, der über Beziehungen zu anderen Anwendungsfällen verfügt (include und/oder extend). C. Fehler in einem Anwendungsfalldiagramm Markieren und benennen Sie die syntaktischen Fehler im folgenden UML-Anwendungsfalldiagramm: uc doubt System konfigurieren Konfiguration speichern <<include>> Release versionieren [customized version liegt vor] extension point: EP1 <<extend>> extension points EP1: custom Konfiguration ausliefern Seite 4 Übungsaufgaben zur Vorlesung Software-Engineering II © Florian Unger, Stand 2014-01 D. Rekonstruktion eines Anwendungsfalldiagramms Im Projekt WebShop für Barbarian.de wurden Anwendungsfälle modelliert. Ein Anwendungsfalldiagramm ist jedoch nicht mehr auffindbar, nur die Beschreibungen der Anwendungsfälle sind noch vorhanden. Im Folgenden ist eine Beschreibung eines dieser Anwendungsfälle dargestellt. Sie sollen anhand dieses Fragments ein Anwendungsfalldiagramm soweit rekonstruieren, wie es mit den Angaben möglich ist. Name Akteur Ablauf … Artikel ansehen Benutzer 1. Der Benutzer wählt den Artikel aus 2. Das System zeigt Bild und Beschreibung des Artikels an. 3. EP 1: Erweiterung durch Anwendungsfall Verweis auf LoveDVD anzeigen. Wenn der Benutzer einen Artikel vom Typ DVD ausgewählt hat, kann er zum DVD-Verleih LoveDVD verzweigen. 4. Verzweigung zu Anwendungsfall Ein-Klick-Option anzeigen 5. … … Lösungshinweis: Die Anwendungsfallbeschreibung ist nicht vollständig wiedergegeben: Für die Aufgabenstellung nicht benötigte Aspekte der Beschreibung sind nicht dargestellt. E. Erstellung eines Anwendungsfalldiagramms Erstellen Sie auf Basis folgender Anforderungsbeschreibung für ein Programm Auftragsbearbeitung ein Anwendungsfalldiagramm: 1. Der Sachbearbeiter kann einen Auftrag annehmen. 2. Der Sachbearbeiter kann einen Auftraggeber anlegen 3. Sofern beim Annehmen eines Auftrags der Auftraggeber noch nicht angelegt ist, muß der Sachbearbeiter zusätzlich den Auftraggeber anlegen (entspricht dem Vorgang im vorigen Punkt). 4. Sowohl der Sachbearbeiter wie auch der Teamleiter können Eskalationen anlegen. 5. Der Teamleiter kann darüber hinaus Eskalationen abschließen. 6. Beim Anlegen einer Eskalation ist optional möglich, beim im System einen Rückrufwunsch zu hinterlegen, wenn der Auftraggeber das wünscht. 7. Vor jeglicher Tätigkeit am System müssen sich Benutzer (Sachbearbeiter und Teamleiter) am System anmelden. Sie können sich außerdem vom System abmelden. Geben Sie für alle angegebenen Details eine Lösung im Diagramm an, auch wenn geeignete alternative Lösungsmöglichkeiten existieren, die nicht in einem Diagramm dargestellt werden würden. Verwenden Sie in Ihrer Lösung Vererbungs-, extend- und / oder include-Beziehungen an den dafür geeigneten Stellen, um Redundanzen in Ihrer Lösung zu vermeiden. Seite 5 Übungsaufgaben zur Vorlesung Software-Engineering II © Florian Unger, Stand 2014-01 IV. Klassen- und Objektdiagramme A. JB-Heroes: OO-Analyse Erstellen Sie eine OO-Analyse für JBHeroes. Gehen Sie dabei von den von Ihnen bisher erzielten Ergebnissen aus und identifizieren Sie Geschäftsklassen anhand der in der Vorlesung vorgestellten Vorgehensweise, u.a.: Begriffe und Abstraktionen Beziehungen zwischen Begriffen Eigenschaften und Verhalten Abgrenzungen Erstellen Sie ein UML-Klassendiagramm. B. Abstraktionen Identifizieren Sie die Abstraktionen aller aufgeführten Begriffe und erstellen Sie ein UMLKlassendiagramm: Landfahrzeug, Pferdekutsche, Segelflugzeug, Hubschrauber, Düsenjet, Segelboot, Motoryacht, Fahrzeug, U-Boot, PKW, Wasserfahrzeug, motorisiertes Fahrzeug, Luftfahrzeug, unmotorisiertes Fahrzeug Lösungshinweise: Für diese Aufgabe gibt es viele verschiedene mögliche Lösungsansätze. C. Klassendiagramme Erstellen Sie UML-Klassendiagramme für die folgenden Sachverhalte: 1. Ein Scanner hat die Eigenschaften aufösung, scanBreite, scanHöhe, sowie die abgeleitete Eigenschaft scanFläche. scanBreite und scanHöhe sind private, die anderen öffentlich sichtbare Attribute. Alle Attribute haben den Typ Integer. 2. Ein Buch hat die Eigenschaft kapitel (geordnete duplikatfreie Liste) vom Typ Abschnitt. 3. Scanner implementiert die Methode scannen(). Diese hat den Parameter auflösung vom Typ Integer sowie linksOben und rechtsUnten jeweils vom Typ Point. Alle Paramater werden als Eingabeparameter genutzt. Die Methode kann die Parameter linksOben und rechtsUnten korrigieren, der Aufrufer kann diese Werte also auswerten. Die Methode liefert ein Exemplar der Klasse Graphik zurück. 4. Ein Computer besteht aus einer CPU, einer Speichereinheit, einem oder mehreren Eingabegeräten und beliebig vielen Ausgabegeräten. Maus und Tastatur sind Eingabegeräte. Eingabegeräte und Ausgabegeräte sind Peripheriegeräte. Eine CPU hat ein Attribut taktfrequenz vom Typ Integer, eine Speichereinheit hat ein Attribut volumen vom Typ Integer. 5. Studenten besuchen eine oder mehrere Vorlesungen. Vorlesungen werden von 5 oder mehr Studenten besucht. 6. Ein PKW hat 4 Räder und optional ein Reserverad. Ein Motorrad hat 2 Räder. Räder sind existenzabhängig von PKW oder Motorrad. Reserverad ist existenzabhängig von PKW. Rad und Reserverad haben jeweils die Attribute profiltiefe und umfang vom Typ Integer. 7. Für jeden Studenten liegen Leistungsnachweise vor. Leistungsnachweise können Praktikumsbescheinigungen, Klausurergebnisse, Testatergebnisse, Bachelorarbeit oder Seminarscheine sein. Bachelorarbeiten und Klausurergebnisse sind benotete Leistungsnachweise. benotete Leistungsnachweise haben eine Note. Es gibt keine Exemplare der Klassen Leistungsnachweis und benoteter Leistungsnachweis. Seite 6 Übungsaufgaben zur Vorlesung Software-Engineering II © Florian Unger, Stand 2014-01 8. Medien können CDs oder Bücher sein. Bücher kommen in den Ausprägungen „Gebunden“, „Taschenbuch“, „Heft“ vor (Aufzählungstyp / Enumeration!). 9. Die Klasse Layout ist abhängig von der Klasse FontTable. 10. Informationsfluß: Die Informationseinheit Tabelle fließt von Klasse Kalkulator zur Klasse Drucker. 11. Zu jedem Kalkulator gibt es genau einen Drucker. Die Beziehung zwischen Kalkulator und Drucker hat den Beziehungsnamen druckt. Entlang der Beziehung druckt fließt die Informationseinheit Tabelle in Richtung Drucker. 12. Die Informationseinheit Tabelle wird durch die Klasse TabellenEintrag implementiert. TabellenEintrag hat die Attribute data und seitenformat. 13. Die Klasse TabellenEintrag verwendet die Klasse Zeile. 14. Die Klasse Picker ist generisch: Sie verwendet den generischen Typ T. Die Klasse DatePicker ist eine Ausprägung der Klasse Picker, bei der der generische Typ T an den Typ Date gebunden wird. 15. Kabel ist eine Klasse, die das Interface CableSpec implementiert. Die Klasse Netzwerk nutzt das Interface CableSpec. 16. Die Klasse Netzwerk nutzt das Interface CableSpec, das von der Klasse Kabel bereitgestellt wird ( Lollipop-Notation). 17. Die Klasse Layout hat das Attribut orientation. Dieses Attribut ist ein Schlüsselattribut. D. Objektdiagramme Erstellen Sie UML-Objektdiagramme für die folgenden Sachverhalte. Geben Sie alle möglichen Attribute im Diagramm immer mit an. 1. Der Student Hans besucht die Vorlesungen OOSE und Grundlagen der Mathematik. Die Studentin Petra besucht die Vorlesungen OOSE und Grundlagen der Elektrotechnik. (Siehe Klassendiagramm Nr. 5.) 2. Der PKW p hat 4 Räder vl, vr, hl, hr und ein Reserverad r. Das Reserverad hat die Profiltiefe 3. Alle Räder haben den Umfang 195. (Siehe Klassendiagramm Nr. 6.) 3. Ein beliebiges Objektdiagramm zum Klassendiagramm Nr. 4. E. Fehler in einem Klassendiagramm Ihr Kollege ist Dozent für UML an der Volkshochschule und hat die Korrektur einer Übungsaufgabe in seinem Abendkurs beinahe abgeschlossen. Leider hat er sich den Sehnerv gebrochen, als er sich gerade der letzten verbliebenen Korrektur zuwenden wollte. Da Ihr Kollege Sie als guten Kenner der UML schätzt, bittet er Sie das Prüfungsexemplar durchzusehen, das Herr Wolters abgegeben hat. Ihr Kollege hatte die Aufgabe gestellt, die im folgenden Abschnitt angegebenen Sachverhalte in einem Klassendiagramm zu modellieren: Ein Schreibtisch ist ein spezielles Möbel. Möbel haben eine Eigenschaft Material mit den möglichen Ausprägungen Massivholz, Kunststofffurnier, Echtholzfurnier. Ein Schreibtisch hat eine Arbeitsplatte mit den Eigenschaften tiefe und breite jeweils von Typ Integer sowie ein bis drei Auszüge. Ein Auszug kann eine Kippsicherung sowie ein Schloß haben oder nicht. Er verfügt über eine Innenausstattung, die es wiederum in drei Ausprägungen gibt: Stiftablage, Hängeregister, Schublade. Ein Hängeregister hat ein oder zwei Körbe. Eine Stiftablage hat drei bis fünf Fächer. Eine Schublade hat eine optionale Unterteilung. Ihre Aufgabe: Markieren Sie in der folgenden Abbildung die syntaktischen Fehler, geben Sie an, dass es sich um syntaktische Fehler handelt, sowie benennen Sie diese stichwortartig. Beispiel: „Syntax: Beide Enden einer Beziehung müssen verbunden sein.“ Seite 7 Übungsaufgaben zur Vorlesung Software-Engineering II © Florian Unger, Stand 2014-01 Ferner markieren Sie Fehler, durch die das Klassendiagramm die Aufgabenbeschreibung inhaltlich nicht korrekt abbildet und beschreiben Sie diese Fehler stichwortartig. Beispiel: „Inhalt: Kardinalität 1..* falsch.“ Material {enum} <<abstract>> Möbel Massivholz Kunststofffurnier Echtholzfurnier <<concrete>> Schreibtisch Arbeitsplatte 1 Integer tiefe Integer breite Auszug 2..3 bool kippsicherung 1 Innenausstattung Stiftablage 3, 5 Fach Seite 8 Hängeregister 1..2 Unterteilung Schublade Übungsaufgaben zur Vorlesung Software-Engineering II © Florian Unger, Stand 2014-01 V. OO-Design A. Verständnisfragen Beantworten Sie die folgenden Verständnisfragen schriftlich: 1. Was ist der Zweck des OO-Design im Gegensatz zum Zweck der OO-Analyse? 2. Welche Gründe sprechen dafür (in hinreichend großen Projekten), OO-Analyse-Modell nicht in das OO-Design-Modell zu überführen, sondern als separates Modell beizubehalten? 3. Nennen Sie Modellierungsaspekte, die typischerweise erst beim Übergang von OO-Analyse auf das OO-Design betrachtet werden. B. Entwurf für eine Organisationsstruktur Die Firma „Boss - Feine Schubkarren“ hat folgende Organisation: Big Boss Leiter Marketing Assistent Leiter Produktion Designer Werkleiter 1 Arbeiter 1 Arbeiter 2 Direktionsassistentin Werkleiter 2 Arbeiter 3 Leiter Vertrieb Verpacker Monteur Dabei gilt: Jeder Mitarbeiter erhält ein Gehalt. Leitende Mitarbeiter (Mitarbeiter mit Untergebenen) erhalten zusätzlich eine Prämie. Die Personalkosten für einen Mitarbeiters bestimmen sich durch die Summe der Gehälter und Prämien dieses Mitarbeiters zzgl. der Personalkosten der diesem zugeordneten Mitarbeiter. Die Gehälter und Prämien für einen Teil der Mitarbeiter: Mitarbeiter Gehalt Prämie Leiter Produktion 1000 500 Werkleiter 1 700 300 Werkleiter 2 650 250 Arbeiter 1 200 (keine) Arbeiter 2 200 (keine) Arbeiter 3 200 (keine) Monteur 200 (keine) a) Erstellen Sie ein Klassendiagramm für ein OO-Design, das diese und ähnliche Organisationsstrukturen abbildet. b) Erstellen Sie ein Objektdiagramm, das die folgenden Personen umfaßt: Leiter Produktion, Werkleiter 1, Werkleiter 2, Arbeiter 1, Arbeiter 2, Arbeiter 3, Monteur. c) Definieren sie Operationen für: Berechnung der Personalkosten von Mitarbeitern Hinzufügen und Entfernen von Mitarbeitern in die bzw. aus der Organisation Prüfen, zu welchen Leitenden Mitarbeitern ein Mitarbeiter zugeordnet ist (Beispiel: Arbeiter 1 gehört zu Werkleiter 1, zu Leiter Produktion, sowie zu Big Boss.) Ergänzen Sie das Klassendiagramm entsprechend. Seite 9 Übungsaufgaben zur Vorlesung Software-Engineering II © Florian Unger, Stand 2014-01 d) Implementieren Sie das Modell inklusive der definierten Operationen in Java. Erstellen Sie dann ein Sequenzdiagramme für folgende Abläufe: Berechnung der Personalkosten von Leiter Produktion. Geben Sie dabei konkrete Werte für die Berechnung an. Prüfung, zu wem der Mitarbeiter Monteur angehört. Hinzufügen des neuen Mitarbeiters Graphikdesigner als Untergebenen des Leiter Marketing Ausscheiden des Mitarbeiters Arbeiter 2 aus dem Unternehmen C. Entwurf für ein Nachrichtensystem Ein Entwurf für ein System zur Bearbeitung von Nachrichten soll erstellt werden. Ein Fragment eines Klassenmodell liegt bereits vor: Nachricht StartUrladung Nutzdaten EndeUrladung In diesem Modell stellt jede konkrete Klasse einen bestimmten Typ von Nachricht dar. Die Klassen weisen unterschiedliche Exemplarvariablen auf, mit denen die Nachrichteninhalte repräsentiert werden (nicht in der o.a. Abbildung dargestellt). Die Nachrichtentypen müssen jeweils unterschiedlich verarbeitet werden. Hierfür hat Ihr Kollege Herr Wolters bereits eine Klasse Importer vorbereitet, die die Verarbeitung der Nachrichten übernehmen soll. Die Klasse Importer weist die folgende processNachricht Methode auf: public void bearbeiteNachricht() { Nachricht nachricht = getNextNachricht(); if (nachricht instanceof StartUrladung) { bearbeiteUrladungsstart(nachricht); } else if (nachricht instanceof EndeUrladung) { bearbeiteUrladungsende(nachricht); } else { bearbeiteDatennachricht(nachricht); } } Mit der Methode getNextNachricht() wird in der Klasse Importer die jeweils nächste zur Verarbeitung anstehende Nachricht ermittelt. Weiterhin beinhaltet die Klasse Importer die Methoden bearbeiteUrladungsstart(), bearbeiteUrladungsende(), sowie bearbeiteDatennachricht(). In diesen Methoden soll jeweils die Verarbeitung eines Nachrichtentyps implementiert werden. Gehen Sie davon aus, dass es deutlich mehr Nachrichtentypen (also weitere Unterklassen der Klasse Nachricht) gibt und dass diese Typen Gemeinsamkeiten bei der Verarbeitung aufweisen. Welchen Nachteil hat die vorgeschlagene Lösung in dieser Situation? Erstellen Sie einen Vorschlag, wie ein geeignetes Design aussehen sollte. Seite 10 Übungsaufgaben zur Vorlesung Software-Engineering II © Florian Unger, Stand 2014-01 VI. Komponentendiagramme A. Ergänzung eines Komponentendiagramms <<component>> X <<component>> Y Ergänzen Sie das angegebene Diagramm um die folgenden Sachverhalte: Component X bietet die Schnittstelle dump über einen Port an. Component Y importiert die Schnittstelle dump von Component X. Component X beinhaltet eine Component C. C stellt die Schnittstelle dump bereit. Component X delegiert die Schnittstelle dump an Component C. Seite 11 Übungsaufgaben zur Vorlesung Software-Engineering II © Florian Unger, Stand 2014-01 VII. Sequenzdiagramme A. Verständnisfragen Formulieren Sie schriftlich Antworten auf die folgenden Fragen: 1. Grenzen Sie die Begriffe Methode und Nachricht voneinander ab! 2. Mit welchem Begriff werden die UML-Diagrammtypen Sequenz-, Kommunikations-, Interaktionsübersichts- und Timingdiagramme bezeichnet? 3. Was genau wird durch Sequenz- und Kommunikationsdiagramme modelliert? 4. Inwiefern sind Sequenzdiagramme mit kombinierten Fragmenten der Ausdrucksmächtigkeit von Nassi-Shneidermann-Diagrammen (Struktogrammen) überlegen? Nennen Sie mehrere konkrete Konstrukte. 5. Welche Bedeutung hat das Fragment „critical“? Zu welchem Zweck kann es sinnvoll eingesetzt werden? B. Ausführungsreihenfolgen sd Beispiel 1 :A :B par A1 B1 A2 B2 a) Ist die Ausführungsreihenfolge A1 -> A2 -> B1 -> B2 durch das Modell abgedeckt? Wenn nein, nennen Sie eine möglich Reihenfolge. b) Ist die Ausführungsreihenfolge A1 -> A2 -> B1 -> B2 durch das Modell abgedeckt, wenn „par“ durch „seq“ ersetzt wird? Wenn nein, nennen Sie eine möglich Reihenfolge. c) Ist die Ausführungsreihenfolge A1 -> A2 -> B1 -> B2 durch das Modell abgedeckt, wenn „par“ durch „strict“ ersetzt wird? Wenn nein, nennen Sie eine möglich Reihenfolge. C. Erstellung eines Sequenzdiagramms Erstellen Sie ein Sequenzdiagramm „Beispiel 2“, das die folgende Interaktion modelliert. a prüft, ob iter > 0 ist und sendet in diesem Fall messen() an b, ansonsten startup() an c. Gleichzeitig sendet a observe() an x. x sendet daraufhin wiederholt beat() an a. x sendet sich nach jeder Nachricht beat() die Nachricht wait(). Dies geschieht solange, bis beatVar = false ist. a sendet zu einem beliebigen Zeitpunkt, nachdem es die Nachricht observe() gesendet hat, beatOff() an x. Alle Nachrichten sollen synchron sein. Sie können die Aktionssequenzen und Antwortnachrichten weglassen. Seite 12 Übungsaufgaben zur Vorlesung Software-Engineering II © Florian Unger, Stand 2014-01 D. Fehler in einem Sequenzdiagramm Markieren und benennen Sie die syntaktischen Fehler im folgenden UML-Sequenzdiagramm. Wetterstation w:Wetterdaten s:Statistikanzeige aktuelleAnzeige: register(s) changeTemp(t) notifyObservers() loop(0,anz. Observer) update(t) result(update) ok = notifyObservers() Seite 13 Übungsaufgaben zur Vorlesung Software-Engineering II © Florian Unger, Stand 2014-01 VIII. Aktivitätsdiagramme A. JB-Heroes: Erstellung eines Aktivitätsdiagramms für einen Anwendungsfall Erstellen Sie ein Aktivitätsdiagramm, das den Ablauf des im Folgenden angegebenen Anwendungsfalls inklusive der Ausnahmeabläufe abbildet. Notieren Sie, welche Aspekte des Ablaufs Sie mit Aktivitätsdiagrammen nicht abbilden können. Name Kurzbezeichnung Beschreibung Ziel Akteure Auslöser Verwendete Information Ausgehende Information Vorbedingungen Nachbedingungen Ablauf im Regelfall Seite 14 Musik abspielen UC_JBH_1 Ein Benutzer der Juke-Box spielt einen oder mehrere Titel oder Playlisten ab Benutzer Liste der derzeit abgespielten Titel Liste der abzuspielenden Titel, ergänzt um vom Benutzer hinzugefügte Titel Ergänzte Statistik Ergänzte Gutschriften von Playlisteneigentümern Der Titelpool enthält Titel Mindestens ein Titel oder eine Playliste ist der Liste der abzuspielenden Titel hinzugefügt worden. Der Preis für die gespielten Titel oder Playlisten ist in der Jukebox eingeworfen worden. Den Eigentümern der ausgewählten Playlisten sind Gutschriften zugeschrieben worden. Die ausgewählten Titel und Playlisten sind in einer Statistik erfasst worden. 1. Der Benutzer veranlasst die Anzeige der auswählbaren Titel und Playlisten. 2. Der Benutzer wählt eine Menge von Titeln oder Playlisten aus. Das System zeigt jeweils die Summe der Spielzeiten aller ausgewählten Titel und Playlisten sowie den Gesamtpreis dafür an. Zu jeder Playliste wählt der Benutzer aus, ob die Titel in der dort vorgegebenen Reihenfolge oder zufällig abgespielt werden sollen. 3. Der Benutzer wirft Münzen in das System ein, bis der angezeigte Betrag erreicht wurde oder überschritten ist. Das System zeigt jeweils die Menge des eingeworfenen Geldes an. 4. Das System gibt Wechselgeld passend aus. 5. Das System fügt die vom Benutzer ausgewählten Titel und die in den ausgewählten Playlisten enthaltenen Titel in die Liste der abzuspielenden Titel ein. Die Titel werden an diese Liste hinten angehängt in der Reihenfolge, in der der Benutzer sie ausgewählt hatte. Anstelle einer Playliste werden die in der Playliste enthaltenen Titel in die Liste hinten eingefügt. Die Titel einer Playlisten werden jeweils, falls der Benutzer in Schritt 2 eine zufällige Reihenfolge für die Titel dieser Playliste ausgewählt hatte, in zufälliger Reihenfolge eingefügt, sonst in der Reihenfolge, in der die Titel in der Playliste festlegt sind. 6. Für jede Playliste ermittelt das System den Eigentümer und den Preis und schreibt dem Konto des Eigentümers einen Betrag in Höhe des Preises mal dem Provisionsfaktor gut. 7. Die Abspielstatistik wird ergänzt um Einträge für jeden gespielten Übungsaufgaben zur Vorlesung Software-Engineering II © Florian Unger, Stand 2014-01 Ausnahme 1 Ausnahme 2 Ausnahme 3 Ausnahme 4 Titel (also auch die einzelnen Titel aus den Playlisten) sowie für jede ausgewählte Playliste. 8. Das System beginnt, die Liste der abzuspielenden Titel abzuspielen, sofern nicht bereits Titel abgespielt werden. Das System zeigt die verbleibende Spieldauer aller Titel in der Liste abzuspielender Titel in Minuten an. Diese Anzeige wird periodisch alle 10 Sekunden aktualisiert. Das System zeigt außerdem den aktuell gespielten Titel an sowie den in der Liste darauf folgenden, sofern noch ein solcher vorhanden ist. Abbruch durch Benutzer Der Benutzer kann in jedem Schritt von 1 bis 3 den Ablauf aktiv abbrechen. Bereits bezahltes Geld wird vom System ggf. wieder ausgegeben. Abbruch durch Zeitablauf Der Benutzer tätigt in den Schritten 1 und 2 10 Sekunden lang keine Eingabe oder wirft in Schritt 3 10 Sekunden lang kein Geld ein. Das System bricht den Vorgang daraufhin ab und gibt bereits eingegebenes Geld ggf. wieder aus. Das System verfügt nicht über ausreichend Wechselgeld. In den Schritten 1 bis 3 zeigt das System den Hinweis „passend zahlen“ an. 3. Der Benutzer wirft Münzen in das System ein bis der zu zahlende Betrag erreicht ist. Das System gibt die zuletzt eingeworfene Münze sofort wieder aus, wenn diese Münze zusammen mit dem bereits eingeworfenen Betrag den zu zahlenden Betrag übersteigt. 4. entfällt, weiter mit 5. Die Abbruchbedingungen aus Ausnahmen 1 und 2 gelten unverändert. Der Benutzer ist ein bevorrechtigter Benutzer. Schritte 3 und 4 entfallen. (Anmerkung: Dies stellt eine Vereinfachung dar, der bevorrechtigte Benutzer müßte ebenfalls bezahlen, aber mit einem anderen Ablauf …) B. Erstellung eines Aktivitätsdiagramms Erstellen Sie ein Aktivitätsdiagramm, das den folgenden Sachverhalt modelliert: In einem Unternehmen, in dem Fertigungsaufträge abgearbeitet werden, wird das Büro des Unternehmens durchschnittlich alle 15 Minuten kontaktiert, wobei jedes Mal ein Fertigungsauftrag (Zustand offen) angenommen wird. Fertigungsaufträge gibt es mit unterschiedlichen Anforderungen an die Genauigkeit (Eigenschaft hq und Eigenschaft lq). Fertigungsaufträge werden mit zwei Maschinen abgearbeitet: Maschine A nimmt grundsätzlich immer genau zwei (2) Aufträge der Eigenschaft lq gleichzeitig zur Verarbeitung an. Maschine B nimmt immer genau einen (1) einzelnen Auftrag mit der Eigenschaft hq zur Bearbeitung an. Beide Maschinen entnehmen je Fertigungsauftrag einen Satz Rohmaterial aus dem Materiallager. (Die Versorgung des Materiallagers mit Rohmaterial wird nicht modelliert.) Nach Abschluß der Verarbeitung werden die Fertigungsaufträge (Zustand fertig) in das Ausgangslager eingelagert. Jeden Tag um 9 Uhr werden die fertigen Aufträge versandt: Dabei werden nacheinander alle fertigen Fertigungsaufträge aus dem Ausgangslager entnommen und versandt. Wenn sich keine fertigen Fertigungsaufträge mehr im Lager befinden, wird der Versandvorgang beendet. Seite 15 Übungsaufgaben zur Vorlesung Software-Engineering II © Florian Unger, Stand 2014-01 Bilden Sie Fertigungsaufträge (jeglicher Zustände) sowie Rohmaterialien als Objekte im System ab und modellieren Sie geeignete Objektknoten / Objektfluß. C. Analyse des Ablaufs einer Aktivität Beschreiben Sie den Ablauf der folgenden Aktivität: Objekt 2 t4 Nach 6,5 Minuten t3 Aktion 3 [else] t1 Aktion 2 t5 Aktion 1 [X < 2] {weight = 3} t2 Objekt 1 Gehen Sie von einer sequentiellen Ausführung der Aktionen aus: Eine Aktion, ein Endknoten, oder ein Ablaufende können ein Token nur dann konsumieren, wenn keine andere Aktion gerade ausgeführt wird. Gehen Sie davon aus, dass eine Aktion mit einer niedrigen Nummer mit Vorrang vor einer Aktion mit einer höheren Nummer ausgeführt wird. Beispiel: Wenn sowohl Aktion 1 als auch Aktion 2 ein Token konsumieren könnten, wird aufgrund der niedrigeren Nummer Aktion 1 ein Token konsumieren und dadurch ausgeführt. Ablauf- und Aktivitätsenden werden vorrangig vor Aktionen ausgeführt. Beispiel: Wenn sowohl ein Ablaufende als auch Aktion 1 ein Token konsumieren könnten, wird das Ablaufende zuerst ein Token konsumieren. Der Ablauf verändert den Wert der Variablen X. Die Variable X hat zu Beginn der Ausführung den Wert 0 und wird durch die Aktion 1 um den Wert 1 erhöht. Durch die Aktion 3 wird X auf 0 gesetzt. Die Ausführungsdauer jeder Aktion ist genau 1 Minute. Geben Sie den genauen Ablauf der Aktivität an (Abfolge der Aktionen / Ablaufenden / Aktivitätsenden. Geben Sie zusätzlich an wie viele Tokens nach Ausführung einer Aktion jeweils am Eingang welcher Transition (kursiv gedruckte Bezeichnungen „t1“ „t2“, usw.) oder innerhalb welcher Objekte vorhanden sind. Seite 16 Übungsaufgaben zur Vorlesung Software-Engineering II © Florian Unger, Stand 2014-01 IX. Design Patterns A. Verständnisfragen Beantworten Sie die folgenden Fragen schriftlich: 1. 2. 3. 4. 5. 6. B. Beschreiben Sie, welchen Nutzen Design Patterns bieten. Grenzen Sie Design Patterns von Idiomen ab. Nennen Sie drei Creational Patterns. Grenzen Sie das Builder- vom Factory-Pattern ab. Bei welchen Problemstellungen ist das Bridge-Pattern einsetzbar? Welche Rollen kommen im Composite-Pattern vor und welche Verantwortlichkeiten sind damit jeweils verbunden? Design mit Hilfe des Composite Pattern Sie modellieren eine Projektplanungssoftware. Wesentlicher Bestandteil des Modells sind dabei die Vorgänge. Ein Vorgang ist gekennzeichnet durch die Eigenschaften Dauer, Datum des Beginns, sowie Datum des Endes. Es gibt verschiedene Arten von Vorgängen: Arbeit und Ressource. Komplexe Vorgänge setzen sich aus anderen Vorgängen zusammen. Zum Beispiel kann die „Erstellung einer gepflasterten Fläche“ aus den Vorgängen „Planieren“, „Verlegen“, „Einrütteln“ der Art Arbeit sowie dem Vorgang „Rüttler“ der Art Ressource bestehen. Komplexe Vorgänge können wiederum Teil anderer komplexer Vorgänge sein. Zum Beispiel kann die Erstellung einer Terrasse den Vorgang „Erstellung einer gepflasterten Fläche“ sowie weitere Vorgänge beinhalten. Ihre Software muß fähig sein, die Gesamtdauer aller möglichen Vorgänge oder komplexen Vorgänge aus den Dauern der jeweils beinhalteten Vorgänge zu berechnen. Hierbei sollen alle Arten von Vorgängen durch die anderen Bestandteile der Software einheitlich behandelt werden können. a) Modellieren Sie geeignet mit dem Composite Pattern. Verwenden Sie für alle Methoden zur Berechnung / Ermittlung von Dauern die Signatur getDauer(): Integer. Die Methode getDauer() in den Klassen VorgangArbeit und VorgangRessource geben die Dauer der jeweiligen Vorgänge zurück. b) Geben Sie im Diagramm für alle Klassen die Rollen im Composite-Pattern an. Verwenden Sie UMLNotation für diese Angaben. Seite 17 Übungsaufgaben zur Vorlesung Software-Engineering II © Florian Unger, Stand 2014-01 Client VorgangRessource dauer datumBeginn datumEnde + getDauer(): Integer VorgangArbeit dauer datumBeginn datumEnde + getDauer(): Integer c) Geben Sie die Implementierung der Operation getDauer() in allen Klassen im Modell in Java oder Pseudocode an. d) Das Modell soll nun um die Berechnung des frühesten Beginns von Vorgängen erweitert werden. Dieser früheste Beginn entspricht der Eigenschaft datumBeginn bei VorgangArbeit und VorgangRessource. Bei komplexen Vorgängen entspricht es dem geringsten Wert aller enthaltenen Vorgänge. Nach geeigneter Erweiterung Ihres Modells zeigt sich nach Fertigstellung des Systems, daß die Performance nicht ausreichend ist: Die Abfrage des frühesten Beginns von Projekten mit sehr vielen beinhalteten Vorgängen findet sehr häufig statt und dauert zu lange. Änderungen in den Werten datumBeginn finden sehr viel seltener statt als diese Abfragen. Welche Möglichkeit besteht zu einer Beschleunigung? Was ist dabei zu beachten bzgl. der Änderung des Wertes datumBeginn eines einzelnen Vorgangs? C. Design mit Hilfe des State Pattern Für eine Jukebox soll eine Software entwickelt werden. Kern der Software ist die Funktion zum Abspielen von Titeln. Diese Funktion soll mit der Klasse Abspieler implementiert werden. Die Klasse verwendet eine Queue, die die abzuspielenden Titel beinhaltet. Die Klasse Abspieler hat zu jedem Zeitpunkt einen der folgenden wesentlichen Zustände: 1. Spielend In der Titelqueue befinden sich Musiktitel. Die Klasse spielt diese Titel nacheinander ohne Pause ab. Seite 18 Übungsaufgaben zur Vorlesung Software-Engineering II © Florian Unger, Stand 2014-01 2. 2. Unterbrochen In der Titelqueue befinden sich Musiktitel. Die Wiedergabe ist vorübergehend angehalten. Pausenmusik In der Titelqueue befinden sich keine Titel. Die Klasse spielt wiederholt zufällig ausgewählte Titel aus dem Titelpool der Jukebox für einige Sekunden an. Die Software benötigt nur ein Exemplar der Klasse Abspieler. Dieses Exemplar wird durch die Jukebox gesteuert. Folgende (zustandsabhängig unterschiedlich funktionierende) Operationen sind dafür erforderlich: 1. 2. 3. 4. Einen Titel in die Titelqueue hinzufügen. Sofern sich keine Titel in der Queue befinden, startet dadurch das Abspielen (Übergang in den Zustand Spielend). Methode addTitle(t: Title) Abspielen abbrechen und alle Titel aus der Titelqueue entfernen. Dadurch Übergang in den Zustand Pausenmusik (aus jedem Zustand möglich). Methode stopAndEmptyQueue(). Abspielen unterbrechen, dadurch Übergang in den Zustand Unterbrochen (nur aus dem Zustand Spielend möglich. Methode pause(). Abspielen fortsetzen, Übergang in den Zustand Spielend, nur aus dem Zustand Unterbrochen möglich. Methode resume(). Sofern die Klasse Abspieler den letzten Titel aus der titleQueue gespielt hat, geht sie selbständig aus dem Zustand Spielend in den Zustand Pausenmusik über. Die Implementierung soll mit dem State Pattern erfolgen. Die Klasse Abspieler steuert erforderliche Zustandswechsel selbst, die Auswahl eines Folgezustands ist nicht Aufgabe der jeweiligen Zustandsklassen. Seite 19 Übungsaufgaben zur Vorlesung Software-Engineering II © Florian Unger, Stand 2014-01 Abspieler + addTitle(t: Title) + stopAndEmptyQueue() + pause() + resume() a) Vervollständigen Sie das o.a. begonnene Design unter Verwendung des State Pattern. Geben Sie im Diagramm die Rollen der Klassen in Bezug auf das State-Pattern an. b) Mit welchem Pattern kann sichergestellt werden, daß von der Klasse Abspieler nur ein Exemplar erzeugt werden kann? c) Geben Sie die Implementierung der Methode stopAndEmptyQueue() in der Klasse Abspieler (in Java) an. Abweichend von der beschriebenen Aufgabenstellung soll nun die Auswahl eines Folgezustands jeweils Aufgabe der Zustandsklassen sein. d) Geben Sie eine entsprechend angepaßte Signatur der Methode stopAndEmptyQueue() in der Klasse Abspieler und aller von dieser Methode potentiell aufgerufenen weiteren Methoden (in Java) an (nur soweit die Signatur überhaupt verändert ist). (Eine Anpassung im Diagramm ist nicht erforderlich.) e) Geben Sie die angepaßte Implementierung der Methode stopAndEmptyQueue() in der Klasse Abspieler und aller von dieser Methode potentiell aufgerufenen weiteren Methoden (in Java) an. f) In der vorliegenden Aufgabe gibt es nur ein Exemplar der zustandsabhängigen Klasse, nur wenige mögliche Zustände, sowie nur seltene Zustandsübergänge. Welche potentiellen Schwierigkeiten sind bei der Verwendung des State Pattern zu berücksichtigen, wenn es sehr viele Exemplare der zustandsabhängigen Klassen gibt, eine sehr große Zahl von Zuständen sowie sehr häufige Seite 20 Übungsaufgaben zur Vorlesung Software-Engineering II © Florian Unger, Stand 2014-01 Zustandsübergänge? Welche Lösungsmöglichkeiten gibt es für die von Ihnen genannten potentiellen Schwierigkeiten? D. Design einer Bibliotheksverwaltung Eine Bibliotheksverwaltung soll implementiert werden. Für die Bibliotheksverwaltung liegt unter anderem die folgende Anforderung vor: Medien haben je nach ihrem Ausleihzustand unterschiedliches Verhalten: Die Zeit bis zur Verfügbarkeit wird bei ausgeliehenen Medien vom erwarteten Rückgabedatum abhängig ermittelt, bei bereits zurückgegebenen Medien hängt sie vom Rückgabedatum ab, verfügbare Medien sind sofort verfügbar. Zur Modellierung dieses Verhaltens hat der Chefdesigner Herr Wolters bereits vorgeschlagen, das Mittel der Vererbung einzusetzen. Der Vorteil seines Vorschlages sei, dass Polymorphie genutzt werde, um die Zeit bis zur Verfügbarkeit für Medien abfragen zu können, ohne bei dieser Abfrage den konkreten Ausleihzustand kennen zu müssen. Herr Wolters stellt Ihnen dazu die folgende DesignSkizze vor: Medium zeitBisVerfügbar(): int AusgeliehenesMedium ZurückgegebenesMedium rückgabeErwartetAm: Date rückgabeErfolgtAm: Date zeitBisVerfügbar(): int zeitBisVerfügbar(): int VerfügbaresMedium zeitBisVerfügbar(): int a) Nehmen Sie Stellung zu diesem Vorschlag. Stellen Sie dazu dar, welche Schwierigkeiten mit diesem Designansatz zu erwarten sind, insbesondere hinsichtlich des zeitlichen Ablaufs in Bezug auf ein konkretes Medium. b) Zur Modellierung derartiger Problemstellungen existiert ein geeignetes Design Pattern. Geben Sie an, welches Design Pattern für die Lösung der beschriebenen Anforderungen geeignet ist und begründen Sie Ihre Antwort. c) Erstellen Sie ein alternatives Design unter Verwendung des von Ihnen genannten Design Patterns. Ergänzen Sie dazu das unten angegebene Diagramm. d) Geben Sie die Implementierung der Methode zeitBisVerfügbar() in der Klasse Medium in Pseudocode an. Seite 21 Übungsaufgaben zur Vorlesung Software-Engineering II © Florian Unger, Stand 2014-01 Medium zeitBisVerfügbar(): int E. Design eines Konfigurators Der Computerhersteller BestLooks Ltd. bietet innovative Arbeitsplatz-PC an, die sich vor allem durch ihre extravagante Optik von den Geräten anderer Hersteller abheben. Im Angebot sind bisher 2 verschiedene Konfigurationen: Blueberry (alle Komponenten sind in tiefblau mit Metallic-Look gestaltet) und Desert Sands (Komponenten sind durchgängig mit original Sahara-Sand beschichtet). Weitere Gestaltungen sollen noch folgen. Bereits nach Einführung der zweiten der beiden Konfigurationen kam es bei der Auslieferung zu Fehlern, indem Komponenten der beiden Linien untereinander gemischt wurden. Dies hatte teure Austauschlieferungen zur Folge. BestLooks Ltd wird daher die Konfiguration der Geräte bei der Kommissionierung mit einer speziellen Software unterstützen. Diese wird sicherstellen, daß Komponenten der Linien nicht untereinander gemsciht werden. Die Konfigurationen der Computer bestehen jeweils aus einem Computer, einem Bildschirm, einer Tastatur, sowie einer Maus. Das Design der Software enthält bisher die folgenden Bestandteile. Die Klassen, die mit den Bezeichnungen DS und BB beginnen stehen dabei jeweils für die Ausprägungen in der Gestaltung Desert Sands bzw. Blueberry. Jede Komponente ist in den verschiedenen Ausprägungen verfügbar: Seite 22 Übungsaufgaben zur Vorlesung Software-Engineering II © Florian Unger, Stand 2014-01 Konfigurator + configure(type: String) :Konfiguration #configureTastatur(type: String) :Tastatur #configureMaus(type: String) :Maus #configureComputer(type: String) :Computer #configureBildschirm(type: String) :Bildschirm Konfiguration Computer BBC DSC Tastatur BBT Maus DST BBM Bildschirm DSM BBB DSB Die Implementierung der Klasse Konfigurator configure() in der Klasse Konfigurator beinhaltet den folgenden Code: public static final String TYPE_BLUEBERRY = „BB“; public static final String TYPE_DESERT_SANDS = „DS“; public Konfiguration configure(String type) { Konfiguration newConf = new Konfiguration(); newConf.addTastatur(configureTastatur(type)); newConf.addMaus(configureMaus(type)); newConf.addComputer(configureComputer(type)); newConf.addBildschirm(configureBildschirm(type)); return newConf; } protected Tastatur configureTastatur(String type) { if (type.equals(TYPE_BLUEBERRY)) { return new BBT; } else if (type.equals(TYPE_DESERT_SANDS)) { return new DST; } } protected Maus configureMaus(String type) { if (type.equals(TYPE_BLUEBERRY)) { return new BBM; } else if (type.equals(TYPE_DESERT_SANDS)) { return new DSM; } } protected Bildschirm configureBildschirm (String type) { if (type.equals(TYPE_BLUEBERRY)) { return new BBB; } else if (type.equals(TYPE_DESERT_SANDS)) { return new DSB; Seite 23 Übungsaufgaben zur Vorlesung Software-Engineering II © Florian Unger, Stand 2014-01 } } protected Computer configureComputer(String type) { if (type.equals(TYPE_BLUEBERRY)) { return new BBC; } else if (type.equals(TYPE_DESERT_SANDS)) { return new DSC; } } a) Geben Sie an, welches Pattern für den Zweck der Konfiguration eingesetzt werden könnte. Welche Vorteile bietet der Einsatz dieses Patterns insbesondere im Hinblick auf die Ausbaubarkeit mit neuen Gestaltungen? b) Erstellen sie ein neues Design basierende auf dem von Ihnen gewählten Pattern. Ergänzen Sie hierfür in dem u.a. Klassendiagramm zusätzliche Klassen sowie soweit erforderlich Attribute und Methoden. Hinweis: Zur Vereinfachung beschränken Sie sich bei den Komponenten auf die Klassen Computer und Tastatur mit Unterklassen und lassen Sie die Klassen Bildschirm und Maus mit Unterklassen weg. Ihr Diagramm: Konfigurator +configure(type: String) :Konfiguration Konfiguration Computer BBC DSC Tastatur BBT DST c) Geben Sie die Implementierung der Methode configure() in der Klasse Konfigurator in Java oder Pseudocode an. Seite 24