Autor Beitrag
PrismaX
Hält's aus hier
Beiträge: 10


Embacadero RAD Studio 2010
BeitragVerfasst: So 09.10.11 19:51 
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 user profile iconNarses: BMP->PNG
Moderiert von user profile iconNarses: Topic aus Sonstiges (Delphi) verschoben am Mo 10.10.2011 um 10:40
Einloggen, um Attachments anzusehen!
Xion
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
EE-Maler
Beiträge: 1952
Erhaltene Danke: 128

Windows XP
Delphi (2005, SmartInspect), SQL, Lua, Java (Eclipse), C++ (Visual Studio 2010, Qt Creator), Python (Blender), Prolog (SWIProlog), Haskell (ghci)
BeitragVerfasst: Mo 10.10.11 07:03 
Dein Vorgehen ist etwas ungewöhnlich in meinen Augen.

Ich würde so vorgehen:

ausblenden 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)

_________________
a broken heart is like a broken window - it'll never heal
In einem gut regierten Land ist Armut eine Schande, in einem schlecht regierten Reichtum. (Konfuzius)
PrismaX Threadstarter
Hält's aus hier
Beiträge: 10


Embacadero RAD Studio 2010
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 744
Erhaltene Danke: 54

Win XP Pro, Win 7 Pro x64
Delphi 7, Delphi XE, C++ Builder 5, SAP R/3
BeitragVerfasst: 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:
ausblenden 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:
ausblenden 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;

_________________
Delphi: XE - OS: Windows 7 Professional x64

Für diesen Beitrag haben gedankt: PrismaX
PrismaX Threadstarter
Hält's aus hier
Beiträge: 10


Embacadero RAD Studio 2010
BeitragVerfasst: 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