Dart Programlama - Sınıflar

Dart, nesne yönelimli bir dildir. Sınıflar, arayüzler vb. Gibi nesne yönelimli programlama özelliklerini destekler.classOOP açısından, nesneler oluşturmak için bir plandır. Birclassnesneye ilişkin verileri kapsüller. Dart, adı verilen bu kavram için yerleşik destek sağlarclass.

Bir Sınıf Bildirmek

Kullan class bildirmek için anahtar kelime classDart'ta. Bir sınıf tanımı, anahtar kelime sınıfı ile başlar ve onu takip edenclass name; ve bir çift kaşlı ayraç içine alınmış sınıf gövdesi. Aynı sözdizimi aşağıda verilmiştir -

Sözdizimi

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

classanahtar sözcüğün ardından sınıf adı gelir. Bir sınıfı adlandırırken tanımlayıcılara ilişkin kurallar dikkate alınmalıdır.

Bir sınıf tanımı aşağıdakileri içerebilir -

  • Fields- Alan, bir sınıfta belirtilen herhangi bir değişkendir. Alanlar, nesnelerle ilgili verileri temsil eder.

  • Setters and Getters- Programın bir sınıfın alanlarının değerlerini başlatmasına ve almasına izin verir. Varsayılan bir alıcı / ayarlayıcı, her sınıfla ilişkilendirilir. Bununla birlikte, bir ayarlayıcı / alıcı açıkça tanımlanarak varsayılan olanlar geçersiz kılınabilir.

  • Constructors - sınıfın nesneleri için bellek ayırmaktan sorumludur.

  • Functions- İşlevler, bir nesnenin gerçekleştirebileceği eylemleri temsil eder. Bazen yöntemler olarak da anılırlar.

Bir araya getirilen bu bileşenler, data members sınıfın.

Örnek: Bir sınıf bildirmek

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

Örnek bir sınıf bildiriyor Car. Sınıfın adlı bir alanı varengine. disp() alanın değerini yazdıran basit bir işlevdir engine.

Sınıfın Örneğini Oluşturma

Sınıfın bir örneğini oluşturmak için, newanahtar kelime ve ardından sınıf adı. Aynı sözdizimi aşağıda verilmiştir -

Sözdizimi

var object_name = new class_name([ arguments ])
  • new anahtar kelime somutlaştırmadan sorumludur.

  • İfadenin sağ tarafı kurucuyu çağırır. Yapıcı, parametreleştirilmişse değerler geçirilmelidir.

Örnek: Bir sınıfın somutlaştırılması

var obj = new Car("Engine 1")

Niteliklere ve İşlevlere Erişim

Bir sınıfın özniteliklerine ve işlevlerine nesne aracılığıyla erişilebilir. Kullan '.' nokta notasyonu (olarak adlandırılırperiod) bir sınıfın veri üyelerine erişmek için.

//accessing an attribute 
obj.field_name  

//accessing a function 
obj.function_name()

Misal

Dart'ta özniteliklere ve işlevlere nasıl erişileceğini anlamak için aşağıdaki örneğe bir göz atın -

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

output yukarıdaki kod aşağıdaki gibidir -

E1001

Dart Oluşturucuları

Yapıcı, sınıfın değişkenlerini başlatmaktan sorumlu olan sınıfın özel bir işlevidir. Dart, sınıfınki ile aynı ada sahip bir kurucu tanımlar. Yapıcı bir işlevdir ve dolayısıyla parametreleştirilebilir. Ancak, bir işlevden farklı olarak, yapıcıların bir dönüş türü olamaz. Bir yapıcı bildirmezseniz, varsayılanno-argument constructor sizin için sağlanmıştır.

Sözdizimi

Class_name(parameter_list) { 
   //constructor body 
}

Misal

Aşağıdaki örnek, Dart'ta yapıcıların nasıl kullanılacağını gösterir -

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

Aşağıdakileri üretmelidir output -

E1001

İsimli Oluşturucular

Dart sağlar named constructors bir sınıfı etkinleştirmek için multiple constructors. Adlandırılmış kurucuların sözdizimi aşağıda verildiği gibidir -

Sözdizimi: Yapıcıyı tanımlama

Class_name.constructor_name(param_list)

Misal

Aşağıdaki örnek, adlandırılmış yapıcıları Dart'ta nasıl kullanabileceğinizi gösterir -

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

Aşağıdakileri üretmelidir output -

The engine is : E1001 
Non-parameterized constructor invoked

Bu Anahtar Kelime

thisanahtar kelime, sınıfın mevcut örneğini ifade eder. Burada, sınıfın alanının parametre adı ve adı aynıdır. Dolayısıyla, belirsizliği önlemek için, sınıfın alanına ön ek olarakthisanahtar kelime. Aşağıdaki örnek aynı şeyi açıklıyor -

