Dart Cheat Sheet Serisinin Devamı

Dart Dili Sınıflar , Dart Dili Classlar

Bu yazımda sizlerle Dart Programlama dilinin temeli olan Classlardan(Sınıflardan) bahsediceğim. Classlar OOP  (Object-Oriented Programming) olan Dart dilinin temelini oluşturur. Basitçe bir kullanımından bahsedicek olursak bir Sınıf oluşturdunuz ve o sınıfdan bir nesne oluşturmanız gerekiyor. Oluşturduğunuz nesne ile sınıfın içerisindeki değişkenlere, fonksiyonlara ulaşabilirsiniz. Örneklendirerek anlatım aşağıdaki tablarda mevcuttur.

void main() {
  M4tws silah=new M4tws();
  silah.attributes();
}
class M4tws{
  double agirlik=3.18;
  String renk="Siyah";
  bool geceGorus=false;
  int havza=56;
  attributes(){
    print("Ağırlık:"+agirlik.toString());
    print("Renk:"+renk.toString());
  }
}Code language: Dart (dart)

Sınıflarda Yapıcı Metodlar ( constructor ) kullanımı zorunlu olmayan metodlardır. Sınıf içerisinde tanımlamış olduğunuz değişkenlere ilk değerlerini aktarmanız için kullanılır. Aslında nesne oluşturma esnasında default olarak farketmeden tanımladığımız yapılardır.

void main() {
  M4tws silah=new M4tws(3.18,"Siyah",false);
  silah.attributes();
}
class M4tws{
  double agirlik;
  String renk;
  bool geceGorus;
  M4tws(this.agirlik,this.renk,this.geceGorus);
  attributes(){
    print("Ağırlık:"+agirlik.toString());
    print("Renk:"+renk.toString());
  }
}Code language: Dart (dart)

Yapıcı metod tanımlarken { } içerisine alırsak nesne türettiğimiz esnada değişken adlarına karşılık gelicek şekilde başlangıç değerlerini veririz.

void main() {
  M4tws silah=new M4tws(agirlik: 3.18,renk: "Siyah",geceGorus: false);
  silah.attributes();
}
class M4tws{
  double agirlik;
  String renk;
  bool geceGorus;
  M4tws({this.agirlik,this.renk,this.geceGorus});
  attributes(){
    print("Ağırlık:"+agirlik.toString());
    print("Renk:"+renk.toString());
  }
}Code language: Dart (dart)

İsimlendirilmiş Yapıcı (Kurucu)Metodlarda (named constructor)  tek bir kurucu metod yerine birden fazla da tanımlayabileceğinize değinmek istedim. Çağrılan Kurucu metodlar içerisinde ekrana değerler yazdırılıyor. Sizde herhangi bir nesne oluşturuken , kurucu metodda çalıştırılmasını istediğiniz işlevleri tanımlayabilirsiniz yada fonksiyonlara ayırabilirsiniz.

void main() {
  M4tws silah=new M4tws();
  M4tws silah1=new M4tws.nameconst(3.18,"Siyah");  
}
class M4tws{
  double agirlik;
  String renk;
  bool geceGorus;
  M4tws(){
    print("İsimsiz Kurucu Metod");
  }
  M4tws.nameconst(this.agirlik,this.renk){
    print("Ağırlık:"+agirlik.toString());
    print("Renk:"+renk.toString());
  }
}Code language: Dart (dart)

Dart Dilinde Getter ve Setter : Sınıf içerisindeki alanların sınıfın dışına erişimini kapatmak için yani private yapmak için ( _ ) kullanılır . Getter ve Setter yardımlarıyla Sınıfın metodlarına başka sınıf içerisinden erişebilir ve değiştirebilirsiniz.

  void main() {
    M4tws c = new M4tws();
    c.agirlikGet;
    c.agirlikSet=20;
  }
  class M4tws extends Silah{
    double _agirlik=3.18;
    double get agirlikGet => _agirlik;
    set agirlikSet(double value) {
      if(value>0) {
        _agirlik = value;
        }
      else 
        _agirlik=1;
    }
  }Code language: Dart (dart)

Dart Dili Sınıflar Kalıtım : Kalıtım yaparken Aslında her oluşturduğumuz sınıf Object sınıfından türetiliyor.Aşağıdaki örnekte Silah ve M4tws sınıfları bulunmaktadır. M4tws sınıfı Silah sınıfından türetilmiştir bunu Dart Dilinde extend parametresiyle belirtiyoruz ve Üst sınıfının özelliklerini kullanır hale getiriyoruz. Dart Dilide super kelimesi bir üst sınıfının içinde bulunan metodları , özellikleri çalıştırmaya yarıyor . Aşağıdaki örnekte nesnesini oluşturduğumuz sınıfın içindeki tipBelirle metoduna bakıyor var ise çalıştırıyor eğerki metoda dair birşey yok ise super ile Bağlı olduğu bir üst sınıfa giderek ,üst sınıf içerisindeki aynı metodu çalıştırıyor. Kullanımı gördüğünüz üzere extend parametresiyle basit hale geliyor. Verdiğim örnekte sadece bir sınıfa Kalıtım işlemini gerçekleştirdim bunun sayısı birden fazla da olabilir tabiki.

