Menu
Coddy logo textTech

Rückblick – Mitarbeiterhierarchie

Teil des Abschnitts Objektorientierte Programmierung der PHP-Journey von Coddy. Lektion 26 von 91.

challenge icon

Aufgabe

Einfach

Erstellen wir ein Hierarchiesystem für Mitarbeiter, das alle Vererbungskonzepte zusammenführt, die du in diesem Kapitel gelernt hast. Du erstellst eine abstrakte Basisklasse, die festlegt, was jeder Mitarbeiter haben muss, und erweiterst sie anschließend um spezialisierte Mitarbeitertypen, die Boni unterschiedlich berechnen.

Du organisierst deinen Code über vier Dateien:

  • Employee.php: Definiere eine abstrakte Klasse Employee, die als Grundlage für alle Mitarbeitertypen dient. Sie sollte die geschützten Eigenschaften $name und $salary besitzen. Der Konstruktor akzeptiert beide Werte und setzt sie. Füge eine Methode getName() hinzu, die den Namen zurückgibt, eine Methode getSalary(), die das Gehalt zurückgibt, sowie eine abstrakte Methode calculateBonus(), die Kindklassen implementieren müssen. Füge außerdem eine Methode getSummary() hinzu, die "[name] earns $[salary] with bonus: $[bonus]" zurückgibt, wobei [bonus] das Ergebnis des Aufrufs von calculateBonus() ist.
  • Manager.php: Definiere eine Klasse Manager, die Employee erweitert. Binde die Employee-Datei am Anfang ein. Manager erhalten einen prozentualen Bonus. Füge eine geschützte Eigenschaft $bonusPercentage hinzu. Der Konstruktor sollte Name, Gehalt und Bonusprozentsatz akzeptieren: Verwende parent::__construct() für die ersten beiden Werte und setze den Prozentsatz anschließend selbst. Implementiere calculateBonus() so, dass das Gehalt multipliziert mit dem Bonusprozentsatz, geteilt durch 100, zurückgegeben wird.
  • Developer.php: Definiere eine Klasse Developer, die Employee erweitert. Binde die Employee-Datei am Anfang ein. Entwickler erhalten einen festen Bonus für den Projektabschluss. Füge eine geschützte Eigenschaft $projectBonus hinzu. Der Konstruktor sollte Name, Gehalt und den Bonusbetrag für den Projektabschluss akzeptieren: Verwende parent::__construct() für die ersten beiden Werte und setze den Projektbonus anschließend selbst. Implementiere calculateBonus(), sodass einfach der feste Bonusbetrag für das Projekt zurückgegeben wird.
  • main.php: Binde sowohl die Manager- als auch die Developer-Datei ein. Du erhältst sechs Eingaben: den Namen des Managers, das Gehalt des Managers, den Bonusprozentsatz des Managers, den Namen des Entwicklers, das Gehalt des Entwicklers und den Projektbonus des Entwicklers. Erstelle mit diesen Werten einen Manager und einen Developer. Gib zuerst das Ergebnis des Aufrufs von getSummary() für den Manager und anschließend für den Entwickler aus, jeweils in einer eigenen Zeile.

Diese Aufgabe zeigt, wie abstrakte Klassen einen Vertrag erzwingen: Jeder Mitarbeiter muss seinen Bonus berechnen können, aber die Berechnungslogik unterscheidet sich je nach Rolle. Der Manager verwendet einen Prozentsatz seines Gehalts, während der Developer einen festen Betrag erhält. Die gemeinsame Methode getSummary() in der übergeordneten Klasse funktioniert dank Polymorphie nahtlos mit beiden Bonusberechnungen.

Probier es selbst

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

// Eingaben lesen
$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: Erstelle ein Manager-Objekt mit den Manager-Eingaben

// TODO: Erstelle ein Developer-Objekt mit den Developer-Eingaben

// TODO: Gib die Zusammenfassung des Managers aus (getSummary())

// TODO: Gib die Zusammenfassung des Developers aus (getSummary())
?>

Alle Lektionen in Objektorientierte Programmierung

Übe selbstständig: Online-PHP-Compiler