Class Hamster

java.lang.Object
  extended by Hamster
Direct Known Subclasses:
AllroundHamster

public class Hamster
extends Object

Mit Hilfe dieser Klasse (sowie den anderen Klassen dieses Paketes) wird eine Verbindung zwischen BlueJ und dem Java-Hamster-Modell geschaffen.

BlueJ ist eine Entwicklungsumgebung für objektorientierte Java-Programme, die sich speziell an Bedürfnissen von Programmieranfängern orientiert. Im Vordergrund steht die visuelle Modellierung von Programmen mit Hilfe von Diagrammen. Weitere Infos unter www. bluej.org.

Das Java-Hamster-Modell ist ein spezielles didaktisches Modell, das Programmieranfängern einen spielerischen Zugangzu der doch eher technischen Welt der Programmierung bietet. Programmieranfänger lernen die grundlegenden Programmierkonzepte und den Programmentwurf kennen, indem sie Programme entwickeln, mit denen sie virtuelle Hamster durch eine virtuelle Landschaft steuern und bestimmte Aufgaben bzw. Probleme lösen lassen. Im Vordergrund steht die Visualisierung der Ausführung eines Programms. Dazu gibt es den so genannten Hamster-Simulator, der es ermöglicht, Hamster-Programme zu entwickeln und auszuführen, wobei man die Hamster bei der Erledigung ihrer Aufgaben mit Hilfe einer graphischen Umgebung beobachten kann. Aktuell besteht das Java-Hamster-Modell aus zwei Teilen. Im ersten Teil geht es um die imperative Programmierung, im zweiten Teil um die objektorientierte Programmierung. Relevant für dieses Paket ist der zweite Teil. Weitere Infos unter www.java-hamster-modell.de.

Mit Hilfe der vorliegenden Klasse Hamster bzw. allen Klassen dieses Paketes ist es nun möglich, Hamster-Programme mit BlueJ zu entwickeln und mit dem Hamster-Simulator auszuführen. Konkret bedeutet das, BlueJ visualisiert die Programmentwicklung und der Hamster-Simulator visualisiert die Programmausführung.

Grundlage des Paketes sind die Klassen des objektorientierten Hamster-Modells (siehe auch Anhang des Buches "Objektorientierte Programmierung spielend gelernt mit dem Java-Hamster-Modell"). Im Vordergrund steht hier die vorliegende Klasse Hamster. Sie ermöglicht die Erzeugung von Hamstern in einem so genannten Hamster-Territorium (siehe auch Klasse Territorium). Das Hamster-Territorium ist dabei eine rechteckige Landschaft, die aus einzelnen Kacheln besteht. Auf den Kacheln können die Hamster stehen, auf Kacheln können ein oder mehrere Körner liegen, Kacheln können auch durch Mauern blockiert sein. Die Hamster nehmen eine bestimmte Blickrichtung ein und können Körner im Maul haben.

Mit Hilfe bestimmter Grundbefehle können Hamster durch das Territorium gesteuert werden. Durch Ausführung der Methode "vor" springen sie eine Kachel in Blickrichtung nach vorne. Mit "linksUm" drehen sie sich linksum. Die Methode "nimm" dient zum Aufnehmen eines Korns von der aktuellen Kachel ins Maul eines Hamsters. Mit "nimm" kann ein Korn abgelegt werden.

Damit es nicht zu bestimmten Laufzeitfehlern kommt, existieren drei Testmethoden. "vornFrei" überprüft, ob sich vor dem Hamster eine Mauer befindet, "maulLeer" überprüft, ob sich Körner im Maul des Hamsters befinden und "kornDa" überprüft, ob auf der aktuellen Kachel des Hamsters mindestens ein Korn liegt.

Zur Kommunikation mit dem Nutzer eines Hamster-Programms gibt es die Methoden "schreib", "liesZeichenkette" und "liesZahl", mit denen ein Hamster Informationen auf den Bildschirm ausgeben bzw. vom Benutzer abfragen kann. Prinzipiell können beliebig viele Hamster erzeugt werden. Der Standard-Hamster ist ein Hamster, der automatisch im Territorium vorhanden ist. Er kann mit der statischen Methode "getStandardHamster" ermittelt werden.

