# Aufteilung von Code (Theoretische Frage)



## Paul279 (12. Jan 2013)

Hallo Leute,
wieder eine Anfängerfrage, aber für mich nicht leicht lösbar.

Ich habe jetzt eine MainKlasse, die mittlerweile über 12000 Zeilen Code hat.
Jetzt kenn ich mich schon selber nicht mehr aus, deshalb wollte ich Codeteile in Extraklassen wie "Einstellungen", "Haupframe",... usw. erstellen.

Nun zur ersten Frage? Ist es gut, Code in andere Klassen aufzuteilen?

Das wirft mir nun weitere Fragen auf. Z.B.

In der MainKlasse habe ich die Funktion "KlickAufButton", die ein Actionevent von einem Button beim Design ist. Dann müsste ich in der MainKlasse bei der Funktion "KlickAufButton" ein Object erzeugen, das alle benötigten Referenzen mitgibt, die man bearbeiten möchte.
Ist das so richtig oder würde es einen leichteren/besseren Weg geben? Den ich möchte ja eigentlich nicht immer ein neues Object von etwas erzeugen wenn ich irgendwohin klicke!

Oder sollte ich die ganze MainKlasse der Einstellungsklasse vererben?
Erschlagt mich jetzt bitte nicht 

Am liebsten wäre mir ja, dass ich von meiner MainKlasse einfach nur Stücke in meinem Projectordner aufteilen könnte, da ich mich schon langsam nicht mehr auskenne.

Ich hoffe, dass was ich möchte habe ich halbwegs verständlich rübergebracht.
Danke sehr


----------



## Marcinek (12. Jan 2013)

Paul279 hat gesagt.:


> Nun zur ersten Frage? Ist es gut, Code in andere Klassen aufzuteilen?



Nein, es ist besser alles in einer Klasse zu haben, damit man Klassen mit 12k LoC hat. Das macht das Programm erweiterbar und leicht wartbar, da jeder Entwickler im Team nur eine Datei verändern muss.

scnr



Paul279 hat gesagt.:


> Ist das so richtig oder würde es einen leichteren/besseren Weg geben? Den ich möchte ja eigentlich nicht immer ein neues Object von etwas erzeugen wenn ich irgendwohin klicke!



Das ist so richtig.



Paul279 hat gesagt.:


> Oder sollte ich die ganze MainKlasse der Einstellungsklasse vererben?
> Erschlagt mich jetzt bitte nicht



Eine Vererbung ist eine "ist ein" Beziehung. Ist eine MainKlasse eine EinstellungsKlasse oder vice versa?



Paul279 hat gesagt.:


> Am liebsten wäre mir ja, dass ich von meiner MainKlasse einfach nur Stücke in meinem Projectordner aufteilen könnte, da ich mich schon langsam nicht mehr auskenne.



Ich verstehe nicht, wie du eine Klasse mit über 12k LoC schreiben konntest, ohne diese Kentnisse.

Ggf. jetzt mal ein wenig Literatur mit hinzufügen?


----------



## Master1991 (12. Jan 2013)

> Erschlagt mich jetzt bitte nicht


Sollte man eventuell

Nein im Ernst, du scheinst dich ja schon relativ gut mit Java auszukennen wenn du bereits 12000 Zeilen funktionsfähigen Code schreiben kannst.

Ist dir in der Zeit denn nie Objektorientiertes Programmieren untergekommen? 

Eines der wichtigsten Prinzipien ist doch wiederverwendbarkeit und damit Modualisierung von Code.

Also erstellst du dir viele neue Klassen die für bestimmte Sachen gut sind. Und erb bitte nicht die komplette MainKlasse

Zum Beispiel wäre eine Klasse 2DRechteck mit dem Attribut Ecke sinnvoll...wobei Ecke nun schon direkt eine eigene Klasse sein könnte die x und y Koordinate als Attribute enthält.

