Dart-Programmierung - Klassen
Dart ist eine objektorientierte Sprache. Es unterstützt objektorientierte Programmierfunktionen wie Klassen, Schnittstellen usw. A.classIn Bezug auf OOP ist eine Blaupause zum Erstellen von Objekten. EINclasskapselt Daten für das Objekt. Dart bietet integrierte Unterstützung für dieses Konzept namensclass.
Eine Klasse deklarieren
Verwenden Sie die class Schlüsselwort zum Deklarieren von a classin Dart. Eine Klassendefinition beginnt mit der Schlüsselwortklasse, gefolgt von derclass name;; und der Klassenkörper, der von einem Paar geschweifter Klammern umschlossen ist. Die Syntax dafür ist unten angegeben -
Syntax
class class_name {
<fields>
<getters/setters>
<constructors>
<functions>
}
Das classAuf das Schlüsselwort folgt der Klassenname. Die Regeln für Bezeichner müssen beim Benennen einer Klasse berücksichtigt werden.
Eine Klassendefinition kann Folgendes umfassen:
Fields- Ein Feld ist eine Variable, die in einer Klasse deklariert ist. Felder repräsentieren Daten, die sich auf Objekte beziehen.
Setters and Getters- Ermöglicht dem Programm, die Werte der Felder einer Klasse zu initialisieren und abzurufen. Jeder Klasse ist ein Standard-Getter / Setter zugeordnet. Die Standardwerte können jedoch überschrieben werden, indem ein Setter / Getter explizit definiert wird.
Constructors - verantwortlich für die Zuweisung von Speicher für die Objekte der Klasse.
Functions- Funktionen stellen Aktionen dar, die ein Objekt ausführen kann. Sie werden manchmal auch als Methoden bezeichnet.
Diese Komponenten zusammen werden als bezeichnet data members der Klasse.
Beispiel: Deklarieren einer Klasse
class Car {
// field
String engine = "E1001";
// function
void disp() {
print(engine);
}
}
Das Beispiel deklariert eine Klasse Car. Die Klasse hat ein Feld mit dem Namenengine. Dasdisp() ist eine einfache Funktion, die den Wert des Feldes druckt engine.
Instanz der Klasse erstellen
Verwenden Sie zum Erstellen einer Instanz der Klasse die newSchlüsselwort gefolgt vom Klassennamen. Die Syntax dafür ist unten angegeben -
Syntax
var object_name = new class_name([ arguments ])
Das new Das Schlüsselwort ist für die Instanziierung verantwortlich.
Die rechte Seite des Ausdrucks ruft den Konstruktor auf. Dem Konstruktor sollten Werte übergeben werden, wenn er parametrisiert ist.
Beispiel: Instanziieren einer Klasse
var obj = new Car("Engine 1")
Zugriff auf Attribute und Funktionen
Auf die Attribute und Funktionen einer Klasse kann über das Objekt zugegriffen werden. Verwenden Sie das '.' Punktnotation (genannt alsperiod), um auf die Datenelemente einer Klasse zuzugreifen.
//accessing an attribute
obj.field_name
//accessing a function
obj.function_name()
Beispiel
Schauen Sie sich das folgende Beispiel an, um zu verstehen, wie Sie auf Attribute und Funktionen in Dart zugreifen können -
void main() {
Car c= new Car();
c.disp();
}
class Car {
// field
String engine = "E1001";
// function
void disp() {
print(engine);
}
}
Das output des obigen Codes ist wie folgt -
E1001
Dartkonstruktoren
Ein Konstruktor ist eine spezielle Funktion der Klasse, die für die Initialisierung der Variablen der Klasse verantwortlich ist. Dart definiert einen Konstruktor mit demselben Namen wie der der Klasse. Ein Konstruktor ist eine Funktion und kann daher parametrisiert werden. Im Gegensatz zu einer Funktion können Konstruktoren jedoch keinen Rückgabetyp haben. Wenn Sie keinen Konstruktor deklarieren, wird ein Standardwert festgelegtno-argument constructor wird für Sie bereitgestellt.
Syntax
Class_name(parameter_list) {
//constructor body
}
Beispiel
Das folgende Beispiel zeigt, wie Konstruktoren in Dart verwendet werden -
void main() {
Car c = new Car('E1001');
}
class Car {
Car(String engine) {
print(engine);
}
}
Es sollte Folgendes erzeugen output - -
E1001
Benannte Konstruktoren
Dart bietet named constructors um eine Klassendefinition zu aktivieren multiple constructors. Die Syntax der benannten Konstruktoren ist wie folgt:
Syntax: Definieren des Konstruktors
Class_name.constructor_name(param_list)
Beispiel
Das folgende Beispiel zeigt, wie Sie benannte Konstruktoren in Dart verwenden können -
void main() {
Car c1 = new Car.namedConst('E1001');
Car c2 = new Car();
}
class Car {
Car() {
print("Non-parameterized constructor invoked");
}
Car.namedConst(String engine) {
print("The engine is : ${engine}");
}
}
Es sollte Folgendes erzeugen output - -
The engine is : E1001
Non-parameterized constructor invoked
Das dieses Schlüsselwort
Das thisDas Schlüsselwort bezieht sich auf die aktuelle Instanz der Klasse. Hier sind der Parametername und der Name des Klassenfelds identisch. Um Mehrdeutigkeiten zu vermeiden, wird dem Feld der Klasse das vorangestelltthisStichwort. Das folgende Beispiel erklärt dasselbe -
Beispiel
Das folgende Beispiel erläutert die Verwendung von this Schlüsselwort in Dart -
void main() {
Car c1 = new Car('E1001');
}
class Car {
String engine;
Car(String engine) {
this.engine = engine;
print("The engine is : ${engine}");
}
}
Es sollte Folgendes erzeugen output - -
The engine is : E1001
Dart Class ─ Getter und Setter
Getters und Setters, auch genannt als accessors und mutatorsErmöglichen Sie dem Programm, die Werte von Klassenfeldern zu initialisieren bzw. abzurufen. Getter oder Accessoren werden mit dem definiertgetStichwort. Setter oder Mutatoren werden mit dem definiertset Stichwort.
Jeder Klasse ist ein Standard-Getter / Setter zugeordnet. Die Standardwerte können jedoch überschrieben werden, indem ein Setter / Getter explizit definiert wird. Ein Getter hat keine Parameter und gibt einen Wert zurück, und der Setter hat einen Parameter und gibt keinen Wert zurück.
Syntax: Definieren eines Getters
Return_type get identifier
{
}
Syntax: Definieren eines Setzers
set identifier
{
}
Beispiel
Das folgende Beispiel zeigt, wie Sie verwenden können getters und setters in einer Dartklasse -
class Student {
String name;
int age;
String get stud_name {
return name;
}
void set stud_name(String name) {
this.name = name;
}
void set stud_age(int age) {
if(age<= 0) {
print("Age should be greater than 5");
} else {
this.age = age;
}
}
int get stud_age {
return age;
}
}
void main() {
Student s1 = new Student();
s1.stud_name = 'MARK';
s1.stud_age = 0;
print(s1.stud_name);
print(s1.stud_age);
}
Dieser Programmcode sollte Folgendes erzeugen output - -
Age should be greater than 5
MARK
Null
Klassenvererbung
Dart unterstützt das Konzept der Vererbung, dh die Fähigkeit eines Programms, aus einer vorhandenen Klasse neue Klassen zu erstellen. Die Klasse, die erweitert wird, um neuere Klassen zu erstellen, wird als übergeordnete Klasse / Superklasse bezeichnet. Die neu erstellten Klassen werden als untergeordnete Klassen / Unterklassen bezeichnet.
Eine Klasse erbt von einer anderen Klasse mit dem Schlüsselwort 'extended'. Child classes inherit all properties and methods except constructors from the parent class.
Syntax
class child_class_name extends parent_class_name
Note - Dart unterstützt keine Mehrfachvererbung.
Beispiel: Klassenvererbung
Im folgenden Beispiel deklarieren wir eine Klasse Shape. Die Klasse wird um die erweitertCircleKlasse. Da zwischen den Klassen eine Vererbungsbeziehung besteht, ist die untergeordnete Klasse, dh die KlasseCar erhält einen impliziten Zugriff auf das Datenelement der übergeordneten Klasse.
void main() {
var obj = new Circle();
obj.cal_area();
}
class Shape {
void cal_area() {
print("calling calc area defined in the Shape class");
}
}
class Circle extends Shape {}
Es sollte Folgendes erzeugen output - -
calling calc area defined in the Shape class
Arten der Vererbung
Es gibt folgende drei Arten der Vererbung:
Single - Jede Klasse kann höchstens von einer Elternklasse ausgehen.
Multiple- Eine Klasse kann von mehreren Klassen erben. Dart unterstützt keine Mehrfachvererbung.
Multi-level - Eine Klasse kann von einer anderen untergeordneten Klasse erben.
Beispiel
Das folgende Beispiel zeigt, wie die mehrstufige Vererbung funktioniert -
void main() {
var obj = new Leaf();
obj.str = "hello";
print(obj.str);
}
class Root {
String str;
}
class Child extends Root {}
class Leaf extends Child {}
//indirectly inherits from Root by virtue of inheritance
Die Klasse Leafleitet die Attribute aus Root- und Child-Klassen aufgrund der mehrstufigen Vererbung ab. Es istoutput ist wie folgt -
hello
Dart - Klassenvererbung und Methodenüberschreibung
Das Überschreiben von Methoden ist ein Mechanismus, mit dem die untergeordnete Klasse eine Methode in ihrer übergeordneten Klasse neu definiert. Das folgende Beispiel zeigt dasselbe -
Beispiel
void main() {
Child c = new Child();
c.m1(12);
}
class Parent {
void m1(int a){ print("value of a ${a}");}
}
class Child extends Parent {
@override
void m1(int b) {
print("value of b ${b}");
}
}
Es sollte Folgendes erzeugen output - -
value of b 12
Die Anzahl und der Typ der Funktionsparameter müssen übereinstimmen, während die Methode überschrieben wird. Im Falle einer Nichtübereinstimmung der Anzahl der Parameter oder ihres Datentyps gibt der Dart-Compiler einen Fehler aus. Die folgende Abbildung erklärt dasselbe -
import 'dart:io';
void main() {
Child c = new Child();
c.m1(12);
}
class Parent {
void m1(int a){ print("value of a ${a}");}
}
class Child extends Parent {
@override
void m1(String b) {
print("value of b ${b}");
}
}
Es sollte Folgendes erzeugen output - -
value of b 12
Das statische Schlüsselwort
Das static Schlüsselwort kann auf die Datenelemente einer Klasse angewendet werden, dh fields und methods. Eine statische Variable behält ihre Werte bei, bis das Programm die Ausführung beendet hat. Statische Mitglieder werden durch den Klassennamen referenziert.
Beispiel
class StaticMem {
static int num;
static disp() {
print("The value of num is ${StaticMem.num}") ;
}
}
void main() {
StaticMem.num = 12;
// initialize the static variable }
StaticMem.disp();
// invoke the static method
}
Es sollte Folgendes erzeugen output - -
The value of num is 12
Das Super-Keyword
Das superDas Schlüsselwort wird verwendet, um auf das unmittelbare übergeordnete Element einer Klasse zu verweisen. Das Schlüsselwort kann verwendet werden, um auf die Superklassenversion von a zu verweisenvariable, property, oder method. Das folgende Beispiel zeigt dasselbe -
Beispiel
void main() {
Child c = new Child();
c.m1(12);
}
class Parent {
String msg = "message variable from the parent class";
void m1(int a){ print("value of a ${a}");}
}
class Child extends Parent {
@override
void m1(int b) {
print("value of b ${b}");
super.m1(13);
print("${super.msg}") ;
}
}
Es sollte Folgendes erzeugen output - -
value of b 12
value of a 13
message variable from the parent class