Richtlinien wie man Classen in Packages organisieren soll?

sirbender

Top Contributor
Hi,

wie man ein grosses Projekt in Einzelteile (Module/jars) aufspaltet sollte jedem einleuchten. Ein Jar fuer Graphics Operationen, ein Jar fuer mathematische Utils, usw.
Die Aufspaltung ergibt sich oft aus dem gesunden Menschenverstand ;)

Wie ist es aber wenn es darum geht Klassen in Packages zu stecken? Manche Leute stecken alles in ein Package, andere wiederum haben viele Packages mit wenigen Klassen, wiederum andere erstellen viele Sub- und Sub-Sub-Packages und die meisten machen ein Mix davon.

Gibt es irgendwelche einleuchtenden Richtlinien oder Tips wie man vorgehen sollte? Ob man Klassen innerhalb eine Packages z.B. moeglichst private macht und eine einzelne Klasse schreibt ueber die indirekt auf alle Klassen des Packages zugegriffen wird, usw.

Irgendwie scheint es mir als wuerde jeder gerade so machen wie er Lust hat ohne gross drueber nachzudenken.

Danke,
sb
 

c_sidi90

Top Contributor
Hängt meist vom Projekt selbst ab, da sollte man sich für jedes Projekt aufs neue kurz Gedanken machen ,auch wenn es viele Vorgehensweisen gibt die immer gleich ablaufen.

Verschiedene Module, verschiedene Bereiche, verschiedene benötigte Frameworks usw.

Ich sag mir immer, less is more, viele packages sind am Ende auch keine Organisationshilfe wenn sich in jedem Package nur eine Jar befindet :p
 
N

nillehammer

Gast
Sofern man packages nur als Schubladen begreift, damit nicht soiviel auf einmal in einem Ordner steht, kann man sie sich fast schenken. Ich finde sie bekommen Ihren Sinn erst dadurch, dass man mit Sichtbarkeitsmodifizierern bestimmte Methoden oder sogar ganze Klassen verstecken kann. Dadurch bekommt man eine schlanke API (Summe alles dessen, was public ist). Ein Package ist fü mich also mehr ein Rahmen für eine bstimmte Funktionalität.

Beispiel: Du willst einen (zugegeben wenig nutzbringenden) Service implementieren, der eine bestimmte Zeile einer Datei liest. Als guter Programmierer definierst du Dir zunächst ein Interface:
Java:
public interface LineReader {
  public String readLineFromfile(int lineNumber, String filePathName);
}
Ohne Implementierung macht das natürlich wenig Sinn. Also schreibst du eine Impl-Klasse. Du willst den Nutzer Deiner API aber zwingen, gegen das Interface zu programmieren. Er darf die Klasse also nicht sehen.
Java:
// Klasse hat default-Visibility, kann von außerhalb des package also nicht gesehen werden.
final class LineReaderDefaultImpl implements LineReader{
  // Konstruktor hat auch Default-Visibility.
  LineReader(){};

  @Override
  public final String readLineFromFile(final int lineNumber, final String filePathName) {
   // hier Dein toller Impl-Code
  }
}
Der Nutzer Deiner API kommt jetzt an deine Impl-Klasse nicht ran. Also schreibst Du noch eine Factory:
Java:
public final class ServiceFactory {

  public static LineReader createLineReader() {
    return new LineReaderImpl();
  }
}

Auf diese Weise zwingst Du den Nutzer, immer gegen das Interface zu programmieren. Er kann garnicht anders. Wenn Du nun deine Impl-Klasse austauschen möchtest, weil es in Java7 ganz tolle neue Funktionen für Zugriffe auf das Filesystem gibt, kannst Du das einfach machen. Du musst nicht darüber nachdenken, dass ein Nutzer Deine Impl-Klasse benutzt und sein Code nach Deinen Updates möglicherweise nicht mehr läuft.
 
V

vanny