Version:
1.0 (25.01.2006)
Author:
Dietrich Boles (Universitaet Oldenburg)

Nested Class Summary
(package private) static class Hamster.ArrayListIntern
           
(package private) static class Hamster.SimulationModelIntern
           
 
Field Summary
(package private) static ArrayList _intern_hamsters
           
(package private) static LogPanel _intern_logPanel
           
(package private) static SimulationModel _intern_simulationModel
           
static int NORD
          Blickrichtung Nord
static int OST
          Blickrichtung Ost
static int SUED
          Blickrichtung Sued
static int WEST
          Blickrichtung West
 
Constructor Summary
Hamster()
          Konstruktor zum Erzeugen eines nicht initialisierten Hamsters
Hamster(Hamster hamster)
          Konstruktor zum Erzeugen und Initialisieren eines Hamsters mit den Werten eines bereis existierenden Hamsters
Hamster(int reihe, int spalte, int blickrichtung, int anzahlKoerner)
          Konstruktor zum Erzeugen und Initialisieren eines Hamsters mit den uebergebenen Parametern
 
Method Summary
 Object clone()
          Methode, die einen Klon des aufgerufenen Hamsters erzeugt und liefert, d.h. die Werte der Attribute des neuen Hamsters sind identisch zu den Werten des aufgerufenen Hamsters.
 boolean equals(Object hamster)
          Methode, die ueberprueft, ob die Werte der Attribute des aufgerufenen Hamsters gleich der Attributwerte des uebergebenen Hamsters sind (zwei nicht initialisierte Hamster sind auch gleich) (ueberschreibt die entsprechende von der Klasse Object geerbte Methode)
static int getAnzahlHamster()
          liefert die Gesamtzahl an erzeugten und initialisierten Hamstern im Territorium (inkl. dem Standard-Hamster)
 int getAnzahlKoerner()
          liefert die Anzahl der Koerner, die der aufgerufene Hamster gerade im Maul hat
 int getBlickrichtung()
          liefert die Blickrichtung, in die der aufgerufene Hamster gerade schaut (die gelieferten Werte entsprechen den obigen Konstanten)
 int getReihe()
          liefert die Reihe der Kachel des Territoriums, auf der sich der aufgerufene Hamster gerade befindet
 int getSpalte()
          liefert die Spalte der Kachel des Territoriums, auf der sich der aufgerufene Hamster gerade befindet
static Hamster getStandardHamster()
          liefert den Standard-Hamster, das ist der Hamster, der sich standardmaessig im Territorium befindet, ohne explizit erzeugt werden zu muessen
 void gib()
          Der aufgerufene Hamster legt ein Korn auf der Kachel ab, auf der er sich gerade befindet.
 void init(int reihe, int spalte, int blickrichtung, int anzahlKoerner)
          Methode zum Initialisieren eines noch nicht initialsierten Hamsters.
 boolean kornDa()
          liefert genau dann true, wenn auf der Kachel, auf der sich der aufgerufene Hamster gerade befindet, mindestens ein Korn liegt
 int liesZahl(String aufforderung)
          gibt den uebergebenen String auf den Bildschirm aus und fordert den Benutzer auf, eine Zahl einzugeben; die eingegebene Zahl wird als Wert geliefert (wenn der Benutzer eine ungueltige Zahl eingibt, wird der Wert 0 geliefert)
 String liesZeichenkette(String aufforderung)
          gibt den uebergebenen String auf den Bildschirm aus und fordert den Benutzer auf, einen String einzugeben; der eingegebene String wird als Wert geliefert
 void linksUm()
          Der aufgerufene Hamster dreht sich linksum.
 void loeschen()
          Der aufgerufene Hamster wird geloescht, d.h. er wird vom Bildschirm entfernt und seine Initialisierung wird rueckgaengig gemacht.
 boolean maulLeer()
          liefert genau dann true, wenn der aufgerufene Hamster keine Koerner im Maul hat
 void nimm()
          Der aufgerufene Hamster frisst ein Korn auf der Kachel, auf der er sich gerade befindet.
 void schreib(String zeichenkette)
          gibt den uebergebenen String (in einer Dialogbox) auf den Bildschirm aus
 String toString()
          Methode, die eine String-Repraesentation der folgenden Art fuer den aufgerufenen Hamster liefert: "Hamster steht auf Kachel (0/0) mit Blickrichtung OST und 2 Koernern im Maul" Wenn der aufgerufene Hamster noch nicht initialisiert ist, wird folgender String geliefert: "Hamster ist nicht initialisiert" (ueberschreibt die entsprechende von der Klasse Object geerbte Methode)
 void vor()
          Der aufgerufene Hamster springt auf die in Blickrichtung vor ihm liegende Kachel.
 boolean vornFrei()
          liefert genau dann true, wenn sich in Blickrichtung vor dem aufgerufenen Hamster keine Mauer befindet (wenn sich der Hamster in Blickrichtung am Rand des Territoriums befindet, wird false geliefert)
 
