Paket und Software Design Fragen.

Status
Nicht offen für weitere Antworten.
F

Fabeltier

Gast
Hallo,
Ich habe einige Fragen zu den Packages die es in Java gibt und dem Design das man bei der Entwicklung anwenden sollte.

1. Wie sollte das Konzept der Packages planerisch verwendet werden, bzw wie wird es sinnvoll angewandt?

2. Ich habe ein mittleres Projekt (ca 50 Klassen), welches von den Paketen her, wie ich finde, mit einiger Unsicherheit von mir angelegt wurde. Dh teils habe ich diese nach Aufgaben (bspw Fileoperationen, Berechnungen, etc) teils nach "Klassentyp" (Dialoge, Documents, besondere Panels, ...) erstellt. Mittlerweile habe ich ca 6 Pakete, eines davon enthaelt nur 2 Klassen, ein anderes ca 20.

3. Gibt es da Faustregeln wieviele Pakete bei wievielen Klassen und wieviele Klassen durchschnittlich pro Paket?

4. Ich denke bei einem ausgewogenen Design, sollten alle Pakete wohl ca gleich viele Elemente enthalten, oder?

5. Sollte man eher mehr oder weniger Pakete erstellen - wieviele waeren bspw fuer ein 50 Klassen Projekt angebracht?

6. Sollte man generell alles eher in ein Paket reinhauen oder die Pakete nach Typen (zB Dialoge, Frames, Panels, Listen, ...) strukturieren oder aber nach der Aufgabe der jeweiligen Klassen im Programm selber (bspw. Haupt frame und panels, Fileoperationen, Tabelle mit Model etc, Hauptdatenliste,...) aufteilen?

7. Was ist der Zweck von Paketen, bzw auf welcher Ebene setzt man Pakete zum Kapseln des Codes ein?

Bin da mom etwas ratlos, aber sicherlich gibt es da vernuenftige Ansaetze, damit man dieses Kraut und Rueben vermeidet..
 

Ralf1007

Mitglied
Da Dir die Pakete eine Ordnerstruktur anlegen, die du dann im Explorer auch sehr schön erkennen kannst, solltest du dementsprechend auch deine Package-Struktur aufbauen. Wieviele Klassen nun in einem Package liegen, ist meiner Meinung nach nicht so wichtig, hauptsache es entsteht eine Struktur mit der du arbeiten kannst. Mal auf dein Projekt bezogen, könntest du eventuell eine ähnliche Paketstruktur anlegen wie folgende:

- deinProgramm.model.Fileoperationen (hier alles zu Operationen mit Dateien rein)
- deinProgramm.model.Berechnungen (alle zugrundeliegenden Berechnungen)
- deinProgramm.graphic.panel
- deinProgramm.graphic.dialogs
- deinProgramm.graphic.....

Also wichtig ist immer eine strikte Trennung zwischen Funktionalität(deinProgramm.model.*) und grafischer Oberfläche bzw. Repräsentation (deinProgramm.graphic.*). Ob die Namen von mir so gut gewählt sind, sei dahingestellt. Wenn du nun z.B. die Dialoge noch unterteilen kannst, weil sie in verschiedene Gruppen gehören, dann solltest du das natürlich auch noch machen. Durch diese Art der Paketstruktur findest du, wenn du sie so logisch anlegst später deine Klassen wesentlich einfacher wieder.

Ich hoffe ich konnte Dir helfen.

MfG Ralf
 
F

Fabeltier

Gast
Danke,

Das mit der strikten Trennung von grafischer Repraesentation und Funktionalitaet im Hintergrund ist so eine Sache. Natuerlich habe ich versucht die Funktionalitaet des Hauptframes und seinen Widgets soweit mit einem Hauptkontrollobjekt, das zur Steuerung im Hintergund und zur Interaktion mit anderen Klassenobjekten fungiert zu trennen. Dialoge, Panels, Tabbs fuer ein Tabbed pane und aufwendiger Actionlistener sind jeweils als eigene Klassen von entsprechenden (oft als abstrakt angelegten) Sammeltyp-Klassen, abgeleitet worden, nur so einfach liessen sich diese Hintergrundklassen nicht von der Grafischen Oberflaeche trennen.

