CodeBlanks Logo Icon CodeBlanks

Özet - Soyut sınıflar

PHP kursu · Orta seviye · Ders 58/115

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 class ile şablon sınıf tanımı (new ile örneklenmez)
  • abstract method ile gövdesiz imza bildirimi
  • extends ile miras ve abstract metotların uygulamaları
  • Template method deseni: ebeveyn iskelet kurar, alt sınıf parçaları doldurur
  • Abstract yapıcı + parent::__construct ile 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 new ile örneklenemez; yalnızca extends ile 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::__construct açıkça çağrılır.

Bir sonraki grupta trait'lerle kod yeniden kullanımına bakacağız.

Kendini test et

  1. 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
  2. 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.

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