まとめ - 図形計算機
CoddyのDartジャーニー「オブジェクト指向プログラミング」セクションの一部 — レッスン 49/110。
チャレンジ
簡単抽象クラスとインターフェースを組み合わせて、柔軟なジオメトリツールキットを作成する図形計算システムを構築しましょう。抽象化を通じて異なる図形が共通の動作を共有し、各図形が独自の計算を提供するクラス階層を設計します。
コードを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 widthとdouble 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.0のRectangleを作成します。 - 名前が
'Circle'、半径4.0のCircleを作成します。 - 各図形について、
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()を呼び出す
}
オブジェクト指向プログラミングのすべてのレッスン
4Null Safety
Null Safety 入門Nullable と Non-Nullable? 演算子と ! 演算子late キーワードと Null SafetyNull-Aware 演算子クラスにおける Null Safetyまとめ:ユーザープロフィールシステム10コレクションとジェネリクス
List, Set, Map の概要型安全なコレクションジェネリッククラスジェネリックメソッドジェネリクスの制約Iterable と Iteratorまとめ:ジェネリックなストレージ