Stilfrage: Neue Klasse wenn es in einer Klasse zu viele Methoden gibt?

Status
Nicht offen für weitere Antworten.

System.exit(0)

Aktives Mitglied
Hallo,

ich programmiere gerade ein Programm zum Lösen von Sudokus und habe ein Problem, dass sich mit der Übersichtlichkeit beschäftigt.

Ich habe eine Klasse Sudoku. Diese Klasse enthält die Daten des Suodku und dient nur der Berechnung der Lösung, Eingabe und Ausgabe sind anderswo geregelt.
Dies zahlreichen Methoden dieser Klasse kann man in primäre und sekundäre Methoden einteilen (oder wie auch immer man das bezeichnen möchte).
Die primären Methoden führen grundlegende Sachen aus und greifen auf (teilweise sehr viele) sekundäre, also unterstützende Methoden zurück.

Insgesamt ist dadurch allerdings die Klasse recht lang. Das hilft nicht unbedingt beim Zurechtfinden.

Wäre es jetzt für die Übersichtlichkeit des Codes ein guter Stil, die sekundären Methoden in eine eigene (Hilfs-)Klassen zu schreiben, um das Ganze übersichtlicher zu gestalten oder würde diese Segmentierung die Lesbarkeit verschlechtern, den Aufwand bloß in die Höhe treiben udn evtl. sogar die Geschwindigkeit des Programmes deutlich senken?

mfg

System.exit(0)
 

The_S

Top Contributor
Kann man pauschal nicht sagen. Geb mal konkrete Beispiele, was bei dir primär, und was sekundär ist.

Laut Code-Conventions sind Klassen mit bis zu 2000 Zeilen OK (was ich jetzt aber nicht unbedingt ausreizen wollen würde).
 

System.exit(0)

Aktives Mitglied
Von 2000 Zeilen bin ich dann doch noch ein Stück entfernt.

Primär wären die Methoden, die man zum Lösen von Sudokus anwendet:

Also Zeilen, Spalten, Quadrate usw. nach zu eliminierenden Lösungen absuchen.

Sekundär wären alle Methoden, die dann
- die Daten manipulieren
- Berechnungen zur Orientierung im Sudoku anstellen
- prüfen, ob bestimmte Ereignisse eintreten usw.


mfg

System.exit(0)
 

The_S

Top Contributor
Für was brauchst du das Ganze Zeug? Bei meinem Sudoku-Solver gibts genau 6 Methoden (wovon eine ausgelagert werden könnte, da allgemein), die (inkl. package, imports und Kommentare) 139 Zeilen lang ist.

Generell sollte nur das in eine Klasse, was eine Klasse auch wirklich benötigt. Helper-Klassen sind auch durchaus erlaubt. Kannst dir ja so vorstellen: Ein Haus braucht natürlich Wände und Räume. In einem Haus findet man auch Möbel. Diese liegen aber nicht direkt im Haus, sondern im jeweiligen Raum.

Ansonsten zählt das, was ARadauer gesagt hat.
 
M

maki

Gast
Wichtiger als die Anzahl der Zeilen ist die frage welche Aufgaben die Objekte der Klasse selbst übernehmen (d.h. ohne delegation an andere Objekte) was uns zu "Separation of Concerns" bringt.
Religiöse SoC Fanatiker haben dafür einen Test: Beschreibe was deine Klasse selbst macht. Sobald du ein "und" verwendest, solltest du dafür eine eigene Klasse machen.

Refactoring ist der Weg um aus einer Klasse mehrere zu machen: Extract Class
 

ARadauer

Top Contributor
Religiöse SoC Fanatiker haben dafür einen Test: Beschreibe was deine Klasse selbst macht. Sobald du ein "und" verwendest, solltest du dafür eine eigene Klasse machen.[/qutoe]
ja man kann es übertreiben, was oft zu einer unnötigen komplexitäte des ganzen systems führen kann...
 
M

maki

Gast
Der Begriff "religiöse Fanatiker" war nicht zufällig gewählt ;)
Allerdings ist es doch einer der Grundgedanken der OO der da rausspricht.
Strikt OO geschriebene Klassen haben eben nicht soviele Methoden, dafür sind diese sehr klein und deligieren viel.

Man muss halt sehen, wie es in der Praxis für den konkreten Fall am besten umzusetzen ist.
 

ARadauer

Top Contributor
Man muss halt sehen, wie es in der Praxis für den konkreten Fall am besten umzusetzen ist.
Das ist ein wichtiger Punkt, denn man auch im bereich der design patterns auf keine fall übersehen sollte...

Man muss immer einen guten Zwischenweg zwischen flexibler Software und totaler Zerstückelung des Systems finden...
 
M

maki

Gast
Designpattern sind imho überbewertet ;)

