Großes Programm - Wie Strukturieren?

Status
Nicht offen für weitere Antworten.

ghost

Bekanntes Mitglied
Ich muß ein großes ( längeres, umfangreicheres ) Programm erstellen. Meine Frage ist nun, wie strukturiere ich das am Besten?
 

Thorsten

Mitglied
Wie groß? Also im Bereich 0 - 3000 Zeilen (alle Klassen zusammen),
oder richtig groß ... so im Bereich > 100000?
 

foobar

Top Contributor
Was denn für ein Programm? Webinterface? Desktopanwendung? verteillte Anwendung? Was soll das System denn leisten?
 

ghost

Bekanntes Mitglied
Wieviele Zeilen es werden, weiß ich noch nicht ( aber es werden schon einige :) ).
Das Programm wird ne Schnittstelle zu MySQL ( Verbindung aufbauen/beenden, Eingaben, Select, ... ).
Thanks für die schnelle Antwort!
 
B

Beni

Gast
Weil ist selbst gerade ein grosses Programm schreibe (>100 Klassen), geb ich dir einfach mal meine Erfahrungen wieder. Ich hab keine Ahnung, was du schreiben willst, aber vielleicht kannst du was davon brauchen.

  • Versuch die Probleme getrennt zu lösen. (z.B. Der Speicheralgorithmus benötigt keine Informationen über das Icon des Hauptfensters...)
    Dann zerfällt das Projekt eigentlich in kleinere Projekte, und es wird einfacher Fehler zu finden, oder Neues einzufügen.
  • Ich hab eine Zentrums-Klasse geschrieben. Jedes Objekt besitzt eine Referenc auf das Zentrum (das wird direkt über den Konstruktor gesetzt). Das Zentrum wiederum besitzt Referencen auf die wichtigen Objekte des Programmes, z.B. das Hauptfenster. (oder auf Unterzentren, z.B. das Zentrum das sich mit den Dateien beschäftigt).
    Auf diese Weise kann man von überall im Programm an jede beliebige Stelle kommen, ohne dass man viel Zusätzliches schreiben müsste.
  • Lieber ein Interface zuviel als zuwenig.
  • Vergiss nicht die Dokumentation(Beispiel von meinem Prog). Du musst ja nicht jede Methode beschreiben, aber die wichtigsten Interfaces sind nützlich...
  • Versuch immer den kleinsten Nenner zu verwenden. Muss die MenuBar wissen dass sie ein "ExtraFileLoadMenuItem" besitzt, oder muss sie nur wissen, dass da ein "MenuItem" hineinkommt?
  • Und versuch das ganze dynamisch zu halten, z.B. lieber ein Vector anstelle eines Arrays zu benutzen. Wenn Du immer von einer unbestimmten Anzahl "Dingen" ausgehst, kannst du später einfacher neue Dinge hinzufügen/entfernen. Wenn du auch noch einen Haufen "addXX" und "removeXX"-Methoden machst, kannst du das sogar während dem laufenden Programm abändern.
  • Und scheu dich nicht, ausgiebig nach Fehler zu suchen. Für die letzte Datenstruktur die ich herstellte, hab ich kurzerhand ein Programm geschrieben das nur fürs Debuggen gedacht ist. Es bringt einige Erleichterung, wenn man einen Teil der Fehler schon erkennt, bevor sie im grossen Progi sind.
 

Isaac

Bekanntes Mitglied
Beni hat im Endeffekt schon fast alles gesagt. Nur noch eine Sache die ich in meinen eigenen Programmen immer gerne vergesse weil es einfacher ist.

Probleme werden immer dort gelöst wo sie auch hingehören. Niemanls sollte z.b. ein "Datei Öffnen" Algo in der Klasse "Menubar" sein.


Wie gesagt, ich mache das in meinen eigenen kleinen Sachen immer gerne aber es ist das Fubar'ste was man machen kann.
 

foobar

