Design Problem

Status
Nicht offen für weitere Antworten.

wippi90

Mitglied
Hallo Leute,
Ich habe immer wieder das Problem dass meine Klassen riesen groß werden...
Ich würde das gerne aufteilen auf mehrere Klassen...

Eine Ableitung muss ich ausschließen da ich leider bereits schon eine Ableitung haben...

Also Klasse 1 kann A und B
Klasse 2 (wird abgeleitet von Klasse 1) kann C,D,E,F,G,H usw.

Die kann unheinlich viel...
Ich möchte gerne ein paar Methoden einfach auslagern...
Wie kann ich das am besten machen?

Mit INterfaces funktioniert das ja auch nicht da ich die erst wieder in der Klasse implementieren muss..

Wie könnte ich das am besten machen?

Vielen Dank
 
Du wirst es nicht glauben, aber das hängt maßgeblich davon ab was A,B,C,D,E,F,G und H sind, und wie du das benutzt. :lol:
 
Wenn eine Klasse A und B kann, mach zwei Klassen KA und KB daraus. Wenn sich die beiden Objekte jeweils gegenseitig kennen, solltest du auch keine grossen Probleme mit der Suche nach Informationen bekommen:
Code:
class KA{
  private KB b;

  public KA(){
    b = new KB( this );
  }

  public final KB getB(){
    return b;
  }
}
Code:
class KB{
  private KA a;

  public KB( KA a ){
    // versichern, dass da kein Quatsch zusammengebaut wird
    if( a == null )
      throw new IllegalArgumentException( "a darf nicht null sein" );

    if( a.getB() != null )
      throw new IllegalArgumentException( "a darf noch kein b haben" );

    this.a = a;
  }
}
 
eine einzelne Klasse kann man IMMER mit Vererbung aufteilen

statt Klasse 2 hast du dann
Klasse 2,
+ Klasse 3 die direkt von Klasse 2 erbt,
+ Klasse 4 die direkt von Klasse 3 erbt,
+ Klasse 5 die direkt von Klasse 4 erbt,

am Ende benutzt du nur Klasse 5, und ein Teil derer Operation ist in den Oberklassen 4, 3, 2 definiert

ist natürlich überhaupt nicht schön, aber so ist das nunmal,
entweder die 1000 Operationen einer Klassen in dieser einen Klasse definieren oder unsauber aufteilen,

ein anderer Weg wäre, nur die Implementierung in andere Klassen auszulagern,
die dann in Klasse 2 als Exemparvariable enthalten sind,

ist im Grunde ähnlich unsauber,
und hat den Nachteil, dass weiterhin alle Operation in Klasse 2 definiert sein müssen, wenn auch recht kurz
Code:
public Object doXY() {
  return otherObject.doXY();
}
 
Wie gesagt, es hängt stark von der Verwendung ab.
Beispielsweise eine Vererbung über 10 Stufen ist in der Regel ungünstig.
Wenn du genauer beschreibst um was es geht lässt sich sicher ein passendes Pattern finden.
So kann man zum Beispiel mit einem Visitor oder einem Decorator geschickt Funktionalität einfügen ohne die Klasse aufzublähen.
 
Es ist für sich gesehen unerheblich wie groß eine Klasse ist. Je mehr Wissen und Erfahrung man im Bereich objektorientierten Designs (OOD) man hat, desto kleiner werden sie quasi automatisch, weil die Verantwortungen dann klar verteilt sind.

Lerne mehr über OOD und Javas OO-Features und der Rest ergibt sich von selbst.
 
Class.java, String.java: in 1.4.2 > 2000 Zeilen,
JTable.java: in 1.4.2 > 6000 Zeilen

hätten bloß die Java-Programmierer vorher OOD gelernt 😉

also ich habe in meinen Projekten auf öfters große Dateien,
das ist an zentralen Stellen zwar nicht unvermeidbar,
aber auch kein grober Verstoß gegen OOD
 
Wobei man aber auch sehen muss, dass in den JFC die meisten Zeilen auf Kommentare entfallen. Das ist in freier Wildbahn, gerade bei nicht so erfahrenen Codern, oft/meist nicht der Fall.
 
Status
Nicht offen für weitere Antworten.

Zurück
Oben