Entwickler-Ecke
Delphi Language (Object-Pascal) / CLX - [OOP] Klassen verknüpfen -- Problem (Entwicklung v. Graph)
PrismaX - So 09.10.11 19:51
Titel: [OOP] Klassen verknüpfen -- Problem (Entwicklung v. Graph)
Hallo,
ich möchte einen Graph (Datenstruktur) mit Hilfe von Pointern und OOP realisieren.
Ich habe auch schon eine wage Vorstellung wie die einzelnen Klassen des Graphs aussehen sollten (d.h. TKnoten, TKante etc), allerdings stehe ich vor einem Problem nämlich wie ich die Verbindungen der Klassen untereinander programmiere (noch nicht so viel gearbeitet mit OOP).
UML-Diagramm im Anhang
Danke im Vorraus
Moderiert von
Narses: BMP->PNGModeriert von
Narses: Topic aus Sonstiges (Delphi) verschoben am Mo 10.10.2011 um 10:40
Xion - Mo 10.10.11 07:03
Dein Vorgehen ist etwas ungewöhnlich in meinen Augen.
Ich würde so vorgehen:
Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9:
| Graph: - array of TKnoten; //alle Knoten des Graphen
TKnoten: - array of TKante //alle Kanten, die von diesem Knoten wegführen
TKante: - Nach: TKnoten //Ziel der Kante (- Von : TKnoten //Start ist der Knoten, zu dessen Array diese Kante gehört ) |
Das ganze heißt Adjazenzlistendarstellung. Viele Wegfindungsalgorithmen eignen sich für diese Darstellung (z.B. Dijkstra)
PrismaX - Mo 10.10.11 12:01
Hmmm... Also die Erstellung eines Graphen über ne Adjazenzmatrix habe ich ja schon programmiert. Mir ginge es eher darum ob es möglich ist das Ganze Objektorientiert und dynamisch zu programmieren.
Dabei habe ich mir eben diese Klassen ausgedacht nur überschneiden sich ja die Aggregation und Assoziation bei TKnoten und TKante (siehe Anhang) und mir fällt nicht ein wie ichs so hinbekomme dass ich trotz dieser beiden Beziehungen die Units funktionsfähig implementieren kann.
Horschdware - Mo 10.10.11 13:09
Dein Problem ist der Kreuzbezug zwischen den Klassen TKnoten und TKante. Gehen wir mal der Einfachheit halber davon aus, dass beide in der gleichen Unit definiert sind, dann gibt folgendes einen Fehler:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7:
| TKnoten = class private k : TKante; end;
TKante = class private n : TKnoten; end; |
, da bei Deklaration von TKnoten die benötigte Klasse TKante noch unbekannt ist.
Das lässt sich lösen, wenn man erst einmal eine der beiden Klassen im Vorfeld namentlich bekannt macht und die tatsächliche Deklaration hinten anstellt. Siehe:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9:
| TKante = class;
TKnoten = class private k : TKante; end;
TKante = class private n : TKnoten; end; |
PrismaX - Mo 10.10.11 15:02
Vielen Dank!
Ich werd die jetzt wahrscheinlich nicht in zwei Units realisieren aber ersteinmal hilft mir das gut weiter.
Wer noch eine Lösung für zwei Units hat kann sie gerne schreiben ;), ist aber nicht mehr so wichtig.
LG PrismaX
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!