"Schmutziges Programmieren" vermeiden

Status
Nicht offen für weitere Antworten.

Arbon

Bekanntes Mitglied
Hallo

Ich habe das Problem, dass ich bei größeren Projekten immer sozusagen im Chaos versinke. Der Code funktioniert zwar, ist allerdings schwer zu durchblicken, ziemlich ungeordnet sowie schwer erweiterbar. Ich habe schon oft probiert, das zu vermeiden, aber am Ende stellte sich immer das selbe heraus.

Ich würde jetzt gerne wissen, wie man lernen kann so etwas zu vermeiden. Spontan werdet ihr euch sicher denken, plane erstmal ordendlich und leg dann erst los. Das Problem dabei ist, dass ich mir am Anfang ziemlich schwer vorstellen kann, welche Klassen ich alle benötige, was ich am besten wie mache und wie die Klassen miteinander kommunizieren (mein größtes übel :S). Auch beim Einsatz von Design-Pattern fällt es mir schwer zu entscheiden was jetzt für ein bestimmtes Programm / Situation am besten geeignet wäre und wie ich es sauber implementiere.

Wäre auch nett, wenn ihr ein paar Beispiele hättet wie eine gute Struktur aussieht.

mfg
 
M

maki

Gast
Wirst lachen, kenne keinen der es beim ersten Mal schafft sauberen Code zu erstellen, funktionsfähigen ja, aber das reicht bei weitem nicht wenn man weiss, dass die meisten Kosten während des Supports/Erweiterungen anfallen.

Die Lösung?
"Make it work, make it clean"

Unittests & Refactoring, dazu noch ein paar Grundregeln, und schon sieht der Code viel besser aus.

Jedenfalls ist man nicht fertig wenn der Code nur richtig funktioniert.

Kann dir da ein paar Bücher empfehlen:
Amazon.com: Refactoring: Improving the Design of Existing Code (Addison-Wesley Object Technology Series): Martin Fowler, Kent Beck, John Brant, William Opdyke, Don Roberts: Books

Amazon.com: Clean Code: A Handbook of Agile Software Craftsmanship (Robert C. Martin Series): Robert C. Martin: Books

Amazon.com: Test Driven Development: By Example (Addison-Wesley Signature Series): Kent Beck: Books

Jedenfalls brauchst du (gute) Unittests, sonst wirst du nie wirklich refactoren.
 

Verjigorm

Top Contributor
Es gibt hilfreiche Plugins für Eclipse, wie z.B. Findbugs, Enerjy etc. die dir schonmal die gröbsten Schnitzer aufzeigen
 

byte

Top Contributor
Kann mich Maki nur anschließen. Refactoring heisst das Zauberwort. Selten macht man gleich am Anfang alles perfekt. Das geht meistens auch gar nicht, weil sich die Anforderungen häufig während der Entwicklung ändern. Oder es fällt einem dann doch noch was ein, was man anfangs nicht bedacht hat.

Was macht man dann also? Refactoring! Wenn man Unittests geschrieben hat, kann man das auch ruhigen gewissens tun, ohne allzu große Risiken einzugehen, dass danach etwas nicht funktioniert.

Darüber hinaus machts einfach die Erfahrung. Wenn man immer bemüht ist, sich zu verbessern, dann wird man von Projekt zu Projekt besseren Code schreiben. Man kann auch sehr gut von anderen APIs lernen. Wenn die gut sind, sieht man wie man gewisse Dinge realisieren kann. Sind sie hingegen schlecht, dann weiss man, was man vermeiden sollte.

Ein Paradebeispiel für gutes Design ist das Spring Framework.


Aber Achtung: Man sollte es mit dem tollen Design auch nicht übertreiben. Solange man keine allgemeingültige API schreibt sondern eine Anwendung, muss man imo immer Kompromisse zw. gutem Design und Entwicklungsaufwand eingehen. Das perfekte Design ist nämlich in den meisten Fällen einfach zu aufwändig und rentiert sich häufig auch nicht (mal ganz davon abgesehen, dass es das perfekte Design wohl gar nicht gibt *g*).
 

Arbon

Bekanntes Mitglied
Refactoring und Testing sind schon einmal sehr interessante Methoden um ein bestehendes Programm zu verändern und "aufzuräumen".