Also teil dir den Code ruhig in schön viele (Sinnvolle) häppchen auf


----------



## gst (12. Jan 2013)

Master1991 hat gesagt.:


> Nein im Ernst, du scheinst dich ja schon relativ gut mit Java auszukennen wenn du bereits 12000 Zeilen funktionsfähigen Code schreiben kannst.


Ironie-Tags vergessen?


----------



## threadstarte (12. Jan 2013)

So schreibe von meinem handy, alles weitere morgen, da ich meine frage falsch verständlich geschrieben habe.
Ich werde es morgen genauer erklären. Danke für die bisherigen posts und bis morgen


----------



## Luca2 (13. Jan 2013)

@Marcinek

Das man nur eine Klasse haben sollte, war ironisch ne?


----------



## Phash (13. Jan 2013)

Luca2 hat gesagt.:


> @Marcinek
> 
> Das man nur eine Klasse haben sollte, war ironisch ne?



irgendwie schon


----------



## Paul279 (13. Jan 2013)

Soso Mahlzeit,
also ich werde nochmal versuchen mein Problem genauer zu erläutern.
Keine Sorge ich versuche alles sehr Objektorientiert zu schreiben, habe ja mehrere Klassen für z.B. SQLAbfragen, InputOuput von/auf der Festplatte, Eigene Klasse für mein DefaultTableModell usw.

Mein Problem liegt aber wo anders. Beim Design:
Meine Mainklasse ist die Klasse mit den 12000 Zeilen Code. Die Mainklasse ist mein ganzes Design.
Mein Design hat ca. 23 Seiten und da kommt schon etwas zusammen wenn man immer die Funktionen für die Buttons oder sonstiges macht.

So stellt euch vor, ihr habt die GUI, macht dort eine Actionlistener drauf. Dieser ActionL. wird wie das Design in die Mainklasse geschrieben. Bei 23 Seiten kommen aber einige Actionlistener zusammen, so möchte ich gerne die Mainklasse aufteilen.

Ich möchte also das Design/Mainklasse aufteilen!!

Ich möchte gerne eine Seite meines Designs (z.B. dort wo alle Einstellungen getätigt werden) in einer eigenen Klasse haben. Nun ist aber die Frage, wie ich das Design von der Mainklasse "abkopple", sodass alle Funktion dieser einzigen Seite in eine andere JavaKlasse gespeichert werden.

So hätte ich am Ende:
Beim Design mit 23 Seiten, 23 Klassen.

Ich hoffe, dass es bis hierher etwas verständlicher ist.
Versuch 2 opcorn:


----------



## Firephoenix (13. Jan 2013)

Hier besteht wohl Lesebedarf:
Galileo Computing :: Objektorientierte Programmierung - Das umfassende Handbuch

Java ist eine Objektorientierte Sprache, in der man auch recht flach programmieren kann (alles in einer Methode/Klasse/etc), aber damit verliert man alle OOP-Vorteile (kleine, übersichtliche Module mit klar vorgegebenen Aufgaben, Wiederverwertbarkeit, ...).

Einfach mal Codezeilen/Abschnitte auslagern aus 12k Zeilen Nudelsalat, das kann nicht gut gehen.
Selbst wenn du den Teil copy-paste als Methode extrahierst und in eine Hilfsklasse packst hätte die Methode vermutlich soviele Parameter, dass man die Methode ebenfalls überarbeiten müsste.

Wenn du das wirklich überarbeiten willst, schau dir die Funktionalitäten von deinem Programm an (Außenansicht), überlege dir dazu einen OOP-Konformen Aufbau und schreib das ganze Ding neu. 
Wenn du einen Codeschnipsel benötigst und du findest den schneller im alten Code, als es dauert ihn neu zu schreiben, dann such ihn aus dem alten Code.
Das geht sehr wahrscheinlich schneller als die komplette Klasse nach für nach aufzulösen.

