© APSIS GmbH
, Polling,
2000
Datenbehälter aus der Bibliothek für das Lehrbuch Programmieren mit Java
Dokumentation
Programmtext mit Dokumentation
package lehrbuch;
public class Eimer implements Cloneable {
public final static Getraenk WASSER = Getraenk.WASSER;
public final static Getraenk WEIN = Getraenk.WEIN;
public static Getraenk wasser() {
return WASSER;
}
public static Getraenk wein() {
return WEIN;
}
public Eimer() {
eimerPos = UNSICHTBAR;
eimerGefuellt = false;
eimerInhalt = WASSER;
}
public Eimer(final Eimer eimer) {
this();
eimerGefuellt = eimer.eimerGefuellt;
eimerInhalt = eimer.eimerInhalt;
}
public Eimer(final boolean b) {
this();
anzeigen();
}
public Eimer(final Getraenk g) {
this();
try {
fuellen(g);
}
catch (VollAusnahme ausnahme) {
System.err.println("Interner Fehler in Eimer(Getraenk): " + ausnahme);
} // kann nicht passieren
}
public Eimer(final Getraenk g, final boolean b) {
this(g);
anzeigen();
}
public void fuellen(final Getraenk getraenk) throws VollAusnahme {
if (eimerGefuellt)
throw new VollAusnahme();
else {
eimerGefuellt = true;
eimerInhalt = getraenk;
if (eimerPos != UNSICHTBAR)
Anim.eimerFuellen(eimerPos, eimerInhalt.pos());
// am Bildschirm wird das Fuellen des Eimers angezeigt
}
}
public void fuellen() throws VollAusnahme {
fuellen(WASSER);
}
public void entleeren() throws LeerAusnahme {
if (! eimerGefuellt)
throw new LeerAusnahme();
else {
eimerGefuellt = false;
if (eimerPos != UNSICHTBAR)
Anim.eimerEntleeren(eimerPos, eimerInhalt.pos());
// am Bildschirm wird das Entleeren des Eimers angezeigt
}
}
public boolean gefuellt() {
return eimerGefuellt;
}
public Getraenk inhalt() throws LeerAusnahme {
if (eimerGefuellt)
return eimerInhalt;
else
throw new LeerAusnahme();
}
public void anzeigen() throws FuenfterEimerFehler {
if (eimerPos == UNSICHTBAR) {
if (naechstePos == UNTEN_RECHTS)
throw new FuenfterEimerFehler();
else {
naechstePos++;
eimerPos = naechstePos;
}
}
if (eimerGefuellt)
Anim.vollenEimerZeigen(eimerPos, eimerInhalt.pos());
else
Anim.leerenEimerZeigen(eimerPos);
}
public class FuenfterEimerFehler extends Error {}
// Kopieren und Vergleich:
public void kopieren(final Eimer quelle) {
eimerGefuellt = quelle.eimerGefuellt;
eimerInhalt = quelle.eimerInhalt;
anzeigen();
}
public boolean istGleich (final Eimer eimer) {
return (!eimerGefuellt && ! eimer.eimerGefuellt) || // beide leer, oder
eimerGefuellt && eimer.eimerGefuellt && // beide voll, und
eimerInhalt.equals(eimer.eimerInhalt); // gleicher Inhalt
}
public boolean identisch (final Eimer eimer) { // vergleicht Inhalt und Position
return (istGleich(eimer) && eimerPos == eimer.eimerPos);
}
// Kommunikationsmethoden:
public void meldung() throws LeerAusnahme { //
if (! eimerGefuellt)
throw new LeerAusnahme();
else
Anim.meldung(eimerInhalt.text(), "Eimerinhalt");
}
public static void meldung(final Getraenk getraenk) {
Anim.meldung(getraenk.text(), "Getränk");
}
public static void meldung(final String text) {
Programm.meldung(text);
}
public static void meldung(final String text, final String titel) {
Programm.meldung(text, titel);
}
// Füllen von der Oberfläche:
public void getraenkWahl() {
try {
entleeren();
} catch (LeerAusnahme ausnahme) {} // wenn leer, OK
Getraenk getraenk = Getraenk.WASSER;
getraenk = (Getraenk)getraenk.auswahl();
try {
fuellen(getraenk);
} catch (VollAusnahme ausnahme) {} // ist schon leer
}
public void getraenkEingabe() {
try {
entleeren();
} catch (LeerAusnahme ausnahme) {} // wenn leer, OK
Getraenk getraenk = Getraenk.WASSER;
try {
getraenk = (Getraenk)getraenk.eingabe();
} catch (BereichAusnahme ausnahme) {
getraenk = (Getraenk)getraenk.auswahl();
}
try {
fuellen(getraenk);
} catch (VollAusnahme ausnahme) {} // ist schon leer
}
// Klonen
public Object clone(final Eimer eimer) {
try {
return super.clone();
} catch(CloneNotSupportedException ausnahme) { // kann nicht auftreten
System.err.println("Interner Fehler in Eimer.clone " + ausnahme);
throw new InternalError();
}
}
// nur für Unterklassen:
protected void fuellenMitWein() throws VollAusnahme {
fuellen(WEIN);
}
// private Teile:
// Objektkomponenten:
private boolean eimerGefuellt;
private Getraenk eimerInhalt; // WASSER oder WEIN
private int eimerPos; // Position des Eimers 0 .. 4
// Klassenkomponente:
private static int naechstePos; // Position des letzten angezeigten Eimers
// Initialisierung der Klassenkomponente:
static {
naechstePos = 0;
}
// private Konstanten: private static final int UNSICHTBAR = 0; private static final int OBEN_LINKS = 1; private static final int OBEN_RECHTS = 2; private static final int UNTEN_LINKS = 3; private static final int UNTEN_RECHTS = 4; }
package lehrbuch;
public class Getraenk extends Aufz {
public static final Getraenk WASSER = new Getraenk();
public static final Getraenk WEIN = new Getraenk();
}
© APSIS GmbH
, Polling,
2000