Einzelnen Beitrag anzeigen

angos

Registriert seit: 26. Mai 2004
Ort: Rheine
549 Beiträge
 
Delphi 11 Alexandria
 
#20

AW: Uses: Interface vs. Implementation Section

  Alt 20. Dez 2011, 07:33
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.
Ok, wenn sich dass tark auf die Geschwindigkeit beim Kompilieren auswirkt, ist das natürlich ein Argument. Das konnte ich bis jetzt noch nicht feststellen, habe allerdings die Software auch auf verschiedene Exen/DLLs verteilt. Der Kompiliervorgang liegt immer unter 5 Sekunden.

Zitat:
Nebenargumente:
* Es gibt in der objekt-orientierten-Programmierung das Prinzip des Information hiding.
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
Ja kann man so sehen. Aber es gibt auch das KISS-Prinzip. Ich habe aus diesem Grund die Information lieber an einer Stelle.

Zitat:
* Es gibt z.B. das Freeware Tool Icarus.
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.
Das es ein Tool dafür gibt, ist kein Grund diese Funktionalität zu nutzen. Durch das Tool habe ich nichts gewonnen. Nur weil jemand etwas tut, muss das nicht richtig sein

Zitat:
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?
Siehe oben.

Zitat:
* Man schaue sich mal diese Seite von ModelMakerTools an.
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.
Magst du den dadurch entstehenden Nachteil einmal erläutern?


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ß
Ansgar

Geändert von angos (20. Dez 2011 um 07:37 Uhr)