AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi uses im implementation bzw. interface wann?
Thema durchsuchen
Ansicht
Themen-Optionen

uses im implementation bzw. interface wann?

Ein Thema von OG Karotte · begonnen am 22. Apr 2007 · letzter Beitrag vom 22. Apr 2007
Antwort Antwort
OG Karotte
(Gast)

n/a Beiträge
 
#1

uses im implementation bzw. interface wann?

  Alt 22. Apr 2007, 10:19
Hallo zusammen,
wer erklärt einem Hobbyprogrammierer die richtige Verwendung bzw. den Unterschied der uses-Klausel im implementation bzw. im interface Teil einer Unit. Sprich wann verwende ich was...

Bislang kenne ich nur den Fall, das man dadurch zwei Units gegenseitig nutzen kann. Aber ist das schon alles???
  Mit Zitat antworten Zitat
Benutzerbild von FAlter
FAlter

Registriert seit: 21. Jul 2004
Ort: Ostfildern
1.096 Beiträge
 
FreePascal / Lazarus
 
#2

Re: uses im implementation bzw. interface wann?

  Alt 22. Apr 2007, 10:33
Hi,

du solltest Units nur so nutzen, wie du sie benötigst. Brauchst du sie also nur im Implementation-Abschnitt, so solltest du sie dort deklarieren.

Beispiel:
Delphi-Quellcode:
...

implementation

uses
  inifiles;

procedure TForm1.FormCreate(Sender: TObject);
var
  Ini: TIniFile;
begin
  Ini := TIniFile.Create(...);
  try
    ...
  finally
    Ini.Free;
  end;
end;
Wenn du sie jedoch bereits im Interface-Abschnitt (für Typdeklarationen oder globale Variablen) benötigst, so muss sie dort hinter uses einfügen:

Delphi-Quellcode:
unit MyGrasphic;

uses
  SysUtils, Graphics;

type
  EMyGraphic = class(Exception); //Exception aus SysUtils
  TMyGraphic = class(TGraphic) //TGraphic aus Graphics
  ...
  public
    procedure foo;
  end;

interface

uses
  MyGraphicConsts;

procedure TMyGraphic.Foo;
begin
  raise EMyGraphic.CreateFmt(StrEMyGraphicFoo, ['bar']);
    //StrEMyGraphicsFoo aus MyGraphicConsts nur hier benötigtbenutzt
end;

...
Übrigens gibts da ein Tool (Bei Google suchenIcarus Uses List Analyzer), dass deine uses-Liste überprüft und die empfdehlungen ausgibt, ob du eine Unit überhaupt benötigst oder ob du sie nach implementation verschieben kannst...

Mfg
FAlter
Felix Alter
  Mit Zitat antworten Zitat
OG Karotte
(Gast)

n/a Beiträge
 
#3

Re: uses im implementation bzw. interface wann?

  Alt 22. Apr 2007, 11:19
Hallo Felix,
aber wo ist denn nun der grundlegende Unterschied ob interface oder implementation.

Rein theoretisch könnte ich doch alle Units immer im interface unterbringen oder wirkt sich das später auf Größe und/oder Performance der Anwendung aus, wenn ich sie grundsätzlich im implementation unterbringe???
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.858 Beiträge
 
Delphi 11 Alexandria
 
#4

Re: uses im implementation bzw. interface wann?

  Alt 22. Apr 2007, 11:27
http://www.delphipraxis.net/internal...t.php?t=107895
Markus Kinzler
  Mit Zitat antworten Zitat
Reinhard Kern

Registriert seit: 22. Okt 2006
772 Beiträge
 
#5

Re: uses im implementation bzw. interface wann?

  Alt 22. Apr 2007, 11:33
Zitat von OG Karotte:
Hallo Felix,
aber wo ist denn nun der grundlegende Unterschied ob interface oder implementation. :gruebel:

Rein theoretisch könnte ich doch alle Units immer im interface unterbringen oder wirkt sich das später auf Größe und/oder Performance der Anwendung aus, wenn ich sie grundsätzlich im implementation unterbringe??? :gruebel:
Nein, der Unterschied ist eben nur, dass ein Uses im Implementation-Abschnitt nicht zu einer Kollision bzw. gegenseitigem Bezug führen kann (das kennst du ja schon), da bist du also auf der sicheren Seite. Allerdings machen es die meisten aus Bequemlichkeit nicht so, aber deswegen ist der Rat von Felix noch lange nicht schlecht. Es geht um die "Sichtbarkeit" von Deklarationen, und man sollte grundsätzlich nichts in einem weiteren Bereich sichtbar machen als notwendig wegen der Risiken und Nebenwirkungen.

