Forum: Algorithmen, Datenstrukturen und Klassendesign
by DeddyH,
21. Okt 2016
Das ist doch in meinem genannten Framework-Beispiel gar nicht meine Baustelle, sondern die des Anwenders. Und ich habe nie behauptet, dass man sich bei Verwendung von Interfaces keine Gedanken über die Klassenstruktur machen soll, das eine schließt doch das andere nicht aus.
Forum: Algorithmen, Datenstrukturen und Klassendesign
by DeddyH,
21. Okt 2016
Das würde ich so pauschal nicht stehen lassen, es kommt immer auf den Einzelfall an. Will ich z.B. eine Art Framework schreiben, dann sollte ich mir sehr genau überlegen, ob ich nicht lieber von Anfang an auf Interfaces setze, da wahrscheinlich die unterschiedlichsten Typen auf mich zukommen. Da wird es dann sehr schwer bis schlicht unmöglich, eine saubere Klassenstruktur hinzubekommen. Das...
Forum: Algorithmen, Datenstrukturen und Klassendesign
by DeddyH,
21. Okt 2016
Nach meinem Verständnis ist genau das der Sinn von Interfaces: Abstraktion. Angenommen, wir haben eine Klassenstruktur mit 2 Zweigen: TFoo und TBar. Wollen wir jetzt einer Methode eine Instanz als Parameter übergeben, welche wiederum eine Methode der übergebenen Instanz aufruft, und diese Instanz soll entweder TFoo oder TBar (oder eine Ableitung einer der beiden) sein, dann haben wir 3...
Forum: Algorithmen, Datenstrukturen und Klassendesign
by DeddyH,
20. Okt 2016
Richtig, ich wollte ja nur zeigen, dass es so oder so geht, je nach persönlicher Vorliebe :)
Forum: Algorithmen, Datenstrukturen und Klassendesign
by DeddyH,
20. Okt 2016
Ob ich nun Supports() aufrufen muss oder Dinge der Art
if MyObject is TDingens then
TDingens(myObject).Machwas;
, komfortabler wird es nicht.
Nachtrag: stahli hat Recht, man kann das übrigens auch anders formulieren.
Supports(Test, IIntf2, Intf2);
if Assigned(Intf2) then
Intf2.SomeMethod3;
Forum: Algorithmen, Datenstrukturen und Klassendesign
by DeddyH,
20. Okt 2016
Ich mache das normalerweise so:
type
IIntf1 = interface
procedure SomeMethod1;
procedure SomeMethod2;
end;
IIntf2 = interface
Forum: Algorithmen, Datenstrukturen und Klassendesign
by DeddyH,
20. Okt 2016
Eine goldene Regel dafür kenne ich auch nicht, aber je dynamischer (besonders im Hinblick auf die Klassentruktur) und/oder offener (im Hinblick auf externe Schnittstellen) ein Projekt wird, desto sinnvoller wird der Gebrauch von Interfaces IMO.
Forum: Algorithmen, Datenstrukturen und Klassendesign
by DeddyH,
20. Okt 2016
Und auch nur dann, wenn die erhöhte Abstraktion Sinn macht, und nicht, um irgendwie hipp zu wirken.
Forum: Algorithmen, Datenstrukturen und Klassendesign
by DeddyH,
20. Okt 2016
Ich hab mich auch 20 Jahre davor gedrückt, als ich mich aber vor Kurzem damit beschäftigt habe, war das eigentlich simpel zu verstehen.
Forum: Algorithmen, Datenstrukturen und Klassendesign
by DeddyH,
20. Okt 2016
Noch ein Vorteil: man kann seine Klassen quasi in einer Art Baukastenprinzip designen. Eine Klasse soll etwas bestimmtes können: entsprechendes Interface implementieren. Sie soll auch etwas anderes können: weiteres entsprechendes Interface implementieren. Auf Verwenderseite kann man dann einfach abfragen, ob ein Interface implementiert ist und dies dann nutzen.