X) 04 Ein erstes Resümee
Ihre Wirtschaft ist nun seit ein paar Wochen eröffnet. Zeit ein Resümee zu ziehen. Leider fällt dieses nicht gerade optimal aus – unklare Speisekarten, schlechte Arbeitsabläufe, ungenutzte Kapazitäten, …. Deshalb ist es dringend notwendig die Arbeitsabläufe zu optimieren und mit einer neuen Struktur zu glänzen. Und mal ehrlich: Wenn die Situation objektiv angegangen wird, finden das Ergebnis bestimmt alle klasse.
Eins vorneweg: Rom wurde auch nicht an einem Tag erbaut! Deshalb werden wir in diesem Kapitel den Grundstein zur Objekt-Orientierung legen – nicht mehr und nicht weniger. Alles andere wäre für einen Tag zu viel des Guten. Der Rest wird nach und nach beinahe beiläufig in die weiteren Kapitel verpackt. Für heute soll unser Ziel aber lediglich eine Wirtschaft sein, die Gäste betreten und wieder verlassen können.
Der Gast
Sprichwörtlich gilt: „Der Kunde ist König“. Dies sollten Sie aber nicht allzu ernst nehmen, denn auch ein Kunde, oder in Ihrem Fall vielmehr ein Gast, ist auch nur ein Mensch. Wir benötigen folglich zuerst einen Menschen. dieser Mensch
hat vorerst lediglich einen Vor- und Nachname (Attribute, Sichtbarkeitsmodifizierer). Den Namen kann er natürlich nur selbst ändern und wird ihm bei seiner Geburt gegeben (Konstruktor). Jeder kann ihn aber nach seinen Namen Fragen (Getter-Methoden), den er auch selbst nennt, wenn er sich vorstellt (toString
-Methode).
package de.jbb.personen; public class Mensch { protected String vorname = null; protected String nachname = null; public Mensch(String vorname, String nachname) { this.vorname = vorname; this.nachname = nachname; } public String getVorname() { return this.vorname; } public String getNachname() { return this.nachname; } public String toString() { return this.vorname + " " + this.nachname; } }
Da wir nun einen Menschen
definiert haben, können wir diesen weiter zu einem Gast
spezialisieren. Ein Gast
hat natürlich auch einen Vor- und Nachnamen, ist also auch ein Mensch (Vererbung). Zusätzlich ist unser Gast
unter Umständen hungrig und/oder durstig. Wir benötigen also noch zwei weitere Attribute – durstig
und hungrig
. Auch nach diesen Eigenschaften kann man unseren Gast
fragen, zusätzlich kann er aber auch durch bestimmte Tricks hungrig oder durstig gemacht werden (Setter-Methoden). Diesen Umstand müssen wir auch berücksichtigen. Erstellen wir uns also eine neue Klasse, die von Mensch
erbt und die zusätzlich benötigten Methoden und Attribute definiert.
package de.jbb.personen; public class Gast extends Mensch { private boolean durstig = false; private boolean hungrig = false; public Gast(String vorname, String nachname) { super(vorname, nachname); } public boolean isDurstig() { return this.durstig; } public void setDurstig(boolean durstig) { this.durstig = durstig; } public boolean isHungrig() { return this.hungrig; } public void setHungrig(boolean hungrig) { this.hungrig = hungrig; } }
Durch Aufruf des Konstruktors der Mensch-Klasse mittels super()
, müssen wir bei unserem Gast nicht noch mal die Attribute für den Vor- und Nachnamen setzen.
Die Wirtschaft
Der Einfachheit halber beschränken wir unsere Wirtschaft
vorerst auf ein Array vom Typ Gast
, das alle Gäste speichert, die die Wirtschaft
betreten haben. Zum Betreten der Wirtschaft
benötigen wir eine Methode, die es uns ermöglicht, Gäste in unserem Array einzufügen. Natürlich können Sie nicht die Gäste auf Lebenszeit in Ihrer Wirtschaft
gefangen halten – bieten Sie ihnen auch die Möglichkeit die Wirtschaft
wieder zu verlassen.
Wenn ein Platz in Ihrer Wirtschaft
frei ist, wird dieser durch null
repräsentiert. Die Anzahl der Plätze legen Sie beim Bauen, also Erstellen, Ihrer Wirtschaft
über den Konstruktor fest.
package de.jbb.wirtschaft; import de.jbb.personen.Gast; public class Wirtschaft { private Gast[] plaetze = null; public Wirtschaft(int groesse) { this.plaetze = new Gast[groesse]; } public void betreten(Gast g) { for (int i = 0; i < this.plaetze.length; i++) { if (this.plaetze[i] == null) { System.out.println("Willkommen " + g); this.plaetze[i] = g; return; } } System.out.println("Kein Platz mehr frei"); } public void verlassen(Gast g) { for (int i = 0; i < this.plaetze.length; i++) { if (this.plaetze[i] == g) { System.out.println("Auf Wiedersehen " + g); this.plaetze[i] = null; return; } } } }
Die Gäste werden in diesem Fall mit ==
und nicht mit equals
verglichen, da es sich natürlich um genau diesen Gast handeln muss, und nicht um irgendeinen, der bspw. zufällig den selben Namen trägt. Hier ist also eine Vergleich der Referenz sinnvoll.
Die Wirtschaft mit Leben füllen
Alle Vorbereitungen sind getroffen, nun können die Gäste kommen! Dieses erledigen Sie in der Main-Methode einer weiteren, statischen Klasse (Verwendung von static) – der Welt
. Dort erstellen wir eine Wirtschaft und ein paar Gäste, die die Wirtschaft betreten können. Dies ist natürlich nur dann sinnvoll, wenn der Gast auch Hunger oder Durst hat. Ist dies nicht der Fall, bleibt er weg. Dies sollten wir in einer separaten Methode überprüfen, damit wir keinen Code öfter als eigentlich nötig programmieren müssen.
package de.jbb; import de.jbb.personen.Gast; import de.jbb.wirtschaft.Wirtschaft; public class Welt { private static Wirtschaft zumJavaBlogBuch = null; public static void main(String[] args) { Welt.zumJavaBlogBuch = new Wirtschaft(20); Gast hansPeter = new Gast("Hans-Peter", "Stubail"); Gast manuel = new Gast("Manuel", "Rubsch"); Gast silke = new Gast("Silke", "Maier"); hansPeter.setDurstig(true); hansPeter.setHungrig(true); silke.setDurstig(true); Welt.gastKommt(hansPeter); Welt.gastKommt(manuel); Welt.gastKommt(silke); Welt.gastGeht(hansPeter); Welt.gastGeht(manuel); Welt.gastGeht(silke); } private static void gastKommt(Gast g) { if (g.isDurstig() || g.isHungrig()) { Welt.zumJavaBlogBuch.betreten(g); } else { System.out.println(g + " hat keinen Hunger und auch keinen Durst"); } } private static void gastGeht(Gast g) { Welt.zumJavaBlogBuch.verlassen(g); } }