Menu
Coddy logo textTech

Perimeterメソッド

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

challenge icon

チャレンジ

簡単

RectangleクラスとCircleクラスの両方に :getPerimeter() メソッドを追加して、Shape Managerを拡張しましょう。:getArea() と同様に、各図形は周囲の長さを異なる方法で計算しますが、同じメソッド名を共有します。これはポリモーフィズム(多態性)の動作を示す完璧な例です。

既存のファイルを継続して使用します:

  • Shape.lua: ベースとなるShapeクラスは変更しません。
  • Rectangle.lua: 公式 2 × (width + height) を使用して長方形の周囲の長さを返す :getPerimeter() メソッドを追加します。
  • Circle.lua: 公式 2 × π × radius を使用して円周を返す :getPerimeter() メソッドを追加します。πには math.pi を使用してください。
  • main.lua: 両方の図形モジュールを require し、入力から寸法を読み取り、RectangleとCircleを1つずつ作成します。その後、長方形の名前、面積、周囲の長さ、続いて円の名前、面積、周囲の長さの計6行を出力します。

これで、両方の図形は :getName():getArea():getPerimeter() という完全なインターフェースを持つことになります。実装は異なりますが、すべて同じメソッド名でアクセス可能です。

入力: 3行 — 幅(数値)、高さ(数値)、半径(数値)。

出力: 以下の順序で6行:長方形の名前、長方形の面積、長方形の周囲の長さ、円の名前、円の面積、円の周囲の長さ。

自分で試してみよう

-- Rectangleモジュールを読み込む
local Rectangle = require('Rectangle')

-- Circleモジュールを読み込む
local Circle = require('Circle')

-- 入力から幅と高さを読み込む
local width = tonumber(io.read())
local height = tonumber(io.read())
local radius = tonumber(io.read())

-- 指定された寸法で新しいRectangleインスタンスを作成する
local rect = Rectangle:new(width, height)

-- 指定された半径で新しいCircleインスタンスを作成する
local circ = Circle:new(radius)

-- 長方形の名前、面積、周囲の長さを表示する
print(rect:getName())
print(rect:getArea())
print(rect:getPerimeter())

-- 円の名前、面積、周囲の長さを表示する
print(circ:getName())
print(circ:getArea())
print(circ:getPerimeter())

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