BlueJ: Kommunikation zwischen Klassen

Hallo,
ich muss als Seminararbeit eine Heizungssimulation erstellen und bin nun bei dem Problem angelangt, wie ich die Kommunikation zwischen z.b dem Heizkessel und dem Heizköper erstell. Der Heizkörper soll z.b selbst erkennen dass das Wasser(Raum) zu kalt ist und nun dem Heizkessel sagen dass er wieder neues warmes Wasser benötigt.
Diese Kommunikation untereinander bereitet mir jedoch Schwierigkeiten… ich bitte um Hilfe…

Gruß Ben91

Hallo Ben,

Ich gehe davon aus, dass Heizkessel und Heizkörper zwei Klassen sind.
Die einfachste Kommunikation funktioniert über eine Methode, z. B. Heizkessel.getWasser(int menge). Diese sollte aus Sicherheitsgründen auf protected gesetzt werden.

Wenn der Heizkörper nun neues Wasser möchte, kannst du mit dem Methodenaufruf Wasser anfordern.

Ich hoffe, das hilft dir. Wenn noch etwas unklar ist, zögere nicht, zu fragen :smile:

vg

tincian

Hallo tincian,
danke für die schnelle Antwort. Hilft soweit auch, nur an der genauen Ausführung scheitert es meist.
Also es sind 2 Klassen: Heizkessel und Heizkörper.

Heizkessel: protected int getWasser(int w){
return w;
}

Heizkörper: protected void setWasser(){
Heizkessel.getWasser();
}

Wie vorhergesagt kommt es zur Fehlermeldung:
„getWasser(double)in Heizkessel cannot be applied to()“

Stelle mich bestimmt sehr dumm an, aber muss mir alles für die Seminararbeit selbst irgendwie aneignen und sehe hier einen guten Weg dafür, wenn ihr mit mir ein wenig Geduld habt und mir helft.

Danke schonmal Ben

Hallo nochmal,

das Problem ist folgendes:
Du rufst eine Methode auf, die Parameter enthalten muss, weil in der Klammer int w steht.

Den Aufruf machst du aber ohne irgendwelche Parameter. Diese Methode kennt der Compiler aber nicht.

-> Wenn du eine Methode gleich nennst, aber mit unterschiedlicher Zahl und/oder Typen von Parametern versiehst, unterscheidet der Compiler sie an eben der Zahl oder dem Typ. Folgende Methoden sind daher unterschiedlich:

  • getWasser()
  • getWasser(int w) -> andere Zahl von Parametern
  • getWasser(String s) -> anderer Datentyp
  • getWasser(Sting s, int w) -> andere Zahl von Parametern
  • getWasser(int w, String s) -> andere Reihenfolge der Typen.

Dies bezeichnet man als Überladen der Methoden.

Daher musst du in diesem Fall entweder einen Parameter übergeben oder die Methode nur getWasser() nennen.

Hilft dir das?

Viele Grüße

Mirco

was ich noch vergessen habe: in

Heizkörper: protected void setWasser(){
Heizkessel.getWasser();
}

solltest du den Wert auch in irgendeiner Variablen speichern - oder den Rückgabetyp auf void ändern, wenn er nicht benötigt wird. Alternativ bietet es sich an, als Rückgabetyp boolean zu setzen - um zu sehen, ob die Anfrage erfolgreich war.

Hallo,
meinst du so?:

Heizkessel:
protected double getWasser(){
return w;
}

Heizkörper:
protected boolean setWasser(){

Heizkessel.getWasser();
}

kommt trotzdem noch eine Fehlermeldung, dass
„a non-static method getWasser() cannot be referenced from a static context“

Hallo,

ja, so meine ich es. Zu der Meldung

„a non-static method getWasser() cannot be referenced from a
static context“:

Du musst ein neues Objekt von Heizkessel erstellen und von diesem die Methode aufrufen. Der Quelltext:

protected boolean setWasser(){
Heizkessel h = new Heizkessel();
h.getWasser();

Du erstellst in BlueJ per Rechtsklick ein neues Objekt der Klasse Heizkörper, dann klickst du mit rechts darauf und führst denn „boolean setWasser()“ aus.
Alles klar?

gruß

Hallo,
alles klar, hilft mir zunächst weiter…

bis zum nächsten Problem :smile:

Gruß Ben

Tag Ben,
wie sieht dein Programm denn jetzt genau aus? Ich denke, dass die Klassen mit einer Ist-, Hat- oder Kennt-Beziehung richtig strukturiert werden müssen. Ich kann dir da jetzt schlecht eine „Faustformel“ zu erstellen, denn ich weiß nicht was genau dein Problem ist und wieweit du mit BlueJ vertraut bist. Aber wenn du dich mit den Beziehungen auskennst verstehe ich nicht, wo das Problem sein könnte. Denn die Deklarierung von public und private sind danach ja nurnoch Kleinigkeiten.

Hallo,
diese Ist-, Hat- oder Kennt-Beziehungen sagen mir z.b nichts.
Mein Problem ist so auch schwer zu erklären, ich könnte dir einfach mal mein Programm per E-mail schicken, dann wäre das um einiges einfacher?!
Hatte BlueJ zwar ein Jahr lang in der Schule, aber da wurden uns nur die ganz groben „Basics“ gelehrt.
Und diese Deklarierungen brauch ich glaub auch nicht.

Gruß Ben