• Keine Ergebnisse gefunden

Übung 03: Dynamische Bindung

N/A
N/A
Protected

Academic year: 2022

Aktie "Übung 03: Dynamische Bindung"

Copied!
3
0
0

Wird geladen.... (Jetzt Volltext ansehen)

Volltext

(1)

Ü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.

(2)

Ü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)

(3)

Ü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

Referenzen

ÄHNLICHE DOKUMENTE

recommend clothes for different body shapes (Speaking A2) talk about fashion items (Speaking A2)?. offer fashion advice in a sales dialogue (Speaking A2) make up a dialogue dealing

3.56 (0.62) 0.58 Factor 2: importance of protective forest functions. The forest keeps the air clean and protects

In particular, Alon, Matias and Szegedy [AMS99] give an Ω(n) lower bound on the space complexity of any algorithm for estimating the frequency of the largest item given an

Koppel voor uw eigen veiligheid de kabel van het product los van het smart-ap- paraat of de intelligente controller wanneer u dit product niet gebruikt.. De isolatie kan

Laboratory for Thermal Hydraulics Severe Accident Research Group, SACRE.. • Recap of

Lie-bet questionnaire in 2 items (if 1 answer is positive only, send for evaluation and specialized support):?. 1-Do you lie to your loved ones

In diesem Zusammenhang stellen sich drei wichtige Fragen, die wir in diesem Artikel adressieren: (a) Wie lassen sich Sensordaten so aggregieren (Objekt-Ebene), dass ihnen

Our research results recommend the Vickrey auction as a preferable collaboration mechanism for Smart Items due to its low communication effort and low price bias under message