IdR kommt es mir oft so vor, als wenn man viel leichter die Grafik abspalten koennte und man die Funktionalitaet dessen einfacher austauschen koennte, als bspw zur Funktionalitaet eine andere Grafik davor setzen - ist das ein Fehler in der Konzeption oder ist eine grobe Trennung von Funktionalitaet und Grafik ausreichend?

Ich weiss, das es hier eher um Spitzfindigkeiten geht, aber eben auch um ideale Zielsetzungen, die vllt fuer den Benutzer, der schnell was lauffaehiges haben will absolut wurscht sind. Aber andererseits sind das Fragen mit denen ich bei jedem Java Projekt immer wieder neu konfrontiert bin. Ich habe auch den Eindruck das Java die grafische Planung sehr beguenstigt und eine leichte _Ab_trennung dieser gar nicht so relevant ist. Da man in Java recht komfortabel bei sehr kleinen Dingen auch komplett nur die grafische Ebene ausimplementieren kann. Taeuscht das?
 

Ralf1007

Mitglied
Fabeltier hat gesagt.:
IdR kommt es mir oft so vor, als wenn man viel leichter die Grafik abspalten koennte und man die Funktionalitaet dessen einfacher austauschen koennte, als bspw zur Funktionalitaet eine andere Grafik davor setzen - ist das ein Fehler in der Konzeption oder ist eine grobe Trennung von Funktionalitaet und Grafik ausreichend?
Ich bin selber noch nicht allzu lange dabei aber ich mache etwas ähnliches wie du und bei mir ist es so, dass die grafische Oberfläche einfach auszutauschen ist, da auf dieselben Schnittstellen zugegriffen werden kann. Es entstehen aber Probleme dabei eine andere Funktionalität dahinterzulegen und die Grafik zu behalten, denn die Zugriffe der grafischen Oberfläche auf das zugrundegelegte Modell sollten ja nicht verändert werden, sodass du bei jeder anderen Funktionalität dieselben Schnittstellen bereistellen musst. Also um deine Frage zu beantworten: Wenn du wirklich perfektionistisch arbeiten willst, dann schreibst du Interfaces, die unabhängig vom Modell bzw. der Grafik sind und das Modell und die Grafik implementieren diese egal in welcher Lesart, so kannst du nämlich dann auch beide austauschen und musst lediglich auf die Schnittstellen zugreifen. Allerdings finde ich, dass das sehr aufwendig ist, aber bei großen Projekten im Grunde auch unerlässlich. Am allerbesten ist es, wenn du es von Vornherein so planst, was du ja leider versäumt hast, denn im Nachhinein diese Änderungen zu machen ist unglaublich viel Arbeit.
Du hast auch was von abstrakten Klassen geschrieben und so verkehrt ist das auch nicht. Der Eindruck, dass das Austauschen nicht so einfach möglich ist, entsteht dadurch, dass es noch nicht perfekt ist.
Fabeltier hat gesagt.:
Da man in Java recht komfortabel bei sehr kleinen Dingen auch komplett nur die grafische Ebene ausimplementieren kann. Taeuscht das?
Ich sehe das ähnlich.
 

alehandro

Mitglied
Fabeltier hat gesagt.:
4. Ich denke bei einem ausgewogenen Design, sollten alle Pakete wohl ca gleich viele Elemente enthalten, oder?

tuest Du programmieren oder Symmetriekunde betreiben? :) Das ist Wurscht wieviel Elemente Deine Packages enthalten, solange sie Dir eine gute logische Trennung der Klassen und ein schnelles Zurechtfinden erlauben

