PHP
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.
Örnek çözümü göster
Önce interface Shape'i tanımla. Circle ve Square sınıflarını implements Shape ile yaz, herbirinde property + __construct + area(). Sonra describe(Shape $shape) fonksiyonunu yaz ve iki nesneyle çağır.
Örnek çözüm:
<?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));
Kendini test et
-
polymorphism neyi sağlar?
- Bir sınıfın birden çok ebeveyni olmasını
- Aynı interface'i uygulayan sınıfları ortak tipte kullanmayı
- Property'lerin gizlenmesini
- Methodların private olmasını
Cevabı göster
Aynı interface'i uygulayan sınıfları ortak tipte kullanmayı — Doğru. polymorphism aynı interface'i uygulayan sınıfları ortak tip olarak kullanmayı sağlar.
-
interface tipinde parametre yaz
function describe(____ $shape) {
echo $shape->area();
}
Cevabı göster
function describe(Shape $shape) {
echo $shape->area();
}
-
polymorphism ile ilgili ifadeleri eşleştir
- interface tipi
- Ortak parametre
- Circle, Square
- Aynı sözleşmeyi uygular
- describe($shape)
- İkisini de kabul eder
- $shape->area()
- Çağrı tek biçimli
-
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
- method isimleri farklı olmak zorundadır
Cevabı göster
interface tipinde parametreyle ortak kullanılabilirler — Doğru. Aynı interface'i uygulayan sınıflar interface tipinde parametreyle ortak kullanılır.
Sıradaki ders: interface vs abstract