Dart
Ö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.
Örnek çözümü göster
// 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);
}
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.
Örnek çözümü göster
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);
}
Kendini test et
-
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
- _balance late olarak işaretlenmelidir
Cevabı göster
_balance private olur, balance getter/setter ile erişilir — private alan ve accessor'lar kapsüllemenin temelidir.
Sıradaki ders: mixin