Methoden Methode ruft Methode auf, ruft Methode auf (mit Objekten)

Retrodoge

Mitglied
Hallo zusammen,
ich habe folgendes Problem, bei dem ich nur die letzte Methode nicht nachvollziehen kann. Folgende Situation: Ein Graph besitzt Knoten und Kanten.
Die Klasse Knoten sieht so aus(Konstruktor, Attribute und sonstiges lasse ich zur Übersichlichkeit weg):
Code:
public class Node {
//Kanten-Attribute

private ArrayList<Edge> incidentEdges;

//Konstruktor

public void addIncidentEdges(Edge e) {
        this.incidentEdges.add(e)
}
}


Eine Kante e wird als Parameter übergeben und der ArrayList (der Anzahl an verbundenen Kanten eines Knotens) übergeben. Der Knoten besitzt also eine Kante mehr.

Die Klasse Kante:
Code:
public class Edge {

//Attribute + Konstruktor

private Node startNode;
private Node endNode;

public void addEdgeToNodes() {

this.startNode.addIncidentEdge(this);
this.endNode.addIncidentEdge(this);
}
}

Mit this als Parameter wird das derzeitige Objekt der Klasse repräsentiert. In diesem Fall wird also eine Kante übergeben. Diese wird zur ArrayListe der Knoten startNode und endNode hinzugefügt. Bis hier hin glaube ich alles verstanden zu haben.

In der Klasse Graph habe ich nun folgende Methode:
Code:
public class Graph {

//Attribute + Konstruktor
for (Edge edge: edges) {
edge.addEdgeToNodes();
}
}

Wie kann ich mir das nun erklären? Kann das zu keinem sinnvollen Zusammenhang bringen.
Zusatzfrage: Kann man in solchen Fällen die Methoden ersetzten? Sprich kann man (zum Verständnis) schreiben: edge.this.startNode.addIncidentEdge(this). und diese Methode wiederum ersetzen zu: edge.this.startNode.this.incidentEdges.add(e) ?

Ich bedanke mich mal im Voraus. Wäre über jede Hilfe dankbar!
 
Wie kann ich mir das nun erklären?
Was denn eigentlich? Ich verstehe die Frage nicht. Ein Objekt der Klasse Edge kennt offenbar seine Knoten, die auf nicht gezeigte Weise gesetzt werden und bietet eine Methode an, mit der es sich diesen Knoten bekannt machen kann. Der Codeausschnitt macht das für alle Edge-Objekte, die in edges gespeichert sind.
Kann man in solchen Fällen die Methoden ersetzten? Sprich kann man (zum Verständnis) schreiben: edge.this.startNode.addIncidentEdge(this). ...
Nein, das ergibt keinen Sinn. Mit this spricht man das aktuelle Objekt an. Was soll edge.this denn sein? Wenn es von der Sichtbarkeit her möglich ist, könnte man es mit edge.startNode.addIncidentEdge(edge)machen. Es ist aber selten gut, von ausserhalb direkt auf Attribute einer anderen Klasse zuzugreifen.
 
Was denn eigentlich? Ich verstehe die Frage nicht. Ein Objekt der Klasse Edge kennt offenbar seine Knoten, die auf nicht gezeigte Weise gesetzt werden und bietet eine Methode an, mit der es sich diesen Knoten bekannt machen kann. Der Codeausschnitt macht das für alle Edge-Objekte, die in edges gespeichert sind.
Nein, das ergibt keinen Sinn. Mit this spricht man das aktuelle Objekt an. Was soll edge.this denn sein? Wenn es von der Sichtbarkeit her möglich ist, könnte man es mit edge.startNode.addIncidentEdge(edge)machen. Es ist aber selten gut, von ausserhalb direkt auf Attribute einer anderen Klasse zuzugreifen.

Ich verstehe den Code "edge.addEdgeToNodes()" nicht, da diese ja wieder eine Methode aufruft. Mir ist nicht klar, wie da eine Kante zu dem Knoten hinzugefügt werden soll. Dies geschieht ja bereits in der Methode addIncidentEdges.
Edge wird ja auch nicht als Parameter übergeben.
 
Edge kennt zu Anfang die beiden Knoten die sie verbindet, aber der Knoten noch nicht die Kante.
In #addEdgeToNodes soll deshalb Kante in den beiden Knoten, die sie verbindet, eingetragen werden.
Dazu ruft die Kante auf den Knoten #addIncidentEdge auf, und übergibt sich selbst.
 
Okay danke ich glaube ich hab es verstanden. Also Beispiel:
Kante 1 verbindet Knoten A und B miteinander. Die (Klasse) Kante 1 muss somit wissen: "Mein" Startknoten ist A und Endknoten ist B. Die (Klasse) Knoten A und B müssen die Kante 1 kennen/hinzugefügt werden.

Kante1.addEdgeToNodes() bedeutet also, dass Kante 1 sich selbst übergibt und jeweils zu den Kanten von Startknoten(Knoten A) und Endknoten (Knoten B) hinzugefügt wird?!
 

Neue Themen


Zurück
Oben