Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
Ich habe eine Klasse Graph welche manchmal grosse Datenmengen halten kann.
Eine Klasse GrafischeDarstellung benötigt Zugriff auf diese Daten. Ich gebe also ein Graph als Parameter über den Konstruktor von GrafischeDarstellung weiter.
Java:
public class GrafischeDarstellung {
Graph graph;
GrafischeDarstellung(Graph graph) {
this.graph=graph;
}
}
Frage 1: macht das Sinn der Klasse GrafischeDarstellung so den Zugriff auf die Daten von Graph zu geben oder gibt es einen besseren Weg? Frage 2: wird in einer Instanz von GrafischeDarstellung jeweils eine Kopie oder eine Referenz auf die jeweilige Instanz von Graph gemacht? Spielt aus meiner Sicht eine Rolle für den Speicherplatz.
Zusatzfrage: wie würde ich es anstellen, damit effektiv eine Kopie erstellt wird? Müsste ich im Konstruktor von GrafischeDarstellung die Kopie des Parameters erstellen und dann dem Feld "graph" in GrafischerDarstellung zuweisen? so was wie :
Java:
public class GrafischeDarstellung {
Graph graph;
GrafischeDarstellung(Graph graph) {
this.graph=graph.kopieren();
}
}
(Methode kopieren würde ich in der Klasse Graph implementieren)
Ich würde sagen es kommt darauf an. Wenn du z.B. auf keinen Fall willst, daß 'GraphischeDarstellung' in 'Graph' irgendwelche Änderungen vornehmen kann, würde ich es nicht so machen.
Dann würde ich 'Graph' ein Interface 'DataPresentationer' mitgeben, das ausschließlich Lesemethoden enthält. Eine andere Möglichkeit wäre, daß 'Graph' auf Anfrage von 'GraphischeDarstellung' ein 'GraphModel' mit den enthaltenen Daten liefert.
Also eine Kopie müsstest Du selbst erzeuge. Dein Ansatz mit der Methode ist also vom Prinzip her richtig. Die Methode, die man da oft findet, ist clone() und es gibt auch ein Interface Clonable. Das ist aber ein Ansatz, der so eher unüblich ist, da dies im Bereich der Vererbung zu Problemen führen kann.
Die Implementierung, die daher gebräuchlicher ist, ist ein "Copy Constructor", also ein Konstruktor in Graph, der einen Graph als Parameter nimmt.
So wie @White_Fox aber auch schon etwas ausgeführt hat, sollte man überlegen, ob man dies wirklich benötigt.