Soyut Sınıflar


    × Bunları biliyor muydunuz?
"Başlangıç kontrolcüsü üzerinden $this nesnesini data olarak göndererek statik olmayan sınıflara ilgili data üzerinden erişebilirsiniz."


Soyut sınıflar kullanım olarak normal bir sınıf gibidir. Ancak sınıflar gibi örneklenemezler. Soyut denmesinin nedeni de budur. Soyut sınıflar bir arayüz ve bir sınıfın birleşimi gibi düşünülebilir. Nesne kalıtımı, ortak nesne kullanımı ve prototip çıkarma konusunda oldukça başarılı yapılardır. Benzer işi yapan sınıf kümelerine ortak nesne oluşturmak ve bu sınıfların belli bir yapıya uymalarını sağlamak açısından sıkça kullanılırlar. Soyut sınıf tanımlaması yapılırken class deyiminden önce abstract deyimi kullanılır.

Soyut sınıfların daha iyi anlaşılması için aşağıdaki karşılaştırma tablosunu inceleyin;

Özellikler Sınıflar Arayüzler Soyut Sınıflar
Örnek Oluşturulabilir. Oluşturulamaz. Oluşturulamaz.
Yöntemler Gövdeli olurlar. Gövdesiz olur. Duruma göre gövdeli de gövdesiz de olabilir.
Kalıtım Kalıtım yolu ile aktarılabilir. Aktarılamaz. Aktarılabilir.
İçerik Benzerlği Alt sınıfları belli bir türe göre hareket etmeye zorlamazlar. Zorlarlar. Sadece abstract deyimi ile tanımlanmış yöntemler zorlarlar.

 

 

# Söz Dizimi


Soyut sınıfların söz dizimi sınıf ve arayüzlerin söz dizimine benzemekle birlikte class deyimi başına abstract deyimi getirilir.

<?php abstract class ExampleClassAbstract
{
    # Abstract yöntemler public görünürlüğe sahip ve gövdesiz olmalıdır.
    # Arayüz kullanımına benzer.
    # Alt sınıf aynı yöntemi içermesi için zorlar.
    abstract public function exampleFunction();

    # Ortak yöntemler gövdeli olur.
    # Nesne kalıtımına benzer.
    # Alt sınıflar için ortak yöntem oluşturur.
    public function commonFunction()
    {
        return 'Common Function';
    }
}

 

 

# Soyut Sınıf Oluşturun


Daha önce oluşturduğumuz Vechile:: sınıfımızı soyut sınıf haline getirelim.

Dosya: Vehicle.php
<?php abstract class Vehicle
{
    protected $color = 'White';
 
    abstract public function wayType();

    public function setColor(string $color)
    {
        $this->color = $color;
    }

    public function getColor() : string
    {
        return $this->color;
    }
}

Yukarıdaki soyut sınıf miras alacak alt sınıfların wayType() yöntemine sahip olması için zorladık. Abstract deyimi almış bir yöntemin public görünürlüğe sahip ve gövdesiz olması gerektiğine dikkat edin.