復習 - 従業員の階層構造
CoddyのPHPジャーニー「オブジェクト指向プログラミング」セクションの一部。レッスン 26/91。
チャレンジ
簡単この章で学んだ継承の概念をすべて組み合わせた従業員階層システムを作りましょう。すべての従業員が持つべきものを Define する abstract な基底 class を作成し、それを拡張して、異なる方法でボーナスを計算する専門的な従業員タイプを作成します。
コードを4つのファイルに分けて整理します。
Employee.php: すべての従業員タイプの基盤となる abstract なEmployeeclassを Define します。protected な properties$nameと$salaryを持たせます。constructor は両方の値を accepts して設定します。名前を returns するgetName()method、給与を returns するgetSalary()method、そして子classが Implement する必要がある abstract methodcalculateBonus()を含めます。また、"[name] earns $[salary] with bonus: $[bonus]"を returns するgetSummary()method も追加します。ここで[bonus]はcalculateBonus()を呼び出した結果です。Manager.php:Employeeを extends するManagerclassを Define します。先頭で Employee ファイルを Include します。Manager は percentage ベースのボーナスを受け取ります。protected な$bonusPercentageproperty を追加します。constructor は name、salary、bonus percentage を accepts する必要があります。最初の2つにはparent::__construct()を使用し、その後 percentage を自分で設定します。salary に bonus percentage を掛けて100で割った値を returns するようにcalculateBonus()を Implement します。Developer.php:Employeeを extends するDeveloperclassを Define します。先頭で Employee ファイルを Include します。Developer は fixed な project 完了ボーナスを受け取ります。protected な$projectBonusproperty を追加します。constructor は name、salary、project bonus amount を accepts する必要があります。最初の2つにはparent::__construct()を使用し、その後 project bonus を自分で設定します。fixed な project bonus amount をそのまま returns するようにcalculateBonus()を Implement します。main.php: Manager ファイルと Developer ファイルの両方を Include します。6つの inputs、つまり manager name、manager salary、manager bonus percentage、developer name、developer salary、developer project bonus を受け取ります。これらの値でManagerとDeveloperを Create します。まず manager に対して、次に developer に対してgetSummary()を呼び出した結果を Print し、それぞれを別の行に出力します。
この challenge は、abstract classes がどのように contract を強制するかを示しています。すべての employee はボーナスを calculateBonus できなければなりませんが、その計算ロジックは role によって異なります。Manager は salary の percentage を使用し、Developer は fixed amount を受け取ります。parent class にある共有の getSummary() method は、polymorphism を通じてどちらのボーナス計算ともシームレスに連携します。
自分で試してみよう
<?php
require_once 'Manager.php';
require_once 'Developer.php';
// 入力を読み取る
$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: マネージャーの入力でManagerオブジェクトを作成する
// TODO: デベロッパーの入力でDeveloperオブジェクトを作成する
// TODO: マネージャーのサマリーを出力する (getSummary())
// TODO: デベロッパーのサマリーを出力する (getSummary())
?>オブジェクト指向プログラミングのすべてのレッスン
自分で練習してみよう: PHPオンラインコンパイラ