[Java] auslagern einer Methode in eine eigene Klasse

Hallo Zusammen,

ich habe hier eine kleines Programm geschrieben (http://tinyurl.com/45nce5p) und würde gerne die Methode LEDMatrix in seine eigene Klasse auslagern. Mir ist allerdings noch nicht ganz klar wie ich das am besten anstelle. Für Anregungen, Tipps und zu Verweisen auf Dokumente und How-Tos würde ich mich freuen. Ich befürchte das es mit der Klasse "Cell" Probleme geben könnte, wenn ich die Methode in seine eigene Klasse auslagere.


Danke!
 
Hi,

etwas sehr unkonkret deine Frage :D Zumal man anhand des Codes auf den du verlinkt hast auch garnicht erkennen kann wo Cell überhaupt definiert ist. Was für Probleme "befürchtest" du denn?

ciao
serow
 
processing.core.PApplet scheint eine Klasse namens cell vorzugeben...scheinbar soetwas wie ein grid. An sich dürfte die Auslagerung kein großes Problem sein, du musst nur entsprechende Variablen übergeben. Z.B. "rect" oder die ganze "heights" und "widths" - die du ja in deiner Sketch-Klasse schon herangezogen hast und dann in deiner LEDMatrix-Funktion weiter verwendest! Du solltest schauen, welche Variablen du innerhalb der LEDMatrix-Klasse erzeugen kannst und welche du als "Rahmenwerte" übergeben musst.

Grüße...
 
Warum möchtest du LEDMatrix in eine eigene Klasse verschieben? Eigentlich sieht das bestehende Objekt bereits recht übersichtlich und handlich aus. Wenn du LEDMatrix wirklich extrahieren möchtest, müssten genauso Cell[][] rect = new Cell[ yAxis ][ xAxis ]; und die draw-Funktion mitsiedeln. Damit würde dann in der ursprünglichen Klasse nicht mehr viel übrig bleiben außer main. Vielleicht solltest du eher andersherum überlegen: Gehört main wirklich dort hinein oder sollte main extern die jetzige Klasse aufrufen? Um das richtig beurteilen zu können fehlt mir aber ein klein wenig der Überblick über Java und die Anforderungen von PApplet.

mfg benediktibk
 
Jupp, das Auslagern von LEDMatrix macht nur Sinn, wenn du die Funktion für andere Klassen wiederverwenden willst.
In dem Fall, kannst du sie einfach als statische Methode in eine neue (oder beliebige) Klasse verschieben, musst dann aber die Variablen mWidth, mHeight und rect als Parameter übergeben. Dass du rect veränderst ist kein Problem, da rect sowieso als Referenz übergeben wird, weil es ein Array ist.
Der Methodenkopf sieht dann so aus:
public static void LEDMatrix(int mWidth, int mHeight, Cell[][] rect) { ... }
Und statt dem Aufruf LEDMatrix(); in der Methode setup kannst du einfach einen statischen Aufruf NeueKlasse.LEDMatrix(mWidth, mHeight, rect); verwenden.
Wenn du die Methode aber nur hier brauchst, macht ein Auslagern keinen Sinn.

edit: Beim Auslagern musst du natürlich alle imports von Klassen, die du verwendest (wie Cell) mit übernehmen. Da Cell aber anscheinend bereits im gleichen Package wie Sketch liegt, wird die Klasse automatisch gefunden.

mfg, metax.
 
Zuletzt bearbeitet:
Hallo Zusammen,

danke schon mal für die vielen Antworten. Ich bin bis jetzt noch nicht dazu kommen alles durch zu arbeiten, aber ich würde gernen noch einiges zum Hintergrund schreiben, zum besseren Verständnis.

Der vollständige Source:

http://code.google.com/p/killswitchledmatrix/source/browse/trunk/src/SketchPackage/

Code:
import processing.core.*

bezieht sich auf eine in Java geschriebe "Grafik-Bibliothek" welche oft im Bereich der Computergrafik eingesetzt.

public void setup(); dient dem reinen "setup" der Applikationen. Alles wird nur einmal gezeichnet.

public void draw(); ist eine Methode die wie eine while-Schleife, alles was in draw() steht, neu zeichnet.

Processing schreibt vor, dass nur eine Klasse im Programm eine Unterklasse von PApplet sein darf, und das ist Sketch.java, eben die Klasse mit main().

Im späteren Verlauf möchte ich ein GUI haben mit dem die Werte der "Cellen" zur Laufzeit verändert werden können. Ich möchte auch, dass mehrere Matrizen zeitgleich ausgeführt werden können, aber unabhängig von einander.

In Cell.java ist Parent definiert (Zeile: 21; Cell.java) . Ein Paramter der später mit (this):
Code:
rect[i][j] = new Cell( this );
(Zeile: 28; Sketch.java) übergeben wird. Da Cell in Sketch.java deklariert und instanziiert wird, funktionert (this) auch, da Sketch.java eine Unterklasse von PApplet ist. Wenn ich aber versuchen würde, den selben Code aus LEDMatrix.java auszuführen, würde es dabei ein Fehler geben, da LEDMatrix.java keine Unterklasse von PApplet ist. Und an der Stelle wüsste ich auch nicht, was genau ich anstelle von (this) verwenden müsste.

Rein vom Gefühl her, würde ich sagen die Methode LEDMatrix in eine eigene Klasse gehört, sicher bin ich mir aber nicht. Und wenn ja, wie kann ich dann am besten das Objekt Cell in LEDMatrix instanziieren?


Danke und MfG.
 
Zurück
Oben