まとめ:従業員の役割
CoddyのLuaジャーニー「オブジェクト指向プログラミング」セクションの一部。レッスン 42/70。
チャレンジ
簡単異なる従業員タイプが同じインターフェースを共有しながら、それぞれ異なる方法でボーナスを計算できることを示す給与ボーナスシステムを作ってみましょう!
4つのファイルにまたがる小さな従業員階層を作成します。
Employee.lua:一般的な従業員を表す基底クラスです。コンストラクター:new(name, salary)で、従業員の名前と給与の両方を保存します。給与の10%(一般従業員のデフォルトのボーナス)を返す:calculateBonus()メソッドと、名前を取得する:getName()メソッドを含めます。Manager.lua:Employee を継承する子クラスです。Manager は懸命に働いて報われるため、:calculateBonus()をオーバーライドし、デフォルトの10%ではなく給与の20%を返します。Intern.lua:Employee を継承するもう1つの子クラスです。Intern は給与に関係なく固定ボーナス50を受け取ります。:calculateBonus()をオーバーライドして、常にこの金額を返すようにします。main.lua:すべてをまとめます!従業員の名前について3つ、給与について3つの入力を読み取ります。Manager を1人、Intern を1人、通常の Employee を1人作成します。3人すべてをテーブルに格納し、その後ループして、それぞれの名前と計算されたボーナスを出力します。
6つの入力を受け取ります。
- Manager の名前
- Manager の給与
- Intern の名前
- Intern の給与
- 通常の Employee の名前
- 通常の Employee の給与
コレクション内の各従業員について(順番は Manager、Intern、Employee)、次の形式で名前とボーナスを出力します。
{name}: {bonus}たとえば、入力が Alice、5000、Bob、2000、Carol、3000 の場合、出力は次のようになります。
Alice: 1000
Bob: 50
Carol: 300同じ :calculateBonus() 呼び出しでも、従業員のタイプに応じて異なる結果が生成されることに注目してください。これがポリモーフィズムの働きです!Manager は 5000 の20%、Intern は固定の 50、通常の Employee は 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}
オブジェクト指向プログラミングのすべてのレッスン
自分で練習してみよう: Luaオンラインコンパイラ