Seite 1 von 1

Keisreferenzen. Schlechter Stil?

Verfasst: Di 17. Feb 2009, 18:17
von salami
Hallo.
Sind "Kreisreferenzen" schlechter Stil?

Code: Alles auswählen

public class KlasseA {
	private KlasseB objekt;

	public KlasseA() {
		objekt = new KlasseB(this);
	}

	public Irgendwas getIrgendwas() {
		return ...;
	}
}

public class KlasseB {
	private KlasseA objekt;

	public KlasseB(KlasseA obj) {
		objekt = obj;
	}

	public void methode() {
		... = objekt.getIrgendwas();
	}
}
Sieht stilistisch nicht sehr sauber aus, aber ich bin bei der 2. Abschlussaufgabe an eine Stelle gekommen, wo das der einfachste Weg wäre ein Problem zu lösen.

Re: Keisreferenzen. Schlechter Stil?

Verfasst: Mi 18. Feb 2009, 06:44
von Thomas
sowas hab ich auch gemacht mir is nix anderes eingefallen wie man das sonst mit der print-methode hätte machen sollen...
da ich sowohl bei der spielklasse eine referenz der interface implementierungen brauche und bei den der implementierung die gleichzeitig schnittstelle ist brauch ich ne referenz zu der spielklasse -.-
naja sollte man vllt ma in der newsgroup nachfragen
also bei mir machen vor alem die konstruktoren ähnliche sachen die methoden hab ich glaub nich ganz so gemacht aba teilweise auch ähnliche sachen mit get...

Re: Keisreferenzen. Schlechter Stil?

Verfasst: Do 19. Feb 2009, 15:59
von salami
Danke, dann mach ichs auch so. Hab das Problem u.a. auch bei der print-Methode.

Re: Keisreferenzen. Schlechter Stil?

Verfasst: Mo 2. Mär 2009, 15:59
von Thomas
hm nochma zu den kreisreferenzen...
und zwar gibts dazu was neues aus der newsgroup:
man soll die spieler und bewerter objekte nicht in der spiellogik-klasse sondern in der main-shell klasse instanziieren. ich hab das jetzt so gelöst dass ich bei den implementierungen von evaluator und guesser für menschliche spieler ein attribut spielzustand spiel habe, dass ich bei der instanziierung null setze danach jeweils ein neues spielzustand-objekt erzeuge (alles in der shell halt) und dann mit einer setter methode das attribut der spieler bzw bewerter klasse neu setze
in code sieht dass dann z.b. so aus:

Code: Alles auswählen

SpielerMensch spieler = new SpielerMensch();
BewerterMaschine bewerter = new BewerterMaschine();
Spielzustand spiel = new Spielzustand(spieler, bewerter);
spieler.setSpielzustand(spiel);
es funktioniert auf jeden fall ma...