ein textadventure aip aufgabe 2 14.05.2009 fabian bergfeld patrick boeckhoven christian haberland...
Post on 05-Apr-2015
105 Views
Preview:
TRANSCRIPT
Ein Textadventure
AIP Aufgabe 2 14.05.2009
Fabian BergfeldPatrick BoeckhovenChristian Haberland Benjamin Jochheim
Liem Nguyen
Entwürfe Dr.Little schlecht,besser Unterschiede schlecht ->besser Erweiterung um hoch, runter
Erweiterung Stories 1.0 Statische Sicht Dynamische Sicht Verteilungssicht Fachliche Sicht
Erweiterung Stories 2.0 Unterschiede zu Stories 1.0
TODOHier kommen die Klassendiagramme von
Dr.Little schlecht und besser rein
Merkmale von Dr.Little-schlecht
Feste Eingänge -> Erweiterungen sind schwierig
Öffentliche Attribute -> InformationHiding
class Raum {
public String beschreibung;public Raum nordausgang;public Raum suedausgang;public Raum ostausgang;public Raum westausgang
Hohe KopplungNicht alle Parameter werden verwendet ->
Interface zu breitSchlecht für Erweiterungen -> Parameterliste
müsste erweitertBei mehrmaligen Setzten eines Raumes, kann
kein Null mehr für einen Raum gesetzt werden
public void setzeAusgaenge(Raum norden, Raum osten, Raum sueden, Raum westen) {
if(norden != null) nordausgang = norden; ...
Ausgang Norden und Osten bleiben beim zweiten Aufruf erhalten!!!
// Aufruf 1:setzeAusgaenge(ausgangNorden,ausgangOsten, ausgangSueden, ausgangWesten) // Aufruf 2:setzeAusgaenge(null,null, ausgangSueden, ausgangWesten);
...
Fehler beim wiederholten Aufrufen. Beispiel:
Direkter Zugriff auf Klassen-AttributeMan muss das innere von Raum kennen-> hohe KopplungEs kann die Abfrage eines Attributs
vergessen werden
private void willkommenstextAusgeben(){...if (aktuellerRaum.nordausgang != null) System.out.print("north ");if (aktuellerRaum.ostausgang != null) System.out.print("east ");if (aktuellerRaum.suedausgang != null) System.out.print("south ");if (aktuellerRaum.westausgang != null) System.out.print("west ");
Feste Befehlsliste-> Feste Bestandteile von Veränderlichen
trennenSchlecht für ErweiterungAusgabe auslagern -> trennen von Blogic
(MVC)
private void hilfstextAusgeben() {System.out.println("Sie haben sich verlaufen. Sie sind allein.");System.out.println("Sie irren auf dem Unigelände herum.");System.out.println();System.out.println("Ihnen stehen folgende Befehle zur Verfügung:");System.out.println(" go quit help");}
Wird nur von verarbeiteBefehl() aufgerufen, daher sollte die Schnittstelle kleiner sein (nur den Raum übergeben)
private void wechsleRaum(Befehl befehl) {
Allgemein für die Klasse Spiel gilt:Klasse sollte sich nur um Spielelogik kümmern, nicht um das Parsen der Eingabe.
„Look“ wird angenommen, obwohl es nicht spezifiziert ist.
Dadurch dass „look“ nicht erwartet wird, wird es nicht abgefangen
Anweisung wie „look ???“ wird ausgeführt
class Befehlswoerter{ // ein konstantes Array mit den gültigen Befehlswörtern private static final String gueltigeBefehle[] = { "go", "quit", "help", "look" };
"Das Befehlswort sollte 'null' sein, wenn dieser Befehl als nicht vom Spiel erkannt gekennzeichnet werden soll.
Schlecht: Datenparameter haben eine Doppelbedeutung
public Befehl(String erstesWort, String zweitesWort) { befehlswort = erstesWort; this.zweitesWort = zweitesWort;}....public boolean istUnbekannt() { return (befehlswort == null); }
Liefert das Befehlswort (das erste Wort) dieses Befehls.
Wenn der Befehl nicht verstanden wurde, ist das Ergebnis 'null'.
Schlecht: Datenparameter haben eine Doppelbedeutung
Verbesserung: Exceptions im Fehlerfall
public String gibBefehlswort() { return befehlswort; }
Ausgaben (hier via println) sowie das einlesen via Buffered Reader sollten von dem eigentlichen Parsen entkoppelt werden.
public Befehl liefereBefehl() {... System.out.print("> "); // Eingabeaufforderung..... BufferedReader eingabe = new BufferedReader(new InputStreamReader(System.in));.....eingabezeile = eingabe.readLine();...
Merkmale von Dr.Little-besser
Private wird verwendet -> Attribute verstecktAttribute nur über Getter und Setter zu
erreichengibKurzbeschreibung()gibLangeBeschreibung()setzeAusgang()
class Raum { private String beschreibung; private HashMap ausgaenge; // die Ausgänge dieses Raums
Private wird verwendet -> Attribute verstecktAttribute nur über Getter und Setter zu
erreichengibKurzbeschreibung()gibLangeBeschreibung()setzeAusgang()
Beliebige Richtung können eingegeben werden(-) Keine Absicherung der Richtung(Dubbleten)
public void setzeAusgang(String richtung, Raum nachbar) { ausgaenge.put(richtung, nachbar); }
Ausgänge werden als HashMap implementiert
-> mehrere Ausgänge möglichNachteile:
(-) richtung als String ->Eingabe falscher Ausgänge
Abgeschwächt bei Verwendung von StringKonstanten
private HashMap ausgaenge; // die Ausgänge dieses Raums.... ausgaenge.put(richtung, nachbar);...
draussen.setzeAusgang("east", hoersaal);draussen.setzeAusgang(“East", labor);Besser: draussen.setzeAusgang(EAST, labor);
Ausgänge werden als HashMap implementiert
-> mehrere Ausgänge möglichNachteile:
(-) richtung als String ->Eingabe falscher Ausgänge
Abgeschwächt bei Verwendung von StringKonstanten
private HashMap ausgaenge; // die Ausgänge dieses Raums.... ausgaenge.put(richtung, nachbar);...
TODOHier kommen die CODE-Stellen der Änderung für hoch + runter
In Dr.Little besser rein
Erweiterung von Dr. Little-besser um Stories 1.0
TODOAufgabe 2
Erweiterung von Dr. Little-besser um Stories 2.0
TODOAUFGABE3
top related