CodeBlanks Logo Icon CodeBlanks

Meydan okuma - OOP uygulaması

PHP kursu · Orta seviye · Ders 111/115

Sınıf, interface ve trait'lerle kitap kütüphanesi yönetim sistemi yazarsın.

Meydan okuma - OOP uygulaması

Bu meydan okumada bir kitap kütüphanesi yönetim sistemi yazacaksın. Book sınıfı başlık ve yazarı özel özelliklerde tutar; dışarıdan yalnızca getter ile okunur. Borrowable interface'i borrow() methodunu sözleşme olarak bildirir; BorrowableTrait bu methodu gerçekler ve Book sınıfına use ile dahil edilir.

Bu üç araç birlikte kapsülleme (encapsulation) ve çok biçimliliği (polymorphism) birleştirir. Meydan okuma orta seviye OOP bilginin tamamını yoklar.

Trait ve interface birlikte

Trait, kodu sınıflar arasında yeniden kullanmanın yoludur; miras hiyerarşisi olmadan method ekler. BorrowableTrait, borrow() ve returnItem() methodlarını sağlar; Book sınıfı bunları use BorrowableTrait; satırıyla içe aktarır.

Interface ise yalnızca sözleşmedir: hangi methodların bulunacağını bildirir, nasıl yapılacağını söylemez. Book sınıfı implements Borrowable der; borrow() methodunu yazmak zorundadır. Trait bu methodu hazır getirir.

Uygulama Book ve Library sınıflarını yaz

Book sınıfını tanımla: private string $title ve private string $author özellikleri, bu ikisini alan bir constructor ve getTitle(): string methodu olsun. Sonra Library sınıfını yaz: private array $books = [] tutar; addBook(Book $book): void methodu ekler; count(): int methodu sayıyı döndürür. Son olarak bir Book oluştur, Library'e ekle ve echo $lib->count() . "\n" ile sayıyı yaz.

Örnek çözümü göster
İki sınıfı tanımla, constructor ile özellikleri ata, Library'e addBook ve count methodlarını ekle.
Örnek çözüm:
<?php
// Book ve Library sınıflarını yaz
class Book {
    private string $title;
    private string $author;

    public function __construct(string $title, string $author) {
        $this->title = $title;
        $this->author = $author;
    }

    public function getTitle(): string {
        return $this->title;
    }
}

class Library {
    private array $books = [];

    public function addBook(Book $book): void {
        $this->books[] = $book;
    }

    public function count(): int {
        return count($this->books);
    }
}

$lib = new Library();
$lib->addBook(new Book("Clean Code", "Robert Martin"));
echo $lib->count() . "\n";

Kendini test et

  1. Book sınıfında $title özelliğinin dışarıdan değiştirilememesi için nasıl tanımlamalısın?

    • public $title olarak
    • private $title yapar, getter eklerim
    • static $title yaparım
    • $title'ı global yaparım
    Cevabı göster

    private $title yapar, getter eklerim — Doğru. private $title ile dışarıdan doğrudan erişimi engeller, getTitle() ile kontrollü okuma sağlarsın.

  2. Trait kullanımını tamamla

    class Book implements Borrowable {
        use ____;
        private string $title;
        public function getTitle(): string {
            return $this->title;
        }
    }
    Cevabı göster
    class Book implements Borrowable {
        use BorrowableTrait;
        private string $title;
        public function getTitle(): string {
            return $this->title;
        }
    }
  3. OOP kavramlarını eşleştir

    interface
    sözleşme tanımlar
    trait
    kod paylaşır
    class
    örnek oluşturur
    private
    dış erişimi engeller

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