AGB  ·  Datenschutz  ·  Impressum  







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

Problem mit Uses-Klausel

Ein Thema von philharmony · begonnen am 16. Jan 2013 · letzter Beitrag vom 17. Jan 2013
Antwort Antwort
Seite 1 von 3  1 23      
philharmony

Registriert seit: 17. Dez 2012
37 Beiträge
 
#1

Problem mit Uses-Klausel

  Alt 16. Jan 2013, 12:14
Hallo zusammen
Entweder ist hier ein Bug oder ich hab etwas doch noch nicht verstanden:

Ich habe mein Projekt in diverse Units aufgeteilt, um den Text übersichtlicher aufzuteilen.
Nun war ich bisher der Meinung, verstanden zu haben, wie sich die Uses-Klausel im Interface bzw. Implementation-Teil verhalten.
Nun ist aber ein Problem aufgetaucht, was mich an meinem Verständnis doch zweifeln lässt:

Ich hatte bisher eine Unit, nennen wir sie 'Autos', in der waren die die Klasse 'Auto', sowie die einzelnen Klassen 'Ford', 'Audi' und 'VW' mit allem drum und dran deklariert. Nun wurde mir das zu unübersichtlich, und ich wollte 'Ford', 'Audi' und 'VW' in jeweils eigene Units verschieben, und sie im Interface-Teil unter Uses zu 'Auto' hinzufügen.
Jetzt muniert aber die Unit 'Parkhaus', in die ich 'Auto' eingebunden habe, sie würde die Klassen 'Ford', 'Audi'... nicht finden.
Haut und Schlagt mich, aber bitte erklärts mir nochmal...
  Mit Zitat antworten Zitat
Benutzerbild von stahli
stahli

Registriert seit: 26. Nov 2003
Ort: Halle/Saale
4.343 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: Problem mit Uses-Klausel

  Alt 16. Jan 2013, 12:30
In Parkhaus musst Du Ford und Audi auch nochmal mit aufnehmen, da Parkhaus sonst wirklich nur Auto kennt.

Bei komplexeren Verschachtelungen muss man darauf achten, dass im Delphi keine zirkulären units verwendet werden können. Wenn A auf B zugreift und B auf A dann muss eine der Bezüge im Implementationsteil definiert werden.

Eine Möglichkeit, so etwas loser zu lösen sind Schnittstellen. Dann müssen die konkreten Klassen bzw. Units nicht unmittelbar bekannt sein.
Die Verwendung schon Schnittstellen macht aber zusätzlichen Aufwand. Je nach Projekt und Erfahrungen kann man diese aber nutzen.


EDIT: Oh! Lazarus! Dann muss das so nicht stimmen!
Stahli
http://www.StahliSoft.de
---
"Jetzt muss ich seh´n, dass ich kein Denkfehler mach...!?" Dittsche (2004)
  Mit Zitat antworten Zitat
philharmony

Registriert seit: 17. Dez 2012
37 Beiträge
 
#3

AW: Problem mit Uses-Klausel

  Alt 16. Jan 2013, 12:40
Hmm, das ist ja dann ungeschickt. Angenommen, jemand schreibt eine komplexere Komponente. Dann weiß der Endbenutzer doch gar nicht, was dafür alles verwendet wurde, sondern fügt auch nur die jeweilige Unit mit der Komponente ein. So hatte ich das eigentlich geplant, in C ging das immer. Mache ich hier nen MDF (Mega Denkfehler)?
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#4

AW: Problem mit Uses-Klausel

  Alt 16. Jan 2013, 12:47
Bei eine Komponente gibt es auch noch die Möglichkeit bestimmte Units automatisch einbinden zu lassen. Das passiert aber zur DesignTime und wird von der IDE gesteuert.

Klatscht man eine Komponente auf die Form und kompiliert (oder speichert), dann wird die uses Liste auf einmal erweitert um die fehlenden units für diese Komponente(n).

Ansonsten ja, da muss man wissen, welche Unit benötigt wird.
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
Medium

Registriert seit: 23. Jan 2008
3.686 Beiträge
 
Delphi 2007 Enterprise
 
#5

AW: Problem mit Uses-Klausel

  Alt 16. Jan 2013, 12:50
