![]() |
Schon wieder: Warum Interfaces II
Dies ist die zweite Staffel eines
![]() Wie der TE damals weiß auch ich so halbwegs, was Interfaces sind, wie man sie konstruiert und wozu sie gut sein sollen. Ich weiß auch, dass die Beispiele, wozu Interfaces nützlich sind, aus Demonstrationsgründen meist so einfach gestrickt sind, dass man auch gut ohne sie klarkäme. Wie der TE höre ich immer feurige Beteuerungen, dass es ohne Interfaces nicht geht (vor allem, wenn man auf Nick Hodges hört), und wie er tue ich mich schwer, für mein eigenes Programm eine Stelle zu finden, wo Interfaces eine Verbesserung wären. Ich stelle gerade von ![]() ![]() |
AW: Schon wieder: Warum Interfaces II
JETZT geht es oft auch ohne sie, nachdem endlich, nach Jahrzehnten des Wartens, die Records erweitert wurden.
Im Grunde werden hier Interfaces "oft" nur dafür genutzt, damit Objekte automatisch freigegeben werden. In den NextGen-Compilern ala Android und iOS, gab es mit dem ARC auch dafür schon blöde eine Lösung, da ALLE Delphi-Objekte wie Interfaces behandelt wurden, und auch jetzt kann man mit den neuen Managed Records sowas überall im Delphi nutzen, also nun auch im Windows. Persönlich hab ich oft versucht ohne Interfaces auszukommen, vor allem um die doppelte Deklaration und zusätzliche Zwischenebene loszuwerden. |
AW: Schon wieder: Warum Interfaces II
Zitat:
Ja, die Referenzzählung. Aber das mache ich lieber selbst und das stört mich nicht. Bei der Referenzzählung gibt es auch Fallen, und dann kann man das gleich selbst erledigen. Was das mit Managed Records zu tun hat, habe ich nicht verstanden. Warum nicht Klasse und gut ist? |
AW: Schon wieder: Warum Interfaces II
Auch wenn viele Delphi-Entwickler das zu glauben scheinen ist der primäre Zweck von Interfaces nicht die Referenzzählung, sondern die Abstraktion. Einer Klasse oder Routine, die ein bestimmtes Interface erwartet, sind die konkrete Implementation und der konkrete Typ völlig egal. Das bedeutet, dass für die Nutzung auch keine bestimmte Klassenhierarchie eingehalten werden muss, es kann jede beliebige Objektinstanz übergeben werden, sie muss lediglich das Interface implementieren.
|
AW: Schon wieder: Warum Interfaces II
Die nicht notwendige Freigabe ist ein (ggf.) positiver Effekt von Interfaces.
Der Nachteil ist die doppelte Deklaration (den möchte ich mit meinem UnitOptimizer abstellen, so dass das automatisiert gemacht wird). Managed Records müssen nicht freigegeben werden. Wenn es nur um das Unterlassen der Freigabe geht, kann man jetzt diese benutzen. Dann hat man allerdings nicht so etwas wie Vererbung. Ein zweiter Wesentlicher Vorteil von Interfaces ist die Zuweisung von mehreren Interfaces zu einer Klasse. Man kann also "Fähigkeiten" definieren, die von unterschiedlichen Klassen erfüllt werden können. Alles, was "CanFly" unterstützt, kann man dann fliegen lassen. Egal ob Vogel, Biene oder Flugzeug. Diese Option hat man eben nur mit Interfaces. Ein Nachteil ist, dass sie deutlich langsamer sind und mehr Speicher brauchen als reine Objekte und Records. |
AW: Schon wieder: Warum Interfaces II
Zitat:
Ich bin mal böse: Umgekehrt, braucht keine interfaces wenn man Delphi nur dazu benutzt um Programme zusammenzubasteln. :twisted: |
AW: Schon wieder: Warum Interfaces II
@DeddyH: Ja, der primäre Zweck vom Erfinder, aber nicht der primäre Zweck warum es oft eingesetzt wird, denn da ist es oft nur die Referenzzählung,
und da kann man auch gut ohne auskommen. Also wenn das Interface nur innerhalb einer Komponente steckt, nur der Referenzzählung dient und wo der Unterbau auch nicht austauschbar ist. Zitat:
TStrings/TDataSet/TCollection/... Interface: erst wird der Vogel erfunden und anschließend das Fliegen als Gemeinsamkeit zwischen den verschiedenen Tieren/Maschienen dann geteilt Vererbung: erst erfindet man das Fliegen und baut daraus dann z.B. einen Vogel oder ein Flugzeug Nur bei Mehrfachvererbung und bei nachträglichen Erweiterungen hapert es dann etwas: TLebewesen -> TLaufen -> TFliegen -> TVogel oder TFlugzeug :?: |
AW: Schon wieder: Warum Interfaces II
und um nochmal auf das Thema zu kommen:
Zitat:
|
AW: Schon wieder: Warum Interfaces II
Zitat:
Bitte nochmal die Intention beachten, derentwegen ich den alten Thread auch nicht ausgegraben und reanimiert, sondern einen neuen eröffnet habe: Meine Bitte war, anhand von anspruchsvollem, realem Code konkret den Nutzen der dort verwendeten Interfaces aufzuzeigen und mir (und anderen) verständlich zu machen. Um Missverständnisse zu vermeiden: Es ist nicht meine Intention, gegen Interfaces zu stänkern. Ich glaube nicht, dass man sie eingeführt und sich viel Arbeit damit gemacht hätte, wenn sie nicht nützlich wären. Wie viele andere schaffe ich nur nicht den Sprung, für mich eine konkrete Anwendung für sie zu finden. Kann gut sein, mein Code ist dafür nicht anspruchsvoll genug, wäre völlig OK. Ich sehe aber auch bei AsyncCalls den Nutzen nicht, und hier wäre ein kompetenter Fingerzeig einfach sehr willkommen. |
AW: Schon wieder: Warum Interfaces II
Nur ein Anwendungsfall von vielen:
![]() |
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:33 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