Meydan okuma - OOP uygulaması
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
-
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.
-
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; } } -
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