Allerdings würde ich jetzt gerne wissen, wie man ein Projekt gut und sinnvoll planen kann. Ich nehme jetzt zum Beispiel mein aktuelles Projekt, einen kleinen Dateimanager her. Hier stellen sich mir dann immer Fragen wie
Wie speichere ich die aktuell ausgewählten Dateien ab? Frage ich sie immer aus der Oberfläche ab? Aktualisiere ich ein File Array mit den ausgewählten Daten wenn der User andere auswählt?
Wie realisiere ich die Kommunikation zwischen der Oberfläche und den Dateioperationen am besten?
Wie übergebe ich am besten den aktuellen Kopierfortschritt an eine ProgressBar? Mache ich eine Klasse Kopieren, die bereits die Oberfläche beinhaltet und dann direkt aktualisiert wird? Versuche ich irgendwie über Listener die Kommunkation zu ermöglichen? Wie rufe ich in der Klasse Dateioperationen eine solche Kopie auf?

Fragen über Fragen, über die ich mir immer den Kopf zerbreche und am Ende meistens nichts ordendliches herauskommt, wodurch dann wieder das halbe Programm umgekrempelt gehört, obwohl ich es am liebsten ordendlich strukturiert hätte.
Mit dem Refactoring habt ihr mir ja jetzt eine gute Möglichkeit genannt wie man so ein Chaos einigermaßen behebt, allerdings würde ich ja jetzt gerne wissen wie man sich zuvor bereits ein solches Problem sinnvoll überlegt, damit so etwas wenn möglich gar nicht in dem Aufmaß auftritt.

mfg
 

Wildcard

Top Contributor
Allerdings würde ich jetzt gerne wissen, wie man ein Projekt gut und sinnvoll planen kann.
Ich bin ein großer Fan von Model Driven Development geworden, speziell mit EMF. Wenn du ein solides, erweiterbares und flexibles Datenmodell hast, fallen viele anderen Puzzleteile einer Applikation wie von selbst an den richtigen Platz (natürlich nicht alle). Am Anfang ist es ein gewisser Umstieg, hat man aber das Konzept verstanden wird MDD/EMF zu einer Art Religion und verändert dauerhaft die Sichtweise auf Probleme.

Oft wird eine Applikation auch sehr viel besser (und man lernt dabei) wenn man sich selbst in das Korsett eines Frameworks zwingt. Du profitierst von der Arbeit anderer, was die Entwicklung beschleunigt, wirst aber gleichzeitig in eine bestimmte Richtung gepushed. Du wirst damit freundlich aber bestimmt zu einem gutem Anwendungsdesign gezwungen.
Beispiele dafür wären zB OSGi, Eclipse RCP, Spring,...
 

Civilazi

Bekanntes Mitglied
Fragen über Fragen, über die ich mir immer den Kopf zerbreche und am Ende meistens nichts ordendliches herauskommt, wodurch dann wieder das halbe Programm umgekrempelt gehört, obwohl ich es am liebsten ordendlich strukturiert hätte.
Mit dem Refactoring habt ihr mir ja jetzt eine gute Möglichkeit genannt wie man so ein Chaos einigermaßen behebt, allerdings würde ich ja jetzt gerne wissen wie man sich zuvor bereits ein solches Problem sinnvoll überlegt, damit so etwas wenn möglich gar nicht in dem Aufmaß auftritt.

mfg

Es gibt ja durchaus solche Tricks wie: mach eine MindMap, was gibt es, wer kennt was, wer tut was etc. Alles was dir einfällt. Dann streichst du Unwichtiges / Doppeltes und versuchst das in Javacode zu übersetzen. Wenn du dann anfängst, die unverfänglichen Sachen zu implementieren, denkst du schon weiter über das Design nach. Vielleicht fällt dir dann schon irgendwas auf, das du ändern willst.
Dann ist es wichtig, dass sobald dir etwas auffällt, was sich aufgrund deines Designs blöd macht, du das Design eben änderst. Solche Frustmomente sind wichtig, dadurch merkst du es dir besser, sammelst Erfahrungen und erkennst später mögliche Probleme früher. Meiner Meinung nach sieht man dann auch mit steigender Erfahrung, wo man ein Problem hat, das sich mit einem bestimmten Pattern lösen lässt. Also: dein Problem sollte das Pattern bedingen, nicht umgekehrt :)
Ansonsten sind die ganzen anderen Tipps natürlich auch toll.
 

Wildcard

