Menu
Coddy logo textTech

Powtórzenie – hierarchia pracowników

Część sekcji Programowanie obiektowe ścieżki PHP w Coddy. Lekcja 26 z 91.

challenge icon

Wyzwanie

Łatwy

Zbudujmy system hierarchii pracowników, który łączy wszystkie poznane przez Ciebie w tym rozdziale koncepcje dziedziczenia. Utworzysz abstrakcyjną klasę bazową, która określa, co musi mieć każdy pracownik, a następnie rozszerzysz ją o wyspecjalizowane typy pracowników obliczające premie na różne sposoby.

Rozmieścisz swój kod w czterech plikach:

  • Employee.php: Zdefiniuj abstrakcyjną klasę Employee, która będzie podstawą dla wszystkich typów pracowników. Powinna mieć chronione właściwości $name i $salary. Konstruktor przyjmuje obie wartości i je ustawia. Dodaj metodę getName(), która zwraca imię, metodę getSalary(), która zwraca wynagrodzenie, oraz metodę abstrakcyjną calculateBonus(), którą muszą zaimplementować klasy potomne. Dodaj też metodę getSummary(), która zwraca "[name] earns $[salary] with bonus: $[bonus]", gdzie [bonus] jest wynikiem wywołania calculateBonus().
  • Manager.php: Zdefiniuj klasę Manager, która rozszerza Employee. Na początku dołącz plik Employee. Menedżerowie otrzymują premię wyliczaną procentowo. Dodaj chronioną właściwość $bonusPercentage. Konstruktor powinien przyjmować imię, wynagrodzenie i procent premii: dla dwóch pierwszych wartości użyj parent::__construct(), a następnie samodzielnie ustaw procent premii. Zaimplementuj calculateBonus(), aby zwracała wynagrodzenie pomnożone przez procent premii i podzielone przez 100.
  • Developer.php: Zdefiniuj klasę Developer, która rozszerza Employee. Na początku dołącz plik Employee. Deweloperzy otrzymują stałą premię za ukończenie projektu. Dodaj chronioną właściwość $projectBonus. Konstruktor powinien przyjmować imię, wynagrodzenie i kwotę premii za projekt: dla dwóch pierwszych wartości użyj parent::__construct(), a następnie samodzielnie ustaw premię za projekt. Zaimplementuj calculateBonus(), aby po prostu zwracała stałą kwotę premii za projekt.
  • main.php: Dołącz pliki Manager i Developer. Otrzymasz sześć danych wejściowych: imię menedżera, wynagrodzenie menedżera, procent premii menedżera, imię dewelopera, wynagrodzenie dewelopera i premię dewelopera za projekt. Utwórz obiekt Manager i obiekt Developer z użyciem tych wartości. Wypisz wynik wywołania getSummary() najpierw dla menedżera, a następnie dla dewelopera, każdy w osobnym wierszu.

To wyzwanie pokazuje, jak klasy abstrakcyjne wymuszają przestrzeganie kontraktu: każdy pracownik musi umieć obliczyć swoją premię, ale logika obliczeń różni się w zależności od stanowiska. Klasa Manager używa procentu wynagrodzenia, natomiast klasa Developer otrzymuje stałą kwotę. Wspólna metoda getSummary() w klasie nadrzędnej działa bezproblemowo z każdym sposobem obliczania premii dzięki polimorfizmowi.

Spróbuj swoich sił

<?php
require_once 'Manager.php';
require_once 'Developer.php';

// Odczytaj dane wejściowe
$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: Utwórz obiekt Manager na podstawie danych wejściowych menedżera

// TODO: Utwórz obiekt Developer na podstawie danych wejściowych programisty

// TODO: Wyświetl podsumowanie menedżera (getSummary())

// TODO: Wyświetl podsumowanie programisty (getSummary())
?>

Wszystkie lekcje w sekcji Programowanie obiektowe

Poćwicz samodzielnie: Kompilator PHP online