Zitat von
DGS:
Moi.
Ich hatte das Wochenende vorgehabt Programm schön OO zu machen, was fehlgeschlagen ist.
Genauer gesagt, Circular Reference ist mein Problem.
Verschiebend er
Unit in die implementation funktioniert nicht, da ich die Komponenten im interface verwende.
....
Hallo,
folgendes
Unit-Modell vermeidet einige Fallstricke von vornherein:
1. es gibt i.A. eine Main-
Unit mit der Hauptform der Anwendung.
2. Funktionen wie Einlesen einer Datei, Bearbeiten usw. werden zumindest ab einem bestimmten Umfang ausgelagert in eigene Units, besonders wenn sie eine eigene Form haben. Diese Units werden in der Main-
Unit als uses meist im Interface deklariert, da sie von dieser ja benutzt werden (von wem sonst); manche brauchen auch Funktionen aus der Main-
Unit, dann wird diese als uses im Implementationsteil der Sub-
Unit deklariert.
3. Datentypen für das Programm werden oft an vielen Stellen benutzt und sind daher Ursache für Zirkularreferenzen; diese lagere ich von vornherein aus in eine "general"-
unit, was dazu noch den Vorteil hat, dass alle solche Typdefinitionen an einer Stelle versammelt sind. Diese
Unit ist überall in Interface als uses deklariert. Zweckmässigerweise werden hier auch generell benötigte Funktionen untergebracht wie etwa Umwandlungen zwischen den Typen oder eine allgemeine Status-Ausgabe; diese wird zwar auf die Main-
Unit zugreifen müssen, aber im Implementation-Teil, macht also nix.
Datentypen können durchaus auch Klassen mit Methoden sein - eine Klasse, die wirklich nur einen Datentyp implementiert, hat keinen logischen Grund auf die MainForm zuzugreifen (zumindest nicht im Interface, und auch in Implementation ist es schlecht programmiert).
Mir ist bisher kein Fall unterlaufen, auch nicht bei mehr als 100 000 Zeilen Source, der sich damit nicht widerspruchsfrei aufbauen liess.
Gruss Reinhard