![]() |
Vererbung bei Interfaces - Gut oder schlecht?
Liste der Anhänge anzeigen (Anzahl: 1)
Ich habe kein konkretes Problem zu lösen. Wir haben zwei verwandte Themen die sich aber eher mit Problemlösungen bzw. Syntax beschäftigen:
Mir geht es um folgendes, sprach-unabhängig: Interfaces erben von anderen Interfaces. Ist das gut oder schlecht? Stevie führt eigentlich schon eine super Argumentation ins Feld: Zitat:
Ich finde nun bei mir bsp. in einem View eine Interface-Vererbung (Bild im Anhang): Ein Typ
Delphi-Quellcode:
soll visualisiert werden. Dazu gibt es das Interface
IMeinTyp
Delphi-Quellcode:
mit der Methode
IMeinTypAnzeiger
Delphi-Quellcode:
. Zusätzlich kann man aber eventuell in so einem View noch eine bestimmte Eigenschaft des Typs hervorheben, dafür gibt es das abgeleitete Interface
displayMeinTyp(IMeinTyp)
Delphi-Quellcode:
. Ich finde das spontan gar nicht so übel.
IMeinTypAnzeigerMarkable
Ich finde das mit dem Beispiel "IReadable / IWritable" oder "IWalkable / IFlyable" nicht nicht mehr erschlagbar, denn ich kann nichts markieren, wenn ich den Typ nicht vorher visualisiert habe. Die Vererbung ist für mich stimmig. Was sind eure Meinungen? |
AW: Vererbung bei Interfaces - Gut oder schlecht?
Interfaceverergung bringt, meiner Meinung nach, nur etwas, wenn das nachvolgende interface die Funktionen "erzwinkt", welche im Vorgänger enthalten sind.
Also daß das nächte Interface immer automatisch das Erste "einbindet". > Achtung, wenn das der erste Interface nicht "explizit" in der Klasse eingebunden wurde, dann kann man nicht auf das Erste casten. Und kann kann ohne Cast im zweiten Interface auf Funktionen des Ersten zugreifen. Es wird auch gern verwendet, wenn man neue Versionen eines Interfaces einführt, wo diese Interfaces zusammenhängen, welche auf einander aufbauen. (siehe OTA) Ist ja nicht so, daß die Vererbung nur für den Compiler ist ... man kann den Code damit auch "dokumentieren", also die Abhängikeiten. Das letzte UND nutze ich gern aus, um bei Property die Getter/Setter vor der Codevervollständigung zu verstecken. In Interfaces ist ja leider alles public.
Delphi-Quellcode:
type
IMyIntfIntern = interface function Getter: Integer; // Diese werden von delphis Codevervollständigung nicht angezeigt, wenn es die Funktionen/Property des IMyIntf auflistet, procedure Setter(i: Integer); // obwohl Sie das eigentlich machen sollte, aber ich hoffe die reparieren es nicht (nicht ohne private bei Interfaces zu erlauben). end; IMyIntf = interface(IMyIntfIntern) [GUID] property Value: Integer read Getter write Setter; end; |
AW: Vererbung bei Interfaces - Gut oder schlecht?
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:
Siehe Anhang: |
AW: Vererbung bei Interfaces - Gut oder schlecht?
Hatte sowas zuerst im TDE benutzt (glaub ich), aber ich dachte ich hätte es im XE3 auch noch gesehn ... könnte aber sein, daß es nur eine alte Erinnerung war.
Nja, wenn man den Code als Dokumentation nutzt, dann kann es immernoch nicht schaden, wenn man Unwichtiges aus dem Blickfeld entfernt, aber das sollte eine Region auch schaffen. |
AW: Vererbung bei Interfaces - Gut oder schlecht?
In den oben zitierten Threads ging es, soweit ich nach einem kurzen Überfliegen mein Gedächtnis auffrischen konnte, um Mehrfachvererbung. Dies ist bei dir nicht der Fall.
Für mich sieht dein Ansatz eher nach dem ![]() |
AW: Vererbung bei Interfaces - Gut oder schlecht?
Hm...
- Vererbung sollte man *immer* mit Bedacht einsetzen. Das ist wie ne Kettensäge. Richtig eingesetzt sehr hilfreich. Falsch eingesetzt gefährlich. Wenn man vererbung macht, sollte man einen guten Grund dazu haben. - Vererbung unter Interfaces ist nicht per se schlimm. Aber sie ist seltenen sinnvoll. - Häufig ist Vererbung unter Interfaces schlecht, weil sie Klassen, die Interface A implemenmtieren, zwingt, auch Interface B zu implementieren, was rein logisch betrachtet oft nicht nötig oder sinnvoll ist. Deshalb gibt es das ![]() - DAs bringt uns noch zu was ganz anderem: Interfaces sind kein Selbstzweck. Sie sind *nur* dann sinnvoll, wenn es auch Variablen gibt, die mit dem Interface-Typ deklariert werden. Wenn du keine einzige Variable vom Typ IMyFancyInterface hast, sondern nur davon ableitest, ist das Interface schon falsch, weil wertlos. Es ist zusätzlicher Code, den keiner braucht. Ob das in deinem Fall so ist, kann ich nicht beurteilen, aber mir drängt sich diese Befürchtung auf. - die Beziehung zum Decorator sehe ich momentan nicht mfg Christian |
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:58 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 by Thomas Breitkreuz