• Willkommen im Linux Club - dem deutschsprachigen Supportforum für GNU/Linux. Registriere dich kostenlos, um alle Inhalte zu sehen und Fragen zu stellen.

Frage zur Klassendefinition in Java

Hi,

ich hab mal ne Frage, die Java betrifft.

Und zwar habe ich eine Vaterklasse "Speise", die die Unterklassen "Pizza","Salat","Eis" und "Belag" hat.

Jetzt soll ich zusätzlich noche eine Klasse "Bestellung" schreiben, die eine begrenzte Zahl an Speisen aufnehmen kann.
Wie sieht dann die Klassendefinition für die Klasse "Bestellung" aus?
Kann mir jemand helfen?

Danke schonmal,

mfg cole
 

framp

Moderator
Teammitglied
Da gibt es ein Design Pattern 'Composite' (Erich Gamma et al). Der Trick ist, dass die Subklasse Bestellung eine Collection des Oberklassenelements Speisen ist und jeder Methode der Subklasse Bestellung ueber alle seine Elemente laeuft und die jeweilige Methode an die Elemente forwarded.

Also sowas wie (ist Pseudo Java code)
Code:
class Bestellung ...

Collection speisen;

void salzen() {

   for all element i in speisen 
      i.salzen()
}
 
Ich nehme mal an, dass die Speisen alle von Speise erben?

Code:
public class Pizza extends Speise {

oder?


Bestellung sollte als Klassenobjekt jedoch ein Array (oder einen Vector, ... [eine Collection]) des Typs Speise enthalten, dazu entsprechende "getter" und "setter" Methoden um diesem Klassenobjekt Speisen hinzuzufügen oder welche zu entfernen.



Code:
public class Bestellung {

// This is for Java >= 1.5

   Vector<Speisen> speisen = new Vector<Speisen>();

    public void addSpeise(Speise speise) {
        // bitte füllen um an den Vector anzuhängen
    }

    public Speise getSpeise() {
         // bitte füllen um eine Speise von der Bestellung zu bekommen
   }


}
 
Danke für die schnellen Antworten.

Da die Bestellung ja eine begrenzte Größe haben soll, muss ich ja da irgendeine Grenze einbauen. Mach ich das dann über die Array (bzw. Vektor)Größe, oder?

Und wenn ich die Methode addspeise(Speise speise){} schreibe. Kann ich dann das übergebene Objekt einfach in ein Feld speichern?
z.B. speisen[0]= speise; bzw liegt da ja wahrscheinlich nur eine Referenz auf das Objekt drin
 
Du hast mich noch nie Essen bestellen sehen, sonst wüßtest du, dass die Speisen auf einer Bestellung nicht eingeschränkt sein sollten ;)

Es gibt die Möglichkeit ein Array zu verwenden, ich würde aber einen Vector nehmen und einfach vor dem Anfügen prüfen wie viele Objekte schon im Vector sind und ggf. einen boolean Wert zurück geben lassen ob das anfügen erfolgreich war.

Code:
    public boolean addSpeise(Speise speise) {
        if (speisen.size() > 5) {
            return false;
        } else {
            speisen.addElement(speisen);
            return true;
        }
    }
 
Ich muss ehrlich zugeben, dass ich das erste Mal von einem Vector höre.
Aber es hört sich sehr interessant an. Ich werde mich mal einlesen.

@sparrow: Danke für die Hilfe!
 
Son Vector ist recht praktisch.
Les dich da ruhig mal ein, sehr praktisch, nur etwas langsamer da der Zugriff threadsicher ist.
 
Oben