(Den Code würde ich aber doch gerne mal sehen, rein zur Unterhaltung. Ich kann mir beim besten Willen nicht vorstellen wie man 23 Seiten Code untereinander packt, die dann auch noch das tun was sie sollen opcorn

Gruß


----------



## TimoNeon (13. Jan 2013)

Also aufteilen auf jeden fall.. Bei 12k Zeilen Code blickst du langsam nicht mehr durch? Ich hab schon meine Probleme bei 300


----------



## Paul279 (14. Jan 2013)

@Firephoenix
Danke für den Link, mittlerweile habe ich eine Lösung gefunden. (Verstehe nicht warum einen das immer erst einfällt wenn man schon die Frage im Forum gepostet hat :bloed: )

Meine derzeitige Umsetzung:
Jede Designseite bekommt eine eigene Klasse. Diese Klassen werden alle ganz am Anfang, oder besser beim Programmstart geladen.

Danach arbeiten die Actionlistener nur noch mit den Klassen und rufen die benötigten Funktionen auf. Somit habe ich meine "Monsterlogik" auf viele Klassen unterteilt.

Viele Programme haben ja die Aufteilung GUI, Logik usw.
Ich habe eben GUI, LOGIK1, LOGIK2, LOGIK3 ...Logik23. 



> Selbst wenn du den Teil copy-paste als Methode extrahierst und in eine Hilfsklasse packst hätte die Methode vermutlich soviele Parameter, dass man die Methode ebenfalls überarbeiten müsste.



Ja das stimmt. Die meisten Methoden haben nun 10 Parameter. Aber warum nicht 

Das ganze Ding bau ich ständig neu, wenn mir etwas besseres einfällt, deswegen arbeite ich ja schon ein gutes halbes Jahr daran. 



> Den Code würde ich aber doch gerne mal sehen, rein zur Unterhaltung. Ich kann mir beim besten Willen nicht vorstellen wie man 23 Seiten Code untereinander packt, die dann auch noch das tun was sie sollen



Warum nicht. Ich baue gerade das Programm um (Auslagerung usw.) Aber von 12.000 zeilen code bin ich mittlerweile schon bei 7500. Sobald es wieder lauffähig ist kann ich es dir mal per PN senden, wenn es ernst gemeint war 

Vielleicht hättest du ja auch ein paar gute Ratschläge für mich 

Danke sehr und gute Nacht

//EDIT
Ein kleiner Gedanke noch:
Warum habe ich nicht meine Main/Design und erbe alle Hilfklassen. Dann bräuchte ich auch nicht diese Methodenaufrufe mit 10 Parametern?


----------



## blauerninja (14. Jan 2013)

Was du da programmiert hast, nennt man Gottesklasse. Du solltest sie aufbewahren und zu irgendeinem Wettbewerb schicken, wo es darum geht, wer den Längsten (Code) hat. XD
Nun hast du auch das Dilemma. Wahrscheinlich sind die Methoden in der Klasse auch selbst zu lang (vllt auch nur die main() ?)
Ich würd dir empfehlen Literatur zu besorgen, aber so dringend. Wahrscheinlich ist es besser und auch der schnellere Weg (und nicht zu vergessen: der Übungsaspekt, wie man RICHTIG programmiert), wenn du dein Programm einfach neu schreibst. Empfehlen kann ich:

Code Complete - Deutsche Ausgabe der Second Edition: Amazon.de: Steve McConnell: Bücher
http://www.amazon.de/Clean-Code-Ref...5486/ref=sr_1_2?ie=UTF8&qid=1358125684&sr=8-2

Das zweite ist gut für den Einstieg, hat mir damals seeeeeehr geholfen. Auch ich hab mal so große Klassen geschrieben, ok, an die 800 bin ich gekommen, dann bin ich doch noch rechtzeitig zur Besinnung gefunden^^
Das erste Werk wirst du auch brauchen, früher oder später. Also wieso nicht schon jetzt? Mit komplexen Klassen hantierst du eh schon rum, wenn du bereits mit GUIs arbeitest. Das Geld wirst du dann nicht bereuen ausgegeben zu haben^^


----------



## blauerninja (14. Jan 2013)

Paul279 hat gesagt.:


> @Firephoenix
> 
> //EDIT
> Ein kleiner Gedanke noch:
> Warum habe ich nicht meine Main/Design und erbe alle Hilfklassen. Dann bräuchte ich auch nicht diese Methodenaufrufe mit 10 Parametern?



Weil Java keine Mehrfachvererbung unterstützt. Du kannst nur von einer Klasse erben. Und auch eine Kaskade von 23 Vererbungen ist nicht sinnvoll.

Ich würd eher die Ursprungsklasse anschauen^^ Und wie ich schon empfohlen habe: :rtfm:


----------



## Bleiglanz (14. Jan 2013)

Warum fällt mir dazu nur VBA/Visual Basic ein? 

Es handelt sich vermutlich um ein IDE-Problem: man klickt den Button an, der Code-Editor öffnet sich und man kann sofort den Code schreiben, der beim "click()" ausgeführt wird.

Man sollte deinen Post als Warnung verstehen: Überleg dir VORHER ein vernünfgiges Modell (a la MVC oder ähnliches) und verteile soche Action-Methoden in GUI-Klassen sofort weiter an andere Klassen (Delegates oder...)

vorläufig würde ich mit einer IDE alle diese Aufrufe nehmen, via "Extract Method" erst mal den Code in eine neue Klasse schieben (als static). Danach diese ebenfalls riesige Klasse zerlegen in keine logisch sinnvolle Einheiten usw.


----------



## Hobbes (14. Jan 2013)

Bleiglanz hat gesagt.:


> Danach diese ebenfalls riesige Klasse zerlegen in *keine* logisch sinnvolle Einheiten usw.



*rofl* Nur einen kleinen Buchstaben vergessen und schon gibt der Satz einen vollkommen anderen Sinn:lol:


----------



## Paul279 (14. Jan 2013)

@blauerninja
Danke für die Links und den Hinweis mit der Vererbung.
Dass mir wieder mal das mit der Mehrfachvererbung nicht eingefallen ist!

So kurz mal in "Clean-Code" reingeschmöckert, steht vieles drinnen.
(So habe diesen Miniabsatz jetzt schon mehrmals umgeschrieben, so dass es dankbar aber nicht überheblich klingt,
also bitte auch nett interpretieren)
Angefangen von Benennung von Variablen, Funktionen, Kommentaren Multithreading, Exceptions usw. und kleinen Strukturen
steht da nicht mehr drinnen. Ich denke das ist ein sehr Basic-Buch, womit man sicher gut anfangen kann, doch mir
hilft es nicht mehr weiter.

Denn auch wenn mein Code 12k lang ist, ist er verständlich, da er schon sehr nach den konformen Regeln der Sprache
geschrieben ist, also richtige Groß-Kleinschreibung, richtige Benennung, Kommentaren ....
und da es objektorientiert geschrieben ist.(Nicht in der Main!)
Doch mein Problem ist wo anders und das habe ich in meinem Modell nicht bedacht -> 
Dass die Mainklasse zu groß werden könnte!

Das ist mein Problem und das hat auch Bleiglanz herausgefunden.


> Es handelt sich vermutlich um ein IDE-Problem: man klickt den Button an, der Code-Editor öffnet sich und man kann sofort den Code schreiben, der beim "click()" ausgeführt wird.



Die Lösung von Bleiglanz werde ich jetzt mal überdenken: 


> die Aufrufe mal "extrahieren" und in andere Klassen verschieben.


Arbeite übrigens mit Netbeans ;-)

