Also mich interessiert die Frage ja auch brennend. Ich habe noch nie wirklich einen überzeugenden Grund gefunden, der was "Wieso" beschreibt.
Ich würde unheimlich gerne mit Interfaces arbeiten und habe auch schon das eine oder andere Mal meine Klassen mit einem Interface aufgebaut. Aber oft sehe ich einfach nicht die Notwendigkeit. Ich arbeite nie im Team sondern immer alleine. Somit muss ich mit niemandem meinen Code teilen.
Aktuell habe ich ein Projekt, bei dem ich eine Schnittstelle nach außen bringen muss. Hierzu programmiere ich mehrere DLLs. Dort bieten sich Interfaces natürlich extrem gut an. Und dort verstehe ich auch das "Wieso".
Meine
DLL muss nur noch eine Methode exportieren. Und zwar eine (ich nenne sie immer so) GetInstance Methode, welche mir eine Instanz zu einem Interface liefert. Der Vorteil ist der, dass ich das Interface nur einmal definieren muss und kann es jedem zur Verfügung stellen. Somit entfällt diese ganze Schreiberei für denjenigen, der die
DLL benutzen will. Auf der anderen Seite würde derjenige der die
DLL nutzt, nur die Methoden in sein Programm aufnehmen, welche er wirklich auf verwenden will.
Das Interface bei der
DLL hat eben noch den Vorteil (im Vergleich zu normal exportierten Methoden), dass dahinter eine Klasse stehen kann, welche direkt angesprochen wird. Mit Objekten ist das ja so eine Sache. Das funktioniert da ja dann nicht so einfach. Und die Klasse im Bezug auf Interfaces hat eben den Vorteil, dass da instanzspezifisch Daten gespeichert werden können welche dann auch nur über spezielle Interfacemethoden wieder abgerufen werden können.
Nur wenn ich eine Klasse schreibe die genau eine Aufgabe hat und ich weiß, dass da niemals mehr etwas hinzu kommt, dann erschließt sich mir der Sinn eines Interfaces einfach nicht.
Klar, die Referenzzählung ist eine schöne Sache. Man muss einfach nicht mehr auf das Object.Free achten. Aber das ist so drin bei mir, dass ich das eigentlich nie vergesse. Und wenn doch, dann schreit ReportMemoryLeaksOnShutdown nach Hilfe.
@Stahli: Nichts für Ungut, aber ich sehe mich was Interfaces angeht auf einem leicht höheren Level als den TE. Und ich finde deine Beispiele doch recht schwierig zu verstehen. Ich hatte damals den Thread von dir (den du ja auch wieder verlinkt hast) aufmerksam verfolgt. Eben weil mich das Thema Interfaces so interessiert und ich mich weiterbilden will. Durch das Thema bin ich damals zwar durchgestiegen, aber es wurde auch nie wirklich ein "Wieso" Grund genannt, welcher mich überzeugt hätte.
Das soll jetzt auf keinen Fall böse wirken oder so.
Sir Rufo ist doch unser Interface Spezialist hier. Er macht doch für alles und jeden ein Interface. Vielleicht hat er ja einen alles übertreffenden Grund parat. Leider hat er schon länger nichts mehr hier geschrieben.
Ich hoffe meine Antwort (obwohl ich nahezu so unwissend bin wie der TE) hat dem TE und/oder anderen Lesern die vor dem gleichen Problem stehen trotzdem ein wenig geholfen.