Gast
Mir sind keine Richtlinien bekannt (was nicht heisst, dass es die nicht gibt^^).
Ich finde es nützlich, durch packages den "FingerWeg-Code"(zBsp. Factory-Klassen/FrameWorks etc.) vom "HierWirdGewurschtelt-Code" zu trennen.
Gui und interne Logik ist auch sinnvoll.
Alles andere ist dann eher Geschmackssache und hängt vom jew. Fall ab.

Gruß Vanny
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
C Java Classen ordnen Java Basics - Anfänger-Themen 4
A Import anderer Classen aus anderen Projekten Java Basics - Anfänger-Themen 6
MiMa Aufteilen in Classen Java Basics - Anfänger-Themen 5
M zugang zu anderen classen und Jframes Java Basics - Anfänger-Themen 3
D arraydaten zwischen classen übertragen Java Basics - Anfänger-Themen 8
H2SO3- sichtbarkeit con classen und functionen Java Basics - Anfänger-Themen 8
H2SO3- weggabel für classen Java Basics - Anfänger-Themen 13
G interne classen extern benutzen Java Basics - Anfänger-Themen 14
W Auf mehrere Classen zugreifen Java Basics - Anfänger-Themen 5
Q Frage zu Classen und Objektenerzeugung Java Basics - Anfänger-Themen 4
M "Partial" classen Java Basics - Anfänger-Themen 25
J Notwendige Classen ins JAR packen? Java Basics - Anfänger-Themen 7
T classen auslagern Java Basics - Anfänger-Themen 16
L In metoden/classen aufteilen (weniger im main) Java Basics - Anfänger-Themen 17
J Packages erstellen Java Basics - Anfänger-Themen 7
S Daten/Klassen/Packages richtig updaten!? Java Basics - Anfänger-Themen 2
M Packages erstellen mit Java-Editor Java Basics - Anfänger-Themen 6
C Probleme mit dem Erstellen und Importieren von Packages Java Basics - Anfänger-Themen 6
A Exceptions und Packages Java Basics - Anfänger-Themen 6
M Probleme beim verwenden von Packages Java Basics - Anfänger-Themen 6
Mxxxt Übersicht Java-Packages Java Basics - Anfänger-Themen 3
D Zusätzliche Packages benutzen? Java Basics - Anfänger-Themen 6
C Java Packages Konvention Namensvergabe Java Basics - Anfänger-Themen 3
B eclipse und packages weiterentwickeln Java Basics - Anfänger-Themen 5
B Compiler-Fehler Packages fehlen? Java Basics - Anfänger-Themen 5
J Eclipse + Java + Packages importieren Java Basics - Anfänger-Themen 7
J eigene packages bzw klassen verwenden Java Basics - Anfänger-Themen 25
G Packages -> was bringen sie? Java Basics - Anfänger-Themen 4
V Java Packages Java Basics - Anfänger-Themen 4
O Funktionen dateiübergreifend mit Packages Java Basics - Anfänger-Themen 6
J Zugriff auf Variable vom typ (default) durch Importieren des Packages? Java Basics - Anfänger-Themen 5
D Javadoc für Packages oder ganze Projekte Java Basics - Anfänger-Themen 5
U Zugriff auf andere Packages Java Basics - Anfänger-Themen 10
S Problem mit Packages Java Basics - Anfänger-Themen 9
C Klassen Main-Routine in Packages? Java Basics - Anfänger-Themen 7
L Konsole und packages Java Basics - Anfänger-Themen 8
B Packages in Eclipse umbennen Java Basics - Anfänger-Themen 12
V Packages: Cannot find symbol Java Basics - Anfänger-Themen 12
Blindxantos Klassen in verschiedene Packages unterteilen Java Basics - Anfänger-Themen 2
B Wie funktioniert der Import von Dritt-packages in Eclipse? Java Basics - Anfänger-Themen 5
K Collections Problem beim import von Packages Java Basics - Anfänger-Themen 10
M Tief verschachtelte Packages Java Basics - Anfänger-Themen 7
Z CLASSPATH + Packages Java Basics - Anfänger-Themen 6
N packages und finden von Klassen Java Basics - Anfänger-Themen 2
J Packages in Jar-Datei Java Basics - Anfänger-Themen 7
D Packages verwenden und in eigenes Projekt integrieren Java Basics - Anfänger-Themen 3
S Anfängerproblem mit Packages Java Basics - Anfänger-Themen 4
J Anfängerfrage zu Grundlagen von Packages Java Basics - Anfänger-Themen 7
B Unterklassen, Packages Java Basics - Anfänger-Themen 3
F Dateipfade mit Packages Java Basics - Anfänger-Themen 7
R mit klassen-instanzen arbeiten in packages Java Basics - Anfänger-Themen 10
F OOP Wrapper ermöglicht Zugriff für andere Packages? Java Basics - Anfänger-Themen 6
T Javac und Packages Java Basics - Anfänger-Themen 4
B Fragen zur Initialisierung/Zuweisung der Variable + Packages erstellen Java Basics - Anfänger-Themen 4
braindump Packages in verschiedenen Unterverzeichnissen Java Basics - Anfänger-Themen 3
G Verschiedene Packages Java Basics - Anfänger-Themen 3
R wo befinden sich die packages? Java Basics - Anfänger-Themen 5
S 2 Packages Java Basics - Anfänger-Themen 14
D packages importieren Java Basics - Anfänger-Themen 3
I Frage zu Packages Java Basics - Anfänger-Themen 19
T Anagram Game - warum ist es auf 2 Packages aufgeteilt? Java Basics - Anfänger-Themen 3
S problem mit packages Java Basics - Anfänger-Themen 7
G Konventionen für die Bezeichnung von Packages Java Basics - Anfänger-Themen 4
M problem mit packages Java Basics - Anfänger-Themen 5
D Packages mit Wizard erstellen Java Basics - Anfänger-Themen 2
S Woher Packages bekommen? Wie installieren? (Netbeans) Java Basics - Anfänger-Themen 4
B Packages einfach kopieren? Java Basics - Anfänger-Themen 13
B Fehler beim einbinden eines Packages Java Basics - Anfänger-Themen 6
G Aufgabe mit Packages Java Basics - Anfänger-Themen 3
G erstes Arbeiten mit Packages Java Basics - Anfänger-Themen 2
H javac mit meheren packages Java Basics - Anfänger-Themen 2
G Aus package auf andere eigene packages zugreifen? Java Basics - Anfänger-Themen 7
E import Anweisung und Packages Java Basics - Anfänger-Themen 3
F Pfadfrage in Packages und jar-Archiven Java Basics - Anfänger-Themen 3
P packages verwenden Java Basics - Anfänger-Themen 3
M Variabelzugriff auf fremde Packages Java Basics - Anfänger-Themen 5
D Probleme nach Einbindung einens neuen Packages Java Basics - Anfänger-Themen 5
T Packages erstellen und importieren? Java Basics - Anfänger-Themen 10
D Packages Java Basics - Anfänger-Themen 3
T Verständnisproblem packages/import Java Basics - Anfänger-Themen 9
P wohin muss ich die packages kopieren? Java Basics - Anfänger-Themen 12
T Erstellen eigener packages Java Basics - Anfänger-Themen 6
H Packages in JAR-Datei einbinden Java Basics - Anfänger-Themen 10
S Importieren in Packages Java Basics - Anfänger-Themen 11
C packages, jars - Verstaendnisfrage Java Basics - Anfänger-Themen 7
L Problem mit Packages Java Basics - Anfänger-Themen 5
L Eigene Packages importieren Java Basics - Anfänger-Themen 2
N Packages definieren bzw. zum Classpath hinzufügen Java Basics - Anfänger-Themen 4
A Packages und Vererbung Java Basics - Anfänger-Themen 5
S Packages verwenden Java Basics - Anfänger-Themen 7
T Nerv! Packages und Classpath Java Basics - Anfänger-Themen 2
H probleme mit import von eigenen packages Java Basics - Anfänger-Themen 4
C Packages... Java Basics - Anfänger-Themen 7

Ähnliche Java Themen

Neue Themen


Oben