Methods inherited from class java.lang.Object
finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
 

Field Detail

_intern_hamsters

static ArrayList _intern_hamsters

_intern_logPanel

static LogPanel _intern_logPanel

_intern_simulationModel

static SimulationModel _intern_simulationModel

NORD

public static final int NORD
Blickrichtung Nord

See Also:
Constant Field Values

OST

public static final int OST
Blickrichtung Ost

See Also:
Constant Field Values

SUED

public static final int SUED
Blickrichtung Sued

See Also:
Constant Field Values

WEST

public static final int WEST
Blickrichtung West

See Also:
Constant Field Values
Constructor Detail

Hamster

public Hamster()
Konstruktor zum Erzeugen eines nicht initialisierten Hamsters


Hamster

public Hamster(Hamster hamster)
Konstruktor zum Erzeugen und Initialisieren eines Hamsters mit den Werten eines bereis existierenden Hamsters

Parameters:
hamster - ein bereits existierender Hamster

Hamster

public Hamster(int reihe,
               int spalte,
               int blickrichtung,
               int anzahlKoerner)
        throws HamsterInitialisierungsException
Konstruktor zum Erzeugen und Initialisieren eines Hamsters mit den uebergebenen Parametern

Parameters:
reihe - die Reihe des Territoriums, in der der Hamster erzeugt wird
spalte - die Spalte des Territoriums, in der der Hamster erzeugt wird
blickrichtung - die Richtung, in der der Hamster anfangs schaut (siehe Konstanten)
anzahlKoerner - die Anzahl an Koernern, die der Hamster anfangs im Maul hat
Throws:
HamsterInitialisierungsException - wird geworfen, wenn: (a) eine Kachel (reihe/spalte) nicht existiert (b) die Kachel (reihe/spalte) durch eine Mauer blockiert ist (c) der Wert von blickrichtung nicht zwischen 0 und 3 liegt (d) der Wert von anzahlKoerner < 0 ist
Method Detail

clone

public Object clone()
Methode, die einen Klon des aufgerufenen Hamsters erzeugt und liefert, d.h. die Werte der Attribute des neuen Hamsters sind identisch zu den Werten des aufgerufenen Hamsters. Wenn der aufgerufene Hamster noch nicht initialisiert ist, wird der neu erzeugte Hamster auch nicht initialisiert (ueberschreibt die entsprechende von der Klasse Object geerbte Methode).

Overrides:
clone in class Object
Returns:
ein Klon des aufgerufenen Hamsters
See Also:
Object.clone()

equals

public boolean equals(Object hamster)
Methode, die ueberprueft, ob die Werte der Attribute des aufgerufenen Hamsters gleich der Attributwerte des uebergebenen Hamsters sind (zwei nicht initialisierte Hamster sind auch gleich) (ueberschreibt die entsprechende von der Klasse Object geerbte Methode)

Overrides:
equals in class Object
Parameters:
hamster - muss ein Objekt der Klasse Hamster oder einer davon abgeleiteten Klasse sein
See Also:
Object.equals(java.lang.Object)

getAnzahlHamster

public static int getAnzahlHamster()
liefert die Gesamtzahl an erzeugten und initialisierten Hamstern im Territorium (inkl. dem Standard-Hamster)

Returns:
die Gesamtzahl an erzeugten und initialisierten Hamstern im Territorium

getAnzahlKoerner

public int getAnzahlKoerner()
                     throws HamsterNichtInitialisiertException
