Tekrar - Çalışan Hiyerarşisi
Coddy'nin PHP Journey'sinin Nesne Yönelimli Programlama bölümünün bir parçası. Ders 26 / 91.
Görev
KolayBu bölümde öğrendiğin tüm kalıtım kavramlarını bir araya getiren bir çalışan hiyerarşisi sistemi oluşturalım. Her çalışanın sahip olması gereken özellikleri tanımlayan soyut bir temel sınıf oluşturacak, ardından bonusları farklı şekilde hesaplayan özelleştirilmiş çalışan türleriyle bu sınıfı genişleteceksin.
Kodunu dört dosyaya ayıracaksın:
Employee.php: Tüm çalışan türlerinin temeli olarak görev yapan soyut birEmployeesınıfı tanımla. Bu sınıf, korumalı$nameve$salaryözelliklerine sahip olmalıdır. Yapıcı metot her iki değeri kabul etmeli ve bunları ayarlamalıdır. Adı döndüren birgetName()metodu, maaşı döndüren birgetSalary()metodu ve alt sınıfların uygulaması gereken soyut bircalculateBonus()metodu ekle. Ayrıca"[name] earns $[salary] with bonus: $[bonus]"değerini döndüren birgetSummary()metodu ekle; burada[bonus],calculateBonus()çağrısının sonucudur.Manager.php:Employeesınıfını genişleten birManagersınıfı tanımla. En üstte Employee dosyasını dahil et. Yöneticiler yüzdeye dayalı bir bonus alır. Korumalı bir$bonusPercentageözelliği ekle. Yapıcı metot ad, maaş ve bonus yüzdesini kabul etmelidir: ilk ikisi içinparent::__construct()kullan, ardından yüzdeyi kendin ayarla. Maaşı bonus yüzdesiyle çarpıp 100'e bölerek sonucu döndürecek şekildecalculateBonus()metodunu uygula.Developer.php:Employeesınıfını genişleten birDevelopersınıfı tanımla. En üstte Employee dosyasını dahil et. Geliştiriciler sabit bir proje tamamlama bonusu alır. Korumalı bir$projectBonusözelliği ekle. Yapıcı metot ad, maaş ve proje bonusu miktarını kabul etmelidir: ilk ikisi içinparent::__construct()kullan, ardından proje bonusunu kendin ayarla.calculateBonus()metodunu, sabit proje bonusu miktarını doğrudan döndürecek şekilde uygula.main.php: Hem Manager hem de Developer dosyalarını dahil et. Altı girdi alacaksın: yönetici adı, yönetici maaşı, yönetici bonus yüzdesi, geliştirici adı, geliştirici maaşı ve geliştirici proje bonusu. Bu değerlerle birManagerve birDeveloperoluştur. Önce yönetici, ardından geliştirici içingetSummary()çağrısının sonucunu yazdır; her biri kendi satırında olmalıdır.
Bu görev, soyut sınıfların bir sözleşmeyi nasıl zorunlu kıldığını gösterir: her çalışan bonusunu hesaplayabilmelidir, ancak hesaplama mantığı role göre değişir. Manager maaşının bir yüzdesini kullanırken Developer sabit bir miktar alır. Üst sınıftaki ortak getSummary() metodu, çok biçimlilik sayesinde her iki bonus hesaplamasıyla da sorunsuz şekilde çalışır.
Kendin dene
<?php
require_once 'Manager.php';
require_once 'Developer.php';
// Girdileri oku
$managerName = trim(fgets(STDIN));
$managerSalary = floatval(trim(fgets(STDIN)));
$managerBonusPercentage = floatval(trim(fgets(STDIN)));
$developerName = trim(fgets(STDIN));
$developerSalary = floatval(trim(fgets(STDIN)));
$developerProjectBonus = floatval(trim(fgets(STDIN)));
// TODO: Yönetici girdileriyle bir Manager nesnesi oluştur
// TODO: Geliştirici girdileriyle bir Developer nesnesi oluştur
// TODO: Yöneticinin özetini yazdır (getSummary())
// TODO: Geliştiricinin özetini yazdır (getSummary())
?>Nesne Yönelimli Programlama bölümündeki tüm dersler
1OOP Temelleri
Harici DosyalarOOP'ye GirişSınıflar ve Nesneler$this Anahtar SözcüğüMetotlarÖzelliklerYapıcı (__construct)Yıkıcı (__destruct)Tekrar - Basit Hesap Makinesi4Kalıtım
Temel Kalıtımparent:: Anahtar SözcüğüMetot Geçersiz Kılmafinal Anahtar SözcüğüSoyut SınıflarTekrar - Çalışan Hiyerarşisi7Kapsülleme
Public, Protected, PrivateErişim Belirleyicileri DerinlemesineGetter ve Setter'larBilgi GizlemeYapıcı Özellik Terfisi (8.0)Tekrar - Öğrenci Kayıt Sistemi10İleri Düzey OOP Kavramları
Composition ve KalıtımBağımlılık EnjeksiyonuAnonim SınıflarEnum'lar (PHP 8.1)Fiber'lar (PHP 8.1)Nesne Klonlamaya Derinlemesine BakışÜreteçler ve Yineleyiciler13Tasarım Kalıpları Bölüm 2
Komut KalıbıAdaptör KalıbıDekoratör KalıbıŞablon Metot KalıbıDurum KalıbıBileşik KalıpDepo Kalıbı2Namespace’ler ve Autoloading
Namespace’lere Girişuse Anahtar SözcüğüPSR-4 Autoloading StandardıComposer AutoloaderTekrar - Düzenli Proje5Arayüzler ve Sözleşmeler
Arayüzlere GirişArayüzleri UygulamaBirden Çok Arayüz UygulamaArayüz ve Soyut Sınıf KarşılaştırmasıArayüzlerle Tür İpuçlarıTekrar - Şekil Hesaplayıcı8Sihirli Metotlar
Sihirli Metotlara Giriş__toString ve __debugInfo__get, __set, __isset, __unset__call ve __callStatic__clone ve Nesne Klonlama__serialize ve __unserializeTekrar - Özel Koleksiyon3Sınıf Özellikleri
Örnek ve Statik ÖzelliklerSınıflarda SabitlerStatik Metotlar ve ÖzelliklerPrivate ve Protected ÖzelliklerSalt Okunur Özellikler (PHP 8.1)Tekrar - Banka Hesabı Yöneticisi6Çok Biçimlilik
Metot Geçersiz Kılmayı Yeniden Ele AlmaArayüzler Yoluyla Çok BiçimlilikTür İpuçları ve Birleşim TürleriGeç Bağlanan Statik ÇağrılarÖzet - Ödeme İşlemcisi9Trait'ler
Trait'lere GirişBirden Çok Trait KullanımıTrait Çakışmalarını ÇözümlemeTrait'lerde Soyut MetotlarTrait'ler ve Kalıtım Karşılaştırması12Tasarım Desenleri 1. Bölüm
Tasarım Desenlerine GirişSingleton DeseniFactory DeseniObserver DeseniStrategy DeseniKendi başına pratik yap: Online PHP derleyicisi