Übung Softwareentwicklung 2 SS 2018
Übung 03: Dynamische Bindung
Abgabetermin: 12. 4. 2018, 10:15
Name: Matrikelnummer:
Informatik: G1(Prähofer) G2(Weninger) G3(Prähofer) G4 (Weninger) G5(Löberbauer) G6 (Aumayr) WIN: G1 (Khalil) G2 (Hummel) G3 (Khalil) G4 (Löberbauer)
Aufgabe Punkte abzugeben schriftlich abzugeben elektronisch korr. Punkte
Übung 2 24 Java-Programm,
Ausgabe eines Testlaufs
Java-Programm
Übung 03: Crafting-System in Computerspielen (24 Punkte)
In dieser Übungsaufgabe sollen Sie das Crafting-System eines Computerspiels realisieren. Crafting beschreibt dabei den Prozess, durch das Zusammenfügen verschiedener Objekte („Items“) neue komplexere Objekte („kombinierte Items“) zu erschaffen. Implementieren Sie dazu anhand des in der Übung präsentierten Compsite-Patterns folgende Klassenstruktur:
Eine abstrakte Basisklasse Item, welche beliebige Objekte repräsentiert. Items teilen sich in 2 Gruppen auf: (1) Basisresourcen, die sich aus keinen weiteren Items zusammensetzen (Klasse Resource), und (2) kombinierte Items, welche sich aus mehreren Items zusammensetzen. Solche kombinierten Items existieren in zwei Ausführungen: (a) Kombinierte Items, bei denen die Anordnung der beinhalteten Items irrelevant ist (Klasse ListCombinedItem), und (b) kombinierte Items, bei denen die beinhalteten Items in einer Tabellenstruktur angeordnet sind (Klasse GridCombinedItem).
Item:
Deklarieren Sie öffentliche Zugriffsmethoden für die Eigenschaften Name und Preis. Der Name eines jeden Items soll im Konstruktor gesetzt werden und unveränderlich sein. Der Preis ist abhängig von der jeweiligen Art des Items (Resource, ListCombinedItem oder GridCombinedItem), die Zugriffsmethode auf den Preis ist daher erst in den erbenden Klassen zu implementieren.
Darüber hinaus soll eine Methode print(int indent) deklariert werden, welche die String-Repräsentation des Items mit indent Leerzeichen Einrückung ausgibt. Eine weitere Methode print() soll das Item ohne Einrückung ausgeben.
Resource:
Leiten Sie von Item die Klasse Resource ab. Diese soll über folgende Funktionalität verfügen:
Der Preis einer Resource soll im Konstruktor gesetzt werden und unveränderbar sein.
print(indent) soll den Namen sowie den Preis des Items, getrennt durch einen Bindestrich, ausgeben.
Zusätzlich sollen vor diesem String so viele Leerzeichen gesetzt werden, wie im Parameter indent angegeben (Beispiel print(4) von Holz: ␣␣␣␣Holz␣-␣1.00␣Gold).
Anmerkung: Preis in Einheit Gold!
ListCombinedItem
:Leiten Sie von Item die Klasse ListCombinedItem ab. Diese soll über folgende Funktionalität verfügen:
Die Items, aus denen sich das kombinierte Item zusammensetzt, sollen im Konstruktor gesetzt werden und unveränderlich sein. Zur Übergabe der beinhalteten Items soll ein vararg-Parameter verwendet werden.
Der Preis ist die Summe der Preise der Items, aus denen es sich zusammensetzt, plus 10% Aufschlag.
Übung Softwareentwicklung 2 SS 2018
Gleich zu Resource soll print(indent) den Namen sowie den Preis des Items, getrennt durch einen Bindestrich, ausgeben. Zusätzlich sollen die um zwei Leerzeichen stärker eingerückten String- Repräsenationen der beinhalteten Items ausgegeben werden.
Beispiel print(2) von Brett, das sich aus 3x der Resource Holz zusammensetzt:
␣␣Brett␣-␣3.30␣Gold
␣␣␣␣Holz␣-␣1.00␣Gold
␣␣␣␣Holz␣-␣1.00␣Gold
␣␣␣␣Holz␣-␣1.00␣Gold
GridCombinedItem
:Leiten Sie von Item die Klasse GridCombinedItem ab. Diese soll über folgende Funktionalität verfügen:
Die Items, aus denen sich das kombinierte Item zusammensetzt, sollen im Kontruktor gesetzt werden und unveränderlich sein. Die Anordnung der beinhalteten Items geschieht tabellarisch (siehe folgendes Spitzhacke-Beispiel), daher werden diese als zweidimensionales Item-Array übergeben. Dieses Array kann null-Werte beinhalten, wenn an gewissen Stellen kein Item liegt.
Der Preis ist die Summe der Preise der Items, aus denen sich ein GridCombinedItem zusammensetzt, plus 5% je Zeile und Spalte, die das Item-Array umfasst (im folgenden Spitzehacke-Beispiel wären dies 4 Zeilen + 3 Spalten = 7 * 5% = 35% Aufschlag).
Gleich zu Resource und ListCombinedItem soll print(indent) den Namen sowie den Preis des Items, getrennt durch einen Bindestrich, ausgeben. Zusätzlich sollen die um zwei Leerzeichen stärker eingerückten String-Repräsenationen der beinhalteten Items ausgegeben werden. Jeder dieser Zeilen soll dabei ihr zugehöriger Tabellenindex vorangehen, welcher gleich tief eingerückt sein soll.
Beispiel: print(2)
␣␣Spitzhacke␣-␣12.15␣Gold
␣␣␣␣[0,0]
␣␣␣␣Eisen␣-␣2.00␣Gold
␣␣␣␣[0,1]
␣␣␣␣Eisen␣-␣2.00␣Gold
␣␣␣␣[0,2]
␣␣␣␣Eisen␣-␣2.00␣Gold
␣␣␣␣[1,1]
␣␣␣␣Holz␣-␣1.00␣Gold
␣␣␣␣[2,1]
␣␣␣␣Holz␣-␣1.00␣Gold
␣␣␣␣[3,1]
␣␣␣␣Holz␣-␣1.00␣Gold
Resource:
Eisen
Resource:
Eisen
Resource:
Eisen
null Resource:
Holz null
null Resource:
Holz null
null Resource:
Holz null
GridCombinedItem: Mögliche tabellarische Anordnung von beinhalteten Items („Beispiel Spitzhacke“)
Hinweise
: Achten Sie auf die Auswahl der richigen Modifier (Sichtbarkeit, abstract, final).
String repeated = new String(new char[n]).replace("\0", c) kann genutzt werden, um einen Charakter c n-mal zu wiederholen.
Preise sollen Gleitkommazahlen sein und die Ausgabe auf zwei Komma-Stellen beschränkt sein (String-Format „%,.2f“)
Die Arrays, die an GridCombinedItems übergeben werden, dürfen rechteckig angenommen werden (d.h., alle Zeilen sind gleich lang)
Übung Softwareentwicklung 2 SS 2018
Test:
Erstellen Sie eine main-Methode, in der sie mindestens ein Item anlegen, das sich in Summe aus mindestens 12 anderen Items zusammensetzt, und geben Sie dieses Objekt im Anschluss aus. Dabei soll mindestens ein Objekt jedes Typs (Resource, ListCombinedItem, GridCombinedItem) involviert sein.
Anleitungen
Gehen Sie bei der Aufgabe folgend vor:
Verfassen Sie zuerst eine kurze Beschreibung der Klassen sowie die Operationen der Klassen.
Gehen Sie dabei darauf ein, ob diese Klassen und Operationen abstrakt sind oder
Implementierungen aufweisen. Falls eine Methode die einer Elternklasse überschreibt, geben Sie an, ob ein super-call verwendet wird oder nicht.
Realisieren Sie die Klassen und Methoden nach der Beschreibung.
Achten Sie bei dieser Aufgabe ganz besonders auf:
die Gestaltung der Schnittstelle der allgemeinen Basisklasse und der Spezialisierungen,
das Zusammenfassen von geteilter Funktionalität in den Elternklassen,
das Überschreiben der Methoden in den Spezialisierungen mit Verwendung von super-Aufrufen
Abgabe:
Schriftlich abzugeben ist:
Kurze schriftliche Beschreibung der Klassen (siehe Anleitung)
Java-Programm
Ausgabe eines Testlaufes