Ob das jetzt die elegante Lösung ist weiß ich nicht, da ich sogar lieber 10 Parameter hätte als static zu verwenden.
Ich habe hier im Forum irgendwo einmal einen sehr interessanten Beitrag zu "Warum static Variablen und Methoden schlecht sind" gelesen.
Sehr interessant. Wenn ich nur den Link finden könnte :-/

Ich werde mir jetzt noch ein bisschen überlegen ob ich die Methoden static machen soll oder doch lieber auf die 10
Parameter setzten sollte.

Danke für eure Beiträge

PS: Bei Code-Complete habe ich noch nicht reingesehen, werde ich aber sicherlich noch machen.


----------



## Paul279 (14. Jan 2013)

Teil2:

Hmm da ich mittlerweile schon 22 Parameter bei einer Funktion habe werde ich es wohl "moven".
Doch leider bekomme ich immer einen Fehler, anscheinend mache ich da gewaltig etwas falsch:

Bei Netbeans:
Ich klicke die Methode an. Refactor - Move - wähle die Methode aus. Unten lasse ich die Standardeinstellung:
Keep original methods and delegate to the moved method (nicht angeklickt)

Wenn ich "refactore" sagt er mir auch noch eine Warnung: (Leider für mich nicht verständlich)
No accessor found to invoke the method from: Delegate method

