CodeBlanks Logo Icon CodeBlanks

Encapsulation (sarmalama)

PHP kursu · Orta seviye · Ders 27/115

İç 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

  1. 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.

  2. Encapsulation örneğini eşleştir

    Encapsulation
    İç durumu gizleme
    private $balance
    Dışarıdan yazılamaz
    deposit()
    Bakiyeye ekleme
    getBalance()
    Bakiyeyi okuma
  3. Encapsulation örüntüsü: private balance

    class BankAccount {
        ____
    }
    Cevabı göster
    class BankAccount {
        private $balance;
    }

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