Dartプログラミング-クラス

Dartはオブジェクト指向言語です。クラス、インターフェイスなどのオブジェクト指向プログラミング機能をサポートします。AclassOOPの観点からは、オブジェクトを作成するための青写真です。Aclassオブジェクトのデータをカプセル化します。Dartは、この概念の組み込みサポートを提供します。class

クラスの宣言

使用 class 宣言するキーワード classダートで。クラス定義は、キーワードclassで始まり、その後にclass name; クラス本体は中括弧で囲まれています。同じ構文を以下に示します-

構文

class class_name {  
   <fields> 
   <getters/setters> 
   <constructors> 
   <functions> 
}

ザ・ classキーワードの後に​​クラス名が続きます。クラスに名前を付けるときは、識別子の規則を考慮する必要があります。

クラス定義には、次のものを含めることができます。

  • Fields−フィールドは、クラスで宣言された任意の変数です。フィールドは、オブジェクトに関連するデータを表します。

  • Setters and Getters−プログラムがクラスのフィールドの値を初期化および取得できるようにします。デフォルトのゲッター/セッターはすべてのクラスに関連付けられています。ただし、setter / getterを明示的に定義することで、デフォルトのものをオーバーライドできます。

  • Constructors −クラスのオブジェクトにメモリを割り当てる責任があります。

  • Functions−関数は、オブジェクトが実行できるアクションを表します。それらは、メソッドと呼ばれることもあります。

これらのコンポーネントをまとめたものは、 data members クラスの。

例:クラスの宣言

class Car {  
   // field 
   String engine = "E1001";  
   
   // function 
   void disp() { 
      print(engine); 
   } 
}

この例では、クラスを宣言しています Car。クラスには、という名前のフィールドがありますengine。ザ・disp() フィールドの値を出力する単純な関数です engine

クラスのインスタンスの作成

クラスのインスタンスを作成するには、 newキーワードの後に​​クラス名が続きます。同じ構文を以下に示します-

構文

var object_name = new class_name([ arguments ])
  • ザ・ new キーワードはインスタンス化を担当します。

  • 式の右辺はコンストラクターを呼び出します。パラメータ化されている場合、コンストラクタには値を渡す必要があります。

例:クラスのインスタンス化

var obj = new Car("Engine 1")

属性と関数へのアクセス

クラスの属性と関数には、オブジェクトを介してアクセスできます。使用 '。' ドット表記(period)クラスのデータメンバーにアクセスします。

//accessing an attribute 
obj.field_name  

//accessing a function 
obj.function_name()

Dartの属性と関数にアクセスする方法を理解するには、次の例を見てください。

void main() { 
   Car c= new Car(); 
   c.disp(); 
}  
class Car {  
   // field 
   String engine = "E1001";  
   
   // function 
   void disp() { 
      print(engine); 
   } 
}

ザ・ output 上記のコードの内容は次のとおりです-

E1001

Dartコンストラクター

コンストラクターは、クラスの変数の初期化を担当するクラスの特別な関数です。Dartは、クラスと同じ名前のコンストラクターを定義します。コンストラクターは関数であるため、パラメーター化できます。ただし、関数とは異なり、コンストラクターは戻り値の型を持つことはできません。コンストラクターを宣言しない場合、デフォルトno-argument constructor あなたのために提供されています。

構文

Class_name(parameter_list) { 
   //constructor body 
}

次の例は、Dart −でコンストラクターを使用する方法を示しています。

void main() { 
   Car c = new Car('E1001'); 
} 
class Car { 
   Car(String engine) { 
      print(engine); 
   } 
}

次のようになります output

E1001

名前付きコンストラクター

ダートは提供します named constructors クラス定義を有効にするには multiple constructors。名前付きコンストラクターの構文は次のとおりです-

構文:コンストラクターの定義

Class_name.constructor_name(param_list)

次の例は、Dartで名前付きコンストラクターを使用する方法を示しています。

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}");    
   }                               
}

次のようになります output