Top Contributor
Hier auch ein paar Tips von mir:
  • Verbringe ausreichend Zeit mit der Analyse und Design-Phase !!!!!!!
  • Schreibe keine Sqlstatements direkt in deine Klasse, sondern separiere sie in eine oder mehrere externe Files (z.b. XML)
  • Benutze RessourceBundles um dein System zu internationalisieren
  • Verwende einen Logger für Zugriffe und Exceptions, daß kann dir viel Zeit beim debuggen sparen
  • Überlege dir Konventionen für die Benennung der Variablen und Methoden ( Prefixe, Camelcase). Dadurch wird alles einheitlicher und leichter verständlich für dritte.
  • Verwende eine eigene Exceptionhierarchie, dann kannst du auf bestimmte Exceptions unterschiedlich reagieren oder auch alle auf einmal, mit Hilfe der Oberklasse, abfangen.
  • Verwende Design Patterns !!
  • Kapsel deine Klassen nach dem Motto: So viel wie nötig, so wenig wie Möglich.
  • Fasse deine Klassen sinnvoll in Packages zusammen.
Es gibt noch viel mehr zu beachten, aber daß soll erstmal reichen.
 

ghost

Bekanntes Mitglied
@All: THANKS!

Ihr meint also ( wenn ichs richtig verstanden hab ???:L ), das ich alle "Teile" (z.B.: Verbindung zu MySQL, Eingabemasken, ... ) als extra Klassen schreiben soll und die dann entsprechend ( wenn nötig ) lade ( basieren auf einer "Grundlegenden" main - Klasse ).... Oder ? :oops: :bahnhof:
 

ghost

Bekanntes Mitglied
Bezüglich eurer Hilfe hätt ich noch ein paar Fragen :oops:

1. Was heißt MVC?
2. Müssen die Klassen im selben Ordner sein?
3. Wie heißt die Syntax für den Klassenaufruf bzw. das laden einer klasse?
4. Müssen die import Befehle bei der entsprechenden Klasse angegeben werden oder muß man sie beim Hauptteil (static void main ... ) angeben?
5. Auf was für "Probleme" kann / werde ich wohl stoßen? :bahnhof:
 

Illuvatar

Top Contributor
1. Model - View - Control - Prinzip (Trennen in GUI, Event und Control-Klassen)
2. Nein, die Ordnerstruktur muss wie die Packagestruktur sein
3. Wie meinst du das?
Code:
Object o = new Object();
4. Da wo du die Klassen brauchst...
5. Viele, viele Fehler... frag dann einfach nochmal in nem neuen Thread, wenn du welche hast.

hehe, erster 8)
 
B

Beni

Gast
1. Model-View-Control: eine Klasse ist für die Darstellung zuständig, eine für das Speichern der Daten, eine für das Bearbeiten. Z.B. Hashtable-JButton-ActionListener...

2. Um Himmelswillen nein! 8) Klassen die thematisch Zusammengehören (z.B. GUI, Speichern/Laden, ...) würd ich in ein Package zusammenstecken, das wird wesentlich übersichtlicher.

3. Wie meinst du das? "new Blabla" oder "import package.Blabla;" oder :bahnhof:

4. Die Import-Befehle werden ausserhalb der Klasse geschrieben:
Code:
package beispiel;

import beispiel.plapper.*;

public class Blupp{
  ...
}

5. Auf sehr viele :D , die Frage kann ich dir unmöglich beantworten. Nur soviel:
a) Scheu dich nicht, auchmal was zu löschen. Wenn was falsch designed ist, muss man den Mut haben, einen Teil des Programmes radikal umzustruckturieren.
b) Versuch immer ein Algorithmus nach dem anderen zu schreiben, und teste die Dinger sehr gut und ausgiebig. Je früher du einen Fehler erkennst, desto einfacher ist er zu reparieren.
 

ghost

Bekanntes Mitglied
Bezüglich meinen Fragen sollte ich wohl besser noch anmerken, das meine bisherigen Java - Programme immer nur aus einer einzigen Datei bestanden haben. Nun bin ich etwas verwirrt ???:L wie man das mit verschiedenen Dateien ( Klassen / Packages ) macht bzw. wie man dieselbigen erstellt!?!?!?

Ich hätte da :oops: :roll: noch zwei Fragen:
1. Gibts irgendwo im Netz ein Beispiel-Programm (Quellcode)
2. Kennt jemand ein E-Book, Buch das sich mit so nem Thema beschäftigt ( damit ich nicht immer hier so blöde Fragen stellen muß... )?
 
B

Beni

Gast
Uii, bei Büchern und Beispielen kenn ich mich nicht aus. Aber guck mal im Forum unten, da gibts eine Rubrik mit Büchern. (P.S. falls du ein tolles Beispiel findest, poste den Link dazu :wink: )

