AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Tutorials Interfaces + Factorys

Interfaces + Factorys

Ein Tutorial von stahli · begonnen am 29. Jan 2015 · letzter Beitrag vom 22. Feb 2015
Antwort Antwort
OlafSt

Registriert seit: 2. Mär 2007
Ort: Hamburg
284 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#1

AW: Interfaces + Factorys

  Alt 31. Jan 2015, 10:17
Hallo Olaf, freut mich, dass sich noch jemand auf meiner Ebene herum treibt...
ich schätze mal, in Sachen Interfaces bin ich kaum vom Boden hochgekommen Aber ich lerne gern und schnell dazu.

Zitat:
Also auf die Daten bin ich nur aus Zeitgründen nicht eingegangen (und weil ich es schon für so logisch und normal hielt )
Propertys, Getter und Setter definiert man im Interface genau so wie in der Klasse (man muss aber alles komplett definieren - es reicht also nicht, nur "property Value: Integer;" zu schreiben und in der Klasse dann zusätzlich Getter und Setter zuzuweisen).
Ich habe mal etwas gegoogelt und bin über einen alten Thread gestolpert. Da gehts dann so:

Delphi-Quellcode:
type
  ITest = interface
    function GetMyProp: Integer;
    procedure SetMyProp(Value: Integer);
    property MyProp: Integer read GetProp write SetProp;
  end;
Nun, in obigem Interface sind nun logischerweise Getter (GetMyProp), Setter (SetMyProp) und das Property selbst public . Ich kann die Methoden nicht verstecken, ergo können sie direkt aufgerufen werden. Wozu sind dann Properties überhaupt sinnvoll in Interfaces ? Darüber nachgedacht ist die Frage vermutlich genauso sinnvoll wie die Frage "Was war vor dem Urknall"... Aber lassen wir die Fachleute sprechen.

Zitat:
Mit dem Einbinden von DLL´s habe ich mich noch nicht befasst.
Dann hau mal rein n Schlag Programmierer lernen nie aus
  Mit Zitat antworten Zitat
Dejan Vu
(Gast)

n/a Beiträge
 
#2

AW: Interfaces + Factorys

  Alt 31. Jan 2015, 10:18
Nun, in obigem Interface sind nun logischerweise Getter (GetMyProp), Setter (SetMyProp) und das Property selbst public . Ich kann die Methoden nicht verstecken,
Doch. Machs einfach.
  Mit Zitat antworten Zitat
Benutzerbild von stahli
stahli

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

AW: Interfaces + Factorys

  Alt 31. Jan 2015, 10:34
Nun, in obigem Interface sind nun logischerweise Getter (GetMyProp), Setter (SetMyProp) und das Property selbst public . Ich kann die Methoden nicht verstecken, ergo können sie direkt aufgerufen werden. Wozu sind dann Properties überhaupt sinnvoll in Interfaces ?
Ich würde es so zusammenfassen: Die Klasse muss Getter und Setter haben, die müssen aber nicht öffentlich sein.
Bei Benutzung des Interfaces ist dann nur das Property erreichbar.

Ich bin darüber auch immer etwas stutzig geworden weil ja das Interface dann ggf. doch nicht vollständig benutzbar ist. Aber letztlich ist das ganz gut so.

Man muss halt schauen, dass die Klasse alle notwendigen Methoden auch wirklich öffentlich macht.


KORREKTUR:

Ich habe eben gesehen, dass meine Vögel die Methode FLIEG öffentlich deklariert haben, die Ente SCHWIMM aber versehentlich privat (hatte ich einfach nicht aufgepasst).
Benutzen konnte ich aber dennoch beide Methoden. Lediglich die Codevervollständigung hat die private Methode nicht angezeigt.
Also wären die Getter und Setter wohl auch erreichbar, aber nicht so ganz offensichtlich.
Miniaturansicht angehängter Grafiken
ifp1.jpg   ifp2.jpg   ifp3.jpg  
Stahli
http://www.StahliSoft.de
---
"Jetzt muss ich seh´n, dass ich kein Denkfehler mach...!?" Dittsche (2004)

