![]() |
AW: Schon wieder: Warum Interfaces
Hmm, ja stimmt auch wieder. :stupid:
Was sagt denn der TE "Exilant" mittlerweile zu dem Thema? Ist das alles jetzt etwas verständlicher? |
AW: Schon wieder: Warum Interfaces
Zitat:
![]() Das mit der "Verständlichkeit" war wie ich geschrieben hatte nicht so das Problem. Interfaces setze ich seit Ewigkeiten für die Office Atomation ein. Ausserdem kommuniziere ich hier mit OPC Servern (nicht UA) - das ist auch COM/DCOM und das klappt. Auch wenn die Programmierung von dem Zeugs eine Strafe ist. Ich suche/suchte ja nach dem Nutzen von Interfaces in eigenen Anwendungen. Und in denen verzichte ich natürlich auf COM/DCOM und DLLs solange ich es selbst in der Hand habe. Interfaces als wie Lemmy es sagt "logische oder zwingende Weiterentwicklung klassicher OOP" zu sehen: Da muss ich erstmal hinkommen. Ich denke das in einigen Beiträgen in diesem Thread echtes Gold steckt und mich die Nützlichkeit von Interfaces in eigenen Anwendungen jenseits von COM erkennen lässt. Ich werde lesen, testen und wieder lesen. Nochmal vielen Dank an alle. Ich werde mich bestimmt noch zu dem Thema melden sowie ich das hier durchgeackert habe. Ich denke da werden noch ein paar Dinge offen bleiben... |
AW: Schon wieder: Warum Interfaces
Freut mich. :-)
Ein bisschen kann man das vielleicht auch sehen wie die Sinnhaftigkeit der Trennung von Businesslogik und GUI. (Das werden ja hier alle Beteiligten für nützlich halten.) Interfaces trennen dann verschiedene Teile eines Moduls nochmal klarer voneinander ab und reduzieren noch weitere vorhandene Abhängigkeiten (und verbessern weiter die Übersichtlichkeit). |
AW: Schon wieder: Warum Interfaces
Zitat:
Delphi-Quellcode:
if Supports(Test, IIntf2, Intf2) then
Intf2.SomeMethod3; |
AW: Schon wieder: Warum Interfaces
Zitat:
![]() |
AW: Schon wieder: Warum Interfaces
Richtig, ich wollte ja nur zeigen, dass es so oder so geht, je nach persönlicher Vorliebe :)
|
AW: Schon wieder: Warum Interfaces
Zitat:
Code:
cu Ha-Jötype IBeweglich = interface end; TAuto = class(TSache,IBeweglich) end; TVogel = class(TLebendig,IBeweglich) end; TFortbewegung1=class(TAktion) public function begwege(was : TAuto) : Integer; overload; function begwege(was : TLebendig) : Integer; overload; end; TFortbewegung2=class(TAktion) function begwege(was : IBeweglich) : Integer; end; |
AW: Schon wieder: Warum Interfaces
Vielleicht findet man leichter Zugang zu dem Thema, wenn man sich parallel dazu Entwurfsmuster mal ansieht? z.b.
![]() Ein Klassiker für mich wäre eine Anwendung, die verschiedene "Datensenken" verfügbar machen möchte. Beispielsweise möchte man das Speichern in einer oder mehreren Datenbanksystemen möglich machen und/oder auch das Speichern als Plaintext, XML-File, CSV-Datei etc. Da bietet sich doch die Nutzung von Interfaces gerade zu an. |
AW: Schon wieder: Warum Interfaces
Hallo,
Zitat:
Zitat:
Zitat:
Zitat:
Eine Klasse besteht aus einer Schnittstelle und deren Implementierung. Eine Klasse kann die Schnittstelle zusammen mit deren Implementierung einer anderen Klasse erben. Und das Vererben der Implementierung ist OOP. Ein Interface ist somit quasi eine halbe Klasse, nämlich die Schnittstelle. Der Vorteil von OOP ist die Codereduzierung. Ohne OOP müsste man bei einem TNumberEdit größtenteils das komplette TEdit bis runter zu TObject nochmal neu implementieren. Mit OOP ist das nur eine klitzekleine Vererbung mit dem überschreiben einer virtuellen Methode. Interfaces bringen keine weitere Codereduzierung. Falsch eingesetzt erhöhen sie sogar die Menge an Code. Und hiermit stelle ich an die Interface-Prediger mal eine Aufgabe. Baut doch mal TNumberEdit, TEdit bis runter zu TObject Interface-like nach ohne Klassenvererbung und ohne die Klassen aus VCL/RTL einzusetzen. Aber bitte mit Implementierung. Mich würde mal interessieren wie das denn aussehen würde. Interface-Programmierung kann sich nicht zu OOP verhalten, weil sie teil dieser ist. Zitat:
Zitat:
Zitat:
Delphi-Quellcode:
ist OOP, wegen dem
programm Test;
uses System.SysUtils; var X: TBytes; begin X:= TEncoding.UTF8.GetBytes('Test'); end;
Delphi-Quellcode:
.
TEncoding.UTF8.GetBytes
Zitat:
Zitat:
Zitat:
Zitat:
Zitat:
Zitat:
Zitat:
Ich verwende auch Interfaces, aber sparsam. Bei mir ist das Verhältnis zwischen Interfaces und reiner Klassenvererbung gefühlt gleich dem in der VCL/RTL. Eigentlich benutze ich Interfaces nur da wo ich bei gemeinsamer Schnittstelle keine gemeinsame Vererbungslinie aufbauen kann. Für dieses Problem wünsche ich mir aber eine andere Lösung. Und jetzt mal ein Beispiel wie die andere Lösung aussehen müsste und wo Interfaces absolut nicht helfen.
Delphi-Quellcode:
einbeliebigername.
Type
TCustomLabeledControl<T: TControl>= class(T) strict private fLabel: TLabel; strict protected function GetLabelControlClass: TLabelClass; virtual; protected // Und viele override public constructor Create(AOwner: TComponent); override; procedure SetBounds(ALeft: Integer; ATop: Integer; AWidth: Integer; AHeight: Integer); override; // Und noch mehr override end; TLabeledEdit= class(TCustomLabeledControl<TEdit>); TLabeledComboBox= class(TCustomLabeledControl<TComboBox>); TLabeledMemo= class(TCustomLabeledControl<TMemo>); TLabeledRichEdit= class(TCustomLabeledControl<TRichEdit>); implementation constructor TCustomLabeledControl<T: TControl>.Create(AOwner: TComponent); begin inherited; fLabel:= GetLabelControlClass.Create(nil); // Oder auch Self wie man mag end; function TCustomLabeledControl<T: TControl>.GetLabelControlClass: TLabelClass; begin Result:= TLabeledControlManager.Instance.GetLabelControlClass(…); // Einen String, Enum, Self oder was auch immer passent ist übergeben end; procedure TCustomLabeledControl<T: TControl>.SetBounds(ALeft: Integer; ATop: Integer; AWidth: Integer; AHeight: Integer); begin inherited; fLabel.SetBounds(…); end; |
AW: Schon wieder: Warum Interfaces
Wenn ich das bisher richtig verstehe geht es bei Interfaces quasi vordergrundig um die Komprimierung des Codes.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:52 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