![]() |
AW: Schon wieder: Warum Interfaces II
Zitat:
Das Konzept muss man einfach verstehen und anwenden, dann hat man recht schnell selbst den anspruchsvollen Code. Aber ein Beispiel, Du hast eine Klasse "XYZ", welche Daten eines Typs überprüft - sie kennt deren Struktur und Anforderungen. Diese Klasse (nennen wir sie auch einen Service), weiß nicht, was mit den Daten passiert, oder wo diese herkommen, bzw. gespeichert werden. Das wird durch andere Klassen erledigt. Zugriff auf diese Klassen wird Dir über Interfaces (Schnittstellen) erklärt. Wenn Du Daten lesen/speichern musst, dann holst Du Dir den gerade implementierenden Service heran und mittels der Schnittstelle kannst Du diese Daten laden und speichern. Dieses Klasse XYZ interessiert jetzt aber nicht, ob die Daten aus einer XML Datei kommen, einer Datenbank oder aus dem TKitchenSink. Wozu auch, evtl. willst Du dem Anwender die Auswahl dazu überlassen. Am Ende muss aber jede Implementierung die Methoden zum Laden und Speichern anbieten und fertig ist's. Und ein anderer Service implementiert die Verarbeitung der Daten (z.B. Druck, Darstellung, ...) und greift auf den Service (implementiert durch XYZ) zu. Dieser Service weiß jetzt, dass die Daten garantiert korrekt sind. Diesen interessiert nicht, wo diese herkommen, oder ob es diese überhaupt gibt. Aber wenn es diese gibt, dann sind die korrekt. Und wenn welche gespeichert werden sollen, dann wird sich XYZ schon darum kümmern, mich zu informieren, ob diese korrekt sind... Dazu verwendet man i.A. Interfaces. Referenzzählung, autom. Freigabe, etc. sind nette Extras, aber nicht der Grund. ...:cat:... |
AW: Schon wieder: Warum Interfaces II
Ein weiteres Stichwort wäre noch: Dependency Injection
Und: Unit Tests Inkl. Mocking ...:cat:... |
AW: Schon wieder: Warum Interfaces II
Es gibt halt ein paar bekannte Dinge, wo sie verwendet werden:
* automatische Speicherverwaltung gibt sich selbst frei, wenn nicht mehr benutzt * Austauschbarkeit, siehe sakura das Interface ist gleich, aber was runter ist, muß es nicht sein und dem Nutzer braucht es nicht zu interessieren z.B. ein Einstellungenspeicherinterface, was auf INI, CSV, Datenbank, Registrie, Webservice oder ... geht oder wo drunter je nach Zielsystem für Android/Linux/iOS/Windows/... die Behandlung anders ist * nachträgliche Verbindung z.B. das "einheitliche" Verhalten für datensensitive Komponenten zugreifbar machen TDBEdit und TDBCheckbox sind nicht voneinander vererbt, bzw. bekommen ihre Datenbindung erst am Ende ihrer Vererbungshierarchie * in Richtung COM-Interfaces (vermutlich der Ursprng der Delphi-Interfaces) da wird es und Anderem als Schnittstelle zu Objekten benutzt, welche sich außerhalb deines Programms befinden * ... |
AW: Schon wieder: Warum Interfaces II
Zitat:
|
AW: Schon wieder: Warum Interfaces II
Zitat:
Zitat:
Auf der anderen Seite geht es mir ja auch gar nicht darum, in die Tiefen dieser Units einzusteigen. Ich dachte halt, jemand sieht sich die Interfaces und die Implementierungen an und hat dann ein grobes Bild, unabhängig davon, was die Implementierung dann konkret macht. Ich kann mir auch vorstellen, dass ein lakonisches Fazit lautet: Kann man mit Interfaces machen, muss man nicht. Sir Rufo beispielsweise stand ja im Ruf, alles mit Interfaces zu machen, was bei Drei nicht auf dem Baum war. Für den Fall, dass jemand sagt: Schau mal, hier ist das Interface X, und da die Implementierungen A, B und C, und als Klasse wäre das nicht so einfach/günstig, dann wäre das für meinen Durchdringungsprozess toll gewesen. |
AW: Schon wieder: Warum Interfaces II
Zitat:
Zu Dependency Injection wegen unit tests gibt es im inet tonnenweise - leider kaum was für Delphi. (Da sind leider zu viele Basterler unterwegs.) Zitat:
|
AW: Schon wieder: Warum Interfaces II
@Benmik:
Interfaces sind sehr hilfreich, wenn ich Programmteile vor einander Verbergen will. Wenn ich Programmteile von einander möglichst stark logisch trennen will und zwar so starke das ich den einen Programmteil kompilieren kann ohnde das der andere überhaupt auf der Festplatte liegt. Sprich IInterface Nachfahren eignen sich zum definieren von Schnittstellen ohne das dabei Typ Abhängigkeiten entstehen. Beispiel wäre ein klassisches MVC oder MVP Entwurfsmuster. IVIEW könnte eine Windows-Oberfläche sein oder Userinterface das auf natürlicher Sprache basiert oder ein Proxy. Wer auch immer meine IVIEW entwickelt es kann mir total egal sein, weil ich einfach nur das Interface bediene. Es macht sinn! Ich weiß nicht ob das mit den neuen records auch funktioniert... aber ich habs immer mit interfaces gemacht! Außerdem braucht man Interfaces für Kompatibilität zu Windows Com-Objekten und natürlich für JNI. |
AW: Schon wieder: Warum Interfaces II
Zitat:
|
AW: Schon wieder: Warum Interfaces II
@Benmik
Das ist eigentlich normal. Irgendwann wird es "Klick" machen. Ab besten durch die Praktische Verwendung. Ich stelle Dir einfach mal eine Aufgabe: Erstelle insgesamt 100 Objekte von insgesamt 5 Klassen (direkt von TObject abgeleitet). Jede Klasse soll eine Eigenschaft Value haben. Eine vom Typ Boolean, String, Real usw. Die 100 Objekte sammelst Du in einer Liste. Die Liste übergibst Du einer Funktion Logging. In Logging rufst Du für jedes Objekt dessen Methode Log auf. In Log gibst Du den Wert aus Value immer als String aus. Zwei Besonderheiten: 1) Du darfst in Logging nicht die Objekte casten. 2) Du darfst die Objekte nicht freigeben und dennoch keinen Memoryleak erhalten. Man muss m.E. einfach damit arbeiten, um den Zweck zu verinnerlichen. Aber man muss es auch nicht erzwingen. Wenn sich Dir der Zweck (noch) nicht erschließt, dann brauchst Du es eben nicht. Immer wenn man Objekte castet, könnte das ein Indiz für die Sinnhaftigkeit von Interfaces sein. Man hat letztlich eher eine Funktionalität, mit der man arbeitet. Die Classen spielen dann nicht mehr die Rolle, sondern funktionelle Einheiten. Im obigen Beispiel ist das die Funktion "Log". |
AW: Schon wieder: Warum Interfaces II
Zitat:
Was dahinter vorgeht, geht mich nichts an. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:18 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