Adressierung

Status
Nicht offen für weitere Antworten.

michi2

Bekanntes Mitglied
Hallo,
Ich programmiere schon länger mit Java, hate aber bisher nen zimlich schlechten Still, :oops:
das wollte ich jetzt ändern...
Das Haupt-Übel, ist das ich hate ist eine unsinnige vererbung und massenhafte benutztung von static.
Das hab ich jetzt in einigen Programmen geändert, als folge musste ich auch die Adressierung ändern, und das ist meine Frage:
Ich habe jetzt in vielen Code-Stücke etwas stehen wie:
Code:
         NotLogSys = new nLogCoordinateSystem(CFunkPlotter2.FP.CFunkPlotter2.FP.xmin,CFunkPlotter2.FP.xmax, CFunkPlotter2.FP.ymin,CFunkPlotter2.FP.ymax, CFunkPlotter2.FP.Farbe[w]);
         SimpleLogSys = new sLogCoordinateSystem(CFunkPlotter2.FP.xmin,CFunkPlotter2.FP.xmax, CFunkPlotter2.FP.ymin,CFunkPlotter2.FP.ymax, CFunkPlotter2.FP.Farbe[w]);
         DualLogSys = new dLogCoordinateSystem(CFunkPlotter2.FP.xmin,CFunkPlotter2.FP.xmax, CFunkPlotter2.FP.ymin,CFunkPlotter2.FP.ymax, CFunkPlotter2.FP.Farbe[w]);
Was ziemlich blöd aus sieht, giebt's Tipps/Tricks für Abhilfe?
Vorher sah das so aus:
Code:
NotLogSys = new nLogCoordinateSystem(xmin,xmax, ymin,ymax, Farbe[w]);
...

Michi
 

Murray

Top Contributor
Sieh doch in den Koordinentensystemklassen einen Konstruktor vor, der das Objekt CFunkPlotter2.FP als Parameter bekommt (den Typ kenne ich jetzt nicht; für das Beispiel gehe ich mal davon aus, dass der Typ FuncPlotter heisst)

Code:
class nLogCoordinateSystem {

  /* ... */

  public nLogCoordinateSystem( FuncPlotter fp, int farbIndex) {
     this( fp.xmin, fp.xmax, fp.ymin, fp.ymax, fp.farbe[ farbIndex]);
  }
  /* ... */

}

/* ... */ 

NotLogSys = new nLogCoordinateSystem( CFunkPlotter2.FP, w);
 

michi2

Bekanntes Mitglied
Gut, Danke so werd ichs in diesem Fall machen!
Aber was ist algemein, wenn es so nicht geht? Giebt's dann noch irgendwelche Trick's?
 

michi2

Bekanntes Mitglied
z.b.:
CFunkPlotter2.FP.xmin = Integer.parseInt(xmin.getText());
CFunkPlotter2.FP.xmax = Integer.parseInt(xmax.getText());
CFunkPlotter2.FP.ymin = Integer.parseInt(ymin.getText());
CFunkPlotter2.FP.ymax = Integer.parseInt(ymax.getText());
CFunkPlotter2.FP.genau = Double.parseDouble(t6.getText());
CFunkPlotter2.FP.di.setSize(Integer.parseInt(canb.getText()), Integer.parseInt(canh.getText()));
CFunkPlotter2.FP.m_malflaeche.paintfunk();
 

Murray

Top Contributor
Ist eigentlich ziemlich ähnlich: wenn alle Werte von FP immer gemeinsam gesetzt und nicht einzeln verändert werden, dann spendiere wieder einen Konstruktor, der die entsprechenden Parameter entgegennimmt.
Normalerweise würde man auch die einzelnen Member auf private setzen und get- und set-Methoden dazu implementieren (im Falle von Objekten, die im Konstruktor vollständig definiert weren, kann man auch gut auf die set-Methoden verzichten).
 

michi2

Bekanntes Mitglied
Sorry, ich bin's nochmal!
Ich hab's so gemacht wie du beschreiben hast, und kann es auch kommpilieren, aber nicht starten, bekomme:
Exception in thread "main" java.lang.ExceptionInInitializerError

In der Zeile:
Code:
     this( fp.xmin, fp.xmax, fp.ymin, fp.ymax, fp.farbe[ farbIndex]);
Was mach ich jetzt schon wieder falsch? *oops*
 

michi2

Bekanntes Mitglied
@admin: Sorry, Doppelpost bitte Löschen!

Er sagt das CFunkPlotter2.FP nich existiert, wie kann das sein?
Ich hab:
Code:
   public static CFunkPlotter2 FP =  new CFunkPlotter2("Funktionenplotter");
In der Haupt-Classe stehen!
 

Murray

Top Contributor
Ohne den Code zu kennen, ist das nur Spekulation. aber ich vermute mal, dass das Member farbe noch nicht initialisiert worden ist
 

michi2

Bekanntes Mitglied
Ist sie, aber das ist nicht das Problem: er sagt FP währe nicht initialisiert, ist es aber -> oben
 

AlArenal

Top Contributor
Einfach mal ein gutes Buch kaufen, indem die Themen Objektorientierung, sowie Klassen- und Package-Design behandelt werden. Dazu gibts auch ganz gute freie Bücher im Netz, sowie eine Reihe guter Artikel, auch in Bezug auf das Design eigener APIs.
 

michi2

Bekanntes Mitglied
AlArenal hat gesagt.:
Einfach mal ein gutes Buch kaufen, indem die Themen Objektorientierung, sowie Klassen- und Package-Design behandelt werden. Dazu gibts auch ganz gute freie Bücher im Netz, sowie eine Reihe guter Artikel, auch in Bezug auf das Design eigener APIs.
Was soll mir das bringen?

1)Ich kann Java-ich bin vorhin nur auf dem Schlauch gestanden!
2)Ich habe einige Bücher, in keinem darin finde ich einen Grund warum eine Variable dich ich schon initialisiert habe auf einmahl wieder nicht initialisiert ist
 

Murray

Top Contributor
Code:
public static CFunkPlotter2 FP =  new CFunkPlotter2("Funktionenplotter");
Code:
this( fp.xmin, fp.xmax, fp.ymin, fp.ymax, fp.farbe[ farbIndex]);

Du instanziiertst FP, derefrenzierst aber fp: da Java zwischen Groß- und Kleinschreibung untrescheidet, hat die eine Variable nichts mit der anderen zu tun.
 

michi2

Bekanntes Mitglied
Danke! Das ist es jedoch nicht! (fp==FP; heist nur in verschiedenen Code-Teilen anders)
Ich habe einen Logik-Fehler gemacht (muss wohl die Hitze sein - die macht mich ganz blöd):
Ich habe
Code:
public static CFunkPlotter2 FP =  new CFunkPlotter2("Funktionenplotter");
in der Haupt-Klasse aufgerufen.
im Konstruktor CFunkPlotter2(String) habe ich dan die Methode aufgerufen die FP benützt, das das Unsinn ist ist ja klar!

Danke für die Hilfe!

Alles gelöst - Threat abgehackt - Over and Out
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
N XPath Adressierung Java Basics - Anfänger-Themen 9

Ähnliche Java Themen

Neue Themen


Oben