Rectangleクラス
CoddyのLuaジャーニー「Object Oriented Programming」セクションの一部 — レッスン 56/70。
チャレンジ
簡単それでは、前のレッスンで作成したベースとなる Shape クラスを継承する Rectangle クラスを作成して、Shape Manager を拡張しましょう。
コードを整理するために、3つのファイルを扱います:
Shape.lua: 前回のチャレンジで作成したベースとなる Shape クラスです(:new(name)と:getName()を含みます)。Rectangle.lua: Shape を継承する Rectangle クラスを作成します。コンストラクタはwidthとheightを受け取り、親のコンストラクタを"Rectangle"という名前で呼び出し、寸法を保存する必要があります。また、長方形の面積を計算して返す:getArea()メソッドを追加してください。main.lua: Rectangle モジュールをロードし、入力から幅と高さを読み取り、Rectangle インスタンスを作成して、その名前と面積を別々の行に出力します。
Rectangle インスタンスがプロトタイプチェーンを通じて Shape のメソッドにアクセスできるように、継承のリンクを正しく設定することを忘れないでください。
入力: 2行。1行目は幅(数値)、2行目は高さ(数値)です。
出力: 2行。:getName() による長方形の名前、続いて :getArea() によるその面積です。
自分で試してみよう
-- Rectangleモジュールを読み込む
local Rectangle = require('Rectangle')
-- 入力から幅と高さを読み取る
local width = tonumber(io.read())
local height = tonumber(io.read())
-- 指定された寸法で新しいRectangleインスタンスを作成する
local rect = Rectangle:new(width, height)
-- 長方形の名前と面積を表示する
print(rect:getName())
print(rect:getArea())