Er erstellt mir zwar in einer anderen Klasse wunderbar die selbe Funktion, aber wenn ich das Programm ausführe geht er noch immer in den alten Code rein, denn der ist auch noch da.

Auch wenn ich den Einstellungspunkt "Keep original methods and delegate to the moved method" anklicke, passiert nicht viel. Er geht nicht in die "neue" Methode hinein.

Was mache ich falsch?

Danke sehr


----------



## blauerninja (14. Jan 2013)

Mehr als 3 Parameter gilt schon als zu viele Parameter.
Bei NetBeans kenn ich mich nicht aus. Was ich beitragen konnte, hab ich gemacht. Für mich ist Ende Gelände.
Viel Glück, und die Ursprungsklasse würd ich mir doch schon gern anschauen. Vllt auf Rapid und Link per PN?

Ciao


----------



## Paul279 (14. Jan 2013)

Danke trotzdem!

Da ich jetzt schon den ganzen Tag umschreibe und ich nicht mit Versionierung arbeite, kann ich dir die Ursprungsklasse nicht senden, aber wenn es dich interessiert, schicke ich es per PN, in aufgeteilter Form, sobald ich alles wieder lauffähig und meinen Ursprung sozusagen wieder hergestellt habe.

Jetzt kann ich das Programm grad nicht mal ausführen weil ich so viele Umstrukturierungen habe.


----------



## KSG9|sebastian (14. Jan 2013)

"Aus jeder Seite des Design" eine Klasse machen...was genau ist den eine Seite? Ich hoffe ja mal nicht eine Seite mit textueller Beschreibung, die als Java-Klasse dann Seite1-20 heißt?

Und dein Code ist NICHT objektorientiert, wenn es nur ein Objekt/Klasse gibt. Gibt es überhaupt EIN Objekt? Oder sind alles statische Methoden?
Auch "Methode mit 20 Parametern" entspricht nicht gerade der Definition von übersichtlich, getrennt, strukturiert, objektorientiert!

Sich an Code-Conventions zu halten bringt dich auch nicht zu einem guten Design.


----------



## Paul279 (14. Jan 2013)

Keine Sorge, ich habe nicht nur eine Klasse.

Also ich habe 7ben. Ich habe mir schon ein Modell dabei ausgedacht, das Problem, wie oben beschrieben, war die Main. An die habe ich nicht gedacht, dass sie so fett werden könnte.

Seite: Entschuldigung, dabei habe ich mein Design gemeint. Ich habe zwei TabbedPane eingebaut, die jeweils mehrere JPanels beinhalten. Die JPanels waren meine Seiten.
Also immer wenn der User wo anders hinklickt, kommt eine andere "Seite"/Jpanel 