Denn wenn dein Code ein gutes Design ausweisst, sind zwangsläufig Pattern drinnen, umgekehrt ist das aber nicht der Fall.
Erinnern wir uns alle mal an unsere Anfänge mit Designpatterns, das nächste Projekt hat schon im Entwurf von Patterns nur so gestrotzt, sinnvoll oder nicht war egal, Hauptsache sie waren drinn, denn Patterns sind ja hip ;)

Ich finde man kommt erst zu einer guten Struktur nach dem man ein paar mal refactored hat, denn mit einer guten Struktur hat man zwangsläufig Patterns drinnen.

Die Möglichkeit wirklich sinnvoll zu refactoren ("changing the design without changing the functionality") hat man aber erst, wenn man weiss dass man nix kaputt macht, d.h. ohne (gute) Unittests wird man nicht viel refactoren.

Gibt da gute Bücher drüber, Martin Fowlers "Refactoring: Improving the Design of Existing Code" sei empfohlen, eines der besten SW Bücher die ich bis heute gelesen habe.

Leute die beim ersten Mal alles richtig machen (Design & Code) brauchen weder Unittests noch Refactoring, für alle anderen sind diese beiden wahrscheinlich die mächtigsten "Werkzeuge" die ein Entwickler haben kann.
 

ARadauer

Top Contributor
Gibt da gute Bücher drüber, Martin Fowlers "Refactoring: Improving the Design of Existing Code" sei empfohlen, eines der besten SW Bücher die ich bis heute gelesen habe.
ha lustig... das liegt gerade neben mir ;-) habs aber noch nicht gelesen. Hat mal in unserer Firma jeder bekommen... gut dann weiß ich schon was ich mir übers wochenende ansehe...
 
M

maki

Gast
ha lustig... das liegt gerade neben mir habs aber noch nicht gelesen. Hat mal in unserer Firma jeder bekommen... gut dann weiß ich schon was ich mir übers wochenende ansehe...
Er erklärt einem wie man in kleinen zwischenschritten von "stinkendem" Code zu sauberem Code kommt.
Es gibt Refactorings für alles, vom conditionalen if/switch zur Polymorphy, etc. pp.
Warum wir das nicht immer machen?
Weil es eben problematisch ist eine funktionierende SW mit schlechtem Design in eine nicht funktionierende SW mit gutem Design umzuwandeln ;)
Deswegen: Ohne gute Unittests ist bald Schicht im Schacht mit refactoren, alleine der Paranoia wegen.

Wer macht denn schon von Anfang an alles richtig?
imho macht das niemand :)
Aber wenn's funktioniert lässt man es...
 

Marco13

Top Contributor
Noch ein bißchen Senf: In erster Näherung ist die Anzahl der Methoden nicht relevant.

Auch nicht die Anzahl der Zeilen. Die Anzahl der Zeilen ist IMHO ein fragwürdiges Maß. Es ist die einzig sinnvolle Möglichkeit, die ich kenne, um die Komplexität eines Programmes ansatzweise zu beurteilen: Man zählt die Zeilen (und das heißt: Die Anzahl der Semikolons). Aber dass man ein und dieselbe Funktionalität entweder mit einer Zeile oder mit 50 Zeilen erreichen kann, sollte einem immer bewußt sein.
Und was die Grenze von 2000 Zeilen angeht: 2000 Zeilen CODE (!?!) sind ziemlich viel. Zufälligerweise enthält die JTable.java ziemlich genau 2000 Zeilen CODE. Und das ist ein 350KB-Monster mit ca. 10000 Zeilen INSGESAMT, und ca. 150 (!) public-Methoden. (Gut, neulich bin ich auch über eine .java-Datei gestolpert, die ca. 2.5 MEGAbyte hatte, aber lassen wir das mal außen vor...)

Relevant ist IMHO eher die Anzahl und die Aufgaben der öffentlichen Methoden. Wenn eine Klasse 3 public Methoden hat, die eine klare, dedizierte Funktionalität bereitstellen, dann ist (erstmal!) nicht so wichtig, ob sie diese Funktionalität denn nun mit 1000 Zeilen in 100 private-Methoden erreicht, oder mit 100 Zeilen in 10 private-Methoden und 10 (nicht-öffentlichen) Hilfsklassen.

