PHP
Encapsulation (sarmalama)
İç durumu private yapıp dışarıdan kontrollü erişim sağlamayı öğrenirsin.
Encapsulation (sarmalama)
Encapsulation (sarmalama), bir nesnenin iç durumunu dışarıdan gizleyip bu duruma erişimi kontrollü metotlarla sağlamaktır. Temel araç private görünürlüktür.
Örneğin bir BankAccount sınıfında balance property'sini private yaparsan; dışarıdan kimse doğrudan $account->balance = -1000 yazamaz. Bakiye yalnızca deposit() veya withdraw() gibi metotlarla değişebilir; bu metotlar da negatif tutar, yetersiz bakiye gibi kontrolleri uygular.
Böylece nesne her zaman tutarlı bir durumda kalır. Encapsulation, dışarıya sade bir arayüz sunar; iç detayları gizler ve değişiklikleri tek yerden yönetmeyi sağlar.
Encapsulation örneği: BankAccount
Encapsulation'ın gücünü bir örnekle görelim:
balance property'si private int $balance = 0; olarak tanımlanır.deposit(int $amount) metodu $amount > 0 kontrolü yapar ve $this->balance += $amount ekler.getBalance() metodu mevcut bakiyeyi okur.
Bu tasarımda dışarıdan $account->balance yazılamaz. Bakiyeyi değiştirmenin tek yolu deposit()'tir ve o da negatif miktarları reddeder. Böylece bakiye her zaman negatif olamaz; sınıfın değişmez koşulu (invariant) korunur.
Uygulama Encapsulated BankAccount sınıfı
Bir BankAccount sınıfı tanımla. private int $balance = 0 property'si olsun. public function deposit(int $amount): void metodu $this->balance += $amount yapsın. public function getBalance(): int metodu return $this->balance döndürsün. Sonra $account = new BankAccount() oluştur, $account->deposit(100) ve $account->deposit(50) çağır ve echo $account->getBalance() . "\n" yazdır.
Örnek çözümü göster
private $balance tanımla, deposit $this->balance += $amount yapsın, getBalance return $this->balance döndürsün.
Örnek çözüm:
<?php
// BankAccount sınıfını encapsulation ile tanımla
class BankAccount {
private int $balance = 0;
public function deposit(int $amount): void {
$this->balance += $amount;
}
public function getBalance(): int {
return $this->balance;
}
}
$account = new BankAccount();
$account->deposit(100);
$account->deposit(50);
echo $account->getBalance() . "\n";
Kendini test et
-
Encapsulation ne sağlar?
- Tüm property'lerin her yerden erişilebilir olmasını
- İç durumu gizleyip kontrollü erişim sunmayı
- Sınıfın alt sınıflara miras kalmasını
- Sınıfın birden fazla ebeveyn almasını
Cevabı göster
İç durumu gizleyip kontrollü erişim sunmayı — Doğru. Encapsulation iç durumu private yapıp kontrollü metotlarla erişim sağlar.
-
Encapsulation örneğini eşleştir
- Encapsulation
- İç durumu gizleme
- private $balance
- Dışarıdan yazılamaz
- deposit()
- Bakiyeye ekleme
- getBalance()
- Bakiyeyi okuma
-
Encapsulation örüntüsü: private balance
class BankAccount {
____
}
Cevabı göster
class BankAccount {
private $balance;
}
Sıradaki ders: Getter ve setter metotlar