Menu
Coddy logo textTech

復習 - 図形計算機

CoddyのPHPジャーニー「オブジェクト指向プログラミング」セクションの一部。レッスン 32/91。

challenge icon

チャレンジ

簡単

柔軟で拡張可能なコードを作成するためのinterfaceの力を示す、図形計算機を作りましょう。面積を計算するための契約を定義するinterfaceを作成し、それをさまざまな図形クラスで実装します。

コードを4つのfileに分けて整理します。

  • Calculable.php:1つのmethodシグネチャcalculateArea()を持つCalculable interfaceをDefineします。この契約により、面積を計算できるすべての図形がその面積を計算できることが保証されます。
  • Rectangle.phpCalculableをimplementsするRectangle classをCreateします。interface fileをIncludeします。classには、constructorを通して設定されるprivateな$widthおよび$height propertiesを持たせます。calculateArea()をImplementし、面積(widthにheightをmultipliedした値)をReturnします。
  • Circle.php:同じくCalculableをimplementsするCircle classをCreateします。interface fileをIncludeします。classには、constructorを通して設定されるprivateな$radius propertyを持たせます。calculateArea()をImplementし、pi() * radius * radiusというformulaを使って面積をReturnします。
  • main.php:両方の図形fileをIncludeします。Calculable parameterと図形名(string)をacceptsする、displayAreaという名前のfunctionをCreateします。このfunctionは、number_format()を使って面積を小数点以下2 placesに丸め、"[name] area: [area]"をPrintします。

4つのinputs、つまりrectangleのwidth、rectangleのheight、circleのradius、そしてcircleの図形名を受け取ります。widthとheightを使ってRectangleをCreateし(floatに変換します)、radiusを使ってCircleをCreateします(floatに変換します)。displayArea()を2回Callします。最初は"Rectangle"を名前としてrectangleに対してCallし、次にprovidedされた図形名を使ってcircleに対してCallします。それぞれの結果を独自の行にPrintします。

displayArea() functionは、Calculableをimplementsするあらゆる図形で機能します。rectangle、circle、または将来追加する可能性のある図形のどれの面積を計算しているのかを知る必要はありません。これがinterfaceに対してプログラミングすることの魅力です!

自分で試してみよう

<?php
// 図形ファイルをインクルードする
require_once 'Rectangle.php';
require_once 'Circle.php';

// TODO: displayArea という関数を作成する
// Calculable パラメータと図形名 (string) を受け取る必要がある
// 出力: "[name] area: [area]" (area は number_format() を使って小数点以下2桁に丸める)

// 入力を読み取る
$width = floatval(trim(fgets(STDIN)));
$height = floatval(trim(fgets(STDIN)));
$radius = floatval(trim(fgets(STDIN)));
$circleName = trim(fgets(STDIN));

// TODO: width と height で Rectangle を作成する

// TODO: radius で Circle を作成する

// TODO: 名前として "Rectangle" を使い、rectangle で displayArea() を呼び出す

// TODO: 指定された図形名を使い、circle で displayArea() を呼び出す
?>

オブジェクト指向プログラミングのすべてのレッスン

自分で練習してみよう: PHPオンラインコンパイラ