Circleクラス
CoddyのLuaジャーニー「オブジェクト指向プログラミング」セクションの一部。レッスン 57/70。
チャレンジ
簡単前のレッスンで作成した Rectangle と並べて Circle class を追加し、Shape Manager の構築を続けましょう。
shape を整理するために、次の4つのファイルを使用します。
Shape.lua::new(name)と:getName()を持つ、基底 Shape class です。Rectangle.lua: 前の challenge で作成した Rectangle class で、:getArea()を持ちます。Circle.lua: Shape から inheritance する Circle class を作成します。constructor はradiusを受け取り、名前"Circle"を指定して parent constructor を呼び出し、radius を Store する必要があります。円の面積を公式 πr² で計算する:getArea()method を追加します。π の値にはmath.piを使用してください。main.lua: Rectangle と Circle の両方の module を Require します。input から3つの値、つまり rectangle の width、rectangle の height、circle の radius を read します。それぞれの shape の instance を1つずつ Create し、4行を Print します。内容は、rectangle の名前、rectangle の area、circle の名前、circle の area です。
これで、両方の shape は inheritance を通じて同じ interface を共有します。それぞれが Shape から :getName() method を受け継ぎ、独自の :getArea() implementation を持ちます。この共通 interface は、今後のレッスンで役立ちます。
Input: 3行です。width(number)、height(number)、radius(number)の順です。
Output: 4行です。rectangle の名前、rectangle の area、circle の名前、circle の area の順です。
自分で試してみよう
-- Rectangleモジュールを読み込む
local Rectangle = require('Rectangle')
-- Circleモジュールを読み込む
-- TODO: ここでCircleモジュールを読み込む
-- 入力から幅と高さを読み取る
local width = tonumber(io.read())
local height = tonumber(io.read())
-- TODO: 入力から半径を読み取る
-- 指定された寸法で新しいRectangleインスタンスを作成する
local rect = Rectangle:new(width, height)
-- TODO: 指定された半径で新しいCircleインスタンスを作成する
-- 長方形の名前と面積を出力する
print(rect:getName())
print(rect:getArea())
-- TODO: 円の名前と面積を出力する
オブジェクト指向プログラミングのすべてのレッスン
自分で練習してみよう: Luaオンラインコンパイラ