Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

auslagern einer Methode in eine eigene Klasse

546 views
Skip to first unread message

Marcus Kammer

unread,
Feb 12, 2011, 4:52:20 AM2/12/11
to
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.

MfG

Malte Schirmacher

unread,
Feb 12, 2011, 6:18:57 AM2/12/11
to


Und wo GENAU hast du da Probleme? Ein HowTo existiert dafür -- und ich
lehne mich nicht sonderlich weit aus dem Fenster -- nicht.

Wie wärs mit folgendem HowTo?

Öffne einen Texteditor.
Schreib da rein:
public class NewClass {
// hier kommt deine Methode hin
}

Dann Speichere das ganze in der Datei "NewClass.java" ab und kompiliere es.
Es wird höchstwahrscheinlich nicht sofort Fehlerfrei durchlaufen.
Die Fehler nach eigenem Ermessen beheben.
Fertig. KTHXBAI

Malte

Claus Reibenstein

unread,
Feb 12, 2011, 6:43:51 AM2/12/11
to
Malte Schirmacher schrieb:

> Fertig. KTHXBAI
ŻŻŻŻŻŻŻ

Ich musste erst mal nachforschen, was dieser Zeichensalat bedeuten soll,
wobei sich mir die Erklärungen irgendwie nicht so richtig erschlossen.

Immerhin bin ich dabei auch auf <http://kthxbai.com/> gestoßen ;-)

Gruß. Claus

Achim Peters

unread,
Feb 12, 2011, 8:12:27 AM2/12/11
to
On 12.02.2011 12:43, Claus Reibenstein wrote:
> Malte Schirmacher schrieb:
>
>> Fertig. KTHXBAI
> ¯¯¯¯¯¯¯

>
> Ich musste erst mal nachforschen, was dieser Zeichensalat bedeuten soll,
> wobei sich mir die Erklärungen irgendwie nicht so richtig erschlossen.
>
> Immerhin bin ich dabei auch auf <http://kthxbai.com/> gestoßen ;-)

Ohne das zu kennen und ohne nachzuforschen, tippe ich nach Anblick
dieses possierlichen Tierchens spontan auf die alternative Schreibweise
"K THX BAI", was dann trivial zu "Ok, Thanks, Bye" wird.

Bye
Achim

Claus Reibenstein

unread,
Feb 12, 2011, 8:39:47 AM2/12/11
to
Achim Peters schrieb:

> On 12.02.2011 12:43, Claus Reibenstein wrote:
>

>> Immerhin bin ich dabei auch auf <http://kthxbai.com/> gestoᅵen ;-)


>
> Ohne das zu kennen und ohne nachzuforschen, tippe ich nach Anblick
> dieses possierlichen Tierchens spontan auf die alternative Schreibweise
> "K THX BAI", was dann trivial zu "Ok, Thanks, Bye" wird.

Ah ja, das kᅵme hin. Dazu passen dann auch die Erklᅵrungen, die ich
gefunden habe.

Danke.

Gruᅵ. Claus

Patrick Roemer

unread,
Feb 12, 2011, 8:41:20 AM2/12/11
to
Responding to Marcus Kammer:

