irfo
Moderatör
- Katılım
- 7 Ocak 2026
- Mesajlar
- 290
- Tepkime puanı
- 2
- Puanları
- 18
OOP'nin gücü, sınıfların birbirinden özellik alabilmesi ve belirli kurallara uymaya zorlanabilmesinden gelir. Kalıtım (Inheritance) kodun "genişletilmesini" sağlarken, Soyutlama (Abstraction) projenin "anayasasını" yazar.
Kalıtım, bir sınıfın (alt sınıf), başka bir sınıfın (üst sınıf) tüm özelliklerini ve metotlarını miras almasıdır. PHP'de bu işlem extends anahtar kelimesi ile yapılır.
Gerçek Hayat Örneği: "Memeli" bir üst sınıftır. "Kedi" ve "Köpek" sınıfları, memelilerin ortak özelliklerini (nefes alma, beslenme) miras alır ama kendilerine has sesler çıkarırlar.
Soyutlama, bir sınıfın doğrudan nesnesinin oluşturulamayacağı, sadece diğer sınıflara "rehberlik" edeceği yapıdır. abstract olarak tanımlanan bir metot, alt sınıflar tarafından mutlaka doldurulmak zorundadır.
Kalıtım ve Soyutlama sayesinde kodunuz sadece bir yığın olmaktan çıkar, yaşayan ve kuralları olan bir sisteme dönüşür. Kalıtım ile sınıflar arası akrabalık kurarken, soyutlama ile ekibinizdeki diğer yazılımcıların (veya gelecekteki kendinizin) hata yapmasını, metotları unutmamasını sağlarsınız.
1. Kalıtım (Inheritance)
Kalıtım, bir sınıfın (alt sınıf), başka bir sınıfın (üst sınıf) tüm özelliklerini ve metotlarını miras almasıdır. PHP'de bu işlem extends anahtar kelimesi ile yapılır.
Gerçek Hayat Örneği: "Memeli" bir üst sınıftır. "Kedi" ve "Köpek" sınıfları, memelilerin ortak özelliklerini (nefes alma, beslenme) miras alır ama kendilerine has sesler çıkarırlar.
PHP:
<?php
class Hayvan {
public $isim;
public function nefesAl() {
return "$this->isim nefes alıyor...";
}
}
// Kedi sınıfı Hayvan sınıfından miras alıyor
class Kedi extends Hayvan {
public function miyavla() {
return "$this->isim: Miyav!";
}
}
$minnos = new Kedi();
$minnos->isim = "Pamuk";
echo $minnos->nefesAl(); // Üst sınıftan gelen metot
echo $minnos->miyavla(); // Kendi metodu
?>
2. Soyutlama (Abstraction)
Soyutlama, bir sınıfın doğrudan nesnesinin oluşturulamayacağı, sadece diğer sınıflara "rehberlik" edeceği yapıdır. abstract olarak tanımlanan bir metot, alt sınıflar tarafından mutlaka doldurulmak zorundadır.
PHP:
abstract class OdemeSistemi {
// Alt sınıflar bu metodu kendi içlerinde tanımlamak ZORUNDA
abstract public function odemeYap($tutar);
public function fisKes() {
return "İşlem fişi oluşturuldu.";
}
}
class KrediKarti extends OdemeSistemi {
public function odemeYap($tutar) {
return "$tutar TL kredi kartı ile çekildi.";
}
}
class Havale extends OdemeSistemi {
public function odemeYap($tutar) {
return "$tutar TL havale ile gönderildi.";
}
}
?>
Kalıtım vs. Soyutlama Karşılaştırması
| Özellik | Kalıtım (Inheritance) | Soyutlama (Abstraction) |
|---|---|---|
| Anahtar Kelime | extends | abstract |
| Amaç | Kod tekrarını önlemek (Reuse) | Kural koymak (Template) |
| Nesne Oluşturma | Üst sınıftan nesne oluşturulabilir. | Oluşturulamaz. |
| Metot Gövdesi | Metotların içi doludur. | İçi boş (zorunlu) metotlar içerebilir. |
3. Final ve Parent Anahtar Kelimeleri
[] final: Eğer bir sınıfın veya metodun miras alınmasını engellemek istiyorsanız başına final yazarsınız. Bu, "bu sınıfın son hali budur, kimse değiştiremez" demektir.
[] parent::: Alt sınıfta, üst sınıftaki bir metodu tamamen ezmek yerine üzerine ekleme yapmak istiyorsanız parent::metotAdi() şeklinde çağırabilirsiniz.
PHP:
class Admin extends Kullanici {
public function girisYap() {
parent::girisYap(); // Önce standart giriş işlemlerini yap
echo "Admin paneline yönlendiriliyorsunuz..."; // Sonra ek işlemleri yap
}
}
Sonuç
Kalıtım ve Soyutlama sayesinde kodunuz sadece bir yığın olmaktan çıkar, yaşayan ve kuralları olan bir sisteme dönüşür. Kalıtım ile sınıflar arası akrabalık kurarken, soyutlama ile ekibinizdeki diğer yazılımcıların (veya gelecekteki kendinizin) hata yapmasını, metotları unutmamasını sağlarsınız.