まとめ:従業員の役割
CoddyのLuaジャーニー「Object Oriented Programming」セクションの一部 — レッスン 42/70。
チャレンジ
簡単異なる従業員タイプが同じインターフェースを共有しながら、ボーナスを異なる方法で計算する様子を示す給与ボーナスシステムを構築しましょう!
4つのファイルにわたって、小さな従業員の階層構造を作成します:
Employee.lua: 一般的な従業員を表すベースクラスです。コンストラクタ:new(name, salary)は、従業員の名前と給与の両方を保存する必要があります。給与の10%(一般従業員のデフォルトボーナス)を返す:calculateBonus()メソッドと、名前を取得するための:getName()メソッドを含めてください。Manager.lua: Employeeを継承する子クラスです。マネージャーは懸命に働き、報われます。:calculateBonus()をオーバーライドして、デフォルトの10%ではなく給与の20%を返すようにしてください。Intern.lua: Employeeを継承するもう一つの子クラスです。インターンは給与に関係なく50の固定ボーナスを受け取ります。:calculateBonus()をオーバーライドして、常にこの金額を返すようにしてください。main.lua: すべてをまとめます!従業員の名前として3つの入力、給与として3つの入力を読み取ります。Managerを1人、Internを1人、そして一般のEmployeeを1人作成します。これら3つすべてをテーブルに格納し、ループ処理を行って各人の名前と計算されたボーナスを出力してください。
6つの入力を受け取ります:
- マネージャーの名前
- マネージャーの給与
- インターンの名前
- インターンの給与
- 一般従業員の名前
- 一般従業員の給与
コレクション内の各従業員について(Manager、Intern、Employeeの順)、次の形式で名前とボーナスを出力してください:
{name}: {bonus}例えば、入力が Alice、5000、Bob、2000、Carol、3000 の場合、出力は次のようになります:
Alice: 1000
Bob: 50
Carol: 300同じ :calculateBonus() の呼び出しが、各従業員のタイプに基づいて異なる結果を生成することに注目してください。これがポリモーフィズムの働きです!マネージャーは5000の20%を受け取り、インターンは一律50を受け取り、一般従業員は3000の10%を受け取ります。
自分で試してみよう
-- main.lua: すべてを統合する
local Employee = require('Employee')
local Manager = require('Manager')
local Intern = require('Intern')
-- 入力を読み込む
local managerName = io.read()
local managerSalary = tonumber(io.read())
local internName = io.read()
local internSalary = tonumber(io.read())
local employeeName = io.read()
local employeeSalary = tonumber(io.read())
-- TODO: Manager、Intern、および通常のEmployeeを1つずつ作成する
-- TODO: 3つすべてをテーブルに保存する(順序:Manager、Intern、Employee)
-- TODO: テーブルをループし、各人の名前とボーナスを表示する
-- 形式: {name}: {bonus}