AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Delphi Interface richtig verstanden?

Interface richtig verstanden?

Ein Thema von EdAdvokat · begonnen am 3. Mai 2019 · letzter Beitrag vom 9. Mai 2019
Antwort Antwort
Seite 2 von 4     12 34   
Benutzerbild von stahli
stahli

Registriert seit: 26. Nov 2003
Ort: Halle/Saale
3.746 Beiträge
 
Delphi XE3 Ultimate
 
#11

AW: Interface richtig verstanden?

  Alt 4. Mai 2019, 18:48
Oh, zu viel der Ehre. Aber Danke.

In Deinem Projekt sind mir beim schnellen drauf schauen ein paar Dinge aufgefallen:

- OnCreate wird nicht aufgerufen. Die Ereignisbehandlung ist nicht richtig zugewiesen. (Musst Du mal zuweisen und einen Haltepunkt setzen.)
- Die Methoden Fahr und Flieg und Schwimm rufen sich selbst auf. Das führt zu einem Stack Overflow.
- Deine Klassen leitest Du manchmal von TInterfacedObject ab und manchmal von einer eigenen Basisklasse. Das ist nicht falsch, aber man muss sich immer genau überlegen, von was man ableitet, damit das dann zur Geschäftslogik passt.
- Supports kann noch mehr. Man kann eine eigene Variable dafür benutzen. Ich mache gern das so weil es m.E. übersichtlicher ist:
Delphi-Quellcode:
var
  lSchwimm: ISchwimm;

  if Supports(I, ISchwimm, lSchwimm) then
    lSchwimm.Schwimm;

Ich hoffe, das hilft noch etwas weiter...
Stahli
http://www.StahliSoft.de
---
"Jetzt muss ich seh´n, dass ich kein Denkfehler mach...!?" Dittsche (2004)
  Mit Zitat antworten Zitat
Rudy Velthuis

Registriert seit: 10. Sep 2011
Ort: Gelsenkirchen
42 Beiträge
 
Delphi 10.3 Rio
 
#12

AW: Interface richtig verstanden?

  Alt 4. Mai 2019, 19:11
Delphi-Quellcode:
var
  lSchwimm: ISchwimm;
Echt jetzt, lSchwimm und ISchwimm? Die sind ja kaum auseinander zu halten!

Dann schreibe doch wenigstens LSchwimm. Das ist besser lesbar.
Rudy Velthuis
  Mit Zitat antworten Zitat
Benutzerbild von stahli
stahli

Registriert seit: 26. Nov 2003
Ort: Halle/Saale
3.746 Beiträge
 
Delphi XE3 Ultimate
 
#13

AW: Interface richtig verstanden?

  Alt 4. Mai 2019, 19:17
"l" für lokal
Ich komme damit klar.
Stahli
http://www.StahliSoft.de
---
"Jetzt muss ich seh´n, dass ich kein Denkfehler mach...!?" Dittsche (2004)
  Mit Zitat antworten Zitat
Dennis07

Registriert seit: 19. Sep 2011
Ort: Deutschland
348 Beiträge
 
Delphi 10.2 Tokyo Enterprise
 
#14

AW: Interface richtig verstanden?

  Alt 4. Mai 2019, 19:29
"l" für lokal
Ich komme damit klar.
Mag sein, ist aber weder besonders zweckmäßig, noch konform mit den allgemeinen Style-Guidelines.
Dennis
  Mit Zitat antworten Zitat
Rudy Velthuis

Registriert seit: 10. Sep 2011
Ort: Gelsenkirchen
42 Beiträge
 
Delphi 10.3 Rio
 
#15

AW: Interface richtig verstanden?

  Alt 4. Mai 2019, 19:57
"l" für lokal
Ich komme damit klar.
"L" wäre auch für lokal und lesbar.

Und man schreibt nicht nur für sich selbst. Code sollte lesbar sein, damit auch andere ihn lesen können (oder du selbst, z.B. nach 6 Monaten).
Vor allem Code, den du ausdrücklich für andere schreibst (wie hier).

"Ich komme damit klar" ist sowas wie "auf meinem Rechner läuft's".
Rudy Velthuis
  Mit Zitat antworten Zitat