Fabeltier hat gesagt.:
5. Sollte man eher mehr oder weniger Pakete erstellen - wieviele waeren bspw fuer ein 50 Klassen Projekt angebracht?
6. Sollte man generell alles eher in ein Paket reinhauen oder die Pakete nach Typen (zB Dialoge, Frames, Panels, Listen, ...) strukturieren oder aber nach der Aufgabe der jeweiligen Klassen im Programm selber (bspw. Haupt frame und panels, Fileoperationen, Tabelle mit Model etc, Hauptdatenliste,...) aufteilen?
Das mit dem Pakete-Erstellen werde ich nicht ins Unendliche treiben wollen. Die Übersicht geht verloren.

Fabeltier hat gesagt.:
7. Was ist der Zweck von Paketen, bzw auf welcher Ebene setzt man Pakete zum Kapseln des Codes ein?
Übersicht und Trennung ;) ... Kapseln: schön ist wenn pakete möglichst wenig von einander wissen. Sprich es ist immer eine gute Idee Subpackages mit Fassaden(die die Schnittstelle zum Package sind) zu versehen, solange das natürlich überhaupt möglich ist.
 
F

Fabeltier

Gast
Na gut, ich habe ja auch nicht einfach drauf losprogrammiert sondern immer versucht etwas zu planen, kapseln und Modelle zu verwenden. Allerdings eben auch mit prioritaeten. bspw habe ich mehrere Arten von tabbed Pages auf die ich etwas mehr Eingegangen bin als bspw auf andere Dinge. Also Interfaces und v.a. abstrakte Klassen (da ich eig. nicht von Java her komme, bin ich dieses Konzept etwas mehr "gewoehnt") habe ich benutzt, aber eben auch nur da wo es imo notwendig war.

Beim abkapseln der Grafik von der Funktion frage ich mich teilweise schon ob das ueberall so unbedingt sinnvoll ist, oder einfach nur einen Mehraufwand darstellt, der gerade mit den in SWING moeglichen L&F's nicht unbedingt notwendig ist. Ich denke eine Umstellung von bspw SWING auf SWT, waere sicherlich eine andere Sache. Allerdings nutzt das Prg ja schon auch Vorzuege von Swing und diese nicht zu nutzen, dafuer aber eine Perfekte Kapselung zu erreichen (wenn man sowieso nie vorhat das Ding jemals auf SWT, AWT oder sonst was zu uebertragen) halte ich nicht unbedingt fuer soo sinnvoll - bin aber gespannt wie andere das sehen und wuerde mich auch gerne ueberzeugen lassen?

So gesehen, finden die vorzuege der Grafik schon auch nur in Grafikrelevanten Klassen statt, was jedoch definitiv keine Grafik mehr darstellt sind lediglich Fileoperationen, Berechnungen und Listenverwaltung). Ansonsten ist bspw eine Kontrollklasse der Grafik schon sehr stark damit verwoben und dort eine zusaetzliche Layer einzufuegen fuer Auswechselbarkeit.. hm, es liesse sich nun schon rel. einfach realisieren, aber die Probleme lagen eig. schon auch woanders. Bei der Uebersichtlichkeit stimme ich absolut zu.

