Klassendesign (mit AWT)



  • Hi Leute,
    ich bin Anfänger in Sachen Java und hab ein Problem mit dem Klassendesign bzw Datenkapselung.
    Wenn ich z.B. einen Hauptdialog mache, auf dem ein Button ist, der wiederum einen modalen Dialog aufruft, wie soll ich die Funktionen auf die Klassen/Dateien aufteien?
    Soll ich z.B. eine Datei "Hauptdialog" und eine Datei "Modaler Dialog" erstellen? Und wie teil ich die Datei dann wiederum auf? Soll ich eine Klasse Mit GUI und eine mit Funktionalität machen? Muss oder soll der ActionListener bzw KeyListener in die Klasse des aufrufenden Dialoges oder ist er besser in einer eigenen Klasse aufgehoben?
    Ich wuerd schon gern mit gutem Stil Programmieren, aber hier weiss ich nicht weiter.

    MfG

    Dr. Ext.



  • Google nach MVC (Model/View/Controller)



  • MVC ist schön und gut aber ich denke er wollte auf etwas anderes hinaus. MVC ist dann interessant, wenn man sich Gedanken um die Daten und deren Darstellung macht.

    Prinzipiell sollte meiner Meinung nach alles ein Objekt sein, das durch seine Funktionalität (seinen Zweck) sich von anderen Objekten unterscheidet. Das Beispiel modaler Dialog ist dabei schlecht gewählt. Auch ein Meldungsfenster kann ein modaler Dialog sein muss aber nicht zwangsläufig in einer anderen Klasse stehen. Beispiel dafür ist die JOptionPane. Da wird eigentlich nur der Content verändert und die Buttonleiste ... der Rest ist identisch und kann direkt ohne Objekterzeugung aufgerufen werden (static-Methoden).

    Beim Design ist vor allem die Objektidentifizierung wichtig. Viele Sachen sind einfacher mit einer Tool-Klasse zu lösen. Andere wiederum sind in ihrer Komplexität schon so weit, dass eine eigene Klasse für die Funktionalität sinnvoll wäre. Das ganze muss ein "gesundes Maß" haben. Kein Berater wird dir klipp und klar sagen dass du dafür 23 Klassen und 540 Methoden brauchst. Und die ganze Welt neu modellieren muss man auch nicht. Also kein Overstructuring. Vielleicht ist dieser Thread interessant für dich.



  • Irgendwie bring ich es nicht fertig die ActionListener in eine anderen Klasse zu implementieren als in der des entsprechenden Dialoges. Muss das so sein, oder geht es auch anders?



  • Du musst lediglich eine Klasse schreiben, die das Interface "ActionListener" implementiert. Die Implementation ist relativ einfach, da das Interface nur eine Methode beschreibt nämlich [java]public void actionPerformed (ActionEvent evt)[/code]Deine Dialogklasse würde dann für die betreffende Komponente einen Aufruf wie [java]...
    MyActionListenerClass myActionListenerClassObject = new MyActionListenerClass();
    myComponent.addActionListener(myActionListenerClassObject);
    ... [/code] beinhalten und für jedes ActionEvent, das von dieser Komponente gefeuert wird würde deine actionPerformed (aus MyActionListenerClass) aufgerufen werden.

    Hope that helps.


Anmelden zum Antworten