まとめ - 図形計算機
CoddyのC#ジャーニー「オブジェクト指向プログラミング」セクションの一部 — レッスン 30/70。
チャレンジ
簡単インターフェースとポリモーフィズムについて学んだすべてを統合した、図形計算機を作成しましょう。共通のインターフェースを通じて異なる図形を一律に処理できるシステムを構築し、実行時ポリモーフィズムの威力を実証します。
コードは以下の4つのファイルに分けて構成します:
IShape.cs:Shapes名前空間内にIShapeという名前のインターフェースを定義します。すべての図形は、自身の面積を計算し、自身を説明できる必要があります。2つのメソッドを宣言してください:doubleを返すCalculateArea()と、stringを返すGetDescription()です。Circle.cs:Shapes名前空間内にIShapeを実装するCircleクラスを作成します。円はコンストラクタを通じて設定されるRadiusプロパティ(double)を持ちます。面積の公式はMath.PI * Radius * Radiusです。説明(description)は"Circle with radius {Radius}"を返すようにしてください。Rectangle.cs:Shapes名前空間内にIShapeを実装するRectangleクラスを作成します。長方形はコンストラクタを通じて設定されるWidthとHeightプロパティ(ともに double)を持ちます。面積は単純に幅と高さの積です。説明は"Rectangle {Width}x{Height}"を返すようにしてください。Program.cs: メインファイルで、入力値を使用して円と長方形を作成し、それらをIShape参照の配列に格納します。配列をループで回し、各図形について、その説明を出力し、続いて小数点以下2桁で四捨五入した面積を出力します。これにより、まったく異なる図形を同じインターフェースを通じてどのように処理できるかが示されます!
3つの入力を受け取ります:
- 円の半径 (double)
- 長方形の幅 (double)
- 長方形の高さ (double)
各図形について、以下の形式で出力を表示してください:
{GetDescription() result}
Area: {CalculateArea() rounded to 2 decimal places}例えば、入力が 5、4、6 の場合、出力は以下のようになります:
Circle with radius 5
Area: 78.54
Rectangle 4x6
Area: 24.00ループの中で、扱っているのが円なのか長方形なのかを知る必要がないことに注目してください。単にインターフェースのメソッドを呼び出し、あとはポリモーフィズムに任せるだけです。これがインターフェースに対してプログラミングすることの優雅さです!
自分で試してみよう
using System;
using Shapes;
class Program
{
public static void Main(string[] args)
{
// 入力値を読み込む
double circleRadius = Convert.ToDouble(Console.ReadLine());
double rectWidth = Convert.ToDouble(Console.ReadLine());
double rectHeight = Convert.ToDouble(Console.ReadLine());
// TODO: 指定された半径で Circle オブジェクトを作成する
// TODO: 指定された幅と高さで Rectangle オブジェクトを作成する
// TODO: 両方の図形を含む IShape の配列を作成する
// TODO: 配列をループし、各図形に対して以下を行う:
// - GetDescription() を使用して説明を表示する
// - "Area: " に続いて、小数点以下2桁に丸めた CalculateArea() を表示する
}
}
オブジェクト指向プログラミングのすべてのレッスン
5ポリモーフィズムとインターフェース
コンパイル時 vs 実行時ポリモーフィズムインターフェース vs 抽象クラス複数のインターフェース明示的なインターフェースアップキャストとダウンキャストまとめ - 図形計算機