> ich habe hier eine kleines Programm geschrieben (http://tinyurl.com/45nce5p) und

> w�rde gerne die Methode LEDMatrix in seine eigene Klasse auslagern.

Ueblicherweise will man eher Zustand zusammen mit dem darauf
operierenden Verhalten in eine Klasse mit einer definierten
Zustaendigkeit auslagern. In Deinem Fall koennte das z.B. eine Klasse
CellMatrix sein, die das Cell[][] kapselt - keine Ahnung, ob das auch
sinnvoll ist.

Dein Handling von Feldern wirkt etwas merkwuerdig: width, height, posX
und posY scheinen doch fuer eine Cell konstant zu sein, warum werden die
staendig von aussen abgefragt, reingereicht und intern neu gesetzt? Kann
man die nicht final und privat im Konstruktor setzen und gut ist? Ebenso
wuerde ich das Setzen der Farbe vom Zeichnen getrennt halten, oder
alternativ diese Werte gar nicht als Zustand halten.

Viele Gruesse,
Patrick

Marcus Kammer

unread,
Feb 14, 2011, 2:54:22 AM2/14/11
to
Hallo, und danke schon mal für die Antworten.

Im späteren Verlauf der Programmentwicklung soll noch ein GUI erstellt
werden, mit dem die Werte in den Variablen width, height usw..
verändert werden können. Das setzen der Farbe kann vom Zeichnen nicht
getrennt werden, das erlaubt Processing nicht. Für Processing müssen
fill() und rect() immer zusammen, aufeinander folgend aufgerufen
werden. Mich interessiert an dieser Stelle, ob es aus Software-
Entwicklungssicht sinnvoll ist die Methode LEDMatrix in eine eigene
Klasse auszulagern? Das ist mein erstes Java Programm und mir sind die
vielen OOP Konzepte noch nicht ganz klar. Desweiteren ist es so, dass
Cell.java (http://tinyurl.com/64nfseu) kein extends von PApplet sein
darf, sondern auf Parent verweisen muss. Wenn ich Cell deklarieren
möchte, muss ich das mit Cell[][] rect = new Cell[ yAxis ][ xAxis ];
machen, und wenn ich es instanzieren möchte mit rect[i][j] = new
Cell( this ); dabei wird ja immer der Paramter "this" übergeben. Aber
wenn ich LEDMatrix in eine eigene Klasse auslagere, kann nicht einfach
bei Cell, ( this ) als paramter übergeben, da die LEDMatrix Klasse ja
keine Unterklasse von PApplet sein darf, das darf eben nur die Klasse
Sektch.

Vielen Dank!

MfG
Marcus Kammer

Patrick Roemer

unread,
Feb 14, 2011, 9:56:10 AM2/14/11
to
Responding to Marcus Kammer:

Bitte Kontext sinnvoll quoten!

> Im späteren Verlauf der Programmentwicklung soll noch ein GUI erstellt
> werden, mit dem die Werte in den Variablen width, height usw..
> verändert werden können.

Wobei sich width und height ja wohl nur sinnvoll fuer alle Cells
gleichzeitig aendern lassen. Das spraeche auch wieder dafuer, diese
Werte an einer Stelle zentral zu halten, und nicht in jeder Cell zu
duplizieren.

> Das setzen der Farbe kann vom Zeichnen nicht
> getrennt werden, das erlaubt Processing nicht. Für Processing müssen
> fill() und rect() immer zusammen, aufeinander folgend aufgerufen
> werden.

Gemeint war das Setzen der Felder innerhalb der Cell versus deren
"Verwendung" innerhalb von #paint(), nicht das Setzen der Fuellfarbe vor
dem Zeichnen innerhalb von #paint().

> Mich interessiert an dieser Stelle, ob es aus Software-
> Entwicklungssicht sinnvoll ist die Methode LEDMatrix in eine eigene
> Klasse auszulagern?

Noch mal: Die Frage, ob es sinnvoll ist, eine Methode in eine eigene
Klasse auszulagern, ist meistens schon nicht sinnvoll. Eine Klasse
kapselt Funktionalitaet, ueblicherweise eine Kobination aus Zustand und
darauf operierendem Verhalten. In Deinem konkreten Fall also z.B.:
"Waere es sinnvoll, ein Klasse LEDMatrix einzufuehren, die das
Cell-Array, dessen Initialisierung und Zugriffe darauf kapselt?" Einfach
die Initialiserungsmethode in eine andere Klasse zu zerren, ist mit
Sicherheit Unfug.

> Das ist mein erstes Java Programm und mir sind die
> vielen OOP Konzepte noch nicht ganz klar.

Ein erstes Java-Programm gleich gegen ein "Fremdframework" wie
Processing zu schreiben, macht die Sache wahrscheinlich nicht wirklich
leichter.

> Desweiteren ist es so, dass
> Cell.java (http://tinyurl.com/64nfseu) kein extends von PApplet sein
> darf, sondern auf Parent verweisen muss. Wenn ich Cell deklarieren
> möchte, muss ich das mit Cell[][] rect = new Cell[ yAxis ][ xAxis ];
> machen, und wenn ich es instanzieren möchte mit rect[i][j] = new
> Cell( this ); dabei wird ja immer der Paramter "this" übergeben. Aber
> wenn ich LEDMatrix in eine eigene Klasse auslagere, kann nicht einfach
> bei Cell, ( this ) als paramter übergeben, da die LEDMatrix Klasse ja
> keine Unterklasse von PApplet sein darf, das darf eben nur die Klasse
> Sektch.

Dann reicht man die benoetigten Referenzen an das Objekt weiter, z.B. im
Konstruktor.

Mal konkret: Du willst scheinbar ein Pane mit einem Raster ueberziehen
und dann einzelne Rasterzellen mit Zufallsfarben ausmalen. Dafuer
muessen "virtuelle" Koordinaten (die Indices Deines Cell-Arrays) in
Screen-Koordinaten uebersetzt werden. (Und was auch immer Du da in
Deiner #LEDMatrix() machst, es erscheint mir deutlich zu kompliziert
fuer diesen Zweck.) Richtig? Und viel mehr scheint in Deinem bestehenden
Code eigentlich auch noch nicht zu passieren: Du hast zwar diverse
Felder in Deinen Cells, aber die werden entweder nur zur
Koordinatenumrechnung oder gar nicht (sinnvoll) genutzt. Kurz: Wenn es
nur um die bestehende Funktionalitaet ginge, wuerde ich gar keine
einzelnen Cellobjekte halten, sondern eben nur eine Klasse fuer die
Matrix einfuehren. Ganz naiv (und ohne jede Ahnung von Processing):

public class VirtualCellMatrix {
private final PApplet parent;
private final int width;
private final int height;

VirtualCellMatrix(PApplet parent, int width, int height) {
this.parent = parent;
this.width = width;
this.height = height;
}

void fill(int vIdx, int hIdx, float r, float g, float b) {
parent.fill(r, g, b);
parent.rect(hIdx * width, vIdx * height, width, height);
}
}

...und dann in Deiner Mainklasse:

private VirtualCellMatrix matrix;

public void setup() {
// ...
matrix = new VirtualCellMatrix(this, mWidth, mHeight);
initMatrix();
}

public void draw() {
matrix.fill((int)random(yAxis), (int)random(xAxis),
random(255), random(255), random(255));
}

private void initMatrix() {
for (int vIdx = 0; vIdx < yAxis; vIdx++) {
for (int hIdx = 0; hIdx < xAxis; hIdx++) {
matrix.fill(vIdx, hIdx, 255, 255, 255);
}
}
}

Nun mag es ja sein, dass Du tatsaechlich irgendwann individuellen
Zustand pro Zelle haben willst - etwa die Farbwerte (die Du im Moment ja
einfach nicht nutzt). Dann waere es naheliegend, die Matrixklasse so
umzuschreiben, dass sie ein Cell-Array kapselt, aber weiterhin Zustand
und Verhalten, die fuer alle Cells gelten, selber "behaelt" - eben etwa
width, height und die darauf basierende Koordinatenumrechnung. Falls die
Cellobjekte diese Werte tatsaechlich auch selber kennen muessen,
koennten sie entweder eine Referenz auf das Matrixobjekt halten, oder,
meist besser, das Matrixobjekt koennte diese Werte als Argumente in die
entsprechenden Methoden der Cellobjekte reinreichen.

...und ich wuerde wirklich noch mal ueberlegen, ob es fuers erste
Java-Programm gleich Processing sein muss, oder ob man sich nicht auf
die JDK-Core-Libraries beschraenken sollte. Mit solchem Code wird es
wahrscheinlich auch einfacher, hier oder anderswo Hilfe zu finden.

Viele Gruesse,
Patrick

Marcus Kammer

unread,
Feb 15, 2011, 8:05:30 AM2/15/11
to
Herzlichen Dank für das viele Feedback!
Ich werde mir das alles mal in Ruhe ansehen und in meine
Programmentwicklung einfließen lassen.

MfG
Marcus

0 new messages