Flutter -- ohne Dart geht es nicht Klassen Teil 1

Zu OOP gehören Objekte und Klassen. Wie vieles im Leben ist der Start in das Thema einfach, kann und wird aber mit zunehmender Tiefe anspruchsvoller.
Klassen
Eine Klasse, oder auch Objekttyp, kann man als Bauplan verstehen, um eine reale Problemstellung in einem Softwareobjekt abzubilden. Wir könnten zum Beispiel die Klasse Schach definieren, um anschließend die einzelnen Figuren aus dieser Klasse zu generieren.
Eine Klasse besitzt Attribute und Methoden/Funktionen. Wenn wir jetzt das Beispiel Schach umsetzen möchten, können wir uns an dem realen Schach orientieren. In der Theorie ist das immer die richtige Vorgehensweise, das heißt: ein Objekt / Problemstellung aus der realen Welt, wird analysiert und in eine Klasse umgewandelt.
- class Schach
- Farbe
- Form
- erlaubteBewegungen
Mit der Klasse Schach könnten wir jetzt ein Objekt erzeugen, das einen weißen Bauern darstellt.
Dazu generieren wir aus der Klasse ein Objekt und geben ihm einen Namen: weisserBauer.
weisserBauer = neu Schach (weiß, bauer, einoderzwei)
Dies ist natürlich nur eine Abstrakte Schreibweise, die das Prinzip aber erklärt. Mit der Klasse Schach erzeugen wir ein Objekt weisserBauer. Bei der Erzeugung geben wir ihm die notwendigen Attribute mit. Mit der gleichen Klasse Schach könnten wir auch ein Objekt für den König oder für den Läufer erstellen, von beiden Spielfarben.
Sehen wir uns jetzt einmal eine ganz einfache Klasse in Dart an:
Alles ist Familie
Sehen wir uns jetzt einmal eine ganz einfache Klasse in Dart an:
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
class GanzEinfach{ // Schlüsselwort class gefolgt von dem Namen der Klasse | |
var nurEineZahl; // der Typ der Variablen ist hier "var" und der Name der | |
} // Name der Variablen ist nurEineZahl. |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
class GanzEinfach{ // Schlüsselwort class gefolgt von dem Namen der Klasse | |
var nurEineZahl; // der Typ der Variablen ist hier "var" und der Name der | |
} // Name der Variablen ist nurEineZahl. | |
class IchHabeEltern extends GanzEinfach{ // die neue Klasse IchhabeEltern erweitert | |
// die Klasse ganz Einfach | |
var nurEineZweiteZahl; // und definiert eine Variable | |
} |
Mit dem Schlüsselwort extends erweitern wir unsere gaaaanz einfache Klasse. Die Erweiterung definiert dabei eine neue Variable.
Aus der Sicht von GanzEinfach ist IchHabeEltern ein Kind. Aus Sicht von IchHabeEltern ist GanzEinfach die Eltern. In OOP kehren die Begriffe Eltern und Kinder immer wieder. Sie sind immer aus dem Kontext heraus zu verstehen. D.h. das Objekt / Klasse die ich gerade bearbeite kann Eltern oder Kinder haben.
Zurück aber zu unserem Beispiel. In Dart hat jede Klasse einen Konstruktor. Entweder geben wir ihn explizit an, oder falls nicht, generiert Dart einen.
Konstruktor ? Sind wir jetzt in der Baubranche ?
Wenn wir die Klasse GanzEinfach anschauen, ist klar, das der ganze Aufwand um nur eine Variable zu deklarieren, wohl total übertrieben ist. Der Konstruktor gibt unserer Klasse mehr Funktionalität. Bei der Erzeugung eines Objekts können wir Informationen mitgeben, die in das neue Objekt eingebunden werden. Ein Konstruktor ist Teil der Klasse, hat den gleichen Namen wie die Klasse und kann als Funktion betrachtet werden. Im Unterschied zu einer gewöhnlichen Funktion, gibt der Konstruktor aber keine Werte zurück. Er hat also kein Return Statement. Hier ein Beispiel:
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
class GanzEinfach{ // Schlüsselwort class gefolgt von dem Namen der Klasse | |
var nurEineZahl; // der Typ der Variablen ist hier "var" und der Name der | |
} // Name der Variablen ist nurEineZahl. | |
class IchHabeEltern extends GanzEinfach{ // die neue Klasse IchhabeEltern erweitert | |
// die Klasse ganz Einfach | |
var nurEineZweiteZahl; // und definiert eine Variable | |
IchHabeEltern(String nurEineZweiteZahl){ // der Konstruktor hat den gleichen Namen wie die Klasse | |
this.nurEineZweiteZahl = nurEineZweiteZahl; // mit this. kann Dart zwischen gleichlautenden Variablen Namen | |
} // unterscheiden | |
} | |
void main() { | |
var test = new IchHabeEltern("Hallo"); // dem Konstruktor wird der String "Hallo" übergeben | |
print(test.nurEineZweiteZahl); // die Variable im erzeugten Objekt Test wird in die Konsole | |
// gedruckt | |
} |
Im nächsten Teil geht es weiter mit Klassen....demnächst!
Kommentare
Kommentar veröffentlichen