Es ist auch üblich, dass man nicht alles und jeden aus der Uses-Hierachie "vererbt". Das wäre ja ein heilloses Durcheinander im Scope der letztendlichen Programme! Normal ist, dass man seine Klassen/Komponenten so designed, dass man über diese und ihrer Unit alle nötigen Aufgaben mit ihr erledigen kann.

Edit: Okay, den Spezialfall den Sir Rufo nennt gibt es auch. Das habe ich bisher aber meist nur im Zusammenhang mit DBControls gesehen, und ich persönlich würde diese Praxis auf einem absolut notwendigen Minimum halten. Zumal die Uses-Klauseln dadurch alles andere als übersichtlicher würden.
"When one person suffers from a delusion, it is called insanity. When a million people suffer from a delusion, it is called religion." (Richard Dawkins)
  Mit Zitat antworten Zitat
philharmony

Registriert seit: 17. Dez 2012
37 Beiträge
 
#6

AW: Problem mit Uses-Klausel

  Alt 16. Jan 2013, 13:01
Verstehe ich das richtig:

Units 'Lenkrad', 'Reifen', 'Felge', 'Getriebe', ... werden in unit 'Auto' benötigt. Wenn Ich jetzt 'Auto' benutzen möchte, dann muss ich auch alle dafür benötigten Unter-Units immer mit einbinden?
  Mit Zitat antworten Zitat
Blup

Registriert seit: 7. Aug 2008
Ort: Brandenburg
1.464 Beiträge
 
Delphi 12 Athens
 
#7

AW: Problem mit Uses-Klausel

  Alt 16. Jan 2013, 13:07
Die Unit 'Parkhaus' muss die Klassen 'Ford', 'Audi' und 'VW' normalerweise auch nicht kennen.
Alle für Parkhaus benötigten Methoden und Eigenschaften sollten schon in der Basisklasse "Auto" deklariert sein. Die Implementierung der Methoden und die Werte der Eigenschaften können dann für jede abgeleitete Klasse unterschiedlich sein.

Wenn du auf Eigenschaften von Auto zugreifen möchtest deren Typen in 'Lenkrad', 'Reifen', 'Felge', 'Getriebe' deklariert sind, müssen die jeweiligen Units auch eingebunden werden.
  Mit Zitat antworten Zitat
Benutzerbild von stahli
stahli

Registriert seit: 26. Nov 2003
Ort: Halle/Saale
4.343 Beiträge
 
Delphi 11 Alexandria
 
#8

AW: Problem mit Uses-Klausel

  Alt 16. Jan 2013, 13:12
Nein, nur wenn Du auf aAuto.Lenkrad.Durchmesser zugreifen willst.
In dem Fall musst Du wissen, was ein Lenkrad ist und welche Eigenschaften das hat.

Alternativ kannst Du dem Auto aber auch eine Schnittstelle hinzufügen:
aAuto.Lenkraddurchmesser. Das könnte z.B. eine Funktion sein, die dann (intern) auf das Objekt TLenkrad zugreift.
Stahli
http://www.StahliSoft.de
---
"Jetzt muss ich seh´n, dass ich kein Denkfehler mach...!?" Dittsche (2004)
  Mit Zitat antworten Zitat
philharmony

Registriert seit: 17. Dez 2012
37 Beiträge
 
#9

AW: Problem mit Uses-Klausel

  Alt 16. Jan 2013, 13:28
Aaaah, ok jetzt fällt die Rupie. Dh wenn ich zur Klasse 'Auto' ne Funktion 'GetLenkradDurchmesser' einfüge, dann kann ich das "Tunneln". Danke
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#10

AW: Problem mit Uses-Klausel

  Alt 16. Jan 2013, 14:14
Also so ganz ist das ja nicht

Delphi-Quellcode:
unit AutoTeile;

interface

type
  TLenkrad = class
    property Durchmesser : integer;
  end;
Delphi-Quellcode:
unit Auto;

interface

uses
  AutoTeile;

type
  TAuto = class
    property Lenkrad : TLenkrad;
  end;
Delphi-Quellcode:
unit MyMainUnit;

interface

uses
  Auto; // kennt nur Auto

var
  MeinAuto : TAuto;

// und doch geht der Zugriff auf

MeinAuto.Lenkrad.Durchmesser
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 3  1 23      


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 07:19 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