Klassen Objektkommunikation ohne konkrete Instanziierung

isomorph

Neues Mitglied
Aufgabenstellung:

Es soll ihre Aufgabe sein, eine Kommunikationsverbindung zwischen den beiden Klassen herzustellen, so dass ein Objekt der Klasse Quelle zur Laufzeit die Methode getResult( int zahl ) von einem Objekt der Klasse KonkretesZiel aufrufen kann. Dieser Aufruf sollte in dem konkreten Beispiel aus der Methode execute() erfolgen. Die Bedingung ist dabei, dass in der Klasse Quelle keine Instanz von der Klasse KonkretesZiel mit dem Befehl new unmittelbar erzeugt werden darf.

Gegebene Klassen:

Java:
public class Quelle {

public void execute( int arg ){

// Hier sollte die Methode getResult mit dem

// übergegebenen Wert der Variable arg

// aufgerufen werden

// ...

System.out.println("Das Ergebnis: " + "..." );

}

}

Java:
package org.bonn.se.übung1;

public class KonkretesZiel implements Ziel {

public String getResult( int zahl ){

}

}
Java:
package org.bonn.se.übung1;

public interface Ziel {

public String getResult( int zahl );

}

--

So, also ich sitze gerade an dieser Aufgabenstellung. Meine Java-Kenntnisse sind zu gering und ich versuche sie mit entsprechenden Aufgaben (FH) zu steigern. Dies ist eine Aufgabe aus einem meiner Kurse.
Meine erste Idee war static, jedoch harmoniert das nicht mit dem Interface (Eclipse sagt verboten).

Sollte die Lösung einfach sein, würde mir auch ein Stoß in die richtige Richtung sehr helfen. Ich finde mit meinem Wissen leider keinen Ansatz mehr...:rtfm:

MFG,
isomorph
 
N

nillehammer

Gast
Ich glaube, Reflection ist hier zu weit gegriffen. So wie ich den Sinn der Aufgabe verstehe, geht es hier einfach darum, dass man in der Klasse Quelle keine Abhängigkeit zu der Klasse KonkretesZiel haben soll. Es soll in der Klasse Quelle nur mit Referenzen vom Typ Ziel gearbeitet werden.

Die Referenz auf Ziel muss man der Instanz von Quelle irgendwie beibringen. Dazu gibt es zwei Möglichkeiten
- Übergabe als Konstruktorparameter und Speicherung in einer Instanzvariablen (sog. Constructor-Injection)
- Übergabe als weiteren Parameter der Methode execute (sog. Method-Injection)

Wenn Injection nicht gewünscht ist, gibt es noch eine dritte Möglichkeit. Die Klasse Quelle muss selbst die Referenz erzeugen. Da in diesem Fall new KonkretesZiel verboten ist, muss eine dritte Klasse programmiert werden, die sich um die Erzeugung von Ziel kümmert. So eine Klasse nennt man Factory und dementsprechend wäre ein guter Name für die Klasse "ZielFactory". Quelle ruft dann die (sinnvollerweise statische) Erzeugungsmethode der Factory auf.
 
Zuletzt bearbeitet von einem Moderator:
G

Gast2

Gast
Die Methoden Class.forName sowie Class#newInstance sollten für dich interessant sein.

EDIT:
Nach nochmaligem Lesen der Aufgabe ist nillehammer's Lösungsvorschlag wohl der richtigere Weg ;)
 

isomorph

Neues Mitglied
Ja das klingt sehr gut, vorallem das mit Factory. Ich denke diesen Weg peile ich an, da es im Software Engineering auch ein Factory Pattern gibt etc. Danke euch! Jetzt kann ich mir das erarbeiten, anstatt vor der Klausur an der Musterlösung zu verzweifeln :). Ihr werdet von mir hören hehe :toll::applaus:
 

Neue Themen


Oben