EdAdvokat

Registriert seit: 1. Mai 2016
Ort: Berlin
248 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#16

AW: Interface richtig verstanden?

  Alt 4. Mai 2019, 20:11
Hinweise 1-3 aus #11 habe ich abgeändert.
Den letzten Stabstrich verstehe ich nicht:
Zitat:
- Supports kann noch mehr. Man kann eine eigene Variable dafür benutzen. Ich mache gern das so weil es m.E. übersichtlicher ist:
markieren
Delphi-Quellcode:
var
  lSchwimm: ISchwimm;

  if Supports(I, ISchwimm, lSchwimm) then
    lSchwimm.Schwimm;
Sicher muss ich auch noch nicht alles verstehen, doch die ganze Sache hat mich in Fragen Interfaces doch ein kleines Stück weiter gebracht.
Nochmals Danke an alle Mitwirkenden
Norbert
  Mit Zitat antworten Zitat
Benutzerbild von stahli
stahli

Registriert seit: 26. Nov 2003
Ort: Halle/Saale
3.746 Beiträge
 
Delphi XE3 Ultimate
 
#17

AW: Interface richtig verstanden?

  Alt 4. Mai 2019, 21:01
Supports weist einfach das Ergebnis gleich der Variablen zu, mehr ist da gar nicht... (also intern wird sowas wie lSchwimm := (I as ISchwimm) gemacht)
Wenn Support False liefert, enthält die Variable NIL.

Das macht die Verwendung von Supports etwas übersichtlicher.
Stahli
http://www.StahliSoft.de
---
"Jetzt muss ich seh´n, dass ich kein Denkfehler mach...!?" Dittsche (2004)
  Mit Zitat antworten Zitat
TurboMagic

Registriert seit: 28. Feb 2016
Ort: Nordost Baden-Württemberg
411 Beiträge
 
Delphi 10.3 Rio
 
#18

AW: Interface richtig verstanden?

  Alt 5. Mai 2019, 08:43
"l" für lokal
Ich komme damit klar.
Das mag sein, aber hier muss ich mal doch Rudy zustimmen!
Man kann da sehr leicht was verwechseln...
  Mit Zitat antworten Zitat
Schokohase

Registriert seit: 17. Apr 2018
960 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#19

AW: Interface richtig verstanden?

  Alt 5. Mai 2019, 09:06
Damit es auch jeder versteht:

Das Problem ist, dass Klein-Ludwig fast genauso aussieht wie Groß-Ida. Ja es ist abhängig vom Font.
Zitat:
l vs I
Zumal man im Allgemeinen in Delphi die PascalCase Schreibweise für Variablen-Namen bevorzugt und nicht wie z.B. bei C# camelCase. Und bei PascalCase wird der erste Buchstabe immer groß geschrieben.

Warum das jetzt wohl PascalCase heißt und wo das historisch herkommt darüber darf ein jeder still vor sich hin sinnieren.

Das Problem ist also nicht das L sondern nur die Schreibweise als Kleinbuchstabe.
  Mit Zitat antworten Zitat
EdAdvokat

Registriert seit: 1. Mai 2016
Ort: Berlin
248 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#20

AW: Interface richtig verstanden?

  Alt 5. Mai 2019, 10:01
Ich komme nochmals auf das Projekt von Stahli zurück.
TVogel hat das Interface IFlieg und die diesem eigene procedure Flieg.
TStorch wurde von TVogel abgeleitet. Also sollte doch auch TStorch, ebenso wie TAdler auch die das Interface IFlieg
besitzen, doch weder TStorch noch TAdler haben die von IFlieg verlangte procedure Flieg.
Bisher bin ich davon ausgegangen, dass die abgeleiteten Klassen (TStorch und TAdler) sowohl die Eigenschaften der
Basisklasse (TVogel) als auch das dem TVogel zugeordnete Interfache IFlieg ebenso wie das TInterfacedObject erben.
Hab ich das ganze noch nicht richtig verstanden?
Norbert
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema 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 07:20 Uhr.
Powered by vBulletin® Copyright ©2000 - 2019, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2019 by Daniel R. Wolf