Menu
Coddy logo textTech

Circleクラス

CoddyのLuaジャーニー「Object Oriented Programming」セクションの一部 — レッスン 57/70。

challenge icon

チャレンジ

簡単

前のレッスンで作成した 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 の名前と面積を出力する

Object Oriented Programmingのすべてのレッスン