java design von klassen und projekten

  • Themenstarter Themenstarter Guest
  • Beginndatum Beginndatum
Status
Nicht offen für weitere Antworten.
G

Guest

Gast
Moin,

ich habe mal ne frage zum design von projekten und klassen.

wir haben in der schule gerade ein projekt am laufen und sollen ein java-programm schreiben.
ich bin gerade dabei alle grafischen klassen zu erstellen und habe dafür jetzt zwei package's.

Package:
gui
&
listener

damit die klassen nicht so groß werden, probiere ich so gut wie möglich auszulagern. quasi fast
edes panel/frame als eigene klasse. das package gui hat jetzt knapp 15 klassen und es werden noch einge
dazu kommen.
bei den listener bin ich mir noch nicht wirklich sicher, wie ich es machen soll. im moment habe ich
beinah für jeden button, einen eigenen listener und den in einer klasse ausgelagert.
Das ganze sieht jetzt in etwa so aus.

MyClass:
Code:
public class MyClass{
        
        public MyClass(){
                JButton b = new JButton();
                b.addActionListener(new MyClassJButtonActionListener(this));
        }
        
        public void machWas(){
        }
}

MyClassJButtonActionListener:
Code:
public class MyClassJButtonActionListener implements ActionListener{
        
        MyClass myClass;
        
        public MyClassJButtonActionListener(MyClass myClass){
                this.myClass = myClass;
        }
        
        public void actionPerformed(ActionEvent e){
                myClass.machWas();
        }
}

das ist das erste größere programm was wir/ich schreibe und nun habe ich da ein paar fragen:

1. Ist das übertrieben wenn man soviel gui-componenten auslager?
2. Wie macht ihr das, lagert ihr die Listener(Mouse,Action,Key,usw.) auch aus, oder benutzer ihr eine "inner-class"
oder implementiert ihr die Listener direkt in der class oder was ganz anderes?
3. die classen namen die ich verwende sind ähnlich wie oben. spricht das etwas dagegen? wie benennt ihr eure classen
damit es übersichtlich bleibt?(zur erklärung ich verwende immer den "Klassenname" + "die componente die überwacht wird" + "die art des listeners").
 
So eine wirklich gute Regel gibt es hier wohl nicht... ich versuche die GUI-Klassen so mit Befehlen zu füllen, dass sie etwa 200 - 500 Zeilen lang werden. Da hat man gerade noch den Überblick, und es werden nicht allzuviele Klassen.
Da bekommt ein normaler Dialog dann meist gerade eine Klasse, die einzelnen Panels gerade eine Methode (eine Methode baut das Panel für die Knöpfe, eine Methode baut die Tabelle zusammen, ...).
Natürlich gibt es Ausnahmen... so ein Hauptfenster kann schonmal aus 20-30 Klassen (und einer Unmenge Interfaces für Plugins) bestehen.

Listener: ich mache immer eine (selten mehrere) innere Klasse. So ein Listener geht niemanden was an, da kann ja sonst jeder was instantiieren...

[Edit: Ach ja, Klassennamen: wenn man für eine Klasse keinen guten Namen findet, ist die Klasse überflüssig, denn sie hat ja offensichtlich keine speziellen Charakterien :wink: "MyXXX" benutze ich nie, ist sowas von einfallslos...:bae:]
 
ich versuche das ganze so gut wie möglich zu strukturieren.... Jeden Listener der irgendwo vorkommt bekommt bei weitem keine eigene Klasse. Wenn er wichtig ist und somit auch größere Aufgaben zu bewerkstelligen hat dann ja, aber nur weil, wenn ein Button gedrückt wird, sich Fenster z.b. schließt das auszulagern wäre sinnlos.

Ebenso auf biegen und brechen GUI Components zu trennen - sind sie groß, wichtig und komplex, dann eine eigene Klasse überlegen.

Wichtig hierbei ist es zu versuchen mit Vererbungshierarchien zu arbeiten - sind einige Components (Listener) sich ähnlich, kann man sie vll von einer oberklasse erben lassen usw....
 
upa, war vorhint nicht eingeloggt...


schonmal danke für die info's.

Beni hat gesagt.:
Listener: ich mache immer eine (selten mehrere) innere Klasse. So ein Listener geht niemanden was an, da kann ja sonst jeder was instantiieren...


und wie sieht das dann aus, wenn du mehrer listener hast?
so? oder dann für jeden listener ne eigene inner-klasse?

Code:
public class MyClass{
       
        public MyClass(){
                JButton b = new JButton();
                b.addActionListener(new MyInnerClass());
        }
       
        public void machWas(){
        }
        
        private class MyInnerClass() implements ActionListener, MouseListener, KeyListener{
           usw...
        }


}


Beni hat gesagt.:
[Edit: Ach ja, Klassennamen: wenn man für eine Klasse keinen guten Namen findet, ist die Klasse überflüssig, denn sie hat ja offensichtlich keine speziellen Charakterien "MyXXX" benutze ich nie, ist sowas von einfallslos...]

das mit den My... war ja nur ein beispiel. sieht bei mir auch anderes aus. mich interessiert mehr ob ihr den typ der klasse mit in den namen einbaut. z.B. wenn die klasse von jpanel erbt = sinnvollerNameJPanelAufHauptFrame oder sowas
 
Ich hab innere Klassen für Listener ganz gerne - allerdings muss man aufpassen dass man sich da net auf einmal verschachtelt, wie ich es so gerne mache (in das actionPerformed gehört halt grade ein kleiner Dialog, da mach ich keine extra Klasse... hm bei dem OK Button brauch ich nen Listener das wird kurz ne anonyme Klasse... oh nein wenn da das und das passiert muss ich aber das machen - schreib ich nochmal kurz ne Methode in die Klasse etc.) -> spätestens wenn man in ner inneren Klasse ne Klasse braucht: neue Klasse, oder besser gleich die innere Klasse nach außen tun.
 
Wie gesagt, das mit den Listener variiert. Aber meistens mache ich deine Variante (gleich mehrere Interfaces implementieren).

Meine Klassennamen bestehen (bei der GUI) meist aus 2-3 Wörtern. Wenn es Platz hat, kommt ein "Panel" oder so hinzu, wenn nicht, dann nicht :wink:
Ich kann dir ja mal ein paar Beispiele geben: "AnimationPanel" (Ein Panel das ein Bild zeichnet), "AnimatorControl" (ein Panel mit Knöpfen), "FlatButton" (ein einzelner Knopf), "LanguageChooser" (Eine JComboBox mit der man Sprachen auswählen kann), "ReadyLabel" (Ein Panel mit Text und Icons), "Slider" (eine Art JSlider), ...
 
danke, für die tip's

Beni hat gesagt.:
So ein Listener geht niemanden was an, da kann ja sonst jeder was instantiieren...

ich hatte da eigentlich keine "gefahr" gesehen, was soll da schon passieren? man bräuchte ja dann schon die instanz der klasse um den listener zu nutzen, oder? und da kann ich ja entscheiden, welche klasse etwas von der instanz weiss und welche nicht. oder :bahnhof:
 
Status
Nicht offen für weitere Antworten.

Neue Themen


Zurück
Oben