Özet - Soyut sınıflar
abstract class, abstract method ve template method'la veri kaynak sistemi yazarsın.
Özet - Soyut sınıflar
Bu grupta soyut sınıfların (abstract class) beş temel kavramını öğrendin:
abstract classile şablon sınıf tanımı (new ile örneklenmez)abstract methodile gövdesiz imza bildirimiextendsile miras ve abstract metotların uygulamaları- Template method deseni: ebeveyn iskelet kurar, alt sınıf parçaları doldurur
- Abstract yapıcı +
parent::__constructile ortak başlangıç
Bunları bir veri kaynak sisteminde birleştireceksin: DataSource soyut sınıfı fetch() metodunu bildirir, alt sınıflar veriyi getirir; load() şablon metodu tüm iş akışını yönetir.
Uygulama Veri kaynak sistemi
Bir DataSource soyut sınıfı tanımla. protected string $name property olsun. Yapıcı public function __construct(string $name) ile $this->name = $name atasın. abstract metot fetch(): array bildir. Şablon metot public function load(): string olsun: $rows = $this->fetch(); ile veriyi alsın, return $this->name . ": " . count($rows) . " kayıt"; döndürsün. Sonra FileSource sınıfını DataSource'tan türet; fetch() metodu return ["a", "b", "c"]; döndürsün. $src = new FileSource("üye verisi") ve echo $src->load() . "\n";
Örnek çözümü göster
array ve load() metodu olsun. load() içinde $rows = $this->fetch() ile veriyi al, count($rows) ile say. FileSource alt sınıfı fetch()'i uygular.
Örnek çözüm:
<?php
// DataSource soyut sınıfını tanımla
abstract class DataSource {
protected string $name;
public function __construct(string $name) {
$this->name = $name;
}
abstract public function fetch(): array;
public function load(): string {
$rows = $this->fetch();
return $this->name . ": " . count($rows) . " kayıt";
}
}
class FileSource extends DataSource {
public function fetch(): array {
return ["a", "b", "c"];
}
}
$src = new FileSource("üye verisi");
echo $src->load() . "\n";
Soyut sınıf ipuçları
Soyut sınıflar miras hiyerarşisinin temelidir. Şunları unutma:
- Soyut sınıf
newile örneklenemez; yalnızcaextendsile miras alınır. - Abstract metot gövdesiz bildirilir; alt sınıf aynı imzayla uygular.
- İçinde somut metot ve property bulunabilir; bunlar mirasla geçer.
- Template method deseni iş akışını tek yerde toplar.
- Alt sınıf yapıcı tanımlarsa
parent::__constructaçıkça çağrılır.
Bir sonraki grupta trait'lerle kod yeniden kullanımına bakacağız.
Kendini test et
-
Tüm soyut sınıf kavramlarını eşleştir
- abstract class
- Şablon, new ile örneklenmez
- abstract method
- Gövdesiz imza
- extends
- Soyut sınıfı miras alır
- template method
- İskelet kurar
- parent::__construct
- Yapıcıyı çağırır
-
Hangi ifade soyut sınıflar için doğrudur?
- Hem somut metot hem abstract metot içerebilir; new ile örneklenemez
- Yalnızca abstract metot içerebilir
- Birden çok sınıfa aynı anda extends edilebilir
- Interface yerine kullanılınca implements gerekir
Cevabı göster
Hem somut metot hem abstract metot içerebilir; new ile örneklenemez — Doğru. Soyut sınıf hem somut hem abstract metot içerebilir ve new ile örneklenemez.