Geändert von stahli (31. Jan 2015 um 10:55 Uhr)
  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: Interfaces + Factorys

  Alt 31. Jan 2015, 10:53
Nur mal so zum Nachdenken:

Ich habe eine public Property wo der Getter und Setter jeweils private deklariert sind.

Kann man dort eigentlich wirklich von private sprechen, denn der Zugriff ist eben über die Property direkt möglich. Ist es nicht eher aus kosmetischen Gründen so gedacht, diese Getter/Setter als private zu deklarieren, damit ich in der Codevervollständigung nicht das hier sehe
Delphi-Quellcode:
.Foo
.GetFoo
.SetFoo
Und was passiert bei einem Interface? Exakt das Gleiche, da werden die Getter/Setter nicht angezeigt. In der Codevervollständigung wird mir ausschließlich die Eigenschaft angezeigt, die Getter/Setter sind nicht direkt erreichbar.
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
Benutzerbild von DeddyH
DeddyH

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

AW: Interfaces + Factorys

  Alt 31. Jan 2015, 10:56
IIRC stimmt das so nicht ganz. Wenn man das Interface nutzt, zeigt zwar die Codevervollständigung Getter und Setter nicht an, sie lassen sich aber trotzdem direkt aufrufen. Das ist zwar Quark, aber wohl nicht zu ändern.
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
Benutzerbild von stahli
stahli

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

AW: Interfaces + Factorys

  Alt 31. Jan 2015, 10:58
Ihr habt beide Recht. Habe ich gerade auch noch festgestellt und korrigiert.
Stahli
http://www.StahliSoft.de
---
"Jetzt muss ich seh´n, dass ich kein Denkfehler mach...!?" Dittsche (2004)
  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
 
#7

AW: Interfaces + Factorys

  Alt 31. Jan 2015, 15:05
IIRC stimmt das so nicht ganz. Wenn man das Interface nutzt, zeigt zwar die Codevervollständigung Getter und Setter nicht an, sie lassen sich aber trotzdem direkt aufrufen. Das ist zwar Quark, aber wohl nicht zu ändern.
Und was ist technisch gesehen der Unterschied zwischen dem impliziten und expliziten Aufruf von Getter und Setter?

Aus welchen technischen Gründen werden bei Klassen die Getter/Setter idR nicht public deklariert?
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
Benutzerbild von stahli
stahli

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

AW: Interfaces + Factorys

  Alt 31. Jan 2015, 15:24
Technisch gesehen ist das natürlich gleich.
Aber wenn man sich erst neu mit Interfaces befasst kann halt etwas undurchsichtig sein und Einsteiger verstehen die Zusammenhänge nicht direkt.

Wenn man erst mal verstanden hat wie es läuft, dann kommt man damit allerdings zurecht - geht jedenfalls mir so.
Jedenfalls weiß ich jetzt, dass ich Getter und Setter deklarieren muss, mir die Codevervollständigung diese aber nicht andauernd unter die Nase reibt wenn sie privat sind.

Damit kann ich leben.
Stahli
http://www.StahliSoft.de
---
"Jetzt muss ich seh´n, dass ich kein Denkfehler mach...!?" Dittsche (2004)
  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
 
#9

AW: Interfaces + Factorys

  Alt 31. Jan 2015, 15:28
Das mit dem Getter/Setter muss ich doch schon ohne Interfaces verstanden haben und warum diese idR nicht als public deklariert werden. Dann versteht man auch warum es schnurz ist, wenn man doch darauf zugreifen kann (weil das technisch bedingt bei Interfaces so ist und nicht anders möglich ist).
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
Benutzerbild von DeddyH
DeddyH

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

AW: Interfaces + Factorys

  Alt 31. Jan 2015, 15:28
Wofür braucht man technisch gesehen überhaupt Sichtbarkeiten?
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
Antwort Antwort

Themen-Optionen Tutorial durchsuchen
Tutorial durchsuchen:

Erweiterte Suche
Ansicht

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:30 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