© 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