CodeBlanks Logo Icon CodeBlanks

Özet - Kapsülleme

private, getter/setter ve static'i birleştirerek bir Account sınıfı yazarsın.

Özet - Kapsülleme

Bu grupta kapsüllemenin temel araçlarını gördün: private, getter/setter, final/const, late ve static. Şimdi bunları bir Account sınıfında birleştireceğiz.

Bir Account sınıfı private _balance alanını taşıyacak, getter ve setter ile kontrollü erişim sunacak. Ayrıca static int totalAccounts sayacı her yeni hesabı sayacak. Bu iki özellik birleşince hem örnek düzeyinde gizlilik hem de sınıf düzeyinde paylaşım elde edilir; kapsüllemenin tam bir örneği olur.

Uygulama Account'a private alan ve accessor ekle

Account adında bir sınıf tanımla. double _balance private alanını ekle. Account(double initial) : _balance = initial; yapıcısını yaz. double get balance => _balance; getter'ını ve set balance(double value) { if (value < 0) return; _balance = value; } setter'ını ekle. main içinde var a = Account(100); ile örnek oluştur ve print(a.balance) çağrısı yap.

Başlangıç kodu

main.dart
// Account sınıfını tanımla
// private _balance, yapıcı, getter ve setter ekle

void main() {
  // Account(100) örneğini oluştur ve a.balance yazdır
}

Örnek çözüm

main.dart
// Account sınıfını tanımla
class Account {
  double _balance;
  Account(double initial) : _balance = initial;
  double get balance => _balance;
  set balance(double value) {
    if (value < 0) return;
    _balance = value;
  }
}

void main() {
  var a = Account(100);
  print(a.balance);
}

Beklenen çıktı

100.0

Account'a static sayaç ekle

İkinci adımda Account sınıfına bir static sayaç ekleyeceğiz. Bu sayaç, kaç tane Account örneği oluşturulduğunu sınıf düzeyinde izler.

Örnek: static int totalAccounts = 0; alanı ve yapıcı içinde totalAccounts++;. Her yeni Account örneğinde sayaç artar. Account.totalAccounts ile sınıf üzerinden okunur; örnek gerekmez. Bu yapı, istatistik toplamak, kaynakları izlemek ve örnekleri benzersiz numaralamak için uygundur.

Uygulama Account'a static sayaç ekle

Var olan Account sınıfını koru (private _balance, yapıcı, getter, setter). Sınıfa static int totalAccounts = 0; alanını ekle. Yapıcı gövdesine totalAccounts++; satırını ekle (yapıcı gövdesi aç ve _balance = initial initializer list'ten sonra). main içinde var a = Account(100); ve var b = Account(200); ile iki örnek oluştur, sonra print(Account.totalAccounts) ve print(a.balance) çağrılarını yap.

Başlangıç kodu

main.dart
class Account {
  double _balance;
  Account(double initial) : _balance = initial;
  double get balance => _balance;
  set balance(double value) {
    if (value < 0) return;
    _balance = value;
  }
}

// Sınıfa static sayaç alanı ekle ve yapıcı gövdesinde artır

void main() {
  // İki Account örneği oluştur ve totalAccounts ile a.balance yazdır
}

Örnek çözüm

main.dart
class Account {
  double _balance;
  static int totalAccounts = 0;
  Account(double initial) : _balance = initial {
    totalAccounts++;
  }
  double get balance => _balance;
  set balance(double value) {
    if (value < 0) return;
    _balance = value;
  }
}

void main() {
  var a = Account(100);
  var b = Account(200);
  print(Account.totalAccounts);
  print(a.balance);
}

Beklenen çıktı

2
100.0

Soru ve cevaplar

Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.

1 Bir Account sınıfı için hangisi doğrudur?

  • balance static olmak zorundadır
  • _balance public olur, balance metodu olmaz
  • _balance private olur, balance getter/setter ile erişilir Doğru cevap
  • _balance late olarak işaretlenmelidir

Açıklama: private alan ve accessor'lar kapsüllemenin temelidir.

Orta seviye bölümündeki tüm dersler