0

Nesne Tabanlı Programlama (OOP)

Dart Dilinde Class (Sınıf) ve Nesne Kullanımı

Nesne tabanlı programlamada (OOP), sınıflar (class) kodunuzu düzenli, anlaşılır ve yeniden kullanılabilir hale getirir. Dart dili de sınıf yapısını güçlü bir şekilde destekler.

Bu yazıda, Dart’ta sınıf (class) mantığını kavramak için bir örnek üzerinden ilerleyeceğiz.

Gerçek bir senaryo düşünelim: Bir araç satış firması, müşterilerine araç özelliklerini göstermek istiyor.

Bunu Dart dilinde nasıl yaparız, adım adım inceleyelim.

1. Sınıf (Class) Nedir?

Sınıflar, bir nesnenin sahip olabileceği özellikleri (verileri) ve davranışları (metodları) bir arada tanımlar.

Kısaca; sınıf bir şablondur, ondan üretilen her nesne (object) bu şablonun bir kopyası gibidir.

Sınıflar Class SınıfAdı { tüm işlemler } şeklinde tanımlanır. Sınıf tanımlarken nesne isimleri büyük harfle başlar.

Şimdi bu yapıyı daha somut bir şekilde inceleyelim.

2. Arabam Sınıfını Tanımlayalım

Öncelikle, “arabam” adında bir class (sınıf) tanımlayalım.

Bu sınıf, bir arabanın sahip olabileceği özellikleri içerecek:

  • Maximum hız (int) → Tam sayı türünde veri tutacak.
  • Renk (String) → Sözel bir bilgi olduğu için metin türünde olacak.
  • Fiyat (double) → Ondalıklı değerleri de içerebileceği için double türü kullanılacak.
  • Stok durumu (bool) → Sadece true veya false değerini alabileceği için mantıksal (boolean) tür olacak.
  • Tip (String) → Aracın tipi (örneğin “SUV”, “Sedan”, “Hatchback” vb.) sözel bir bilgidir.

Bunları Dart’ta şu şekilde tanımlayabiliriz:

class Arabam{
  // Aracın sahip olduğu özellikleri tanımlıyoruz.
  int maximumHiz = 240;
  String renk = "Beyaz";
  double fiyat = 126;
  String aracTipi = "Sedan";
  bool stokDurumu = true;
}

Bu haliyle sınıfımız temel özelliklere sahip, ancak değerleri sabit. Gerçek hayatta bu değerler

kullanıcı tarafından girilir. Bunun için constructor (yapıcı metot) kullanmamız gerekir.

3. Constructor (Yapıcı Metot) Kullanımı

Constructor, sınıftan yeni bir nesne oluşturulduğunda ilk çalışan yapıdır.

Değişkenlerin daha sonra atanacağını belirtmek için required anahtar kelimesini kullanırız.

class Arabam{
  // Aracın sahip olduğu özellikleri tanımlıyoruz.
  int maximumHiz;
  String renk;
  double fiyat;
  String aracTipi;
  bool stokDurumu;

  // Constructor tanımlıyoruz
  Arabam({required this.maximumHiz, 
					required this.renk, 
					required this.fiyat,
          required this.aracTipi, 
          required this.stokDurumu
          });

}

Artık kullanıcıdan alınan verilerle yeni bir araç oluşturabiliriz.

4. Bilgi Gösterimi İçin Metot (Method) Yazalım

Her araç bilgilerini ekranda gösterebilsin diye bir metot tanımlayalım.

Bu metot sınıf içindeki özellikleri print() ile yazdıracak:

void aracBilgisi(){
    print("---------------------------------------");
    print("Aracın Maximum Hızı : $maximumHiz km/s");
    print("Aracın Rengi        : $renk");
    print("Aracın Fiyatı       : $fiyat ₺");
    print("Aracın Tipi         : $aracTipi");
    print("Aracın Stok Durumu  : $stokDurumu");
  }

5. Nesneleri Oluşturalım

Artık sınıfımız hazır.

Yeni bir Dart dosyasında arac1, arac2 ve arac3 isimli nesneleri oluşturup bilgilerini aracBilgisi() metodu ile ekrana yazdıralım:

import 'package:dart_dersleri/blog/araba_ornek.dart'; // Arabam sınıfına erişim

void main(){
  // Araç değerlerini girmek için her aracı sisteme ekliyoruz
  var arac1 = Arabam(maximumHiz: 240,
      renk: "Beyaz",
      fiyat: 849000, 
      aracTipi: "SUV", 
      stokDurumu: true);
  var arac2 = Arabam(maximumHiz: 200, 
      renk: "Sarı", fiyat: 436000, 
      aracTipi: "Hatchback", 
      stokDurumu: true);
  var arac3 = Arabam(maximumHiz: 270, 
      renk: "Siyah", fiyat: 760000, 
      racTipi: "Sedan", 
      stokDurumu: false);

  // Kullanıcının eklediği araç bilgislerini ekrana yazdırıyoruz
  arac1.aracBilgisi();
  arac2.aracBilgisi();
  arac3.aracBilgisi();

}