liefert die Anzahl der Koerner, die der aufgerufene Hamster gerade im Maul hat

Returns:
die Anzahl der Koerner, die der aufgerufene Hamster gerade im Maul hat
Throws:
HamsterNichtInitialisiertException - wird geworfen, wenn der Hamster noch nicht initialisiert worden ist

getBlickrichtung

public int getBlickrichtung()
                     throws HamsterNichtInitialisiertException
liefert die Blickrichtung, in die der aufgerufene Hamster gerade schaut (die gelieferten Werte entsprechen den obigen Konstanten)

Returns:
die Blickrichtung, in die der aufgerufene Hamster gerade schaut
Throws:
HamsterNichtInitialisiertException - wird geworfen, wenn der Hamster noch nicht initialisiert worden ist

getReihe

public int getReihe()
             throws HamsterNichtInitialisiertException
liefert die Reihe der Kachel des Territoriums, auf der sich der aufgerufene Hamster gerade befindet

Returns:
die Reihe der Kachel des Territoriums, auf der sich der aufgerufene Hamster gerade befindet
Throws:
HamsterNichtInitialisiertException - wird geworfen, wenn der Hamster noch // nicht initialisiert worden ist

getSpalte

public int getSpalte()
              throws HamsterNichtInitialisiertException
liefert die Spalte der Kachel des Territoriums, auf der sich der aufgerufene Hamster gerade befindet

Returns:
die Spalte der Kachel des Territoriums, auf der sich der aufgerufene Hamster gerade befindet
Throws:
HamsterNichtInitialisiertException - wird geworfen, wenn der Hamster noch nicht initialisiert worden ist

getStandardHamster

public static Hamster getStandardHamster()
liefert den Standard-Hamster, das ist der Hamster, der sich standardmaessig im Territorium befindet, ohne explizit erzeugt werden zu muessen

Returns:
der Standard-Hamster

gib

public void gib()
         throws HamsterNichtInitialisiertException,
                MaulLeerException
Der aufgerufene Hamster legt ein Korn auf der Kachel ab, auf der er sich gerade befindet.

Throws:
HamsterNichtInitialisiertException - wird geworfen, wenn der Hamster noch nicht initialisiert worden ist
MaulLeerException - wird geworfen, wenn der Hamster keine Koerner im Maul hat

init

public void init(int reihe,
                 int spalte,
                 int blickrichtung,
                 int anzahlKoerner)
          throws HamsterInitialisierungsException
Methode zum Initialisieren eines noch nicht initialsierten Hamsters. Der Aufruf der Methode fuer einen bereits initialisierten Hamster bewirkt nichts.

Parameters:
reihe - die Reihe des Territoriums, in der der Hamster erzeugt wird
spalte - die Spalte des Territoriums, in der der Hamster erzeugt wird
blickrichtung - die Richtung, in der der Hamster anfangs schaut (siehe Konstanten)
anzahlKoerner - die Anzahl an Koernern, die der Hamster anfangs im Maul hat
Throws:
HamsterInitialisierungsException - wird geworfen, wenn: (a) eine Kachel (reihe/spalte) nicht existiert (b) die Kachel (reihe/spalte) durch eine Mauer blockiert ist (c) der Wert von blickrichtung nicht zwischen 0 und 3 liegt (d) der Wert von anzahlKoerner < 0 ist

kornDa

public boolean kornDa()
               throws HamsterNichtInitialisiertException
liefert genau dann true, wenn auf der Kachel, auf der sich der aufgerufene Hamster gerade befindet, mindestens ein Korn liegt

Returns:
true, wenn auf der Kachel, auf der sich der aufgerufene Hamster gerade befindet, mindestens ein Korn liegt; sonst false
Throws:
HamsterNichtInitialisiertException

liesZahl

public int liesZahl(String aufforderung)
             throws HamsterNichtInitialisiertException
gibt den uebergebenen String auf den Bildschirm aus und fordert den Benutzer auf, eine Zahl einzugeben; die eingegebene Zahl wird als Wert geliefert (wenn der Benutzer eine ungueltige Zahl eingibt, wird der Wert 0 geliefert)

