まとめ:ロボットの組み立て
CoddyのLuaジャーニー「Object Oriented Programming」セクションの一部 — レッスン 54/70。
チャレンジ
簡単個別のコンポーネントパーツから Robot を組み立てましょう!継承を使う代わりに、それぞれが独自の専門的な動作を持つ Arm、Leg、Head オブジェクトを組み合わせることでロボットを構築します。ロボットは、委譲(delegation)を通じてこれらのパーツを調整します。
コードは5つのファイルに分けて構成します:
Arm.lua: どちらの側か(例: "left" または "right")を保存するコンストラクタ:new(side)を持つ Arm クラスを作成します。{side} arm raisedと出力する:raise()メソッドと、{side} arm loweredと出力する:lower()メソッドを含めてください。Leg.lua: 側を保存するコンストラクタ:new(side)を持つ Leg クラスを作成します。{side} leg steps forwardと出力する:step()メソッドを含めてください。Head.lua: コンストラクタ:new()を持つ Head クラスを作成します。Head nodsと出力する:nod()メソッドと、Head shakesと出力する:shake()メソッドを含めてください。Robot.lua: 名前を保存し、内部で左腕、右腕、左脚、右脚、頭のすべてのコンポーネントパーツを作成するコンストラクタ:new(name)を持つ Robot クラスを作成します。ロボットは、各パーツに処理を委譲する以下のメソッドを持つ必要があります::greet()—{name} says hello!と出力し、次に右腕を上げ、その後に下げます:walk()— 左脚をステップさせ、次に右脚をステップさせます:respond(answer)— answer が"yes"の場合は頭を縦に振り(nod)、"no"の場合は頭を横に振り(shake)ます
main.lua: ロボットの名前と yes/no の回答の入力を読み取ります。Robot を作成し、挨拶をさせ、歩かせ、入力に基づいて応答させます。
2つの入力を受け取ります:
- ロボットの名前(文字列)
- 回答:
yesまたはno
出力は、ロボットが各パーツを調整している様子を示す必要があります:
{name} says hello!
right arm raised
right arm lowered
left leg steps forward
right leg steps forward
Head nodsもし回答が no の場合:
{name} says hello!
right arm raised
right arm lowered
left leg steps forward
right leg steps forward
Head shakes例えば、入力が Robo と yes の場合、出力は以下のようになります:
Robo says hello!
right arm raised
right arm lowered
left leg steps forward
right leg steps forward
Head nodsRobot が腕を上げる方法や脚がステップする方法を知っているわけではなく、単に各パーツに何をすべきかを伝えているだけであることに注目してください。各コンポーネントは独立しており再利用可能で、ロボットはそれらをまとめ上げるコーディネーターとして機能します!
自分で試してみよう
-- main.lua: ロボット構成チャレンジのエントリーポイント
local Robot = require('Robot')
-- 入力を読み込む
local name = io.read()
local answer = io.read()
-- TODO: 指定された名前でロボットを作成する
-- TODO: ロボットに挨拶をさせる
-- TODO: ロボットを歩かせる
-- TODO: 入力された回答に基づいてロボットに応答させる