Perimeterメソッド
CoddyのLuaジャーニー「オブジェクト指向プログラミング」セクションの一部。レッスン 58/70。
チャレンジ
簡単Shape マネージャーを拡張し、Rectangle と Circle の両方の class に :getPerimeter() method を追加しましょう。:getArea() と同様に、それぞれの shape は異なる方法で perimeter を計算しますが、同じ method name を共有します。これは、polymorphism が実際に機能する完璧な例です。
引き続き、既存のファイルを操作します。
Shape.lua:ベースとなる Shape class は変更しません。Rectangle.lua:公式 2 × (width + height) を使って rectangle の perimeter を返す:getPerimeter()method を追加します。Circle.lua:公式 2 × π × radius を使って circle の円周を返す:getPerimeter()method を追加します。π にはmath.piを使用します。main.lua:両方の shape module を Require し、input から dimensions を読み取り、Rectangle を 1 つと Circle を 1 つ create してから、6 行を Print します。順番は rectangle の name、area、perimeter、続いて circle の name、area、perimeter です。
これで両方の shape は、:getName()、:getArea()、:getPerimeter() による完全な interface を備えました。実装は異なりますが、すべて同じ method name を通じてアクセスできます。
input: 3 行:width(number)、height(number)、radius(number)。
Output: 順番に 6 行:rectangle の name、rectangle の area、rectangle の perimeter、circle の name、circle の area、circle の perimeter。
自分で試してみよう
-- 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())
オブジェクト指向プログラミングのすべてのレッスン
自分で練習してみよう: Luaオンラインコンパイラ