Gruss Reinhard
  Mit Zitat antworten Zitat
Benutzerbild von TonyR
TonyR

Registriert seit: 17. Jun 2006
Ort: Bautzen
503 Beiträge
 
FreePascal / Lazarus
 
#6

Re: uses im implementation bzw. interface wann?

  Alt 22. Apr 2007, 11:43
Zitat von Reinhard Kern:
Nein, der Unterschied ist eben nur, dass ein Uses im Implementation-Abschnitt nicht zu einer Kollision bzw. gegenseitigem Bezug führen kann ...
Genau, genau... und nun nur nochmal ne andere Quelle, nämlich die von dsdt.info haben sich da bei Positionen der uses-Klausel auch Gedanken gemacht
http://www.dsdt.info/grundlagen/sprache/units.php
Es ist unmöglich, witzig zu sein ohne ein bisschen Bosheit. Die Bosheit eines guten Witzes ist der Widerhaken, der ihn haften lässt. - Georg Christoph Lichtenberg
  Mit Zitat antworten Zitat
OG Karotte
(Gast)

n/a Beiträge
 
#7

Re: uses im implementation bzw. interface wann?

  Alt 22. Apr 2007, 11:53
Danke für Links und Antworten / Ausführungen

Somit ergibt sich: implementation und interface dienen "nur" der Aufhebung / Umgehung von zirkulären Bezügen, haben keine Auswirkung auf die Größe / Performance der Anwendung, dienen aber dem Programmierer zur Unterstützung bezüglich der Lesbarkeit des Quellcodes (und helfen somit Fehler zu vermeiden).

(Schade, hatte insgeheim gehofft, das sich da noch mehr hinter verbirgt ...)
  Mit Zitat antworten Zitat
Reinhard Kern

Registriert seit: 22. Okt 2006
772 Beiträge
 
#8

Re: uses im implementation bzw. interface wann?

  Alt 22. Apr 2007, 12:17
Zitat von OG Karotte:
Danke für Links und Antworten / Ausführungen

Somit ergibt sich: implementation und interface dienen "nur" der Aufhebung / Umgehung von zirkulären Bezügen, haben keine Auswirkung auf die Größe / Performance der Anwendung, dienen aber dem Programmierer zur Unterstützung bezüglich der Lesbarkeit des Quellcodes (und helfen somit Fehler zu vermeiden).

(Schade, hatte insgeheim gehofft, das sich da noch mehr hinter verbirgt ...)
Na das ist doch eine Menge... du solltest dich mit dem Konzept der Sichtbarkeit mehr vertraut machen, in anderen Sprachen als "NameSpaces" eingeführt. Interface und Implemetation regeln die Sichtbarkeit in gleicher Weise wie Prozedur-Kopf und Prozedur-Rumpf: Der Prozedurkopf ist das, was für andere Programmteile (bzw.Programmierer) sichtbar ist, entsprechend Interface. Die Details im Prozedur-Rumpf (Implementation) sind dagegen anderweitig nicht sichtbar und so können lokale Variablen auch keine Nebenwirkungen haben.

Gruss Reinhard
  Mit Zitat antworten Zitat
Muetze1
(Gast)

n/a Beiträge
 
#9

Re: uses im implementation bzw. interface wann?

  Alt 22. Apr 2007, 13:19
Ausserdem gibt es noch einen anderen Unterschied: Beim compilieren durchläuft der Compiler beim auflösen einer Unit primär erstmal die Uses Liste im Interface Abschnitt und geht die Units wiederrum durch. Desto mehr Units im Interfaceabschnitt stehen (wahrscheinlich sogar unnötig), dann parsed er diese auch unnötigerweise. Von daher ist es schon bei grossen Projekten (> 2 Millionen Codezeilen) beim Compilieren merklich zu spüren.
  Mit Zitat antworten Zitat
Antwort Antwort


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 08:39 Uhr.
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