Prinzip: wie man Ereignisse in einer GUI verarbeit. Frage zum Design?

Diskutiere Prinzip: wie man Ereignisse in einer GUI verarbeit. Frage zum Design? im AWT, Swing, JavaFX & SWT Forum; Hallo allerseits, habe viele Listener (Wanzen) in meinem GUI-Programm, z.B. an verschiedene Schieberegler angebracht. Die Werte von b_1 und b_2...

  1. ernst
    ernst Mitglied
    Hallo allerseits,
    habe viele Listener (Wanzen) in meinem GUI-Programm, z.B. an verschiedene Schieberegler angebracht. Die Werte von b_1 und b_2 dieser Schieberegler beeinflussen dann z.B. das Aussehen des Schaubilds wie z.b. f(x) = b_1 * x + b_2
    Die entsprechenden Einfang-Methoden (die geworfene Objekte z.B. der Schieberegler einfangen) liefern dem Programm dann die zu verarbeitenden Daten: b_1 und b_2
    In den entsprechenden Einfang-Methoden wie z.B.
    public void stateChanged(ChangeEvent e)
    müssen dann diese Daten b_1 und b_2 durch den Aufruf entsprechender Methoden verarbeitet werden, bei mir z.B. durch die Methode:
    malfläche.maleInsBild()

    Ich habe jetzt folgende Überlegung gemacht:
    Erzeuge eine Klasse
    Steuerung{
    private static double b_1; // Daten
    private static double b_2; // Daten
    private static Malflaeche malfläche; // Verarbeitungsvariable

    // mit den entsprechenden set- und get-Methoden.
    }

    Wenn die malfläche im Konstruktor erzeugt wird, speichere ich diese sofort in der Klasse Steuerung ab.
    Wenn durch ein Ereignis (wie z.B. Bewegung des Schiebereglers) der Wert von b_1 bzw. b_2 verändert wird, wird in der entsprechenden Einfang-Methode der Wert sofort in der Klasse Steuerung abgespeichert bzw. im Aufruf einer Methode der Verarbeitungsvariable
    wie z.B. malfläche.maleInsBild() aus der KLasse Steuerung ausgelesen und z.B. zum Zeichnen genutzt.

    Dadurch hat sich mein Programm wesentlich vereinfacht:
    Viele Objekte müssen sich nicht mehr kennen, viele Konstruktoren haben keine Parmeter mehr, usw.

    Frage:
    Verletzt dieses Prinzip die Regeln der OOP bzw. was haltet ihr davon ?
    mfg
    ern
     
  2. Vielleicht hilft dir dieses Training hier weiter.
  3. mrBrown
    mrBrown Super-Moderator Mitarbeiter
    Was ist das denn? o_O


    Generell: Verzichte auf jegliches static.
    Das oben beschrieben les zumindest ich so, dass du alle "sich kennenden Objekte" durch static ersetzt hat, das ist in jedem Fall schlechter Stil. Vielleicht ist es aber auch völlig anders gemeint?
     
  4. mihe7
    mihe7 Bekanntes Mitglied
    Wenn Du die Parameter dadurch ersetzt, dass Du benötigte Objekte im Konstruktor erzeugst: ganz schlechte Idee.
     
  5. ernst
    ernst Mitglied
    Was ist eine "Einfang-Methode" ?
    Beispiele für Einfang-Methoden:
    public void keyReleased(KeyEvent e)
    public void keyTyped(KeyEvent e)
    public void keyPressed(KeyEvent e)
    public void stateChanged(ChangeEvent e)

    Wie nennst du diese Methoden?
    Listener, Wanzen ?
    mfg
    ern
     
  6. ernst
    ernst Mitglied
    Es ist so:
    Die Werte von b_1 und b_2 produziert der Anwender durch Benutzung des Schiebereglers.
    Die Variable malfläche verarbeitet diese Werte (durch Verwendung einer Methode).
    _Nur_ diese 3 wichtigsten Variablen (nicht _alle_ Variablen meines Programms) kapsle (und speichere) ich in der Klasse Steuerung, weil diese in der Hauptsache für die Dynamik des Programms verantwortlich sind.
    static nehme ich, weil ich kein Objekt der Klasse Steuerung brauche.

    Ist das von mir angewandte Prinzip nicht OOP gemäß?


    Mfg
    ern
     
  7. mrBrown
    mrBrown Super-Moderator Mitarbeiter
    Listener?

    Wanzen und Einfang-Methoden hör ich zum ersten Mal...


    Nein, static widerspricht OOP.

    Außerdem ist eine Klasse "Steuerung", die nichts steuert, sondern 3 unabhängige Variablen enthält, etwas komisch...
     
  8. ernst
    ernst Mitglied
    >
    >Wanzen und Einfang-Methoden hör ich zum ersten Mal...
    >
    ja, dient nur zur Veranschaulichung.

    >
    >Nein, static widerspricht OOP.
    >
    1) kannst du das belegen (Quellen?)
    2) Warum erlaubt Java dann static ?

    >
    >Außerdem ist eine Klasse "Steuerung", die nichts steuert, sondern 3 unabhängige >Variablen enthält, etwas komisch...
    >
    Das stimmt.
    Weisst du einen besseren Namen ?
    Es geht darum:
    In b_1, b_2 sind die Werte, die von den Anwendern über die Listener als input kommen.
    malflaeche ist die Variable, die eine Methode liefert, die diese Werte verarbeitet
    und einen output liefert.
    Im Prinzip steuern diese Variablen das ganze Programm.

    mfg
    ern


    Frage:
     
  9. mrBrown
    mrBrown Super-Moderator Mitarbeiter
    Mit static hast du keine Objekte mehr, sondern die Klassen dienen nur als Namespace für Variablen und Methoden.
    So ziemlich alles, was OOP ausmacht, hast du mit static nicht (Polymorphie, spätes binden, Messages zwischen Objekten, ...)

    In deinem Fall: Steuerung ist kein Objekt, sondern einfach nur noch Namespace für 3 Variablen.

    Warum es trotzdem benutzt wird: Es ist für vieles praktischer (zB Konstanten (Math.PI), Funktionen (Math.min), Programmeinstieg (main)), im Entwurf ist es aber nicht nötig und oft eher hinderlich.


    Ja: "" ;)
    Lass die Klasse weg, bisher ist die nur überflüssig.

    Und warum sollte man dann diese drei Zusammen in irgendeine Klasse legen?

    Der Controller, der b_1 und b_2 (die Namen solltest du auch dringendst ändern...) ändert, kann auch einfach direkt die MalFläche kennen und die Werte direkt setzen.
     
  10. ernst
    ernst Mitglied
    >
    >Nein, static widerspricht OOP.
    >
    Kannst du mir dazu Quellen im Internet nennen ?

    mfg
    ern
     
  11. mihe7
    mihe7 Bekanntes Mitglied
  12. Wenn du Java lernen möchtest, empfehlen wir dir dieses Online-Training hier
Passende Stellenanzeigen aus deiner Region:





Die Seite wird geladen...

Prinzip: wie man Ereignisse in einer GUI verarbeit. Frage zum Design? - Ähnliche Themen

Das Liskovsche Substitutionsprinzip
Das Liskovsche Substitutionsprinzip im Forum Allgemeine Java-Themen
Verletzungen des Liskovschen Substitutionsprinzips
Verletzungen des Liskovschen Substitutionsprinzips im Forum Allgemeine Java-Themen
Liskov Prinzip
Liskov Prinzip im Forum Java Basics - Anfänger-Themen
Interface Prinzip?
Interface Prinzip? im Forum Java Basics - Anfänger-Themen
prinzipielle Frage zu enums
prinzipielle Frage zu enums im Forum Java Basics - Anfänger-Themen
Thema: Prinzip: wie man Ereignisse in einer GUI verarbeit. Frage zum Design?