CodeBlanks Logo Icon CodeBlanks

Polymorphism (çok biçimlilik)

Aynı interface'i uygulayan farklı sınıfları ortak tipte kullanmayı öğrenirsin.

Polymorphism (çok biçimlilik)

Polymorphism, aynı interface'i uygulayan farklı sınıfların ortak tip olarak kullanılabilmesidir. Bir Shape interface'i hem Circle hem Square tarafından uygulandığında, ikisi de birer Shape'tir.

Bir fonksiyon function describe(Shape $shape) biçiminde interface tipinde parametre alabilir. İçeride $shape->area() çağrısı yapar; Circle veya Square geçilsen aynı çağrı çalışır.

Böylece kod, somut sınıfa değil sözleşmeye bağlı kalır. Yeni bir Shape sınıfı eklense bile describe fonksiyonu değişmez. Bu, açık-genişletilebilir tasarımın temelidir.

interface tipinde parametre

Bir fonksiyonun parametresini interface tipinde yazarsan, o interface'i uygulayan her sınıfı geçebilirsin. Örnek: function describe(Shape $shape): void { echo $shape->area(); }.

Artık describe(new Circle(2)) ve describe(new Square(3)) çağrılarının ikisi de geçerlidir. Fonksiyon somut sınıfı bilmez; yalnızca area() methodunun varlığına güvenir.

PHP, parametre olarak geçilen nesnenin interface'i uygulayıp uygulamadığını denetler. Uygulamıyorsa fatal error fırlatır. Bu, tip güvenliğini (type safety) sağlar.

Uygulama Shape ile polymorphism örneği

Önce interface Shape { public function area(): float; } tanımla. Sonra class Circle implements Shape ve class Square implements Shape yaz. Her ikisinde de private float property (Circle'da $radius, Square'de $side), __construct(float) yapıcı ve area() methodu olsun. Circle 3.14 * $this->radius * $this->radius, Square $this->side * $this->side döndürsün. Sonra function describe(Shape $shape): void { echo $shape->area() . "\n"; } yaz ve describe(new Circle(2)) ile describe(new Square(3)) çağır.

Başlangıç kodu

index.php
<?php
// Shape interface ve polymorphism örneği

Örnek çözüm

index.php
<?php
// Shape interface ve polymorphism örneği
interface Shape {
    public function area(): float;
}
class Circle implements Shape {
    private float $radius;
    public function __construct(float $radius) {
        $this->radius = $radius;
    }
    public function area(): float {
        return 3.14 * $this->radius * $this->radius;
    }
}
class Square implements Shape {
    private float $side;
    public function __construct(float $side) {
        $this->side = $side;
    }
    public function area(): float {
        return $this->side * $this->side;
    }
}
function describe(Shape $shape): void {
    echo $shape->area() . "\n";
}
describe(new Circle(2));
describe(new Square(3));

Beklenen çıktı

12.56
9

Soru ve cevaplar

Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.

1 polymorphism neyi sağlar?

  • Bir sınıfın birden çok ebeveyni olmasını
  • Aynı interface'i uygulayan sınıfları ortak tipte kullanmayı Doğru cevap
  • Property'lerin gizlenmesini
  • Methodların private olmasını

Açıklama: polymorphism aynı interface'i uygulayan sınıfları ortak tip olarak kullanmayı sağlar.

2 interface tipinde parametre yaz

Soru
function describe(____ $shape) {
    echo $shape->area();
}
Cevap
function describe(Shape $shape) {
    echo $shape->area();
}

Açıklama: describe(Shape $shape) ile parametre interface tipinde olur.

3 polymorphism ile ilgili ifadeleri eşleştir

Kavram Anlamı
interface tipi Ortak parametre
Circle, Square Aynı sözleşmeyi uygular
describe($shape) İkisini de kabul eder
$shape->area() Çağrı tek biçimli

4 Aynı interface'i uygulayan sınıflar için ne doğrudur?

  • Birbirinin yerine kullanılamazlar
  • Yalnızca ebeveyn sınıf olarak kullanılabilirler
  • interface tipinde parametreyle ortak kullanılabilirler Doğru cevap
  • method isimleri farklı olmak zorundadır

Açıklama: Aynı interface'i uygulayan sınıflar interface tipinde parametreyle ortak kullanılır.

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