Dass ein rechtzeitiges Aufbrechen und Strukturieren besser ist, als so einen Lava-Flow in Form einer unbeherrschbaren Riesen-Klasse entstehen zu lassen, sollte aber klar sein.
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
F Stilfrage: Klassen & Methoden Java Basics - Anfänger-Themen 15
A Stilfrage: statische Methoden und Attribute auf jeden Fall verhindern? Java Basics - Anfänger-Themen 5
A Stilfrage: statische Variable mit Instanz der gleichen Klasse Java Basics - Anfänger-Themen 8
P Neue Java v8 JRE Version nicht über alte drüber installierbar: Wie sonst? Java Basics - Anfänger-Themen 7
F Erste Schritte Zahlenreihe von Arraylist in 3erBlöcke sortiert in neue Arraylist Java Basics - Anfänger-Themen 2
B Verkettete Liste durchgehen und einzelne Elemente in neue Liste tun Java Basics - Anfänger-Themen 9
S JavaFX - Objekt an neue Stage übergeben Java Basics - Anfänger-Themen 12
C Nachträglich neue grafische Objekte hinzufügen Java Basics - Anfänger-Themen 7
A eine neue normale String-Array von einer String-Array, die in for schleife ist, schaffen Java Basics - Anfänger-Themen 3
B Neue Liste erstellen, wenn Objekte bestimmte Referenz hat / Gruppierung von Einträgen Java Basics - Anfänger-Themen 12
J Neue Werte in ein Array hinzugeben Java Basics - Anfänger-Themen 8
V Neue Ausgabe von toString nach Methodenaufruf Java Basics - Anfänger-Themen 9
B Objekt an neue Stage übergeben? Java Basics - Anfänger-Themen 9
L Neue Klasse für TableView? Java Basics - Anfänger-Themen 17
tsom Erste Schritte itext Text als Block auf neue Seite Java Basics - Anfänger-Themen 0
T Zufällige Matrix in neue Matrix schreiben Java Basics - Anfänger-Themen 6
M BufferedReader neue Zeile nach Knopfdruck Java Basics - Anfänger-Themen 9
S drawString() neue Zeile Java Basics - Anfänger-Themen 4
H Aus wav-datei lesen und in neue wav-datei speichern Java Basics - Anfänger-Themen 10
E Wenn i (for-Loop) bestimmter Wert, dann neue Zeile eines Buttons Java Basics - Anfänger-Themen 7
Hijo2006 Neue externe Klasse einbinden Java Basics - Anfänger-Themen 13
W Neue Klassenmethode implementieren.. Java Basics - Anfänger-Themen 6
U neue Methoden in JSP??? Java Basics - Anfänger-Themen 1
L0MiN Erste Schritte Neue Punkte zu einer Map hinzufügen und dauerhaft speichern? Java Basics - Anfänger-Themen 4
N wie schreibt man die neue for schleife? Java Basics - Anfänger-Themen 3
D Wie erstelle ich eine neue Hauptklasse mit eclipse? Java Basics - Anfänger-Themen 3
D neue public static class variablen in array speichern? Java Basics - Anfänger-Themen 6
B Neue Bibliothek hinzufügen Java Basics - Anfänger-Themen 2
S Daten aus anderen Dateien in neue Datei einlesen Java Basics - Anfänger-Themen 3
M FileWriter Neue Datei wenn aktuelle "zu groß" Java Basics - Anfänger-Themen 3
C auslesen bestimmter werte einer textdatei und anschl. hineinschreiben in eine neue txt-datei. Java Basics - Anfänger-Themen 2
R csv-Datei auslesen und ausgelesene Daten in neue csv-Datei speichern Java Basics - Anfänger-Themen 2
D Neue Array übernimmt Werte des alten nicht Java Basics - Anfänger-Themen 5
J Neue Zeile an bestimmter Stelle in Textdatei einfügen Java Basics - Anfänger-Themen 2
M Neue Objekte mit Hilfe von String Variable erschaffen Java Basics - Anfänger-Themen 2
I Neue Klassenbibliothek erstellen Java Basics - Anfänger-Themen 8
K Iteration - Alte und neue For Schleife Java Basics - Anfänger-Themen 17
M Klassen Eine Klasse abrufen ohne eine neue Instanze auf zu rufen? Java Basics - Anfänger-Themen 8
C Vector erzeugt neue Indizes nach Input Java Basics - Anfänger-Themen 2
S neue Methode schreiben Java Basics - Anfänger-Themen 14
E Variable neue Random Zahl zuweisen, wenn Button geklickt Java Basics - Anfänger-Themen 5
J Werte ins neue Fenster übertragen Java Basics - Anfänger-Themen 6
G Ausgabe nach 5 Zeichen in neue Zeile schreiben??? Java Basics - Anfänger-Themen 12
A Werte per Zufall aus einer Datei ziehen und in eine neue Datei schreiben Java Basics - Anfänger-Themen 9
F Variablen Übergabe von eingelesenen Variablen in neue Klasse Java Basics - Anfänger-Themen 15
U neue Java-Datei öffnen Java Basics - Anfänger-Themen 10
S Itext und eine neue Zeile einfügen Java Basics - Anfänger-Themen 2
Corben Input/Output FileOutputStream - neue Zeile mit write(10) Java Basics - Anfänger-Themen 6
K in Konstruktor neue Objekte einer anderen Klasse erzeugen Java Basics - Anfänger-Themen 9
S Datenströne - Text in eine Datei einlesen, umwandeln und in eine neue Datei schreiben Java Basics - Anfänger-Themen 6
F Neue Klasse mag nicht - nullPointerException Java Basics - Anfänger-Themen 6
L String suchen und ersetzten, ohne neue Datei Java Basics - Anfänger-Themen 4
X FileHandler: neue Datei erzeugen Java Basics - Anfänger-Themen 2
U Java neue Variable für jeden Schleifendurchgang Java Basics - Anfänger-Themen 11
K Neue Menge aus zwei Mengen konstruieren Java Basics - Anfänger-Themen 3
Luk10 Dateipfad beim Laden einer Datei + Neue kleine Frage! Java Basics - Anfänger-Themen 11
Hindi93 Neue Libs - wohin damit? Java Basics - Anfänger-Themen 7
G JUnit ist das neue main() Java Basics - Anfänger-Themen 16
M neue Zufallszahl in Schleife Java Basics - Anfänger-Themen 2
M java neue datei erstellen Java Basics - Anfänger-Themen 6
V Scanner Einlese aus Datei in neue Datei? Java Basics - Anfänger-Themen 8
Haubitze_Broese neue Klasse? Java Basics - Anfänger-Themen 6
F Neue Panelgröße nach Fenster maximieren Java Basics - Anfänger-Themen 5
S FileWriter - in neue Zeile schreiben!? Java Basics - Anfänger-Themen 19
P OOP Automatisch neue Objekte erstellen Java Basics - Anfänger-Themen 14
L Neue Zeile JTable Java Basics - Anfänger-Themen 13
B Eine neue Klasse in anderen Projekten nutzen Java Basics - Anfänger-Themen 5
W neue Variablen in Schleife anlegen Java Basics - Anfänger-Themen 13
S GridBagLayout neue Objekte hinzufügen Java Basics - Anfänger-Themen 3
M Action als neue Klasse Java Basics - Anfänger-Themen 2
B Teile einer Image in neue Image kopieren Java Basics - Anfänger-Themen 4
E Neue zeile in string Java Basics - Anfänger-Themen 3
L Mit Array neue Objekte erzeugen Java Basics - Anfänger-Themen 3
R Zeichnung entfernen und neue Zeichnen lassen Java Basics - Anfänger-Themen 20
R Neue GUI öffnen und die Alte schließen Java Basics - Anfänger-Themen 6
J ArrayList<Point> in eine neue ArrayList<Point> kopieren Java Basics - Anfänger-Themen 8
D Wie neue Instanz einer Klasse erstellen, von der ich nur eine andere Instanz kenne? Java Basics - Anfänger-Themen 13
G neue Instanz von ArrayList Java Basics - Anfänger-Themen 5
Zed Übergang von Kalenderwochen ins neue Jahr Java Basics - Anfänger-Themen 19
W JTextfield in neue Zeile einfügen Java Basics - Anfänger-Themen 5
JFeel-x Kann man in Eclipse neue Shortcuts erstellen? Java Basics - Anfänger-Themen 17
GambaJo Ab wann neue Klasse erzeugen? Java Basics - Anfänger-Themen 2
S Auf neue Dateien überprüfen Java Basics - Anfänger-Themen 2
Q java.util.loggging neue datei erstellen Java Basics - Anfänger-Themen 3
M Neue Pakete implementieren Java Basics - Anfänger-Themen 5
D neue Datei inkl. Ordner erstellen - in einem Rutsch? Java Basics - Anfänger-Themen 7
H ist eine "neue Session" für Mail möglich? Java Basics - Anfänger-Themen 3
G FileWriter -> neue Zeile Java Basics - Anfänger-Themen 13
S PrepareStatement, jede neue Zeile INT-Wert Java Basics - Anfänger-Themen 5
K Eine Neue Methode Schreiben . Java Basics - Anfänger-Themen 15
L ftp öffnen über neue DOS-Box Java Basics - Anfänger-Themen 8
A Neue Objekte zur Laufzeit erzeugen Java Basics - Anfänger-Themen 5
M Neue Zeile? Java Basics - Anfänger-Themen 8
M JTable - DefaultTableModel - neue Row per Button-Klick Java Basics - Anfänger-Themen 2
S neue Aufgabe Java Basics - Anfänger-Themen 4
U Werte in neue Klasse speichern Java Basics - Anfänger-Themen 23
M Mit Java eine neue DB anlegen über XAMPP? Ist das möglich ? Java Basics - Anfänger-Themen 4
G Neue Look and Feels Java Basics - Anfänger-Themen 6
K Neue Werte für gleiche Array-Indexe Java Basics - Anfänger-Themen 16
Bernasconi Programmierstil / Wann eine neue Datei? Java Basics - Anfänger-Themen 5

Ähnliche Java Themen

Neue Themen


Oben