Junior
Nesne yönelimli programlamada kapsülleme nedir?
sobes.tech yapay zeka
AI'dan gelen yanıt
Kapsülleme, verilerin (özelliklerin) ve bu verilerle çalışan metodların tek bir varlıkta (nesne veya sınıf) birleştirilmesi ve iç uygulamanın dış dünyadan gizlenmesi anlamına gelir. Bu, verilere erişimi kontrol etmeye ve sınıfın iç yapısını değiştirmeye olanak tanır, diğer kodu etkilemeden.
Kapsüllemenin temel yönleri:
- Verilerin gizlenmesi: Nesnenin iç verilerine doğrudan erişim sınırlandırılmıştır. Erişim, genel erişilebilir (public) metodlar aracılığıyla yapılır (veri almak için getterlar ve veri değiştirmek için setterlar).
- İnvariantların korunması: Sınıf metodları, verilerin doğru olup olmadığını kontrol etmek için mantık içerebilir, böylece nesne geçerli bir durumda kalır.
Örnek:
<?php
class User {
private string $name; // Gizli özellik
private int $age; // Gizli özellik
public function __construct(string $name, int $age) {
$this->setName($name);
$this->setAge($age);
}
// name için getter
public function getName(): string {
return $this->name;
}
// name için validasyonlu setter
public function setName(string $name): void {
// Gerekirse isim doğrulaması eklenebilir
$this->name = $name;
}
// age için getter
public function getAge(): int {
return $this->age;
}
// age için validasyonlu setter
public function setAge(int $age): void {
if ($age < 0) {
throw new InvalidArgumentException("Yaş sıfırdan küçük olamaz.");
}
$this->age = $age;
}
// İç verileri kullanan metod
public function introduce(): string {
return "Benim adım " . $this->name . " ve " . $this->age . " yaşındayım.";
}
}
// Sınıf kullanımı
$user = new User("İvan", 30);
echo $user->introduce(); // Çıktı: Benim adım İvan ve 30 yaşındayım.
// Özel özelliğe doğrudan erişim denemesi hata ile sonuçlanır:
// $user->age = -5; // Ölümcül hata: User::$age özel özelliğine erişilemez
// Validasyonlu setter kullanımı
try {
$user->setAge(-5);
} catch (InvalidArgumentException $e) {
echo "\nHata: " . $e->getMessage(); // Çıktı: Hata: Yaş sıfırdan küçük olamaz.
}