Top Contributor
Es gibt ja durchaus solche Tricks wie: mach eine MindMap, was gibt es, wer kennt was, wer tut was etc.
Dafür ist aber UML eher geeignet zumal sich damit dank Tool Unterstützung gewisse Java Teile direkt generieren lassen.
Solange du damit die reine Datenebene (Domain Model) meinst, fährt man übrigens am besten mit MOF/EMF
 

Civilazi

Bekanntes Mitglied
Dafür ist aber UML eher geeignet zumal sich damit dank Tool Unterstützung gewisse Java Teile direkt generieren lassen.
Solange du damit die reine Datenebene (Domain Model) meinst, fährt man übrigens am besten mit MOF/EMF

Stimmt, allerdings fang ich eigentlich trotzdem immer mit Papier und Stift an. Diagramme mache ich als Zweites. Echtes UML ist ja schon fast Code, den man sich ja, wie du schon sagst, auch daraus generieren lassen kann.
 

Wildcard

Top Contributor
Die UML ist explizit so designed das man sie zu Papier bringen kann mit nichts als einem Stift. Die Überführung ist Fleißarbeit und kann auch nach Indien ausgelagert werden ;)
 

sliwalker

Top Contributor
Hi,

interessante Aussagen. Die Anregungen nehme ich für mich auch mal mit ;)
Kann allen nur beipflichten, dass sehr guter Code und ein sehr gutes Design nicht auf Anhieb klappen.
Da kann mir auch jeder erzählen was er will.

Aber man kann es jedesmal neu versuchen und wird auch immer besser.
Ich gehe da nach dem Prinzip der Leuchtspurmunition vor. Kleinere Teile als "prototypen" um zu gucken wie es klappt. Wenn man sich eine "komplizierte" Kommunikation ausdenkt, kann ich zumindest nicht immer in allen Bereichen vorhersagen, ob das so geht, ob mir nicht doch zwei Werte Fehlen oder sonst was.

Ich nehme auch den Ansatz vom Datenmodell auszugehen. Für mich ist das die Basis, die egal wo, immer gleich bleibt. Bei jedem Schritt überlege ich mir, ob ich das so programmieren kann, wenn ich nicht mehr eine Desktop Anwendung bedienen möchte, sondern eine Webseite. Daran erkenne ich meistens, wie stark ich Sachen fixiere. Und so kommt die Logik und die Zurgiffsschicht zustande. Danach hat man meistens keine Probleme mehr sauber die GUi davon zu trennen.

Bei Dingen wie die Kommunikation hilft halt meistens nur lesen, wenn man es nicht weiß. Ein paar Prinzipien haben sich bewährt andere nicht. Auch die Erfahrung kommt hier ins Spiel. Und ich weiß selbst manchmal nicht, ob das jeder so lösen würde und ob es da vielleicht etwas besseres gibt. Ob es gut ist oder nicht, sehe ich dann, wenn ich nach 3 Monaten nochmal ran muss :) Sicherlich nicht der beste Weg, aber dazu brauch ich noch ein paar Jahre mehr Berufserfahrung...für mich ist das soweit ok.

Nicht zuletzt kann man Fragen.
Mit einer ausformulierten Idee im Kopf, wird einem hier gern geholfen.
Da hilft es auch die Probleme anderer zu lesen und die Antworten der Stamm-Gurus hier.

