![]() |
AW: Uses: Interface vs. Implementation Section
Anscheinend gibt es hier zwei entgegengesetzte Meinungen, ich bin gleicher Meinung wie "Furtbichler".
Wenn es richtig wäre alle Units im Interface-Abschnitt einzubinden warum besteht dann überhaupt die Möglichkeit die Uses-Klausel im Implementation-Abschnitt zu benützen? Ich glaube ja nicht, dass die Entwickler von Delphi unnötige Sprachfeatures erfunden haben sondern dass "himitsu" hier falsch liegt. Hauptargument: * wenn man eine Unit im Implementation-Abschnitt einbindet hilft dies dem Compiler weil er bei Änderung der Unit weniger kompilieren muss und interne Symboltabellen kleiner werden Bei grossen Projekten mit Hunderten von Units kann das einen grossen Unterschied ausmachen, denn wenn jede Unit direkt oder indirekt die Symboltabelle jeder anderen Unit benötigt dann ist das ein quadratischer Zusammenhang. Nebenargumente: * Es gibt in der objekt-orientierten-Programmierung das Prinzip des ![]() Verberge soviel wie möglich von der inneren Struktur. Mache alles privat mit Ausnahme der Dinge die öffentlich sein müssen. Das kann man so auch auf die Sichtbarkeitmachung der Abhängigkeiten der verschiedenen Units anwenden * Es gibt z.B. das ![]() Es zeigt nach einer Analyse des Sourcecodes nicht nur unbenützte Units an, sondern zeigt auch die Units, die man vom Interface- in den Implemenation-Abschnitt verschieben kann. Die Programmierer von Icarus haben sich bestimmt sehr gründlich mit dem Unitkonzept von Delphi auseinandergesetzt und bieten hier bestimmt keine sinnlose Funktion an. |
AW: Uses: Interface vs. Implementation Section
Vielleicht gab es ja anfangs nur die obere Uses-Klausel?
Die Andere wurde später eingebaut, als man merkte, daß es sonst, bei Kreuzreferenzen, unüberwindbare Hindernisse bibt. Ich hab einfach die Erfahrung gemacht, daß man sich mit "unnötigen" Units, in der Implementation, einige nette und vorallem nicht leicht nachvollziehbare Initialisierungsreihenfolgeprobleme einfangen kann, welches es nicht gäbe, wenn Diese alle im Interface lägen. |
AW: Uses: Interface vs. Implementation Section
IIRC gab es die "implementation"-uses-Klausel schon unter Delphi 1.
|
AW: Uses: Interface vs. Implementation Section
Zitat:
Lang lebe Turbo Delphi Pascal. :cheer: Man könnte ja mal den Herrn Wirth fragen, was er sich dabei dachte. :gruebel: |
AW: Uses: Interface vs. Implementation Section
|
AW: Uses: Interface vs. Implementation Section
Zitat:
Ich hatte es mir zu TP Zeiten angewöhnt alles ins die Implementation zu packen, da damit ein verstecktes "Durchreichen" von Units vermieden wurde. In jeder Unit standen also alle benützten Units. (Ausnahme: im Interface genutzte Units) Gruß K-H |
AW: Uses: Interface vs. Implementation Section
Wurden in TP Units (deren Deklarationen) denn durchgereicht?
In Delphi machen die das ja nicht. |
AW: Uses: Interface vs. Implementation Section
Packt ihr dann bei einem neuen Formular erstmal alle Units in den Implementationsteil die nicht benötigt werden? Und wenn ihr überprüfen wollt ob eine Unit schon eingebunden ist schaut ihr immer in beiden Uses Bereichen nach? Und Falls dann mal in einem Formular eine Unit im Objekt/Formular benötigt wird kopiert ihr die immer aus dem Implementationsteil in den Interfaceteil? Warum erzeugt Delphi alle benötigten Units immer im Interfacebereich? Fragen über Fragen :)
Ich mach es wie Himitsu, in den Implementationsbereich kommen nur Units mit Kreuzreferenzen. Darf aber jeder machen wie er will, denke ein "richtig" gibts nicht, es hat beides Vor- und Nachteile. |
AW: Uses: Interface vs. Implementation Section
Hier sind noch zwei Argumente:
* schaut doch einfach mal nach wie das Uses Thema im Sourcecode der VCL gehandhabt wird. Sind dort alle benötgten Unit immer im Interface-Abschnitt eingebunden? Nein? Woran könnte das liegen? * Man schaue sich mal ![]() Man sieht, dass es direkte und indirekt benützte Units gibt. Wenn man Units im Interface-Abschnitt einbindet, dann wird die Abhängigkeit weitergegeben, was man nach Möglichkeit vermeiden sollte. Der ![]() |
AW: Uses: Interface vs. Implementation Section
Zitat:
Zitat:
Zitat:
Zitat:
Zitat:
Und zu vorherigen Posts: Wie schon gesagt wurde, zirkuläre Referenzen als Grund zu nennen, ist ein Kontra-punkt. Fazit: Aufgrund der Lesbarkeit (alles an einer Stelle ist übersichtlicher) und um gar nicht erst durch einen Fauxpas zirkuläre Referenzen zu implementieren, die ich nachher wieder korrigieren muss, würde ich auch zukünftig weiter alles im interface deklarieren. Gruß |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:32 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz