|
Du hast es eigentlich schon treffend beschrieben.
Abstrakte Klassen werden hauptsächlich als Interfaces benutzt, d.h. um einem Anwender eine Schnittstelle zu bieten, die er verwenden kann.
Allerdings ist die Implementierung davon abgekapselt, d.h. jeder kann sie im Grunde neu implementieren und dem Benutzer übergeben und er kann die neue Version aufgrund der gleichen Schnittstelle trotzdem verwenden.
DirectX ist das perfekte Beispiel, dort ist jede Klasse abstrakt und bietet quasi in Interface zu einem Objekt, bspw. einem Text Font.
Sie bietet halt allerlei Methoden zum Zeichnen und manipulieren von Textausgabe. Wie das ganze aber implementiert ist, siehst du nicht.
Für verschiedene Systeme und verschiedene DX Versionen (oder bei hardwarenäheren Objekten sogar für unterschiedliche Hardware/Treiber) gibt es unterschiedliche Versionen.
GUI Frameworks sind auch bekannte Beispiele, die halt abstrakte Fenster Klassen bieten, die dann für jedes OS entsprechend implementiert werden können, ohne, dass sich der Anwender des FWs damit rumschlagen muss.
Im Informatikunterricht bekommt man es häufig am Beispiel von Container Klassen gezeigt: Es gibt das Interface List, das zahlreiche Methoden zum Verwalten von Listen bietet.
Nun kann man diese mit Arrays, mit LinkedLists, HashTables und vielem mehr implementieren, die man halt von List ableitet.
D.h. einem List Pointer kann ein LinkedList Pointer zugewiesen werden, aber dir als Anwender kann völlig egal sein, was sich nun dahinter verbirgt, da die Abstraktheit dir die Möglichkeiten, die das Interface hat, garantiert. Würde irgendeine Kindklasse die Methoden nämlich nicht implementieren, würde sie automatisch auch abstrakt und könnte nicht instanziert werden.
In der Praxis gibt es häufig sogenannte Factory Funktionen/Klassen, die dir einen Pointer auf ein Interface zurückliefern (so läuft es quasi mit jedem DX Objekt ab).
Was für eine Kindklasse sie dem Pointer zugewiesen haben und wie das ganze implementiert ist, interessiert dich nicht und muss es auch nicht.
TL;DR:
Abstrakte Klassen bieten, wie der Name schon sagt, die Möglichkeit, Schnittstelle von Implementation zu abstrahieren.
|