Menu
Coddy logo textTech

まとめ - 図形計算機

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

challenge icon

チャレンジ

簡単

抽象クラスとインターフェースを組み合わせて、柔軟なジオメトリツールキットを作成する図形計算システムを構築しましょう。抽象化を通じて異なる図形が共通の動作を共有し、各図形が独自の計算を提供するクラス階層を設計します。

コードを3つのファイルに整理します:

  • shape.dart: 抽象基底クラスとインターフェースをここで定義します:
    • String name プロパティとコンストラクタを持つ抽象クラス Shape。抽象メソッド double calculateArea()double calculatePerimeter() を含めます。[name] - Area: [calculateArea()], Perimeter: [calculatePerimeter()] と出力する通常のメソッド describe() を追加します。
    • Drawing shape... と出力するメソッド draw() を持つ Drawable クラス。
  • shapes.dart: shape.dart をインポートし、具体的な図形クラスを作成します:
    • Shape を継承し、Drawable を実装する Rectangle クラス。double widthdouble height プロパティを追加します。面積を width * height、周囲の長さを 2 * (width + height) として計算します。draw() メソッドは Drawing rectangle [width]x[height] と出力する必要があります。
    • Shape を継承し、Drawable を実装する Circle クラス。double radius プロパティを追加します。円周率には 3.14159 を使用します。面積を pi * radius * radius、周囲の長さ(円周)を 2 * pi * radius として計算します。draw() メソッドは Drawing circle with radius [radius] と出力する必要があります。
  • main.dart: shapes.dart をインポートし、図形計算機のデモンストレーションを行います:
    • 名前が 'Rectangle'、幅 5.0、高さ 3.0Rectangle を作成します。
    • 名前が 'Circle'、半径 4.0Circle を作成します。
    • 各図形について、draw() を呼び出し、次に describe() を呼び出します。
    • 2つの図形の間に空行を出力します。

このチャレンジでは、抽象クラスが共有構造(すべての図形が面積と周囲の計算を持つ)を定義し、インターフェースが追加の機能(描画可能な図形)を追加する方法を示します。各具体的なクラスは、その核となるアイデンティティのために抽象クラスを継承し、追加機能のためにインターフェースを実装します。

期待される出力:

Drawing rectangle 5.0x3.0
Rectangle - Area: 15.0, Perimeter: 16.0

Drawing circle with radius 4.0
Circle - Area: 50.26544, Perimeter: 25.13272

自分で試してみよう

import 'shapes.dart';

void main() {
  // TODO: 幅5.0、高さ3.0の'Rectangle'という名前のRectangleを作成する
  
  // TODO: 半径4.0の'Circle'という名前のCircleを作成する
  
  // TODO: rectangleに対して、draw()を呼び出し、次にdescribe()を呼び出す
  
  // TODO: 空行を出力する
  
  // TODO: circleに対して、draw()を呼び出し、次にdescribe()を呼び出す
}

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