Parameters:
aufforderung - der auszugebende String
Returns:
die vom Benutzer eingegebene Zahl
Throws:
HamsterNichtInitialisiertException - wird geworfen, wenn der Hamster noch // nicht initialisiert worden ist

liesZeichenkette

public String liesZeichenkette(String aufforderung)
                        throws HamsterNichtInitialisiertException
gibt den uebergebenen String auf den Bildschirm aus und fordert den Benutzer auf, einen String einzugeben; der eingegebene String wird als Wert geliefert

Parameters:
aufforderung - der auszugebende String
Returns:
der vom Benutzer eingegebene String
Throws:
HamsterNichtInitialisiertException - wird geworfen, wenn der Hamster noch nicht initialisiert worden ist

linksUm

public void linksUm()
             throws HamsterNichtInitialisiertException
Der aufgerufene Hamster dreht sich linksum.

Throws:
HamsterNichtInitialisiertException - wird geworfen, wenn der Hamster noch nicht initialisiert worden ist

loeschen

public void loeschen()
Der aufgerufene Hamster wird geloescht, d.h. er wird vom Bildschirm entfernt und seine Initialisierung wird rueckgaengig gemacht. Durch Aufruf der init-Methode kann der Hamster wieder reanimiert werden. Wird die Methode fuer den Standard-Hamster aufgerufen, passiert nichts. Achtung: Die Methode gehoert nicht zum Standard-Hamster-Modell!


maulLeer

public boolean maulLeer()
                 throws HamsterNichtInitialisiertException
liefert genau dann true, wenn der aufgerufene Hamster keine Koerner im Maul hat

Returns:
true, wenn der aufgerufene Hamster keine Koerner im Maul hat; sonst false
Throws:
HamsterNichtInitialisiertException - wird geworfen, wenn der Hamster noch nicht initialisiert worden ist

nimm

public void nimm()
          throws HamsterNichtInitialisiertException,
                 KachelLeerException
Der aufgerufene Hamster frisst ein Korn auf der Kachel, auf der er sich gerade befindet.

Throws:
HamsterNichtInitialisiertException - wird geworfen, wenn der Hamster noch nicht initialisiert worden ist
KachelLeerException - wird geworfen, wenn auf der Kachel, auf der sich der Hamster gerade befindet, kein Korn liegt

schreib

public void schreib(String zeichenkette)
             throws HamsterNichtInitialisiertException
gibt den uebergebenen String (in einer Dialogbox) auf den Bildschirm aus

Parameters:
zeichenkette - der auszugebende String
Throws:
HamsterNichtInitialisiertException - wird geworfen, wenn der Hamster noch nicht initialisiert worden ist

toString

public String toString()
Methode, die eine String-Repraesentation der folgenden Art fuer den aufgerufenen Hamster liefert: "Hamster steht auf Kachel (0/0) mit Blickrichtung OST und 2 Koernern im Maul" Wenn der aufgerufene Hamster noch nicht initialisiert ist, wird folgender String geliefert: "Hamster ist nicht initialisiert" (ueberschreibt die entsprechende von der Klasse Object geerbte Methode)

Overrides:
toString in class Object
Returns:
eine String-Repraesentation des aktuellen Hamster-Zustands
See Also:
Object.toString()

vor

public void vor()
         throws HamsterNichtInitialisiertException,
                MauerDaException
Der aufgerufene Hamster springt auf die in Blickrichtung vor ihm liegende Kachel.

Throws:
HamsterNichtInitialisiertException - wird geworfen, wenn der Hamster noch nicht initialisiert worden ist
MauerDaException - wird geworfen, wenn die Kachel in Blickrichtung vor dem Hamster durch eine Mauer blockiert ist oder der Hamster in Blickrichtung am Rand des Territoriums steht

vornFrei

public boolean vornFrei()
                 throws HamsterNichtInitialisiertException
liefert genau dann true, wenn sich in Blickrichtung vor dem aufgerufenen Hamster keine Mauer befindet (wenn sich der Hamster in Blickrichtung am Rand des Territoriums befindet, wird false geliefert)

Returns:
true, wenn sich in Blickrichtung vor dem aufgerufenen Hamster keine Mauer befindet; sonst false
Throws:
HamsterNichtInitialisiertException - wird geworfen, wenn der Hamster noch nicht initialisiert worden ist