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

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
 
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
 
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?
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
 
>
>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:
 
1) kannst du das belegen (Quellen?)
2) Warum erlaubt Java dann static ?
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.


Weisst du einen besseren Namen ?
Ja: "" ;)
Lass die Klasse weg, bisher ist die nur überflüssig.

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.
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.
 
Vielen Dank an alle für eure wertvollen Hinweise.
Ich werde mein Projekt jetzt mit dem MVC Muster realsieren, damit ich einen Vergleich habe und mich danach evtl. noch mal melden.

mfg
ern
 
Passende Stellenanzeigen aus deiner Region:

Oben