Menu
Coddy logo textTech

まとめ:ロボットの組み立て

CoddyのLuaジャーニー「オブジェクト指向プログラミング」セクションの一部。レッスン 54/70。

challenge icon

チャレンジ

簡単

個別のコンポーネント部品から Robot を組み立てましょう!継承を使う代わりに、それぞれ固有の特化した動作を持つ、別々の ArmLegHead オブジェクトを組み合わせてロボットを構築します。ロボットは委譲を通じてこれらの部品を連携させます。

コードは5つのファイルに分けて整理します。

  • Arm.lua: :new(side) コンストラクターを持つ Arm クラスを作成し、どちら側にあるか(例: "left" または "right")を保存します。{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) コンストラクターが名前を保存し、すべてのコンポーネント部品(left arm、right arm、left leg、right leg、head)を内部で作成する Robot クラスを作成します。Robot には、部品に委譲する次のメソッドを持たせます。
    • :greet(): {name} says hello! を出力し、次に右腕を上げ、その後で下げます
    • :walk(): left leg を動かし、次に right leg を動かします
    • :respond(answer): answer が "yes" の場合は head がうなずき、"no" の場合は head が首を振ります
  • main.lua: Robot の名前と yes/no の応答の入力を読み取ります。Robot を作成し、greet、walk を実行してから、入力に基づいて respond させます。

入力は2つ与えられます。

  1. Robot の名前(文字列)
  2. 応答: yes または no

出力には、Robot が部品を連携させている様子が示されます。

{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

たとえば、入力が Roboyes の場合、出力は次のようになります。

Robo says hello!
right arm raised
right arm lowered
left leg steps forward
right leg steps forward
Head nods

Robot は、腕をどのように上げたり、脚をどのように動かしたりするかを知らないことに注目してください。Robot は各部品に何をすべきかを伝えるだけです。それぞれのコンポーネントは独立していて再利用可能であり、Robot はそれらをすべてまとめるコーディネーターとして機能します。

自分で試してみよう

-- main.lua: ロボットコンポジションチャレンジのエントリーポイント

local Robot = require('Robot')

-- 入力を読み取る
local name = io.read()
local answer = io.read()

-- TODO: 指定された名前でRobotを作成する
-- TODO: ロボットに挨拶させる
-- TODO: ロボットに歩かせる
-- TODO: answer入力に基づいてロボットに応答させる

オブジェクト指向プログラミングのすべてのレッスン

自分で練習してみよう: Luaオンラインコンパイラ