Wie auch oben geschrieben versuche ich static zu vermeiden. Und es gibt genug Objekte, die werde ich jetzt nicht zählen ;-)

Mittlerweile bin ich soweit, dass ich meine Logik, welche ich zusätzlich in der Main gehabt habe in mehrere Klassen aufgeteilt habe. Habe zwar noch immer 20 Parameter aber dafür habe ich jetzt die nächste Lösung gefunden.

Da ich meist nur 2 Typen mitgebe, jComboboxen und jPanels werde ich alle meine JCombos und Jpanels in Arraylists packen.

Somit verkürzt sich meine Parameterübergabe von 20 auf 2.

Bin gespannt was der nächste Vorschlag/Einwand ist opcorn:


----------



## Camino (14. Jan 2013)

Paul279 hat gesagt.:


> Da ich meist nur 2 Typen mitgebe, jComboboxen und jPanels werde ich alle meine JCombos und Jpanels in Arraylists packen.
> 
> Somit verkürzt sich meine Parameterübergabe von 20 auf 2.



Aus welchem Grund übergibst du diese Komponenten? Also, von wo nach wo übergibst du die? Ich vermute mal, das lässt sich bestimmt stark vereinfachen, dein Programm. Mich würde ja schon mal interessieren, wie dein Code aussieht. Hast du nicht mal Lust, wenigsten einen kleinen Teil von deinem GUI-Aufbau hier reinzuposten?


----------



## Bleiglanz (15. Jan 2013)

Paul279 hat gesagt.:


> Jetzt kann ich das Programm grad nicht mal ausführen weil ich so viele Umstrukturierungen habe.



Kleiner Tipp zu Refactoring:

Immer nur KLEINE Schritte, nach jedem Schritt übersetzen und prüfen (gibt es unit-Tests?). Im Prinzip sollte nach move-method alles vollständig unverändert sein?

Und: Das Problem ist, dass so viel "Kontext" in deiner Main-Klasse ist, d.h. member-Variablen auf die du in deinen Action-Methoden einfach zugreifen kannst, die aber beim extrahieren natürlich in der Parameterliste landen. Ist suboptimal...


----------



## Crian (15. Jan 2013)

Paul279 hat gesagt.:


> Danke trotzdem!
> 
> Da ich jetzt schon den ganzen Tag umschreibe und ich nicht mit Versionierung arbeite, kann ich dir die Ursprungsklasse nicht senden, aber wenn es dich interessiert, schicke ich es per PN, in aufgeteilter Form, sobald ich alles wieder lauffähig und meinen Ursprung sozusagen wieder hergestellt habe.
> 
> Jetzt kann ich das Programm grad nicht mal ausführen weil ich so viele Umstrukturierungen habe.



Du machst nichtmal vor solchen Riesenänderungen eine Sicherung in Form einer Zip-Datei oder ähnlichem? Woa!


----------



## Paul279 (15. Jan 2013)

Camino hat gesagt.:


> Aus welchem Grund übergibst du diese Komponenten? Also, von wo nach wo übergibst du die? Ich vermute mal, das lässt sich bestimmt stark vereinfachen, dein Programm. Mich würde ja schon mal interessieren, wie dein Code aussieht. Hast du nicht mal Lust, wenigsten einen kleinen Teil von deinem GUI-Aufbau hier reinzuposten?



Ich übergebe diese Komponenten weil ich zuvor alles in der Main hatte und von dort leicht aus zugreifen konnte. Ich übergebe nun von der Main in meine Logikklassen.