Mir geht es jetzt einfach nur noch mal darum evtl der Paketstruktur den letzten Schliff zu geben, was sich ja einfach durch rumschieben realisieren laesst. Ich werde wohl auch mal in den UML Diagrammen nachsehen, wie die Klassen miteinander verwoben sind und was sich da noch kapseln laesst.
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
P Methode aus anderem Paket aufrufen Allgemeine Java-Themen 1
T Schlüsselworte mehrere public-Klassen in einem Paket Allgemeine Java-Themen 7
T Bild in jar Paket einbinden Allgemeine Java-Themen 9
B Eclipse [Ubuntu] Paket javax.media.* nicht gefunden Allgemeine Java-Themen 7
B Suche Paket zum auslesen von Metadaten von Bildern. Allgemeine Java-Themen 4
T Class Not Found Exception beim import von Paket Allgemeine Java-Themen 2
M Von Paket zurück zu "Anfang" Allgemeine Java-Themen 5
G Klassen & Paket Struktur Allgemeine Java-Themen 4
K jar Datei in Paket einbinden Allgemeine Java-Themen 2
R Einsatz von java.nio-Paket Allgemeine Java-Themen 3
P Webhosting-Paket unterstützt nur .war Dateien keine jsp Allgemeine Java-Themen 4
Zrebna Zuverlässiges Automatisiertes Testen im eigenem Software-Unternehmen aufsetzen - How to? Allgemeine Java-Themen 12
I In Java geschriebene Software nach Mac OS portieren Allgemeine Java-Themen 7
OnDemand Software Zertifizierung Allgemeine Java-Themen 4
Zrebna Wieviele Testfälle muss man hier schreiben? (Software Engineering) Allgemeine Java-Themen 13
Kirby.exe Software Entwicklung Allgemeine Java-Themen 9
Kirby.exe Software für Graphische Visualisierung Allgemeine Java-Themen 20
B Multiuser Software Allgemeine Java-Themen 3
L Nach dem Login // Java Desktop Software Allgemeine Java-Themen 7
W Software-Lizenzen Allgemeine Java-Themen 13
temi Fragen zur Software-Architektur Allgemeine Java-Themen 123
david19 Software AE über Domain laufen lassen Allgemeine Java-Themen 0
M JVM: Client Software Logging und Profiling aktivieren Allgemeine Java-Themen 1
G Job als Programmierer (Software oder Spiele Entwickler) Allgemeine Java-Themen 2
O Architektur für Software Allgemeine Java-Themen 14
K Java mit Software ausliefern, Securitybedenken? Allgemeine Java-Themen 4
wolfgang63 Code snipped Software Allgemeine Java-Themen 1
J Java Software Compare Files und Neue File erstellen Allgemeine Java-Themen 0
A Update Software programmieren Allgemeine Java-Themen 1
O Java Hardware Software Zeit Allgemeine Java-Themen 7
D Software entwicklen und verkaufen Allgemeine Java-Themen 1
OnDemand Software-Tracking Allgemeine Java-Themen 14
OnDemand Java Software verkauf untersagt Allgemeine Java-Themen 4
N Neue Software in Java 7 oder 8? Allgemeine Java-Themen 3
R Software ausliefern - Aber Wie? Allgemeine Java-Themen 10
A Sinnvolles Software Design bei Eigenschaftsänderungen von Objekten Allgemeine Java-Themen 7
R Installierte Software auslesen mit Java Allgemeine Java-Themen 3
L Software-Design: Kommunikation mit SerialPort (RXTX) Allgemeine Java-Themen 2
G Best Practices Software-Engineering‏ Allgemeine Java-Themen 3
G RXTX in proprietärer Software nutzen?! Allgemeine Java-Themen 10
A Sicherheit von Software Allgemeine Java-Themen 2
B Software Metriken für Java Allgemeine Java-Themen 36
F LGPL in kommerzieller Software Allgemeine Java-Themen 7
R Konzept eines Software-Rollout/Synchronisation via WebService Allgemeine Java-Themen 5
P Software schützen Allgemeine Java-Themen 8
R software implementierung Allgemeine Java-Themen 3
G Software fuer Auktionshaus Filmundo.de aber wie? Allgemeine Java-Themen 2
X Software soll einen Text vorlesen! Allgemeine Java-Themen 5
X Software schützen! DEMOVersion Allgemeine Java-Themen 12
D JDK fürGPL-Software? Allgemeine Java-Themen 6
S software zum zuschneiden von Bildern Allgemeine Java-Themen 2
C Software für Windows PC mit integierter Db oder Textdatei? Allgemeine Java-Themen 19
J Java Software schreiben? Allgemeine Java-Themen 4
P Bekannte Software in Java? Allgemeine Java-Themen 27
M Chat-Software gesucht Allgemeine Java-Themen 3
T GPL Code inkommerzieller Software nutzen? Allgemeine Java-Themen 26
G Software für Java programmierung Allgemeine Java-Themen 5
Z Beipiel zu gut dokumentierten Software Allgemeine Java-Themen 3
B chat-software Allgemeine Java-Themen 5
T Soll ich meine Software als freeware zum download geben? Allgemeine Java-Themen 15
H Andere Software fernsteuern Allgemeine Java-Themen 7
H Software wartet? Allgemeine Java-Themen 11
J Meinung zum verwendeten Design Pattern Allgemeine Java-Themen 4
S Noch eine Design-Frage zu Setter Allgemeine Java-Themen 6
S ArrayList Design Allgemeine Java-Themen 4
S Interface Design von HookUp oder Callback Methoden für eigenes Framework Allgemeine Java-Themen 9
Kirby.exe Framework für Game Design Allgemeine Java-Themen 8
C WindowBuilder Design funktioniert nicht Allgemeine Java-Themen 0
M Diverse Design-Fragen Allgemeine Java-Themen 6
rentasad Design-Frage - Interfaces, Klassen, statische Methoden Allgemeine Java-Themen 3
M OOP Design Pattern - "extends Observable implements Observer" Allgemeine Java-Themen 0
T OOP Fehler im Design Allgemeine Java-Themen 9
perlenfischer1984 Welches Design Pattern ist geegneit. Allgemeine Java-Themen 7
perlenfischer1984 Hilfe bei Design (Pattern) Allgemeine Java-Themen 5
N Vererbung Design-Problem mit vorhandenen, von der Klasse unabhängigen Methoden Allgemeine Java-Themen 12
R Parameter Adapter - Design Allgemeine Java-Themen 1
D Bezüglich Design meines Codes Allgemeine Java-Themen 1
D OOP Design Pattern für GUI - Datenbank Anwendung Allgemeine Java-Themen 1
S Java Design Frage Allgemeine Java-Themen 10
L OOP Klassen-Design (static oder nicht?) Allgemeine Java-Themen 3
P Auf die Anzahl der Joins achten beim WS design Allgemeine Java-Themen 1
M OOP Design Frage Allgemeine Java-Themen 2
J Domain Driven Design - Modellierungsfrage Allgemeine Java-Themen 3
F Welches Design Pattern? Allgemeine Java-Themen 3
H MVC Design Allgemeine Java-Themen 9
J Swing Eigenes Button-design Allgemeine Java-Themen 2
Q Kapselung Allgemeine Design- Frage Allgemeine Java-Themen 8
Z Design um boolsche ausdrücke zu speichern & auszuwerten Allgemeine Java-Themen 3
C Gutes Code Design (3 Schichten Modell) Allgemeine Java-Themen 19
D Design Stations-Gitter Allgemeine Java-Themen 4
M Public Static importRunning -> Bad Design oder ok ? Allgemeine Java-Themen 5
D [Drag&Drop] Design-Pattern-Frage Allgemeine Java-Themen 4
G Design Patterns für Programm Allgemeine Java-Themen 3
I Wie populär ist Design by Contract in Java und was haltet ihr davon? Allgemeine Java-Themen 5
Landei Design-Problem Formel-Parser Allgemeine Java-Themen 10
J Aktionen im State-Design-Modell Allgemeine Java-Themen 3
S Design Oberfläche Allgemeine Java-Themen 2
L Design-Frage: Platzierung der Save-Methode Allgemeine Java-Themen 3
G Domain Driven Design Model Allgemeine Java-Themen 14
G konkretes Domain Driven Design Aggregate Allgemeine Java-Themen 2

Ähnliche Java Themen

Neue Themen


Oben