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
philharmony

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

AW: Problem mit Uses-Klausel

  Alt 16. Jan 2013, 15:21
Hmm nächstes Problem: meine 'TParkhaus' enthält eine 'Autos : TList', die nur die Pointer auf die verwendeten 'TAuto' enthält. Ich habe zwar eine procedure Parthaus.AddAuto(Name : String), und eine function Parkhaus.GetAuto : TAuto, allerdings kennt UnitMain ja nur 'Parkhaus' und kann dann zwar ein Auto hinzufügen, aber nichts mit dem ReturnValue von GetAuto vom Typ TAuto anfangen, richtig?
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

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

AW: Problem mit Uses-Klausel

  Alt 16. Jan 2013, 15:44
Richtig.
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
  Mit Zitat antworten Zitat
philharmony

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

AW: Problem mit Uses-Klausel

  Alt 16. Jan 2013, 15:59
Ich glaube, die Rupie hängt noch knapp über dem Boden fest:

Wenn 'TParkhaus' eine Property vom Typ 'TAuto' hat, dann kennt die MainUnit, die TParkhaus verwendet auch TAuto. Ist das richtig?
Dann könnte ich anstatt der GetAuto ja auch eine ArrayProperty mit Typ TAuto benutzen, die den entsprechenden Zeiger aus der TList zurückgibt. Kennt die MainUnit dann TAuto?
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

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

AW: Problem mit Uses-Klausel

  Alt 16. Jan 2013, 16:29
Damit die MainUnit die Klasse TAuto kennt, muss diese in irgendeiner der eingebundenen Units auch deklariert sein.
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
  Mit Zitat antworten Zitat
philharmony

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

AW: Problem mit Uses-Klausel

  Alt 16. Jan 2013, 16:53
Ok danke, ich denke ich habs. Ich bin noch von meiner Arbeit mit C ausgegangen, wo ein #include den gesamten damit eingebundenen Text inklusive aller dort vorhandenen #includes kennt.
  Mit Zitat antworten Zitat
Medium

Registriert seit: 23. Jan 2008
3.688 Beiträge
 
Delphi 2007 Enterprise
 
#6

AW: Problem mit Uses-Klausel

  Alt 16. Jan 2013, 18:16
Wichtiger Unterschied zu Includes: Diese werden quasi wie einkopierter Text behandelt (imho werden sie sogar genau das), während unter Units ein "semantischer" Zusammenhang besteht: Lediglich das, was in einer Unit explizit an Typen deklariert ist, ist nach aussen hin sichtbar, und die Sichtbarkeit erstreckt sich auch nur über genau eine Uses-Klausel, und wird über diese nicht an weitere "Unterbenutzer" weitergeleitet.
Delphi kennt unterdessen auch Includes. Hier aber nicht über ein Keyword, sondern eine Compilerdirektive ({$i Dateiname} wenn ich nicht irre, grad kein Delphi parat). Dabei wird dann ebenfalls nur der Inhalt von "Dateiname" an die Stelle kopiert, wo die Direktive steht. Ist keine gängige Praxis, und imho auch kein allzu astreiner Stil, in manchen Situationen aber sehr hilfreich. Bei dir bin ich aber der festen Überzeugung, dass sich das auch über ein geeignetes Klassendesign schöner lösen lässt.
"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
 
#7

AW: Problem mit Uses-Klausel

  Alt 16. Jan 2013, 19:48
Zitat:
Bei dir bin ich aber der festen Überzeugung, dass sich das auch über ein geeignetes Klassendesign schöner lösen lässt.
Definitv, bin grade dran, das Ganze ein wenig umzustricken. Das Projekt ist meine erste Baustelle in OOP, bisher hab ich in C nC Programmiert. Muss eben meine Denke erstmal auf OOP und Delphi umstellen.
Eine Frage hab ich dazu noch:

Ich habe also
Delphi-Quellcode:
uses UnitAuto;
type
 Parkhaus = class
  FAuto : TList;
  function GetAuto(Index : Integer) : TAuto;
  ...
  property Auto[index : integer] : TAuto read GetAuto;
 end;


//In der UnitMain
uses UnitParkhaus;
...
{1}
function meinAuto : TAuto;
begin
  result := Parkhaus.Auto[0];
end;

{2}
function AnzahlReifen : Integer;
begin
  result := Parkhaus.Auto[0].NReifen;
end;
Demnach geht {1} natürlich nicht, da UnitMain TAuto nicht kennt, wie vorhin schon klargestellt. Aber geht {2}?
Oder braucht es dazu eine
'function TParkhaus.GetNReifen(Index) : integer'?
  Mit Zitat antworten Zitat
Benutzerbild von JamesTKirk
JamesTKirk

Registriert seit: 9. Sep 2004
Ort: München
604 Beiträge
 
FreePascal / Lazarus
 
#8

AW: Problem mit Uses-Klausel

  Alt 17. Jan 2013, 07:41
Ist keine gängige Praxis, und imho auch kein allzu astreiner Stil, in manchen Situationen aber sehr hilfreich.
Das mit dem "keine gängige Praxis" trifft so aber auch eigentlich nur auf Delphi zu. In Free Pascal sind Includes vor allem in den Units der RTL und der anderen Basisunits ziemlich gang und gäbe. Vor allem erleichtern sie es plattformspezifischen Code zu haben ohne den Code mit zigtausend ifdefs zu zupflastern. Ein {$include platformspecific.inc} zusammen mit dem richtigen Include-Verzeichnis als Compilerparameter reicht hier

Und zudem bietet die Lazarus IDE auch eine bessere Unterstützung für Includes (eben genau wegen der oben genannten gängigen Praxis) als es Delphi hat.

Gruß,
Sven
Sven
[Free Pascal Compiler Entwickler]
this post is printed on 100% recycled electrons
  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 03:05 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