© APSIS GmbH extern.gif (1249 Byte), Polling, 2000


Eimer

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 extern.gif (1249 Byte), Polling, 2000