Menu
Coddy logo textTech

Özet - Çalışan Hiyerarşisi

Coddy'nin PHP Journey'sinin Nesne Yönelimli Programlama bölümünün bir parçası — ders 26 / 91.

challenge icon

Görev

Kolay

Bu bölümde öğrendiğiniz tüm kalıtım kavramlarını bir araya getiren bir çalışan hiyerarşisi sistemi kuralım. Her çalışanın sahip olması gerekenleri tanımlayan soyut bir temel sınıf oluşturacak, ardından bonusları farklı şekilde hesaplayan özelleşmiş çalışan türleriyle bu sınıfı genişleteceksiniz.

Kodunuzu dört dosya halinde düzenleyeceksiniz:

  • Employee.php — Tüm çalışan türleri için temel teşkil eden soyut bir Employee sınıfı tanımlayın. Bu sınıf $name ve $salary adında korumalı (protected) özelliklere sahip olmalıdır. Yapıcı metot (constructor) her iki değeri de kabul eder ve atar. İsmi döndüren bir getName() metodu, maaşı döndüren bir getSalary() metodu ve alt sınıfların uygulaması gereken soyut bir calculateBonus() metodu ekleyin. Ayrıca, [bonus] kısmının calculateBonus() çağrısının sonucu olduğu "[name] earns $[salary] with bonus: $[bonus]" ifadesini döndüren bir getSummary() metodu ekleyin.
  • Manager.phpEmployee sınıfını genişleten bir Manager sınıfı tanımlayın. Employee dosyasını en üste dahil edin. Yöneticiler yüzde bazlı bir bonus alırlar. Korumalı bir $bonusPercentage özelliği ekleyin. Yapıcı metot isim, maaş ve bonus yüzdesini kabul etmelidir — ilk ikisi için parent::__construct() kullanın, ardından yüzdeyi kendiniz atayın. calculateBonus() metodunu, maaşın bonus yüzdesiyle çarpılıp 100'e bölünmesi sonucunu döndürecek şekilde uygulayın.
  • Developer.phpEmployee sınıfını genişleten bir Developer sınıfı tanımlayın. Employee dosyasını en üste dahil edin. Geliştiriciler sabit bir proje tamamlama bonusu alırlar. Korumalı bir $projectBonus özelliği ekleyin. Yapıcı metot isim, maaş ve proje bonusu miktarını kabul etmelidir — ilk ikisi için parent::__construct() kullanın, ardından proje bonusunu kendiniz atayın. calculateBonus() metodunu sadece sabit proje bonusu miktarını döndürecek şekilde uygulayın.
  • main.php — Hem Manager hem de Developer dosyalarını dahil edin. Altı girdi alacaksınız: yönetici ismi, yönetici maaşı, yönetici bonus yüzdesi, geliştirici ismi, geliştirici maaşı ve geliştirici proje bonusu. Bu değerlerle bir Manager ve bir Developer nesnesi oluşturun. Önce yönetici, sonra geliştirici üzerinde getSummary() metodunu çağırmanın sonucunu, her biri kendi satırında olacak şekilde yazdırın.

Bu meydan okuma, soyut sınıfların bir sözleşmeyi nasıl dayattığı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 paylaşılan getSummary() metodu, çok biçimlilik (polymorphism) sayesinde her iki bonus hesaplamasıyla da sorunsuz ç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şturun

// TODO: Geliştirici girdileriyle bir Developer nesnesi oluşturun

// TODO: Yöneticinin özetini yazdırın (getSummary())

// TODO: Geliştiricinin özetini yazdırın (getSummary())
?>

Nesne Yönelimli Programlama bölümündeki tüm dersler