AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Uses: Interface vs. Implementation Section

Ein Thema von Martin W · begonnen am 16. Dez 2011 · letzter Beitrag vom 22. Dez 2011
Thema geschlossen
Seite 1 von 2  1 2      
Benutzerbild von sx2008
sx2008

Registriert seit: 15. Feb 2008
Ort: Baden-Württemberg
2.332 Beiträge
 
Delphi 2007 Professional
 
#1

AW: Uses: Interface vs. Implementation Section

  Alt 19. Dez 2011, 04:39
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 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

* 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.
 
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.379 Beiträge
 
Delphi 12 Athens
 
#2

AW: Uses: Interface vs. Implementation Section

  Alt 19. Dez 2011, 08:30
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.
Ein Therapeut entspricht 1024 Gigapeut.

Geändert von himitsu (19. Dez 2011 um 08:34 Uhr)
 
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.659 Beiträge
 
Delphi 12 Athens
 
#3

AW: Uses: Interface vs. Implementation Section

  Alt 19. Dez 2011, 08:33
IIRC gab es die "implementation"-uses-Klausel schon unter Delphi 1.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
 
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.379 Beiträge
 
Delphi 12 Athens
 
#4

AW: Uses: Interface vs. Implementation Section

  Alt 19. Dez 2011, 08:36
IIRC gab es die "implementation"-uses-Klausel schon unter Delphi 1.
Worbei Delphi ja nicht der Anfang war.
Lang lebe Turbo Delphi Pascal.

Man könnte ja mal den Herrn Wirth fragen, was er sich dabei dachte.
Ein Therapeut entspricht 1024 Gigapeut.
 
Benutzerbild von uligerhardt
uligerhardt

Registriert seit: 19. Aug 2004
Ort: Hof/Saale
1.749 Beiträge
 
Delphi 2007 Professional
 
#5

AW: Uses: Interface vs. Implementation Section

  Alt 19. Dez 2011, 08:46
Man könnte ja mal den Herrn Wirth fragen, was er sich dabei dachte.
Gar nix - such mal hier nach "unit". Bzgl. seiner späteren Schöpfungen kannst du mal hier schauen. Da war das Modul-Konzept wohl etwas anders als bei Borland.
Uli Gerhardt
 
Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.659 Beiträge
 
FreePascal / Lazarus
 
#6

AW: Uses: Interface vs. Implementation Section

  Alt 19. Dez 2011, 18:22
Vielleicht gab es ja anfangs nur die obere Uses-Klausel?
Definiere Anfang!

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
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector
 
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.379 Beiträge
 
Delphi 12 Athens
 
#7

AW: Uses: Interface vs. Implementation Section

  Alt 19. Dez 2011, 18:48
Wurden in TP Units (deren Deklarationen) denn durchgereicht?

In Delphi machen die das ja nicht.
Ein Therapeut entspricht 1024 Gigapeut.
 
brechi

Registriert seit: 30. Jan 2004
823 Beiträge
 
#8

AW: Uses: Interface vs. Implementation Section

  Alt 19. Dez 2011, 21:53
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.
 
Benutzerbild von sx2008
sx2008

Registriert seit: 15. Feb 2008
Ort: Baden-Württemberg
2.332 Beiträge
 
Delphi 2007 Professional
 
#9

AW: Uses: Interface vs. Implementation Section

  Alt 20. Dez 2011, 00:08
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 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.
Der ModelMaker Tools Unit dependency analyzer ist als Standalone Freeware-Anwendung verfügbar. Einfach mal testen...
 
Furtbichler
(Gast)

n/a Beiträge
 
#10

AW: Uses: Interface vs. Implementation Section

  Alt 20. Dez 2011, 06:41
Eins vorneweg: Ich verwende den Uses-Clause Manager (Shift-Alt-U) von GExperts! Damit habe ich keine Ausrede mehr, es sei zu anstrengend, die Uses-Abschnitte aufzuräumen.

Packt ihr dann bei einem neuen Formular erstmal alle Units in den Implementationsteil die nicht benötigt werden?
Die Units, die im Deklarationsteil des Formulars benötigt werden, packt Delphi ja schon von sich aus in den Interface-Teil. Darum muss ich mich also nicht kümmern. Der Rest kommt in den Implementation-Teil.

Und wenn ihr überprüfen wollt ob eine Unit schon eingebunden ist schaut ihr immer in beiden Uses Bereichen nach?
Nein, ich lass den Compiler gegen die Wand fahren und binde die fehlende Unit nach Bedarf ein.
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?
Dafür gibt es GExperts.

Warum erzeugt Delphi alle benötigten Units immer im Interfacebereich?
Na weil sie dort gebraucht werden.

...denke ein "richtig" gibts nicht, es hat beides Vor- und Nachteile.
Nenne mir Nachteile, wenn man seinen Code aufräumt. Wenn etwas an einer bestimmten Stelle nicht benötigt wird, dann gehört es dort nicht hin. Units, die im Interface-Abschnitt nicht referenziert werden, gehören dort hin? So so. Das muss mir einer erklären. Mit dem gleichen Argument kann ich lokale Variablen als private Felder deklarieren und private Felder gleich als public. Stört doch nicht und ist praktisch, weil, wenn man die später doch mal an anderer Stelle benötigt, hat man sie gleich. Und, ach, das ist mir zu viel Mühe, immer drauf zu achten, das jedes Objekt so nah wie möglich an seiner Verwendung deklariert ist.

Aber es gibt auch das KISS-Prinzip.
'Simple' heißt nicht: 'An einer Stelle'. Oder deklarierst du alle Variablen auch 'an einer Stelle'. Weil, is ja 'KISS'

Zitat:
Das es ein Tool dafür gibt, ist kein Grund diese Funktionalität zu nutzen.
Aber ein Indiz dafür, das es jenseits des eigenen Horizonts noch andere Argumente gibt.

Zitat:
Fazit: Aufgrund der Lesbarkeit (alles an einer Stelle ist übersichtlicher)
Ist es nicht. Wie schon gesagt, dann gilt das auch für Variablen.

Ihr immer mit euren zirkulären Referenzen: Wenn ihr davor Angst habt, dann lernt doch einfach, eure Units so zu bauen, das das nicht passiert. Ich mach mir doch meinen Code nicht unleserlich ('alles an einer Stelle') nur weil ich keinen Plan habe, wie ich zirkuläre Referenzen vermeiden kann.
 
Thema geschlossen
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:19 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