The engine is : E1001 
Non-parameterized constructor invoked

このキーワード

ザ・ thisキーワードは、クラスの現在のインスタンスを参照します。ここで、パラメータ名とクラスのフィールドの名前は同じです。したがって、あいまいさを避けるために、クラスのフィールドの前にはthisキーワード。次の例は同じことを説明しています-

次の例では、 this Dartのキーワード−

void main() { 
   Car c1 = new Car('E1001'); 
}  
class Car { 
   String engine; 
   Car(String engine) { 
      this.engine = engine; 
      print("The engine is : ${engine}"); 
   } 
}

次のようになります output

The engine is : E1001

ダートクラス─ゲッターとセッター

Getters そして Setters、とも呼ばれます accessors そして mutators、プログラムがクラスフィールドの値をそれぞれ初期化および取得できるようにします。ゲッターまたはアクセサーは、getキーワード。セッターまたはミューテーターは、set キーワード。

デフォルトのゲッター/セッターはすべてのクラスに関連付けられています。ただし、setter / getterを明示的に定義することで、デフォルトのものをオーバーライドできます。ゲッターにはパラメーターがなく、値を返します。セッターにはパラメーターが1つあり、値を返しません。

構文:ゲッターの定義

Return_type  get identifier 
{ 
}

構文:セッターの定義

set identifier 
{ 
}

次の例は、使用方法を示しています getters そして setters ダートクラスで-

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); 
}

このプログラムコードは、次のように生成されます。 output

Age should be greater than 5 
MARK 
Null

クラスの継承

Dartは、既存のクラスから新しいクラスを作成するプログラムの機能である継承の概念をサポートしています。新しいクラスを作成するために拡張されたクラスは、親クラス/スーパークラスと呼ばれます。新しく作成されたクラスは、子/サブクラスと呼ばれます。

クラスは、「extends」キーワードを使用して別のクラスから継承します。 Child classes inherit all properties and methods except constructors from the parent class

構文

class child_class_name extends parent_class_name

Note −ダートは多重継承をサポートしていません。

例:クラスの継承

次の例では、クラスを宣言しています Shape。クラスはによって拡張されますCircleクラス。クラス間には継承関係があるため、子クラス、つまりクラスCar 親クラスのデータメンバーへの暗黙的なアクセスを取得します。

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 {}

次のようになります output

calling calc area defined in the Shape class

継承の種類

継承には次の3つのタイプがあります-

  • Single −すべてのクラスは、最大で1つの親クラスから拡張できます。

  • Multiple−クラスは複数のクラスから継承できます。Dartは多重継承をサポートしていません。

  • Multi-level −クラスは別の子クラスから継承できます。

次の例は、マルチレベル継承がどのように機能するかを示しています-

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

クラス Leafマルチレベルの継承により、RootクラスとChildクラスから属性を派生させます。そのoutput 次のとおりです-

hello

Dart –クラスの継承とメソッドのオーバーライド

メソッドのオーバーライドは、子クラスがその親クラスのメソッドを再定義するメカニズムです。次の例は同じ-を示しています

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}"); 
   } 
}

次のようになります output

value of b 12

メソッドをオーバーライドするときは、関数パラメーターの数とタイプが一致する必要があります。パラメータの数またはそれらのデータ型が一致しない場合、Dartコンパイラはエラーをスローします。次の図は同じことを説明しています-

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}");
   } 
}

次のようになります output

value of b 12

静的キーワード

ザ・ static キーワードは、クラスのデータメンバーに適用できます。 fields そして methods。静的変数は、プログラムが実行を終了するまでその値を保持します。静的メンバーはクラス名で参照されます。

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 
}

次のようになります output

The value of num is 12

スーパーキーワード

ザ・ superキーワードは、クラスの直接の親を参照するために使用されます。キーワードを使用して、のスーパークラスバージョンを参照できます。variable, property, または method。次の例は同じ-を示しています

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}")   ; 
   } 
}

次のようになります output

value of b 12 
value of a 13 
message variable from the parent class