Packages und Ordner sind eigentlich dasselbe.
Wenn du eine Datei hast die so aussieht:
Code:
package blupp;

import blupp.sirup.*;

public class Schlürf{ ...
Dann muss sie in einem Ordner "blupp" liegen. Und du hast durch den import-Befehl Zugriff auf alle Klassen/Dateien die im Package/Ordner "blupp\sirup" sind.
 

ghost

Bekanntes Mitglied
Ich probiere momentan an diesem package / klassen -Zeug rum. Leider funzt es irgendwie nicht.
Die Klasse ist als verbindung.java bzw. .class im connection - Ordner ( im Java Ordner ) gespeichert. Die Applikation liegt in nem Nebenordner. Wenn ich jetzt versuche die Klasse mit dem import - Befehl zu laden krieg ich immer nen Haufen Fehler ( Fehler die ohne den import nicht kommen, da sie eigentlich keine sind ). Woran liegt das?

Code:
//import java.connection.*;;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.net.*;
import java.sql.*;

public class Main extends JFrame{

Code:
package connection;

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.sql.*;

public class verbindung{

2. Ich hab eine Port - Abfrage im Programm. Der Port ist als int definiert und kann anscheinend nicht mit getText ausgelesen werden. Kann ich den Port jetzt ohne Probleme als String deklarieren oder gibts da eine andere Möglichkeit?

3. Was muß ich beachten wenn ich gemäß oben genanntem Bsp. Variablen von einer Klasse in der anderen benutzen möchte?

DAAAANKKKKEEEEE
 
B

Beni

Gast
Also wenn der Code zu deiner Main-Klasse genau so aussieht, wie du ihn gepostet hast, dann muss die Main.java/class in demselben Ordner wie der Ordner "connection" liegen. Packages verhalten sich ja genau so wie Verzeichnisse auf der Festplatte, also müssen sie auch relativ zueinander richtig liegen.

zu 2: Also wenn er als int definiert ist, wieso verwendest du dann nicht einfach einen int :wink: . Ansonsten: man kann Integer in Strings umwandeln (String.valueOf...), überleg dir nur zuerst, ob das in diesem Fall Sinn macht.

zu 3: Sorry, versteh nicht ganz wie du das meinst :bahnhof:
 

foobar

Top Contributor
Der Port ist als int definiert und kann anscheinend nicht mit getText ausgelesen werden. Kann ich den Port jetzt ohne Probleme als String deklarieren oder gibts da eine andere Möglichkeit?
Was meinst du mit getText?
int in String umwandeln, macht man am besten so:
Code:
int i = 100;
String s = i+"";
Was muß ich beachten wenn ich gemäß oben genanntem Bsp. Variablen von einer Klasse in der anderen benutzen möchte
1. Getter für Variablen schreiben
2. Klasse importieren
3. mit Hilfe der Getter auf die Variablen zugreifen.
 

ghost

Bekanntes Mitglied
Ich hab jetzt den Ordner connection in dem Ordner mit dem Main - Programm. Jetzt meldet er mir aber "Package connection does not exists"?!?!?!?
Ich vermute mal das das Problem der Classpath ist, doch leider weiß ich nicht wie ich ihn richtig setzten muß ( dieverse Versuche sind fehlgeschlagen )
[ Folgende Ordner - Platzierung: c:\projekt\java\connection
in java befindet sich das Main - Programm, in connection die Klasse.
1. Wie muß ich die classpath setzen
2. von welchem Verzeichnis aus muß ich ihn setzen ( d.h. muß ich in Dos in einem bestimmten Verzeichnis stehen, wenn ich den classpath änderen will )?]

Thanks
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
Seikuassi Input/Output ZipOutputStream erzeugt zu großes .zip-Archiv Allgemeine Java-Themen 3
E Sonderzeichen nicht setzbar: Großes Problem bei Programmierung unter Linux Mint mit Virtual Box Allgemeine Java-Themen 5
B Großes Projekt "gut" schreiben Allgemeine Java-Themen 22
R Großes Hash-Set erzeugen Allgemeine Java-Themen 12
C JEditorPane langsam großes HTML Allgemeine Java-Themen 8
V aus mehreren jar files, ein großes basteln Allgemeine Java-Themen 22
T Datenstruktur für großes Netz Allgemeine Java-Themen 2
A Großes Problem mit dem Lesen großer Datenmengen Allgemeine Java-Themen 16
Jose05 Umgang mit Exceptions in einen Programm Allgemeine Java-Themen 2
E Output Fehler (Java-Programm Kuchen) Allgemeine Java-Themen 11
S Java Programm lässt sich vom USB-Stick starten, aber nicht von HDD Allgemeine Java-Themen 16
R Programm führt Methoden gleichzeitig aus Allgemeine Java-Themen 2
T Der Aufruf von CMD-Programm Allgemeine Java-Themen 30
A Java Programm erstellen hilfe Allgemeine Java-Themen 10
Mike80 Processing Programm fiert ohne Arduino ein Allgemeine Java-Themen 2
B Mysteriöse Ergebnisse beim Baccarat Programm? Allgemeine Java-Themen 13
districon Programm zum Durchsuchen von (Ebay-)Artikeln Allgemeine Java-Themen 1
T Addons im eigenen Programm Allgemeine Java-Themen 1
Calli11 Was muss ich hier in die Main schreiben, damit das Programm ausgeführt wird? Allgemeine Java-Themen 4
S .exe Datei/Programm auslesen? Allgemeine Java-Themen 2
S Formel für Sonnenwinkel in ein Programm überführen Allgemeine Java-Themen 11
Alex_99 Programm stürzt beim Aufruf der Funktion ab? Text ausgeben Allgemeine Java-Themen 45
B Java Programm auf virutellem Desktop laufen lassen? Allgemeine Java-Themen 1
L Java überprüfen lassen, ob sich ein gegebener Pfad / das Programm an sich auf einer CD oder Festplatte befindet Allgemeine Java-Themen 14
Tiago1234 Warum hängt sich mein Programm auf? Allgemeine Java-Themen 22
D Programm designen Allgemeine Java-Themen 1
S Folgendes Problem bei einem Programm Allgemeine Java-Themen 1
J c Programm läuft nicht in compilierter Version des Java Projektes Allgemeine Java-Themen 7
O 2D-Grafik BioFarben-Programm soll auf Vollbild schalten Allgemeine Java-Themen 1
J Nachrichten Filter Programm Allgemeine Java-Themen 14
J Programm schreiben, das mir aufgrund von Schlagwörtern, die ich im Internet suche, relevante Themen sofort anzeigt. Allgemeine Java-Themen 1
T Hilfe bei Programm. IDE: Eclipse mit EV3-Plugin, lejos Allgemeine Java-Themen 8
Lukas2904 Swing Anzeigen lassen das das Programm geschlossen wurde Allgemeine Java-Themen 3
TechnikTVcode Mail Programm Allgemeine Java-Themen 2
S Programm entwickeln, welches ein Dreieckspuzzle lösen kann Allgemeine Java-Themen 5
R Lesen von Interfaces (Programm Vervollständigen) Allgemeine Java-Themen 10
Dann07 Java-Programm findet DLLs nicht! Allgemeine Java-Themen 20
OSchriever Linux-Programm öffnen Allgemeine Java-Themen 6
P USER Management in SQL übergreifend auf JAVA Programm Allgemeine Java-Themen 41
L Eclipse Konsole im exportierten Programm Allgemeine Java-Themen 2
OSchriever Programm über Linux-Kommandozeile ausführen Allgemeine Java-Themen 20
D Verkauf von einem Programm welches ich in Java geschrieben habe Allgemeine Java-Themen 4
M Programm erkennt String aus .txt Datei nicht Allgemeine Java-Themen 3
P Erstelltes Programm ist doppelt so groß Allgemeine Java-Themen 11
N Programm nach Abschluss neustarten lassen Allgemeine Java-Themen 6
S Einfaches Programm programmieren Allgemeine Java-Themen 5
M kleines KI Programm Idee Allgemeine Java-Themen 7
D Boolean von ein anderem Java Programm während der Laufzeit ändern Allgemeine Java-Themen 23
L Excel Datei löscht sich selbst im Programm - Java Allgemeine Java-Themen 3
I File ausführen und mein Programm bearbeiten lassen Allgemeine Java-Themen 11
ralfb1105 Starten Java App(s) (.jar) aus einem Java Programm Allgemeine Java-Themen 18
temi Java Programm aus einer DB laden und starten Allgemeine Java-Themen 2
N Programm startet nicht, nur per cmd Allgemeine Java-Themen 5
J Programm zum Suchen eines Wortes im Dateisystem Allgemeine Java-Themen 4
E Java Programm mit Clients erweitern - Möglichkeiten? Allgemeine Java-Themen 2
Joker4632 Methoden Befehl an bereits extern geöffnete Programm-spezifische Konsole senden Allgemeine Java-Themen 1
M Dieses Programm schneller machen? Allgemeine Java-Themen 2
R Programm zur Rekursion Allgemeine Java-Themen 5
N Quicksort Programm hängt sich auf Allgemeine Java-Themen 6
S Compiler-Fehler Programm verhält sich in Eclipse anders Allgemeine Java-Themen 1
B Input/Output Programm zum Auslesen/Beschreiben von Textdateien, wie Geschwindigkeit erhöhen? Allgemeine Java-Themen 18
dereki2000 Programm veröffentlichen Allgemeine Java-Themen 14
mrbig2017 Threads Chat Programm mit Threads? Allgemeine Java-Themen 2
M Suche aktuelle Apache Poi Bibliothek zum Einbinden in mein Programm Allgemeine Java-Themen 2
J Java "Bank Programm" Brauche eure Hilfe Allgemeine Java-Themen 3
S Java Programm (Spiel mit den Boxen) Allgemeine Java-Themen 1
kodela Programm hängt in der Ereigniswarteschlange Allgemeine Java-Themen 13
A Java Programm verbessern/vereinfachen Allgemeine Java-Themen 20
P Programm darf nicht mehrfach startbar sein Allgemeine Java-Themen 16
S Programm hängt sich manchmal (selten) auf Allgemeine Java-Themen 9
JavaNewbie2.0 Programm nicht im Taskmanager schliesen können Allgemeine Java-Themen 15
J XML Datei mit installiertem Programm öffnen Allgemeine Java-Themen 7
Arif Input/Output Dateien im Jar-Programm speichern Allgemeine Java-Themen 12
H Java FX 2 Fragen um Programm in mehrere sprachen zu übersetzen in Gluon Framwork Allgemeine Java-Themen 3
JavaNewbie2.0 Programm bleibt "stehen" Allgemeine Java-Themen 2
JavaNewbie2.0 Start eines Anderen Programm erkennen Allgemeine Java-Themen 6
E Mit Java ein Python Programm starten Allgemeine Java-Themen 20
Q-bert Daten von Java Programm speichern Allgemeine Java-Themen 4
Aruetiise Methoden .jar mit Programm öffnen Allgemeine Java-Themen 2
C anderes Programm schließen! Allgemeine Java-Themen 5
C Webseiten Programm problem Allgemeine Java-Themen 5
E Programm auf Installation prüfen Allgemeine Java-Themen 1
J Programm zum Download von CSV-Dateien Allgemeine Java-Themen 4
E Programm ohne Windowsrand(Vollbild) ? Allgemeine Java-Themen 5
G Programm, das nach abgearbeiteter main Methode weiterläuft Allgemeine Java-Themen 72
P Schnittstelle java Programm zu Webserver / Browser Allgemeine Java-Themen 2
J Schutz Programm Jar Exe Allgemeine Java-Themen 7
R javax.comm --> Programm funktioniert nach Export nicht mehr Allgemeine Java-Themen 0
Blender3D Java Swing Programm Windows 10 Autostart Problem Allgemeine Java-Themen 2
U Input/Output Warum wirft mir das Programm diesen Fehler? Allgemeine Java-Themen 6
X jvm exception abfangen und an externes Programm schicken Allgemeine Java-Themen 4
B Programm updaten mit FXLauncher Allgemeine Java-Themen 1
D Nicht quelloffenes Programm Allgemeine Java-Themen 5
F Java-Programm lizensieren Allgemeine Java-Themen 21
I Programm im Hintergrund bei Windows zur Steuerung der Tastatur nutzen Allgemeine Java-Themen 2
X Aus Programm "Installationsprogramm" machen Allgemeine Java-Themen 6
T Java Programm in Internetseite? Allgemeine Java-Themen 4
T Java Programm frisst RAM Allgemeine Java-Themen 6
H Alter Java-Programm läuft nicht mehr. Laut strace fehlt libpthread.so.0 Allgemeine Java-Themen 3
H Runtime reagiert erst wenn Programm abbricht Allgemeine Java-Themen 1

Ähnliche Java Themen

Neue Themen


Oben