Menu
Coddy logo textTech

最終 OOP チェック

CoddyのLuaジャーニー「Object Oriented Programming」セクションの一部 — レッスン 70/70。

challenge icon

チャレンジ

簡単

LuaにおけるOOP(オブジェクト指向プログラミング)について学んだすべてをまとめましょう!継承、命名規則によるカプセル化、そしてオプション機能を付加するためのミックスインを実演する車両システムを構築します。

コードは5つのファイルに分けて構成します:

  • Vehicle.lua: すべての車両のベースクラスです。各車両は name と、プライベートの慣習に従った _speed(0で初期化)を持ちます。:getName() ゲッター、:getSpeed() ゲッター、および負の値を拒否する :setSpeed(value) セッターを含めてください(負の値の場合、"Speed cannot be negative" と出力し、値は変更しないでください)。"{name} moving at {speed}" を返す :describe() メソッドを追加してください。
  • Refuelable.lua: 燃料関連の振る舞いを含むミックスインテーブルです。self._fuel に加算する :refuel(amount) メソッドと、現在の燃料レベルを返す :getFuel() メソッドを含めてください。
  • Car.lua: Vehicleを継承し、Refuelableミックスインを使用します。コンストラクタは name を受け取り、_fuel を0で初期化します。:describe() をオーバーライドして、"{name} moving at {speed}, fuel: {fuel}" を返すようにします。Refuelableミックスインを適用して、車に燃料機能を持たせます。
  • Bicycle.lua: Vehicleのみを継承します。燃料機能は必要ありません。コンストラクタは name のみを受け取ります。自転車は、継承された :describe() メソッドを修正せずに使用します。
  • main.lua: すべてをまとめます!入力に基づいて車と自転車を作成し、それらの異なる機能を示し、共通の車両の振る舞いを共有しながら、いかに異なる特徴を持っているかを示してください。

4つの入力を受け取ります:

  1. 車の名前
  2. 自転車の名前
  3. 両方の車両に設定する速度(数値)
  4. 車に追加する燃料の量(数値)

メインファイルでの手順:

  1. 与えられた名前で車と自転車を作成します
  2. 3番目の入力を使用して、両方の車両に速度を設定します
  3. 4番目の入力で車に燃料を補給します
  4. 車の説明を出力します
  5. 自転車の説明を出力します

例えば、入力が SedanMountain Bike6045 の場合、出力は以下のようになります:

Sedan moving at 60, fuel: 45
Mountain Bike moving at 60

入力が Sports CarRoad Bike12080 の場合、出力は以下のようになります:

Sports Car moving at 120, fuel: 80
Road Bike moving at 120

このチャレンジは、継承が共有された振る舞い(両方の車両が移動できる)をどのように提供し、ミックスインがオプションの機能(車のみが燃料を必要とする)をどのように追加し、カプセル化がデータの整合性(速度のバリデーション)をどのように保護するかを示しています。それぞれのテクニックが、設計において異なる目的を果たしています!

自分で試してみよう

-- main.lua: すべてをまとめる

local Car = require('Car')
local Bicycle = require('Bicycle')

-- 入力を読み込む
local carName = io.read()
local bicycleName = io.read()
local speed = tonumber(io.read())
local fuelAmount = tonumber(io.read())

-- TODO: 指定された名前で車を作成する

-- TODO: 指定された名前で自転車を作成する

-- TODO: 両方の車両の速度を設定する

-- TODO: 指定された燃料量で車に給油する

-- TODO: 車の説明を表示する

-- TODO: 自転車の説明を表示する

Object Oriented Programmingのすべてのレッスン