Misal

Aşağıdaki örnek, nasıl kullanılacağını açıklamaktadır. this Dart'ta anahtar kelime -

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

Aşağıdakileri üretmelidir output -

The engine is : E1001

Dart Sınıfı ─ Getters ve Setters

Getters ve Settersolarak da adlandırılır accessors ve mutators, programın sırasıyla sınıf alanlarının değerlerini başlatmasına ve almasına izin verin. Toplayıcılar veya erişimciler,getanahtar kelime. Ayarlayıcılar veya mutatörler,set anahtar kelime.

Varsayılan bir alıcı / ayarlayıcı, her sınıfla ilişkilendirilir. Bununla birlikte, bir ayarlayıcı / alıcı açıkça tanımlanarak varsayılan olanlar geçersiz kılınabilir. Alıcının parametresi yoktur ve bir değer döndürür ve ayarlayıcının bir parametresi vardır ve bir değer döndürmez.

Sözdizimi: Alıcı tanımlama

Return_type  get identifier 
{ 
}

Sözdizimi: Bir ayarlayıcı tanımlama

set identifier 
{ 
}

Misal

Aşağıdaki örnek, nasıl kullanabileceğinizi gösterir. getters ve setters Dart sınıfında -

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

Bu program kodu aşağıdakileri üretmelidir output -

Age should be greater than 5 
MARK 
Null

Sınıf Mirası

Dart, bir programın mevcut bir sınıftan yeni sınıflar oluşturma yeteneği olan Miras kavramını destekler. Daha yeni sınıflar oluşturmak için genişletilen sınıfa ana sınıf / süper sınıf denir. Yeni oluşturulan sınıflara alt / alt sınıflar denir.

Bir sınıf, 'extends' anahtar sözcüğünü kullanarak başka bir sınıftan miras alır. Child classes inherit all properties and methods except constructors from the parent class.

Sözdizimi

class child_class_name extends parent_class_name

Note - Dart çoklu mirası desteklemez.

Örnek: Sınıf Mirası

Aşağıdaki örnekte, bir sınıf bildiriyoruz Shape. Sınıf,Circlesınıf. Sınıflar arasında kalıtım ilişkisi olduğu için alt sınıf yani sınıfCar üst sınıf veri üyesine örtük bir erişim alır.

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

Aşağıdakileri üretmelidir output -

calling calc area defined in the Shape class

Kalıtım Türleri

Kalıtım, aşağıdaki üç türde olabilir -

  • Single - Her sınıf en fazla bir ebeveyn sınıfından genişletilebilir.

  • Multiple- Bir sınıf, birden çok sınıftan miras alabilir. Dart, çoklu mirası desteklemez.

  • Multi-level - Bir sınıf başka bir alt sınıftan miras alabilir.

Misal

Aşağıdaki örnek, çok düzeyli kalıtımın nasıl çalıştığını gösterir -

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

Sınıf LeafÖznitelikleri çok düzeyli miras yoluyla Kök ve Çocuk sınıflarından türetir. Onunoutput aşağıdaki gibidir -

hello

Dart - Sınıf Mirası ve Yöntemi Geçersiz Kılma

Yöntemi Geçersiz Kılma, alt sınıfın kendi üst sınıfındaki bir yöntemi yeniden tanımladığı bir mekanizmadır. Aşağıdaki örnek aynı şeyi göstermektedir -

Misal

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

Aşağıdakileri üretmelidir output -

value of b 12

Yöntemi geçersiz kılarken işlev parametrelerinin sayısı ve türü eşleşmelidir. Parametrelerin sayısında veya veri türlerinde bir uyumsuzluk olması durumunda, Dart derleyicisi bir hata atar. Aşağıdaki çizim aynı şeyi açıklamaktadır -

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

Aşağıdakileri üretmelidir output -

value of b 12

Statik Anahtar Kelime

static anahtar kelime bir sınıfın veri üyelerine uygulanabilir, yani, fields ve methods. Statik bir değişken, program yürütmeyi bitirene kadar değerlerini korur. Statik üyelere sınıf adıyla başvurulur.

Misal

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 
}

Aşağıdakileri üretmelidir output -

The value of num is 12

Süper Anahtar Kelime

superanahtar kelime, bir sınıfın yakın ebeveynine atıfta bulunmak için kullanılır. Anahtar kelime, bir süper sınıf versiyonuna atıfta bulunmak için kullanılabilir.variable, property, veya method. Aşağıdaki örnek aynı şeyi göstermektedir -

Misal

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

Aşağıdakileri üretmelidir output -

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