Circleクラス
CoddyのLuaジャーニー「Object Oriented Programming」セクションの一部 — レッスン 57/70。
チャレンジ
簡単前のレッスンで作成した Rectangle クラスに加えて、Circle クラスを追加して、Shape Manager の構築を続けましょう。
図形を整理するために、4 つのファイルを操作します:
Shape.lua::new(name)と:getName()を持つベースとなる Shape クラスです。Rectangle.lua: 前回のチャレンジで作成した、:getArea()を持つ Rectangle クラスです。Circle.lua: Shape を継承する Circle クラスを作成します。コンストラクタはradiusを受け取り、親のコンストラクタを名前"Circle"で呼び出し、半径を保存する必要があります。公式 πr² を使用して円の面積を計算する:getArea()メソッドを追加してください。π の値にはmath.piを使用します。main.lua: Rectangle モジュールと Circle モジュールの両方を require します。入力から 3 つの値(長方形の幅、長方形の高さ、円の半径)を読み取ります。各図形のインスタンスを 1 つずつ作成し、長方形の名前、長方形の面積、円の名前、円の面積の 4 行を出力します。
継承を通じて、両方の図形が同じインターフェースを共有するようになりました。それぞれが Shape から継承した :getName() メソッドと、独自の :getArea() 実装を持っています。この共通のインターフェースは、今後のレッスンで役立つことになります。
入力: 3 行 — 幅(数値)、高さ(数値)、半径(数値)。
出力: 4 行 — 長方形の名前、長方形の面積、円の名前、円の面積。
自分で試してみよう
-- Rectangle モジュールを読み込む
local Rectangle = require('Rectangle')
-- Circle モジュールを読み込む
-- TODO: ここで Circle モジュールを読み込む
-- 入力から width と height を読み込む
local width = tonumber(io.read())
local height = tonumber(io.read())
-- TODO: 入力から radius を読み込む
-- 指定された寸法で新しい Rectangle インスタンスを作成する
local rect = Rectangle:new(width, height)
-- TODO: 指定された radius で新しい Circle インスタンスを作成する
-- rectangle の名前と面積を出力する
print(rect:getName())
print(rect:getArea())
-- TODO: circle の名前と面積を出力する