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