Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Algorithmen, Datenstrukturen und Klassendesign (https://www.delphipraxis.net/78-algorithmen-datenstrukturen-und-klassendesign/)
-   -   Wo interface angeben bei virtual abstract? (https://www.delphipraxis.net/211840-wo-interface-angeben-bei-virtual-abstract.html)

freimatz 9. Nov 2022 15:31


Wo interface angeben bei virtual abstract?
 
Delphi-Quellcode:
type
  IBlub = interface
    ['{986DD1F9-802B-4262-BBAD-10772F0844BC}']
    procedure Bla;
  end;

  TBlubBase = class(TInterfacedObject, IBlub)
    procedure Bla(); virtual; abstract;
  end;

  TBlub1 = class(TBlubBase)
    procedure Bla(); override;
  end;

  TBlub2 = class(TBlubBase)
    procedure Bla(); override;
  end;
Gegeben sei obiger Code. Nun meinte jemand, es wäre besser das Interface IBlub erst bei Ableitungen anzugeben die es auch implementieren (statt alles abstract).
Was meint Ihr? Falls auch warum?

Neutral General 9. Nov 2022 15:42

AW: Wo interface angeben bei virtual abstract?
 
Ich denke dass ist von Fall zu Fall unterschiedlich. Beides kann Sinn machen.

stahli 9. Nov 2022 15:43

AW: Wo interface angeben bei virtual abstract?
 
Meine Meinung:

Wenn Du das Interface als Fähigkeit ansiehst, die die Klasse unterstützt (ein besserer Name wäre z.B. "ICanBlub"), wird klar, dass es egal ist, auf welcher Basis die Klasse aufgebaut wird. Sie muss eben nur die Fähigkeit haben.
Also solltest Du die Klassen so aufbauen, wie es für Deine Klassenstrukturen günstig ist.
Wie die Interface-Methoden genau implementiert werden ist völlig egal.

jaenicke 10. Nov 2022 08:01

AW: Wo interface angeben bei virtual abstract?
 
Eine abstrakte Methode sollte in einer abgeleiteten Klasse immer konkret implementiert werden. Insofern kann das Interface in der Basisklasse angegeben werden, da man davon ausgehen kann, dass die Methode immer aufgerufen werden kann.

Wenn man dies sicherstellen möchte oder die abstrakte Methode nicht in allen abgeleiteten Klassen benötigt und daher auch nicht implementiert, sollte man das Interface erst in den abgeleiteten Klassen hinzufügen.

himitsu 10. Nov 2022 09:18

AW: Wo interface angeben bei virtual abstract?
 
oder mehrere in Interfaces aufteilen (voneinander abgeleitet oder nicht)
und dann ohne Abstract (und auch Virtual ist da nicht unbedingt nötig) das jeweilige Teil-Interface erst hinzufügen, wenn es diese Methode gibt.

freimatz 10. Nov 2022 11:42

AW: Wo interface angeben bei virtual abstract?
 
Kathinka rulez :lol:
Danke für alle Antworten, insbesondere an Sebastian, dessen Antwort am ehesten meiner Frage entsprach.

In dem konkreten Falle werde ich es wohl so lassen. Es geht da um Strategien die alle in der gleichen unit vorliegen wie auch die Fabrikklasse welche diese erzeugt.

Stevie 10. Nov 2022 16:19

AW: Wo interface angeben bei virtual abstract?
 
Falls es sich hier um high performance Code handeln sollte - unbedingt dies beachten.

freimatz 11. Nov 2022 05:54

AW: Wo interface angeben bei virtual abstract?
 
Danke für den Hinweis - interessant.
Ist bei uns soweit ich es einschätze nicht so releavnt. Anwender bekommen das Programm in Win64. Die Entwicklung geht soweit möglich in 32-Bit, da der Debugger in 64-Bit bei uns oft nicht funktioniert.


Alle Zeitangaben in WEZ +1. Es ist jetzt 09:06 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz