Announcement

Collapse
No announcement yet.

Vorwärtsdeklaration von Klassen

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Vorwärtsdeklaration von Klassen

    Ich suche nach einer Möglichkeit einer Vorwärtsdeklaration von zwei Klassen, die in zwei getrennten Units implemetiert sind:

    type TGroupList = class;

    TGroup = class (TObject)

    GroupList : TGroupList;

    end;

    TGroupList = class (TObject)

    List : array of TGroup;

    end;

    Dies ist das Verfahren, wie es, gemäß meiner Literatur zu Object-Pascal, möglich ist. Die zwei Klassen ermöglichen mir die Erstellung einer Gruppenhierachie, wie ich sie dann z.B. in einem TreeView darstellen kann.
    Da jedoch beide Klassen, sowohl TGroup als auch TGroupList in der TGroup-Instanzen verwaltet werden, eine ganze Menge von Member-Prozeduren und -Funktionen enthalten, würde ich gerne diese zwei Klassen in zwei getrennten Units erstellen. Das Problem ist, daß Object-Pascal die Vorwärtsdeklaration einer Klasse: "TGroupList = class;" nur dann erlaubt, wenn die Klasse noch im selben "Type"-Abschnitt deklariert wird. Zumindest habe ich noch keine Möglichkeit gefunden, wie es anders gehen könnte.

    Von C++ her (Watcom-C++-Compiler), habe ich häufig mit deratigen Konstrukten gearbeitet, und war froh über die Art der Modularisierung meiner Projekte, die u.a. durch eben deartige Verfahrensweisen ermöglicht wurden.

    Es wäre daher meiner Arbeit mit Object-Pascal sehr dienlich, falls es eine Möglichkeit gibt, trotz Vorwärtsdeklaration mit mehreren Units arbeiten zu können.

    Danke für Hinweise,
    T. Frost

  • #2
    Nein gibt es nicht. Ich habe schon einige C/C++ Sourcen in PASCAL transliert und bin froh das es eine solche "pseudo"-Modularisierung in PASCAL nicht gibt. Meines Erachtens erschwert das die Lesbarkeit/Logische Begreifbarkeit einer Source extrem. Dies noch kombiniert mit Class-UNIONS und davon abgeleitet mixed Class-Templates, ist dann die Krönung

    Generell besteht ja das Konzept/Erfolg vom PASCAL ja darin SEHR STARK restriktioniert zu sein. Die oben erwähnte "Limitation" trägt also dazu bei strukturierter zu programmieren.
    Das ändert aber nichts an der Tatsache das es immer wieder Ausnahmen gibt die dann in PASCAL unelegant umgesetzt werden müssen !!

    Gruß Hage

    Comment


    • #3
      Hi

      Ein Ansatzpunkt ist die Definition Deiner Strukturen als ABSTRAKTES Klassenmodell in einer Basisunit, also mit minimal-implementationen. In weiteren Units können dann abgeleitete Klassen vollständig definiert werden. Eine weitere Möglichkeit ist sich vom Classmodell zu verabschieden und zu Interface-Modellen zu wechseln.

      Gruß Hage

      Comment

      Working...
      X