Also, dass es sich stark vereinfachen lässt wage ich einmal zu bezweifeln und ich habe schon vor ein paar Tagen darüber nachgedacht ob ich einen Code posten soll, aber das würde nur noch mehr Verwirrung bringen. Wenn ich den Aufbau posten würde, müsste ich den ganzen Programmablauf erklären, meine dazugehörige Datenbank und die "Speicherlogik" warum ich welche Werte in der Datenbank speichere und ich arbeite schon ein dreiviertels jahr an dem Programm, da müsste ich sehr viel schreiben und Hilfe bei meinem Code brauche ich ja nicht wirklich, eher, wie man es richtig übergibt, wenn man so viele Komponenten braucht. 

Das soll jetzt nicht das weitere Thema sein, aber mein Programm ist ein Auswertungs-Statistikprogramm, welches von unterschiedlich vielen Clients zeitenweise Daten für die Auswertung bekommt. -> Nur um die Neugierde zu befriedigen 



> Immer nur KLEINE Schritte, nach jedem Schritt übersetzen und prüfen (gibt es unit-Tests?). Im Prinzip sollte nach move-method alles vollständig unverändert sein?
> 
> Und: Das Problem ist, dass so viel "Kontext" in deiner Main-Klasse ist, d.h. member-Variablen auf die du in deinen Action-Methoden einfach zugreifen kannst, die aber beim extrahieren natürlich in der Parameterliste landen. Ist suboptimal...



Keine jUnits.

Nach der Move-Method habe ich in der Hilfsklasse die komplett selbe Methode wie in der Mainklasse, also doppelt, aber er geht nur in die Methode von der Mainklasse hinein.
Also die Move verstehe ich nicht, warum diese so arbeitet.

Ich habe gedacht move, verschiebt meine Methode von der Main in die Hilfsklasse, sodass die Methode in der Hilfsklasse ausgeführt wird?

Ja aber static möchte ich auch nicht verwenden, also bleibt mir jetzt nichts andere übrig.
Wie schon geschrieben werde ich jetzt die ganzen JLabels, JComboboxen und JRadiobuttons in Arraylists packen und diese übergeben, dann funktioniert aber alles tadellos.



> Du machst nichtmal vor solchen Riesenänderungen eine Sicherung in Form einer Zip-Datei oder ähnlichem? Woa!


Was soll ich sagen. Ich schreibe es um und wenns nicht geht suche ich den Fehler. (Ich weis eine eher schlechte Weise, aber ich fahre damit nicht so schlecht)

Mein einziges Backup, falls der Laptop mal hinüber ist, ist google drive, da läuft mein Projekt drauf. Laienhaft aber für mich reichts.

Gut, da wir jetzt schon eher vom Thema abkommen, sage ich allen Danke für eure Hilfe, mittlerweile habe ich meinen Weg gefunden wie ich es mache, mich würde nur noch die Move-method interessieren, warum diese so komisch arbeitet! ???:L

Wünsche euch noch einen schönen Tag


----------



## Crian (15. Jan 2013)

Statt einzelner Listen bietet sich vielleicht eine Klasse an, die deine ganzen Objekte verwaltet, der Objekte zum Speichern übergeben werden können und die man nach Objekten fragen kann.


----------



## Sehales (16. Jan 2013)

Crian hat gesagt.:


> Statt einzelner Listen bietet sich vielleicht eine Klasse an, die deine ganzen Objekte verwaltet, der Objekte zum Speichern übergeben werden können und die man nach Objekten fragen kann.



Und schwupps sind wir wieder bei dem Thema ob -er Klassen(Manager/Controller..) richtig sind oder nicht.

@TO
Ich wäre sehr an dem Quellcode eines solchen riesen Projektes interessiert. Mein eigenes mammut Projekt besteht aus 71 Klassen und durchschnittlich vielleicht 200 Zeilen(viele javadoc Kommentare), damit komme ich auf 14000 Zeilen... was macht denn dein Programm? Ich verfolge den Thread seit beginn und werde langsam neugierig. Ich glaube das ist der Thread mit dem wenigstem Quellcode...


----------



## Paul279 (16. Jan 2013)

Sehales hat gesagt.:


> Und schwupps sind wir wieder bei dem Thema ob -er Klassen(Manager/Controller..) richtig sind oder nicht.



Static versuche ich zu vermeiden. Ich habe das Programm nun mal umgeschrieben und übergebe alle Parameter die ich brauche.

Jetzt ist die nächste Überlegung ob ich es in Listen packen soll oder wie Sehales geschrieben hat eine eigene Klasse schreiben soll. Ich werde es mal mit Listen probieren, wenn es damit zu umständlich/umfangreich wird, werde ich wohl diese Hilfsklasse schreiben müssen.


> @TO
> Ich wäre sehr an dem Quellcode eines solchen riesen Projektes interessiert. Mein eigenes mammut Projekt besteht aus 71 Klassen und durchschnittlich vielleicht 200 Zeilen(viele javadoc Kommentare), damit komme ich auf 14000 Zeilen... was macht denn dein Programm? Ich verfolge den Thread seit beginn und werde langsam neugierig. Ich glaube das ist der Thread mit dem wenigstem Quellcode...



Es ist auch eine Theoretische Frage! Und warum ich es nicht poste und was es ist habe ich zwei Beiträge weiter oben geschrieben 

Warum ich diesen Beitrag noch offen lasse ist, dass ich gern wüsste, warum meine Move-Methode unter Netbeans nicht richtig funktioniert.

Ich beschreibe es nochmal:
Wenn ich eine Methode Move, bleibt die originale und in meiner hilfsklasse erscheint die kopierte Methode.
Er geht aber immer in die Originale hinein. Dabei wollte ich diese doch verschieben ???:L


----------



## mla.rue (17. Jan 2013)

Die Fehlermeldung hatte ich noch nie, eine accessor method ist z.b. getter... kann es sein, dass einer deiner Parameter eine getter Methode ist, und nicht eine Variable? Wenn nicht gerade statisch, kann auf diese Methode natürlich nicht am neuen Ort zugegriffen werden, daher eine Warnung. Das wäre jedenfalls meine Vermutung ohne mich explizit mit der Fehlermeldung zu beschäftigen.

Was das andere Problem angeht, Englisch lernen, oder die deutsche NetBeans Version installieren  (nicht böse gemeint)

Dein Dialog sagt:

```
Keep the original method(s) and delegate to the moved method
     Deprecate the old method(s)
```

Die zweite Zeile ist angehackt und ausgegraut, wenn alles so lässt, wird die Methode an die neue Stelle verschoben und die Referenzen "sollten" sich ändern, so dass der neue Code ausgeführt wird.

Setzt du aber einen Hacken in die erste Zeile, und deaktivierst den in der zweiten, werden die gewählten Methoden nur kopiert und bleiben an der alten Stelle existent. Daher ändern sich auch keine Referenzen und der alte Mechanik deines Codes wird ausgeführt (der zwar in einer Klasse eine Methode mehr hat, aber ohne weitere Referenzen voll für den Eimer ist). Du hast also Nichts gekonnt.

Ergo: erste Zeile Hacken aus, zweite Zeile hacken an.


----------



## Paul279 (22. Jan 2013)

So Entschuldige für die Verspätete Antwort, hatte einen Unfall und war im Krankenhaus deswegen gehts erst jetzt weiter.

@mla.rue
Habe mehrmals versucht auch Testmethoden umherzuschieben, mittlerweile habe ich es gefunden.

Deine Idee mit getter war richtig. Habe dort auf Variablen zugegriffen, die nur dort vorhanden waren.



> Was das andere Problem angeht, Englisch lernen, oder die deutsche NetBeans Version installieren  (nicht böse gemeint)



Ja, da hast du recht 


So @all
Ich möchte mich bei allen nochmals herzlich bedanken.
Ihr habt mir sehr geholfen, bin wieder mal um einiges "wissender" geworden.

Wünsche euch allen noch eine weitere schöne Woche


----------

