Özet - Kapsülleme
- Dart kursu
- Orta seviye
- Ders 23/116
- 5 dk
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
// 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
// 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
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
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.