Frage von Belaro, 52

JAVA - Was ist besser: Objekt übergeben oder Objekt holen?

Hallo Leute

Ich habe 3 Klassen. 1 Main und 2 GUIs. Im GUI 1 möchte ich eine Funktion im GUI 2 starten. Damit ich darauf zugreiffen kann, habe ich ein GUI 2 Objekt im Main erstellt.

Ist es jetzt besser, wenn du das Objekt dem GUI 1 übergebe oder lieber vom GUI 1 auf das Objekt im Main zufgreiffen oder ist beides egal?

Ich hoffe mal ihr versteht, was ich da gerade beschrieben habe.

Hilfreichste Antwort - ausgezeichnet vom Fragesteller
von MalNachgedacht, 20

Wenn GUI1 sich das Objekt GUI2 von Main "holen" muss dann bedeutet dass, das GUI1 auch Main kennen muss.
GUI1 arbeitet also nur mit Main zusammen und ist von dem "abhängig".

Soll GUI1 irgendwann mal auch zusätzlich von einer anderen Klasse (womöglich mit einem anderen GUI2) verwendet werden müßte GUI1 entsprechend umprogrammiert werden

Übergibt Main hingegen GUI2 an GUI1 dann muss GUI1 nichts von Main wissen - und kann auch problemlos von anderen Klassen verwendet werden.

im Zweifel ist es nicht verkehrt wenn man keine unnötigen Abhängigkeiten von Klassen untereinander schafft.

Von daher würde ich die Variante mit GUI2 als Parameter übergeben ggf. bevorzugen.

Es könnte aber z.B. auch sein das die Erzeugung von GUI2 viel Rechenleistung braucht - aber nur ganz selten von GUI1 auch tatsächlich benutzt wird.
In dem Fall wäre es ggf. ungünstig GUI2 "auf Verdacht" vorab bereits in Main() zu erstellen sondern besser diese Erstellung erst dann vorzunehmen wenn GUI1 tatsächlich GUI2 auch braucht. In dem Fall wäre also günstiger GUI1 holt sich GUI2 bei Main ab - aber eben nur wenn es auch wirklich gebraucht wird. Und Main erstellt dann (und nur dann) GUI2

Pauschale Antworten gibt es da nicht.

Es hängt z.B. davon ab ob man Priorität auf einfach verständlich Code, leicht wiederverwendbaren Code, Performance des Code usw. legt.




Expertenantwort
von KnusperPudding, Community-Experte für Java, 29

Naja, viele Wegen führen nach Rom.

Ich würde sagen, es kommt ganz stark darauf an, wie die beiden GUIs miteinander verbunden sind.

Sind GUI1 und GUI2 Abhängig voneinander? Wird GUI2 ausschließlich von GUI2 aufgerufen?

Wie du das auch immer gestaltest, sollte davon abhängen, wie diese beiden GUIs miteinander agieren sollen.

Demnach wäre es mir sehr recht, bevor ich hier endlose mögliche Optionen schreibe, wenn du das etwas konkretisierst, in welcher Relation die beiden zueinander stehen.

Beispiele:

  • GUI1 Ist eine AdressListe, GUI2 stellt AdressDetails pro Adresse dar.
  • GUI1 ist eine Eine Umsatzliste, GUI2 ist eine Rechnungs-Anwendung.

usw.

Kommentar von Belaro ,

Dein erstes Beispiel trifft es gut. Ich habe nämlich im ersten GUI eine Liste an Filme und im zweiten GUI werden dann die Details der Filme aufgeführt

Kommentar von KnusperPudding ,

Filmliste + Film-Details also. 

Für den Fall dass es dir 'reicht' GUI2 aus GUI1 aufzurufen würde das in etwa so aussehen:

class GUI1 {

 int getSelectedFilmID(){
   ...
 }
 
 void showDetails() {
   new GUI2(this.getSelectedFilmID()).show();
 }
}

Sprich, du rufst den Konstruktor deiner zweiten GUI Klasse auf, übergibst die Film ID und wird anschließend dargestellt.

Hast du andere Präferenzen/Vorlieben , indem du willst, dass z.b. ein Detailbereich in einem separaten Fenster permanent vorhanden ist und defaultmäßig ohne Daten, auch angezeigt wird und erst beim klick auf einen Film reagiert, so kannst du das über deine 'Main' Klasse als Zentrale Anwendung auch machen, z.b. so:

class Main {
   private GUI1 filme;
   private GUI2 details;

   public Main() {
     filme = new GUI1(this);
     filme = new GUI2(this);
   }

   GUI1 getFilme() {
     return this.filme;
   }

   GUI2 getDetails(){
     return this.details;
   }

}
class GUI1  {

  private Main hauptanwendung;

  public GUI1(Main hauptanwendung) {
    this.hauptanwendung = hauptanwendung;
  }

  Main getHauptanwendung() {
    return this.hauptanwendung;
  }

  int getSelectedFilmID() {
   ...
  }

  void populateFilmDetails() {
     getHauptanwendung().getGUI2().setFilmDetails(this.getSelectedFilmID());
    
  }

}

Also ich würde das persönlich in etwa so gestalten. Natürlich gibt es noch andere Wege, aber ich halte das für einen sauberen Ansatz.

Antwort
von Monster1965, 28

Ich würde jetzt mal über eine Get-Funktion das Objekt holen.

Keine passende Antwort gefunden?

Fragen Sie die Community