void main() {
  M4tws silah=new M4tws(); 
  silah.tipi="M4";
  silah.fiyat=3500;
  silah.agirlik=3.8;
  silah.tipBelirle(); 
}
//Aslında her oluşturduğumuz sınıf 
//Object sınıfından türetilir.
class Silah{
 String tipi;
  void tipBelirle(){
    print("Tipi olarak $tipi Belirtildi");
  }
}
class M4tws extends Silah{
  int fiyat;
  double agirlik;
  bool geceGorus;
 @override
  void tipBelirle(){
   // print("Tipi Belirlendi $tipi");
    //super metodu Ust Sınıfındaki metodunda
    //tetiklenmesine yarıyor
    super.tipBelirle();
  }
}Code language: Dart (dart)

@override : Bir sınıfın metodlarını kendi sınıfının içerisinde isteklerine göre değiştirilip kullanılması yani bağlı olduğu sınıfın ihtiyaç duyduğu metodlarını kullanması için yazdığımız parametredir.Ayrıca aynı örnek üzerinden @override parametresi ile Üst metodun işlevini iptal ettik.

void main() {
  M4tws silah=new M4tws(); 
  silah.tipi="M4";
  silah.fiyat=3500;
  silah.agirlik=3.8;
  silah.tipBelirle();  
}
class Silah{
 String tipi;
  void tipBelirle(){
    print("Tipi olarak $tipi Belirtildi");
  }
}
class M4tws extends Silah{
  int fiyat;
  double agirlik;
  bool geceGorus;
 @override
  void tipBelirle(){
    //İçi Boş
  }
}Code language: Dart (dart)

Dart Dilinde Kalıtımda Yapıcı Metodlar : Aşağıdaki örnekte M4tws sınıfınfan bir nesne türetiyoruz ve bağlı olduğu Üst sınıfının yapıcı metodu ilk baş tetikleniyor. Üst sınıfından alt sınıfına herhangi bir değer gidebilir diye ilk üst sınıfın yapıcı metodu tetiklenir.

void main() {
  M4tws silah=new M4tws(); 
  silah.tipi="M4";
  silah.fiyat=3500;
  silah.agirlik=3.8;
}
//Aslında her oluşturduğumuz sınıf 
//Object sınıfından türetilir.
class Silah{
 String tipi;
  Silah(){
    print("Silah Sınıfından bir nesne üretildi");
  }
}
class M4tws extends Silah{
  int fiyat;
  double agirlik;
  bool geceGorus;
  M4tws(){
    print("M4tws Sınıfından bir nesne üretildi");
  }
}Code language: Dart (dart)
Silah Sınıfından bir nesne üretildi
Mtws Sınıfından bir nesne üretildiCode language: Dart (dart)

Farklı Bir Örnek olarak: M4tws sınıfının kurucu metodundan ağırlık değerini girerken bir üst sınıfınında kurucu metoduna istediği parametresi super ile verdik.

void main() {
  M4tws silah=new M4tws(3.14); 
}
class Silah{
 String tipi;
  Silah(String tipii){
    this.tipi=tipii;
    print("Silah Sınıfından tipi: $tipi");
  }
}
class M4tws extends Silah{
  int fiyat;
  double agirlik;
  bool geceGorus;
  M4tws(double agirlikk) : super("M4"){
    this.agirlik=agirlikk;
    print("M4tws Sınıfından $agirlik");
  }
}Code language: Dart (dart)
Silah Sınıfından tipi: M4
M4tws Sınıfından 3.14Code language: Dart (dart)

Burdaki temel nokta Alt sınıftan bir yapıcı metod oluştururken Üst sınıfında bir yapıcı metodu varsa oraya gerekli parametreleri girmeniz gerekir.Aksi takdirde aşağıdaki hatayı alırsınız.

Error: The superclass, ‘Class name’, has no unnamed constructor that takes no arguments.

Dart Dilinde Abstract Sınıflar genel tanımıyla nesne türetilemeyen sınıflardır.Aşağıdaki örnekte M4tws sınıfının bağlı olduğu Silah sınıfı Abstract sınıf olduğundan dolayı nesne türetemedik fakat super anahtar kelimesiyle sınıfın içindeki metoda erişmiş olduk. Abstract sınıflar içerisindeki metodlarında aşağıdaki şekilde başka sınıf tarafından kullanılacak şekilde ayarlanması gerekir.

void main() {
  M4tws silah=new M4tws(); 
  silah.tipi="M4";
  silah.bilgileriYazdir(); 
  silah.sonuc();
}
abstract class Silah{
 String tipi;
  bilgileriYazdir();
  void sonuc()=>print("Abstract sınıf içindeki metod");
}
class M4tws extends Silah{
  int fiyat=3600;
  double agirlik;
  bool geceGorus;
  @override
  bilgileriYazdir(){
    print("Tipi: $tipi,Fiyatı:$fiyat");
  }
  //super ile üst Abstract sınıfın metodunu tetikle
  @override
  void sonuc()=>super.sonuc(); 
}Code language: Dart (dart)

Kodların Hemen test etmek için: dardpad kullanabilirsiniz.

Dart Dili Sınıflar ( Classlar ) kısmının sonuna gelmiş bulunmaktayız umarım yararlı bir içerik olmuştur.

Dart Programlama Dili ‘ Flutter Framework’u ile aktif olarak kullanılır. Flutter ile ilgili içeriklerimi bloglarımdan inceleyebilirsiniz.

Bir Önceki Blogumu ziyaret edebilirsiniz.