Delphi-PRAXiS
Seite 1 von 3  1 23      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi uses im interface und implementation-Teil (https://www.delphipraxis.net/127553-uses-im-interface-und-implementation-teil.html)

mashutu 15. Jan 2009 11:29


uses im interface und implementation-Teil
 
Hi,

ich hatte gerade Streit mit einem Kollegen, der der Meinung ist man sollte unbedingt alle uses-Anweisungen, die nicht im Interface-Teil zwingend benoetigt werden, in den Implementation-Teil verschieben.

Ich persoenlich vermeide das vollstaendig und bislang kannte ich eigentlich auch nur Leute, die das ebenfalls gemieden haben wie der Teufel das Weihwasser.

Meine (zugegeben sehr wenigen) Argumente konnten ihn nicht ueberzeugen:

+ man baut (evtl. unbeabsichtigt) zirkulaere Bezuege auf
+ ist die Uses-Klausel nur an einer Stelle definiert sehe ich viel schneller und leichter, was da schon drin ist, als wenn ich an zwei Stellen suchen muss
+ durch zirkulaere Bezuege werden Unit-Tests schwerer zu handlen

Da gibt es doch aber noch mehr Argumente, warum man das nicht machen soll. Hat jemand Links oder Argumente?

Ich nehme auch Argumente an, die DAFUER sprechen, moeglichst viel im uses-Teil der Implementation unterzubringen (der Kollege behauptet es kompiliert dann schneller).

Danke im Voraus

mkinzler 15. Jan 2009 11:35

Re: uses im interface und implementation-Teil
 
Zitat:

+ man baut (evtl. unbeabsichtigt) zirkulaere Bezuege auf
Gerade andersrum, wenn du alles immer im Implementierungsteil einbindest verhinderst du das

QuickAndDirty 15. Jan 2009 11:42

Re: uses im interface und implementation-Teil
 
Du solltest nach Möglichkeit nur Units im Interface uses angeben die du da angeben musst.
Alles andere gehört in das uses des Implementationteil um zirkuläre Verknüpfungen zu vermeiden.

Tut mir leid dir das zu sagen aber der Kollege hat sowas von Recht. Ich würde mir einfach überlegen
wie du ihm deine Einsicht mitteilst und den Streit als Freunde beilegst.

Ansonsten es gibt Argumente dafür, Denkfaulheit zum Beispiel.

mashutu 15. Jan 2009 11:48

Re: uses im interface und implementation-Teil
 
Zitat:

Zitat von mkinzler
Zitat:

+ man baut (evtl. unbeabsichtigt) zirkulaere Bezuege auf
Gerade andersrum, wenn du alles immer im Implementierungsteil einbindest verhinderst du das

Das meine ich ja, wenn man immer alles im Interfaceteil einbindet, macht dich der Compiler schon auf den zirkulaeren Bezug aufmerksam.
Wenn man aber generell alles in den Implementation-Teil schiebt, dann bekommt man das u.U. gar nicht mit.

QuickAndDirty 15. Jan 2009 11:52

Re: uses im interface und implementation-Teil
 
Zitat:

Zitat von mashutu
Zitat:

Zitat von mkinzler
Zitat:

+ man baut (evtl. unbeabsichtigt) zirkulaere Bezuege auf
Gerade andersrum, wenn du alles immer im Implementierungsteil einbindest verhinderst du das

Das meine ich ja, wenn man immer alles im Interfaceteil einbindet, macht dich der Compiler schon auf den zirkulaeren Bezug aufmerksam.
Wenn man aber generell alles in den Implementation-Teil schiebt, dann bekommt man das u.U. gar nicht mit.

Hääää, die Typen sind doch dann bereits bekannt...also vollkommen unproblematisch... weist du eigentlich
was du da schreibst?

mkinzler 15. Jan 2009 11:53

Re: uses im interface und implementation-Teil
 
Der Fehler tritt nur auf wenn du die Units beidseitig im Interface-Teil einindest! Deshalb verhindert das Einbinden in der Implementierung genau das.

mashutu 15. Jan 2009 11:54

Re: uses im interface und implementation-Teil
 
Zitat:

Zitat von QuickAndDirty
Du solltest nach Möglichkeit nur Units im Interface uses angeben die du da angeben musst.
Alles andere gehört in das uses des Implementationteil um zirkuläre Verknüpfungen zu vermeiden.

Nein mit uses Anweisungen im Implementation-Teil werden zirkulaere Verknuepfungen erst moeglich. Ansonsten meckert schon der Compiler.

Zitat:

Zitat von QuickAndDirty
Tut mir leid dir das zu sagen aber der Kollege hat sowas von Recht. Ich würde mir einfach überlegen
wie du ihm deine Einsicht mitteilst und den Streit als Freunde beilegst.

Ansonsten es gibt Argumente dafür, Denkfaulheit zum Beispiel.

Ok, ich habe kein Problem damit einen Irrtum/Fehler hier oder meinem Kollegen gegenueber zuzugeben, aber was ist denn (ausser dem fuer mich nicht ueberpruefbaren Geschwindigkeitsvorteil) sonst noch ein Grund fuer deine Argumentation. Denkfaulheit ist wohl ein ebenso schwaches Argument wie mein Argument, dass ich nicht gerne an zwei Stellen im Quelltext suche.

mashutu 15. Jan 2009 11:58

Re: uses im interface und implementation-Teil
 
Zitat:

Zitat von mkinzler
Der Fehler tritt nur auf wenn du die Units beidseitig im Interface-Teil einindest! Deshalb verhindert das Einbinden in der Implementierung genau das.

Ich will zirkulaere Bezuege gaenzlich vermeiden und moechte daher, dass der Compiler den Entwickler auf diesen Misstand aufmerksam macht - das funktioniert aber nicht, wenn jeder alles in die uses-clause des Implementation-Teils schaufelt.

QuickAndDirty 15. Jan 2009 12:00

Re: uses im interface und implementation-Teil
 
Zitat:

Zitat von mashutu
Zitat:

Zitat von QuickAndDirty
Du solltest nach Möglichkeit nur Units im Interface uses angeben die du da angeben musst.
Alles andere gehört in das uses des Implementationteil um zirkuläre Verknüpfungen zu vermeiden.

Nein mit uses Anweisungen im Implementation-Teil werden zirkulaere Verknuepfungen erst moeglich. Ansonsten meckert schon der Compiler.

Ja, weil es vollkommen OK ist überkreuz oder zirkulär zu verweisen.

Es geht nur wegen des beschränkten Konzpets von Objekt-Pascal nicht im Interfaceteil.

taaktaak 15. Jan 2009 12:30

Re: uses im interface und implementation-Teil
 
Moin, Moin.

Die bisherigen Beiträge bringen mich als Laien-Programmierer doch sehr durcheinander. Die von mashutu im ersten Beitrag genannten Argumente halte ich für absolut zutreffend; sie entsprechen exakt meiner Denk- und Vorgehensweise!

Zirkuläre Bezüge können, auch wenn sie manchmal recht praktisch sind, letztendlich mehr Ärger machen als Nutzen bringen. Aufgrund eigener negativer Erfahrungen vermeide ich sie grundsätzlich. Daher kommt bei mir auch alles in den interface-Teil - weil ich, ebenso wie mashutu, ein Meckern des Compilers provozieren will. Allein dies ist für mich bereits Grund genug, genau diese Vorgehensweise zu wählen.

Die Aussage von mkinzler in Beitrag #2 - gilt sie noch? - ist doch vor dem Hintergrund des Grundgedankens "ich will, dass es knallt" nicht richtig. Nur mittels "verteilter" Angabe der uses im interface- und implementation-Abschnitt sind doch zirkuläre Bezüge möglich.


Alle Zeitangaben in WEZ +1. Es ist jetzt 12:58 Uhr.
Seite 1 von 3  1 23      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz