Dart Basic: abstract class Part 1

Photo by Elijah O'Donnell / unsplash.com
In diesem Artikel betrachten wir die abstrakte Klassen in Dart.

Was ist der Nutzen ?


Normale Klassen können auf eine Vielzahl von Arten benutzt und manipuliert werden. Dabei steht die Wiederverwendbarkeit der Klassen und den davon abgeleiteten Objekten im Vordergrund.
Abstrakte Klassen bringen nun auf der einten Seite Einschränkungen mit sich, gewähren dafür aber in gewisser Beziehung auch grössere Freiheiten.

Wenn man durch die Dart Bibliotheken stöbert wird man auf nicht wenige davon stoßen. Man darf ruhig davon sprechen, das sie eine elementare Rolle in Dart spielen

Details


Hier links sehen wir, das das Schlüsselwort abstract den Unterschied zu der normalen Klassendefinition ausmacht.



 Hier aber gleich zum ersten, wesentlichen Unterschied zu"normalen" Klassen in Dart: von einer abstrakten Klasse, kann man nicht direkt ein Objekt ableiten! Jeder Versuch das zu tun wird am Compiler scheitern.
Selbstverständlich kann eine abstrakte Klasse auch einen Konstruktor und Methoden haben. Hier ein Beispiel (mit eingebautem Fehler):
Hier linkst hat die abstrakte Klasse einen Konstruktor und eine Methode, beide "leer". Die Klasse User, die MeinUser erweitert, implementiert einen Konstruktor, aber nicht die Methode !

Der Compiler wird eine Fehlermeldung generieren, das wir die Methode der abstrakten Klasse nicht implementiert bzw überschrieben haben !

Der Grund: Wir haben mit extend eine abstrakte Klasse erweitert. Wäre MeinUser eine "normale" Klasse, hätten wir die Methode auch mit Code gefüllt und sie würde dementsprechend zur Verfügung stehen.

Im Beispiel sind also MeinUser(); und MeinUserName(); abstrakt. MeinUser() ist ein Konstruktor, so das wir keine Fehlermeldung bekommen, wenn wir ihn in der extends Klasse nicht definieren. Wir erinnern uns, bei default generiert Dart einen Konstruktor für uns, wenn wir es nicht selbst tun !

Hier kommt auch der nächste wichtige Punkt: Wir müssen müssen Methoden die in der abstrakten Klasse vorkommen, in unserer abgeleiteten Klasse implementieren !


Kommen wir aber noch einmal zurück zur Frage, was ist der Nutzen ?


Nehmen wir das Beispiel einer Benutzerverwaltung. Wir wissen das jeder Benutzer eine Identifikation haben muss und ein Passwort. Vielleicht möchten wir später noch das Geschlecht, den Wohnort und anderes mehr verarbeiten. Aber Identifikation und das Passwort wären unerlässlich.
Wir können mit einer abstrakten Klasse eine Basis erschaffen, die uns zwingt das umzusetzen.

Wir müssen uns dabei nicht festlegen, ob das Passwort eine Zeichenkette ist, oder ob wir einen numerischen Wert verlangen. Wenn wir unseren Beispielcode anschauen, haben wir keine Variablen Typen definiert.Wir haben aber  festgelegt, das jede Klasse die unsere abstrakte Klasse erweitert, eine MeinUserName() Funktion implementieren muss

Die konkrete Implementation von Variablen Typen und Methoden können wir dann vornehmen, wenn wir die abstrakte Klasse erweitern.
So gesehen kann man eine abstrakte Klasse, noch mehr als die normalen Klassen an sich, als Blaupause für reale Klassen ansehen. Es liegt am Programmierer wie viel Nutzen er aus diesem Feature ziehen möchte.

Kommentare

Beliebte Posts aus diesem Blog

Listen in Dart (2021): Part 1 List.filled List.empty und List.add

Dart und Klassen

Flutter Beispiel 6 -- BoxDecoration