Menu
Coddy logo textTech

まとめ - 図形計算機

CoddyのC#ジャーニー「オブジェクト指向プログラミング」セクションの一部 — レッスン 30/70。

challenge icon

チャレンジ

簡単

インターフェースとポリモーフィズムについて学んだすべてを統合した、図形計算機を作成しましょう。共通のインターフェースを通じて異なる図形を一律に処理できるシステムを構築し、実行時ポリモーフィズムの威力を実証します。

コードは以下の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 クラスを作成します。長方形はコンストラクタを通じて設定される WidthHeight プロパティ(ともに double)を持ちます。面積は単純に幅と高さの積です。説明は "Rectangle {Width}x{Height}" を返すようにしてください。
  • Program.cs: メインファイルで、入力値を使用して円と長方形を作成し、それらを IShape 参照の配列に格納します。配列をループで回し、各図形について、その説明を出力し、続いて小数点以下2桁で四捨五入した面積を出力します。これにより、まったく異なる図形を同じインターフェースを通じてどのように処理できるかが示されます!

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

  • 円の半径 (double)
  • 長方形の幅 (double)
  • 長方形の高さ (double)

各図形について、以下の形式で出力を表示してください:

{GetDescription() result}
Area: {CalculateArea() rounded to 2 decimal places}

例えば、入力が 546 の場合、出力は以下のようになります:

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() を表示する
    }
}

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