CodeBlanks Logo Icon CodeBlanks

Soyut sınıf mirası

PHP kursu · Orta seviye · Ders 55/115

abstract sınıftan extends edip abstract methodları uygulamayı öğrenirsin.

Soyut sınıfı miras almak

Bir soyut sınıfı extends ile miras alırsın, tıpkı normal bir sınıf gibi. Ancak soyut sınıftaki tüm abstract metotları alt sınıfta uygulaman gerekir. Aksi halde PHP fatal error verir ve alt sınıf new ile örneklenemez.

Bu, soyut sınıfın alt sınıfa yüklediği bir sözleşme (contract) oluşturur: 'Bu metotları kendi başına uygulayacaksın; gerisini benden miras alacaksın'.

Bir soyut sınıftan istediğin kadar alt sınıf türetebilirsin. Her biri abstract metotları kendine göre uygular; böylece ortak davranış paylaşılır, farklılık alt sınıflarda kalır.

İki alt sınıf, iki uygulama

Aynı soyut sınıftan birden çok alt sınıf türetmek yaygındır. Her alt sınıf, abstract metotları kendine göre uygular. Bu sayede tek bir sözleşme, birden çok somut davranışa dönüşür.

Örneğin Shape soyut sınıfı area() metodunu bildirir; Circle yarıçaptan, Rectangle en ve boydan alanı hesaplar. İkisi de aynı describe() metodunu miras alır.

$c = new Circle();
$r = new Rectangle();
echo $c->describe(); // Alan: 3.14
echo $r->describe(); // Alan: 20

Tür çeşitliliği soyut sınıfta birleşir; bu, polymorphism'in temelidir.

Uygulama İki alt sınıf: Circle ve Rectangle

Shape soyut sınıfı hazır geliyor (aşağıda). Sen Circle ve Rectangle sınıflarını Shape'ten türet ve her birinde area() metodunu uygula. Circle::area() 3.14, Rectangle::area() 20 döndürsün. Sonra her iki sınıftan birer örnek yapıp describe() çıktılarını alt alta yazdır: echo $c->describe() . "\n" . $r->describe() . "\n";

Örnek çözümü göster
float metodunu yaz, sırasıyla 3.14 ve 20 döndürsün. Örnekleri new Circle() ve new Rectangle() ile oluştur, describe() çıktılarını yazdır.
Örnek çözüm:
<?php

// Shape soyut sınıfı hazır geliyor
abstract class Shape {
    abstract public function area(): float;

    public function describe(): string {
        return "Alan: " . $this->area();
    }
}

class Circle extends Shape {
    public function area(): float {
        return 3.14;
    }
}

class Rectangle extends Shape {
    public function area(): float {
        return 20;
    }
}

$c = new Circle();
$r = new Rectangle();
echo $c->describe() . "\n" . $r->describe() . "\n";

Kendini test et

  1. Alt sınıf abstract metodu uygulamazsa ne olur?

    • PHP fatal error verir, sınıf kullanılamaz
    • Alt sınıf otomatik olarak abstract olur ama yine de new ile örneklenir
    • Metot varsayılan değer döndürür
    • Hiçbir şey olmaz, program normal çalışır
    Cevabı göster

    PHP fatal error verir, sınıf kullanılamaz — Doğru. Alt sınıf abstract metodu uygulamazsa PHP fatal error verir; new ile örneklenemez.

  2. Soyut sınıfı miras al

    class Circle ____ Shape {
        public function area(): float {
            return 3.14;
        }
    }
    Cevabı göster
    class Circle extends Shape {
        public function area(): float {
            return 3.14;
        }
    }
  3. Soyut sınıf mirasını eşleştir

    extends Shape
    Soyut sınıfı miras alır
    abstract method
    Alt sınıfta uygulanmalı
    iki alt sınıf
    İki farklı uygulama
    describe()
    Somut metot, mirasla gelir

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