Ein Textadventure AIP Aufgabe 2 14.05.2009 Fabian Bergfeld Patrick Boeckhoven Christian Haberland Benjamin Jochheim Liem Nguyen.

Slides:



Advertisements
Ähnliche Präsentationen
der Universität Oldenburg
Advertisements

Objektorientierte Programmierung
PKJ 2005/1 Stefan Dissmann Vorwoche - Klasse public class Studierende { private String name, vorname, studiengang; private int matNr, semester; private.
Ausnahmen HS Merseburg (FH) WS 06/07.
Java: Objektorientierte Programmierung
Java: Dynamische Datentypen
Listen Richard Göbel.
FH-Hof Servlets Richard Göbel. FH-Hof Konzept Servlets werden auf der Server-Seite durch ein Formular aufgerufen werten die Eingaben aus einem Formular.
FH-Hof Sockets in Java Richard Göbel. FH-Hof Kommunikation über das Internet - Grundlagen Ein Rechner wird im Internet über die so genannte IP- Adresse.
Java: Grundlagen der Objektorientierung
FH-Hof Fehlerbehandlung Richard Göbel. FH-Hof Konzept Fehler können mit dem Operator throw einer übergeordneten Funktion signalisiert werden. Parameter.
SWITCH - Anweisung.
Verzweigung oder bedingte Anweisung Weiter mit PP.
IF-ELSE-IF-Ketten Weiter mit PP..
Ein Beispiel in Java.
Klassenvariable. Da man für jede Kuh bzw. jede Henne auf dem Markt den gleichen Preis für ein Liter Milch, bzw. den gleichen Preis für ein Ei bekommt,
Konstruktoren.
Objekte werden als Adressen (Referenzen) übergeben. Dies führt manchmal zu unerwarteten Ergebnissen...
WHILE - Anweisung. Aufgabe : Ausgabe aller ganzen Zahlen von 0 bis 100 auf dem Bildschirm.
Interface bzw. Schnittstelle anschaulich: Hüllenklasse
FOR Anweisung. Aufgabe : Ausgabe aller ganzen Zahlen von 0 bis 100 auf dem Bildschirm.
Exceptions. import java.sql.*; public class MyException{ boolean b; Statement stat; public MyException(){ b = stat.execute("xyz"); } Beim Übersetzen dieses.
DO...WHILE Anweisung.
ARRAY oder FELD oder VEKTOR
Vorlesung Informatik 2 Algorithmen und Datenstrukturen (05 – Elementare Datenstrukturen) Prof. Th. Ottmann.
Programmieren mit JAVA
Programmieren mit JAVA
PKJ 2005/1 Stefan Dissmann Methoden (Motivation) Idee: Identische Programmabschnitte zusammenfassen und mit einem Namen versehen Vorteile: Übersichtlichkeit.
PRJ 2007/1 Stefan Dissmann Motivation Problem: gleiche Datenstrukturen werden für verschiedene Objekte gebraucht: z.B. Listen von Studierenden, Kunden,
PKJ 2005/1 Stefan Dissmann Ausblick Es fehlen noch: Möglichkeiten zum Strukturieren größerer Programme Umgang mit variabler Zahl von Elementen Umgang mit.
PKJ 2005/1 Stefan Dissmann Rückblick auf 2005 Was zuletzt in 2005 vorgestellt wurde: Klassen mit Attributen, Methoden und Konstruktoren Referenzen auf.
Zusammenfassung Vorwoche
PKJ 2005/1 Stefan Dissmann Zusammenfassung Vorwoche Methoden sind mit einem Namen versehene Programmabschnitte besitzen Rückgabetyp, Namen, Parameterliste.
1DVG3 - anonyme Klassen Anonyme Klassen. DVG3 - anonyme Klassen 2 Syntax new BasisKlasse(Parameterliste) { Modifikationen und Erweiterungen der Basisklasse.
DVG Interfaces. DVG mehrfache Vererbung 4 Mehrfache Vererbung ist die Ableitung einer Klassen von mehreren anderen Klassen. –farbigerPunkt.
DVG Ausnahmen1 Ausnahmen. DVG Ausnahmen 2 Was sind Programmfehler? Programm erzielt gar kein Ergebnis. Berechnetes Ergebnis stimmt nicht.
DVG Einführung in Java1 Einführung in JAVA.
07-GraphischeObjekte Graphische Objekte in EMMA301Paint.
Abstrakte Klassen, Interface
DVG Klassen und Objekte
Java in 9 Folien Besser: Online-Buch Go to Java 2.
Einführung in die Programmierung Klassendefinition und Objekte
© 2005 Pohlig - Taulien Datenströme GK Informatik 1 Datenströme.
Informatikunterricht mit Java
Seite 1 Interface - Konzept Ein Interface führt einen neuen Datentyp ein: interface Frau {... } Das Interface enthält Deklarationen ( keine Definitionen.
Rekursive Funktionen (Fakultät)
Javakurs FSS 2012 Lehrstuhl Stuckenschmidt
Javakurs FSS 2012 Lehrstuhl Stuckenschmidt
EPROG Tutorium Einheit 4 Klassen und Objekte. Wiederholung Schleifen do... while while for break/continue Strings String char Methoden für Strings Arrays.
Javakurs FSS 2012 Lehrstuhl Stuckenschmidt
OOP-Begriffe Abstraktion Modellieren Klasse Objekt Attribute Methoden
CuP - Java Eingabe über Tastatur, AudioClips, überschreiben, Quiz Montag, 18. November 2002.
Objektorientiertes Konstruieren
Unterprogramme in JAVA
Aufruf einer Methode eines Objektes vom Typ „Bruch“
Optimale Ursprungsgerade
EPROG Tutorium #3 Philipp Effenberger
Learning By Doing Ausnahmebehandlung Exceptions (Ausnahmebehandlung) Typische Fehlverhalten zur Laufzeit: s. Buch S. 287ff -Verwendung von null-Objekten.
Programmiervorkurs WS 2014/15 Schleifen
Programmiervorkurs WS 2014/15 Instanzmethoden
CuP - Java Achte Vorlesung Entspricht ungefähr Kapitel 4.1 des Skriptums Montag, 28. Oktober 2002.
Java Syntaxdiagramme Buchstabe A B Z a z ... Ziffer
Alois Schütte Advanced System Programming 2 Interprozeßkommunikation  2.1 JVM Ablaufumgebung  2.2 Java Native Interface (JNI)  Verwendung von.
Robuste Programme durch Ausnahmebehandlung
Ausnahmen Vorlesung besteht aus zwei Teilen Programmierung (4 SWS)
Java-Kurs - 6. Übung Besprechung der Hausaufgabe
Objektorientierte Programmierung (OOP)
Ein Textadventure AIP Aufgabe Fabian Bergfeld Patrick Boeckhoven Christian Haberland Benjamin Jochheim Liem Nguyen.
Tutorium Software-Engineering SS14 Florian Manghofer.
Implementieren von Klassen
 Präsentation transkript:

Ein Textadventure AIP Aufgabe Fabian Bergfeld Patrick Boeckhoven Christian 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

TODO Hier 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 class Raum { public String beschreibung; public Raum nordausgang; public Raum suedausgang; public Raum ostausgang; public Raum westausgang

Hohe Kopplung Nicht alle Parameter werden verwendet -> Interface zu breit Schlecht für Erweiterungen -> Parameterliste müsste erweitert Bei 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;... 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);... // Aufruf 1: setzeAusgaenge(ausgangNorden,ausgangOsten, ausgangSueden, ausgangWesten) // Aufruf 2: setzeAusgaenge(null,null, ausgangSueden, ausgangWesten);... Fehler beim wiederholten Aufrufen. Beispiel:

Direkter Zugriff auf Klassen-Attribute Man muss das innere von Raum kennen -> hohe Kopplung Es 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 "); 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 trennen Schlecht für Erweiterung Ausgabe 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"); } 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" }; 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); } 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; } 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();... 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 versteckt Attribute nur über Getter und Setter zu erreichen gibKurzbeschreibung() gibLangeBeschreibung() setzeAusgang() class Raum { private String beschreibung; private HashMap ausgaenge; // die Ausgänge dieses Raums class Raum { private String beschreibung; private HashMap ausgaenge; // die Ausgänge dieses Raums

Private wird verwendet -> Attribute versteckt Attribute nur über Getter und Setter zu erreichen gibKurzbeschreibung() gibLangeBeschreibung() setzeAusgang() Beliebige Richtung können eingegeben werden (-) Keine Absicherung der Richtung(Dubbleten) public void setzeAusgang(String richtung, Raum nachbar) { ausgaenge.put(richtung, nachbar); } public void setzeAusgang(String richtung, Raum nachbar) { ausgaenge.put(richtung, nachbar); }

Ausgänge werden als HashMap implementiert -> mehrere Ausgänge möglich Nachteile: (-) 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);... 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); draussen.setzeAusgang("east", hoersaal); draussen.setzeAusgang(East", labor); Besser: draussen.setzeAusgang(EAST, labor);

Ausgänge werden als HashMap implementiert -> mehrere Ausgänge möglich Nachteile: (-) 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);... private HashMap ausgaenge; // die Ausgänge dieses Raums.... ausgaenge.put(richtung, nachbar);...

TODO Hier kommen die CODE-Stellen der Änderung für hoch + runter In Dr.Little besser rein

Erweiterung von Dr. Little-besser um Stories 1.0

TODO Aufgabe 2

Erweiterung von Dr. Little-besser um Stories 2.0

TODO AUFGABE3