Menu
Coddy logo textTech

まとめ:図形の階層構造

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

challenge icon

チャレンジ

簡単

ゼロから完全な図形の継承構造を構築しましょう!すべての図形が継承する Shape 親クラスを作成し、次に共通の機能を共有しながら独自のプロパティを持つ CircleSquare の子クラスを作成します。

コードは4つのファイルに分けて構成します:

  • Shape.lua: すべての図形が継承するベースクラスです。図形の色を保存する :new(color) コンストラクタと、それを返す :getColor() メソッドを持つ必要があります。この共有プロパティにより、円であれ正方形であれ、すべての図形が色を持つことになります。
  • Circle.lua: Shape を継承する子クラスです。その :new(color, radius) コンストラクタは、色の処理のために親コンストラクタを呼び出し、その後、独自の属性として半径を追加する必要があります。円の詳細を出力する :describe() メソッドを含めてください。
  • Square.lua: Shape を継承するもう一つの子クラスです。その :new(color, side) コンストラクタも親コンストラクタを呼び出し、その後、一辺の長さを保存する必要があります。正方形についても :describe() メソッドを含めてください。
  • main.lua: 両方の図形のインスタンスを作成し、独自のプロパティを維持しながら Shape から正しく継承されていることを実証して、すべてをまとめます。

2つの入力を受け取ります:

  1. 円のデータ:カンマで区切られた色と半径(例:blue,5
  2. 正方形のデータ:カンマで区切られた色と一辺の長さ(例:red,4

メインファイルで、与えられた値を使用して Circle と Square を作成します。次に、以下の内容を別々の行に出力してください:

  1. 円に対して :describe() を呼び出す
  2. 正方形に対して :describe() を呼び出す
  3. :getColor() を使用して円の色を出力する
  4. :getColor() を使用して正方形の色を出力する

Circle の :describe() メソッドは以下を出力する必要があります:

Circle with radius {radius}

Square の :describe() メソッドは以下を出力する必要があります:

Square with side {side}

例えば、入力が blue,5red,4 の場合、出力は以下のようになります:

Circle with radius 5
Square with side 4
blue
red

これは完全な継承パターンを示しています。両方の図形は Shape から :getColor() を継承しており(自身では定義していません)、それぞれが独自の属性と :describe() メソッドを持っています!

自分で試してみよう

-- main.lua: すべてを統合する

local Circle = require('Circle')
local Square = require('Square')

-- 円の入力を読み込む (色,半径)
local circleInput = io.read()
local circleColor, circleRadius = circleInput:match("([^,]+),([^,]+)")
circleRadius = tonumber(circleRadius)

-- 正方形の入力を読み込む (色,一辺の長さ)
local squareInput = io.read()
local squareColor, squareSide = squareInput:match("([^,]+),([^,]+)")
squareSide = tonumber(squareSide)

-- TODO: 指定された色と半径で Circle インスタンスを作成する

-- TODO: 指定された色と一辺の長さで Square インスタンスを作成する

-- TODO: 円に対して :describe() を呼び出す

-- TODO: 正方形に対して :describe() を呼び出す

-- TODO: :getColor() を使用して円の色を表示する

-- TODO: :getColor() を使用して正方形の色を表示する

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