Menu
Coddy logo textTech

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.

challenge icon

Görev

Kolay

Bu 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 bir Employee sınıfı tanımla. Bu sınıf, korumalı $name ve $salary özelliklerine sahip olmalıdır. Yapıcı metot her iki değeri kabul etmeli ve bunları ayarlamalıdır. Adı 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 ekle. Ayrıca "[name] earns $[salary] with bonus: $[bonus]" değerini döndüren bir getSummary() metodu ekle; burada [bonus], calculateBonus() çağrısının sonucudur.
  • Manager.php: Employee sınıfını genişleten bir Manager sı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çin parent::__construct() kullan, ardından yüzdeyi kendin ayarla. Maaşı bonus yüzdesiyle çarpıp 100'e bölerek sonucu döndürecek şekilde calculateBonus() metodunu uygula.
  • Developer.php: Employee sınıfını genişleten bir Developer sı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çin parent::__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 bir Manager ve bir Developer oluştur. Önce yönetici, ardından geliştirici için getSummary() ç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

Kendi başına pratik yap: Online PHP derleyicisi