Ekran Çıktısı:

---------------------------------------
Aracın Maximum Hızı : 240 km/s
Aracın Rengi        : Beyaz
Aracın Fiyatı       : 849000.0
Aracın Tipi         : SUV
Aracın Stok Durumu  : true
---------------------------------------
Aracın Maximum Hızı : 200 km/s
Aracın Rengi        : Sarı
Aracın Fiyatı       : 436000.0
Aracın Tipi         : Hatchback
Aracın Stok Durumu  : true
---------------------------------------
Aracın Maximum Hızı : 270 km/s
Aracın Rengi        : Siyah
Aracın Fiyatı       : 760000.0
Aracın Tipi         : Sedan
Aracın Stok Durumu  : false

Her araç nesnesi kendi bilgilerini taşır ve birbirinden bağımsızdır. Oluşturduğumuz Arabam sınıfı, araç bilgilerini düzenli şekilde saklayarak programlamayı daha temiz, okunabilir ve yönetilebilir hale getirdi. İşte nesne tabanlı düşünmenin gücü burada ortaya çıkar.

7. Yan Etki (Side Effect) Nedir?

Sınıflarda, bir metodun sınıf içindeki değişkenleri değiştirmesi işlemine Yan Etki (Side Effect) denir.

Yani bir metod, sınıfın durumunu (state) değiştiriyorsa bu bir yan etkidir.

Örneğin, araç üzerinde indirim uygulayabilir, rengini veya stok durumunu güncelleyebiliriz:

// Arac Stok Bilgisi Değiştirme Metodu
  // stokAc() stokları açıyoruz.
  void stokAc(){
    stokDurumu = true;
  }

  // stokKapat() stokları kapatıyoruz.
  void stokKapat(){
    stokDurumu = false;
  }

  // Araca beyaz renk tanımlanır
  void renkBeyaz(){
    renk = "Beyaz";
  }

  // Araca gri renk tanımlanır
  void renkGri(){
    renk = "Gri";
  }

  // Araca bordo renk tanımlanır
  void renkBordo(){
    renk = "Bordo";
  }

  // Araca yapılacak indirimlerin tanımlanması
  // %5 indirim saplanması
  void yuzdeBesIndirim(){
    fiyat = fiyat - ((fiyat * 5) / 100);
  }

  // %10 indirimin saplanması
  void yuzdeOnIndirim(){
    fiyat = fiyat - ((fiyat * 10) / 100);
  }

  // Engelli bireyler için %26,3 vergi indirimi
  void engelliVergiIndirim(){
    fiyat = fiyat - ((fiyat * 26.3) / 100);
  }

Şimdi ise arac1 üzerinden kullanıcı ekranından ürünlerin stoğunu açıp-kapama, renk değiştirme ve indirim uygulaması işlemlerini yapalım.

import 'package:dart_dersleri/blog/araba_ornek.dart';

void main() {
  var arac1 = Arabam(maximumHiz: 240, 
      renk: "Beyaz", 
      fiyat: 849000, 
      aracTipi: "SUV", 
      stokDurumu: true);

  arac1.aracBilgisi();

  arac1.yuzdeBesIndirim(); // %5 indirim
  arac1.renkBordo();       // Renk değiştirildi
  arac1.stokKapat();       // Stok kapatıldı

  arac1.aracBilgisi();     // Güncel bilgiler
}

Ekran Çıktısı:

---------------------------------------
Aracın Maximum Hızı : 240 km/s
Aracın Rengi        : Beyaz
Aracın Fiyatı       : 849000.0
Aracın Tipi         : SUV
Aracın Stok Durumu  : true
---------------------------------------
Aracın Maximum Hızı : 240 km/s
Aracın Rengi        : Bordo
Aracın Fiyatı       : 806550.0
Aracın Tipi         : SUV
Aracın Stok Durumu  : false

Process finished with exit code 0

Sonuç Olarak

Bu örnekle birlikte Dart dilinde:

  • Sınıf (class) tanımlamayı,
  • Nesne (object) oluşturmayı,
  • Constructor kullanımını,
  • Metotlarla bilgi göstermeyi
  • Ve sınıf içi verileri değiştirmeyi (side effect) öğrendik.

Bu yapı sayesinde kodlarınızı daha modüler, okunabilir ve bakımı kolay hale getirebilirsiniz.

Artık siz de kendi sınıflarınızı oluşturarak projelerinizi nesne tabanlı şekilde geliştirebilirsiniz.

“Dart Dersleri ” serisinin tümünü görmek için tıklayınız.