設計
階層を計画します。抽象基底クラスを選び、具象図形を列挙し、フィールドとメソッドを決め、シンプルなポリモーフィック操作を定義します。
「設計」はCoddyKit上の無料Java Academyレッスンです。 これはレッスン1/3です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはJava Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Java Academyコースには全3レッスンが含まれています。
目標と範囲
目標: 抽象的な基底クラス(Shape)と、いくつかの具象図形(Circle、Rectangle)を使った小さな図形階層を構築します。まず共通の操作を設計し、その後、小さなコードプロトタイプで計画を確認します。
図形とフィールド
図形: Circle(radius)、Rectangle(width、height)。フィールドは必要な場所にだけ持たせます。radiusはCircleに、widthとheightはRectangleに定義します。基底クラスが持つのはすべてのフィールドではなく、動作の契約です。
操作とポリモーフィズム
共通の操作はarea()とperimeter()です。これらをShapeで宣言すれば、どのShapeでも呼び出しに応答できます。その後、ShapeのリストにCircleとRectangleを混在させ、同じ方法で処理できます。
コード: APIのスケッチ
プロトタイプ1: areaとperimeterを持つShapeと、単純なCircleを定義します。これにより、共有APIが1つの具象型で機能することを確認します。
public class Main {
// Minimal API sketch to validate the design
static abstract class Shape {
abstract double area();
abstract double perimeter();
}
static class Circle extends Shape {
double radius;
Circle(double r) { radius = r; }
double area() { return Math.PI * radius * radius; }
double perimeter() { return 2 * Math.PI * radius; }
}
public static void main(String[] args) {
Shape s = new Circle(2.0);
System.out.println("area=" + s.area());
System.out.println("perimeter=" + s.perimeter());
}
}
コレクションとレポート
後ほど図形をリストに格納し、型、面積、周長などの概要を出力します。小さなフォーマッターでモバイル上でも読みやすく表示します。1行に1つの図形を表示し、小数点以下2桁に丸めます。
コード: 図形のリスト
プロトタイプ2: Shapeの1つの配列にCircleとRectangleを混在させ、それぞれを出力します。基底クラスのメソッドにより、統一して処理できます(ポリモーフィズム)。
public class Main {
static abstract class Shape {
abstract double area();
abstract double perimeter();
String info() {
// default helper for neat printing
return String.format("area=%.2f, per=%.2f", area(), perimeter());
}
}
static class Circle extends Shape {
double radius;
Circle(double r) { radius = r; }
double area() { return Math.PI * radius * radius; }
double perimeter() { return 2 * Math.PI * radius; }
public String toString() { return "Circle " + info(); }
}
static class Rectangle extends Shape {
double w, h;
Rectangle(double w, double h) { this.w = w; this.h = h; }
double area() { return w * h; }
double perimeter() { return 2 * (w + h); }
public String toString() { return "Rectangle " + info(); }
}
public static void main(String[] args) {
Shape[] arr = { new Circle(2.0), new Rectangle(3.0, 4.0) };
for (int i = 0; i < arr.length; i = i + 1) {
System.out.println(arr[i]);
}
}
}
基底クラスの確認
簡単な確認: このプロジェクトで抽象Shape基底クラスに含めるべきものはどれですか?
復習
復習: 基底クラスはareaとperimeterを宣言します。サブクラスは図形固有のデータを保持し、計算を実装します。Shapeのリストを使えば、1つのループで混在した図形を出力できます。
よくある質問
「設計」レッスンは無料ですか?
はい。「設計」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Java Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Java Academyコースには全3レッスンが含まれています。
「設計」で何を学びますか?
階層を計画します。抽象基底クラスを選び、具象図形を列挙し、フィールドとメソッドを決め、シンプルなポリモーフィック操作を定義します。 ブラウザで直接実行するハンズオンコードでJava Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
Java Academyを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのJava Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン1/3です。
「設計」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このJava Academyレッスンでコードを書いて実行できますか?
はい。すべてのJava Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。