greetz
SLi
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
N Hey Leute und zwar versuche ich gerade ein 2D Spiel zu Programmieren aber die Figur will sich nicht nach links oder rechts bewegen :( Java Basics - Anfänger-Themen 12
B OOP was heißt objektorientiertes Programmieren (fragt ein absoluter Anfänger) Java Basics - Anfänger-Themen 17
laxla123 Rechteck programmieren Java Basics - Anfänger-Themen 4
A Erste Schritte Dynamische Stempel im PDF Exchange programmieren Java Basics - Anfänger-Themen 0
D Programmieren nach UML Java Basics - Anfänger-Themen 2
Y Taschenrechner programmieren Java Basics - Anfänger-Themen 3
B Überweisung programmieren Java Basics - Anfänger-Themen 7
bluetrix Programmieren eines Bots für Zahlen-Brettspiel Java Basics - Anfänger-Themen 9
D Ampel Programmieren die jede 10 sekunden ihre farbe wechselt Java Basics - Anfänger-Themen 6
J ArrayList add methode selbst programmieren Java Basics - Anfänger-Themen 10
00111010101 Objektorientiertes Programmieren mit Vererbung (Zahlen in Array verschwinden) Java Basics - Anfänger-Themen 3
thor_norsk Fernseher programmieren mit Java Java Basics - Anfänger-Themen 4
M Jenga Regeln Java Programmieren Java Basics - Anfänger-Themen 1
M Ressourcensparend programmieren Java Basics - Anfänger-Themen 3
brypa Wie Programmieren lernen? Java Basics - Anfänger-Themen 15
G Spielerwechsel programmieren Java Basics - Anfänger-Themen 1
J Solitär (Brettspiel) programmieren Java Basics - Anfänger-Themen 3
H Objektorientiertes Programmieren Java Basics - Anfänger-Themen 4
K 12- Stunden Konverter Programmieren Java Basics - Anfänger-Themen 1
WAB9703-04 Programm zum automatischen Ausfüllen von Formularen programmieren Java Basics - Anfänger-Themen 3
L Zahlenspiel programmieren Java Basics - Anfänger-Themen 1
TimoN11 Automat programmieren Java Basics - Anfänger-Themen 4
G Erste Schritte Array Mittelwert Methode Programmieren Java Basics - Anfänger-Themen 5
ehmo würfelspiel programmieren anfänger Java Basics - Anfänger-Themen 1
N Ufospiel programmieren Java Basics - Anfänger-Themen 13
KogoroMori21 Vorbereitung auf die Programmieren Klausur vom ersten Semester Java Basics - Anfänger-Themen 4
Drinkerbell Erste Schritte Zu blöd zum Programmieren? Java Basics - Anfänger-Themen 9
G Stack programmieren Java Basics - Anfänger-Themen 6
I Brauche Hilfe bei Objektorientiertem programmieren Java Basics - Anfänger-Themen 23
T Auf einem Schachbrett bewegen programmieren Java Basics - Anfänger-Themen 2
G Bruchrechner programmieren Java Basics - Anfänger-Themen 6
G Ufo Spiel programmieren Java Basics - Anfänger-Themen 13
D Schachbrett (8x8) programmieren Java Basics - Anfänger-Themen 3
J Spiel programmieren Java Basics - Anfänger-Themen 16
J Hilfe beim Programmieren Java Basics - Anfänger-Themen 5
S Kreisberechnung3 Buch: Programmieren lernen mit Java von Hans-Peter Habelitz Java Basics - Anfänger-Themen 39
M Quiz in Java programmieren mit Array Java Basics - Anfänger-Themen 8
S Spiel-Programmieren. Wenn ein Objekt den anderen berührt. Java Basics - Anfänger-Themen 6
K Java programmieren Java Basics - Anfänger-Themen 6
V_Fynn03 Kontrolle des Quelltextes (Bank programmieren)(GUI) Java Basics - Anfänger-Themen 6
D Was tun gegen zu komplzierten Denken beim Programmieren Java Basics - Anfänger-Themen 27
V_Fynn03 Bruchrechner programmieren (2 Klassen) Java Basics - Anfänger-Themen 9
N Ticketautomat programmieren Java Basics - Anfänger-Themen 63
M Rechner programmieren Java Basics - Anfänger-Themen 3
V_Fynn03 Java Bruchrechner programmieren Java Basics - Anfänger-Themen 13
J Java Suchfunktion Programmieren Java Basics - Anfänger-Themen 1
L Erste Schritte Bin ich "zu dumm" oder nicht geeignet zum Programmieren? Java Basics - Anfänger-Themen 3
U Ist jemad gut in programmieren (JAVA) und kann mir helfen? Java Basics - Anfänger-Themen 1
H Uhr programmieren Java Basics - Anfänger-Themen 10
T Schalter programmieren Java Basics - Anfänger-Themen 17
S Ampel Programmieren Java Basics - Anfänger-Themen 5
P Erste Schritte Probleme mit dem Programmieren Java Basics - Anfänger-Themen 12
D Richtig für Programmieren an der UNI lernen Java Basics - Anfänger-Themen 8
B Folgende Abfrage dynamisch programmieren? Java Basics - Anfänger-Themen 8
D Beim Programmieren auf die Logisch einfache Lösung kommen. Java Basics - Anfänger-Themen 17
B UML Klassen Diagramm zu Java Code Programmieren und ausführen Java Basics - Anfänger-Themen 21
steven789hjk543 Kann man mit Java und Eclipse einen Virus programmieren? Java Basics - Anfänger-Themen 13
S Spiel programmieren mit Java Java Basics - Anfänger-Themen 11
A Kalender programmieren, ich finde meinen Fehler nicht. Java Basics - Anfänger-Themen 9
S Erste Schritte Hilfe beim lernen von Programmieren Java Basics - Anfänger-Themen 2
V Zeichenkette programmieren Java Basics - Anfänger-Themen 20
O Fenster programmieren Java Basics - Anfänger-Themen 2
R Uebersichtlicher bzw. besser Programmieren Java Basics - Anfänger-Themen 13
N Dynamisches Programmieren/Fibonacci Java Basics - Anfänger-Themen 1
B Spielfiguren für ein Beute-Jägerspiel programmieren Java Basics - Anfänger-Themen 12
A Programmieren lernen Java Basics - Anfänger-Themen 28
F ArrayListe manuell programmieren? Java Basics - Anfänger-Themen 24
X Erste Schritte Einstieg ins Programmieren Java Java Basics - Anfänger-Themen 2
O Erste Schritte ln(1+x) Reihe Programmieren Java Basics - Anfänger-Themen 6
Ellachen55 Weihnachtsbaum in Eclipse programmieren Java Basics - Anfänger-Themen 6
L Klassen Geldrückgabe - Aufgabe Programmieren Java Basics - Anfänger-Themen 23
H Stern Dreieck (Buch: Grundkurs Programmieren) Java Basics - Anfänger-Themen 2
V Variablen Vorkommen programmieren Java Basics - Anfänger-Themen 18
S Dreieckssignal programmieren Java Basics - Anfänger-Themen 5
K Fehler beim Programmieren von TicTacToe Java Basics - Anfänger-Themen 12
M Spiel programmieren Java Basics - Anfänger-Themen 16
A Fenster programmieren Java Basics - Anfänger-Themen 1
V OOP Kassensystem objektorientiert programmieren Java Basics - Anfänger-Themen 15
A Erste Schritte DoodleJump programmieren: Kollisionsabfrage Java Basics - Anfänger-Themen 4
CT9288 Kleine Simulation programmieren, denkanstöße erbeten Java Basics - Anfänger-Themen 19
H Welche IDE zum Buch "Programmieren mit Java" von Reinhard Schiedermeier des Verlags Pearson Studium Java Basics - Anfänger-Themen 19
D Könnt ihr mir helfen beim Programmieren eines Ping Pong Spieles? Java Basics - Anfänger-Themen 9
M Rekursive Methode Programmieren Java Basics - Anfänger-Themen 3
I Spielbrett programmieren: Datenstruktur Java Basics - Anfänger-Themen 3
G Rekursives Programmieren --> harmonische Reihe Java Basics - Anfänger-Themen 3
A Endlich anfangen mit Programmieren ! Java Basics - Anfänger-Themen 8
L Karawane programmieren Java Basics - Anfänger-Themen 0
kokojamboo92 Spiel programmieren Java Basics - Anfänger-Themen 1
E Mastermind programmieren, wie den falschen Platz aber richtige Farbe schecken? Java Basics - Anfänger-Themen 23
steven789hjk543 Erste Schritte java programmieren/ Schritt für Schritt Java Basics - Anfänger-Themen 14
I Spiel programmieren. Java Basics - Anfänger-Themen 16
H [Studium] Mäxchenspiel programmieren Java Basics - Anfänger-Themen 10
C BlueJ Zahlenschloss programmieren Java Basics - Anfänger-Themen 5
steven789hjk543 mit dem Smartphone java programmieren Java Basics - Anfänger-Themen 44
F Okjektorientiert programmieren Java Basics - Anfänger-Themen 2
S OOP Ticketsystem programmieren Java Basics - Anfänger-Themen 6
P Selber Programmieren lernen oder Uni? Java Basics - Anfänger-Themen 12
P Kasse programmieren Java Basics - Anfänger-Themen 12
D Timer programmieren Java Basics - Anfänger-Themen 13
M Erste Schritte Einfache Aufzugssteuerung programmieren - Anfänger Java Basics - Anfänger-Themen 2

Ähnliche Java Themen

Neue Themen


Oben