Sobes.tech
Junior

Nesne yönelimli programlamada kalıtım ilkeleri hakkında konuşabilir misin?

sobes.tech yapay zeka

AI'dan gelen yanıt

Miras kalıtım, mevcut bir sınıfa (ebeveyn, temel veya üst sınıf) dayalı yeni bir sınıf (alt veya türetilmiş) oluşturmayı sağlar. Alt sınıf, ebeveyn sınıfın özelliklerini (özellikler) ve yöntemlerini miras alır ve ayrıca kendi özelliklerini ekleyebilir veya miras alınanları geçersiz kılabilir.

Ana kavramlar:

  • İşlevselliğin genişletilmesi: Ebeveyn sınıfından kalıtım yoluyla, alt sınıf temel işlevselliği alır ve yeni yöntemler veya özellikler ekleyerek genişletebilir.
  • Yöntemlerin geçersiz kılınması: Alt sınıf, aynı isimde yeni bir yöntem oluşturarak (çok biçimlilik) ebeveyn sınıfından kalıtılan yöntemin davranışını değiştirebilir.
  • Kodu yeniden kullanma: Ortak mantık ebeveyn sınıfta tanımlandığı için kod tekrarını önler.
  • "Bir şeydir" ilişkisi: Kalıtım, "bir şeydir" (is-a) ilişkisini modelleştirir. Örneğin, "Bir kedi bir hayvandır".
<?php

class Animal {
    protected $name;

    public function __construct($name) {
        $this->name = $name;
    }

    public function speak() {
        echo "Bilinmeyen ses\n";
    }
}

class Dog extends Animal {
    public function speak() {
        echo "Hav hav!\n";
    }
}

class Cat extends Animal {
    public function speak() {
        echo "Miyav miyav!\n";
    }
}

$dog = new Dog("Bobby");
$dog->speak(); // Çıktı: Hav hav!

$cat = new Cat("Murka");
$cat->speak(); // Çıktı: Miyav miyav!

?>

PHP'de kalıtım, extends anahtar kelimesiyle gerçekleştirilir. Bir sınıf yalnızca bir sınıftan kalıtım alabilir (tekli kalıtım), ancak çoklu arabirimleri uygulayabilir.

Ebeveyn sınıfın özelliklerine ve yöntemlerine, alt sınıftan parent:: anahtar kelimesi kullanılarak erişilebilir.

<?php

class ParentClass {
    protected $value = "ebeveyn değeri";

    public function showValue() {
        echo $this->value . "\n";
    }
}

class ChildClass extends ParentClass {
    // Özelliğin üzerine yazma
    protected $value = "çocuk değeri";

    public function showValues() {
        // Ebeveyn sınıfın metodunu çağır
        parent::showValue();
        // Çocuk sınıfın değerini göster
        echo $this->value . "\n";
    }
}

$obj = new ChildClass();
$obj->showValues();
// Çıktı:
// ebeveyn değeri
// çocuk değeri

?>