実装
設計を動作するコードに変換します。基底クラスを定義し、具象図形を実装し、混在したリストから結果を出力します。
「実装」はCoddyKit上の無料Java Academyレッスンです。 これはレッスン2/3です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはJava Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Java Academyコースには全3レッスンが含まれています。
計画の復習
まずarea()とperimeter()を持つ基底のShapeを実装し、その後CircleとRectangleを追加します。名前は短く、計算は読みやすく保ち、出力には小さなヘルパーメソッドを優先して使います。
コード: 基底クラスとCircle
基底クラスはAPIと小さなinfo()ヘルパーを定義します。Circleは計算と、明確な出力のためのtoString()を実装します。
public class Main {
// Base class with a tiny print helper
static abstract class Shape {
abstract double area();
abstract double perimeter();
String info() {
return String.format("area=%.2f, per=%.2f", area(), perimeter());
}
}
static class Circle extends Shape {
double radius;
Circle(double r) {
// simple guard to avoid negative sizes for beginners
radius = (r < 0) ? 0 : r;
}
double area() { return Math.PI * radius * radius; }
double perimeter() { return 2 * Math.PI * radius; }
public String toString() { return "Circle " + info(); }
}
public static void main(String[] args) {
Shape s = new Circle(2.5);
System.out.println(s); // prints Circle area/perimeter
}
}
コンストラクターとガード
コンストラクターでフィールドを設定します。初心者向けに、負の入力は0に丸めて防ぎます。実際のアプリではバリデーションや例外を使いますが、ここではシンプルに保ちます。
コード: Rectangleを追加
Rectangleを階層に追加し、同じAPIを使います。基底クラスが契約を定義しているため、どちらの図形も同じコードで出力できる点に注目してください。
public class Main {
static abstract class Shape {
abstract double area();
abstract double perimeter();
String info() { return String.format("area=%.2f, per=%.2f", area(), perimeter()); }
}
static class Circle extends Shape {
double radius;
Circle(double r) { radius = (r < 0) ? 0 : 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 < 0) ? 0 : w;
this.h = (h < 0) ? 0 : 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 a = new Circle(3.0);
Shape b = new Rectangle(4.0, 2.0);
System.out.println(a);
System.out.println(b);
}
}
リストと出力
ShapeのリストにはCircleとRectangleを混在させられます。単純なループで各要素を出力できます。モバイル向けの出力では、1行に1つの図形を表示し、数値を小数点以下2桁で整形します。
コード: 小さなレポート
レポート: 小さなループで各図形の型と概要を出力します。ポリモーフィズムによってループは簡潔になり、各図形が独自の計算を提供します。
public class Main {
static abstract class Shape {
abstract double area();
abstract double perimeter();
String label() { return getClass().getSimpleName(); }
String info() { return String.format("area=%.2f, per=%.2f", area(), perimeter()); }
}
static class Circle extends Shape {
double radius;
Circle(double r) { radius = (r < 0) ? 0 : r; }
double area() { return Math.PI * radius * radius; }
double perimeter() { return 2 * Math.PI * radius; }
}
static class Rectangle extends Shape {
double w, h;
Rectangle(double w, double h) { this.w = (w < 0) ? 0 : w; this.h = (h < 0) ? 0 : h; }
double area() { return w * h; }
double perimeter() { return 2 * (w + h); }
}
public static void main(String[] args) {
Shape[] shapes = { new Circle(1.2), new Rectangle(2.0, 3.0), new Circle(0.5) };
for (int i = 0; i < shapes.length; i = i + 1) {
Shape s = shapes[i];
System.out.println(s.label() + " -> " + s.info());
}
}
}
実装の確認
簡単な確認: この階層の各具象図形に必要なものはどれですか?
復習
復習: Shape、Circle、Rectangleを実装し、簡単なガードを追加して、混在したリストから小さなレポートを出力しました。次のレッスンでは、面積順の並べ替えのようなポリモーフィックな動作を扱います。
よくある質問
「実装」レッスンは無料ですか?
はい。「実装」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Java Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Java Academyコースには全3レッスンが含まれています。
「実装」で何を学びますか?
設計を動作するコードに変換します。基底クラスを定義し、具象図形を実装し、混在したリストから結果を出力します。 ブラウザで直接実行するハンズオンコードでJava Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
Java Academyを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのJava Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン2/3です。
「実装」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このJava Academyレッスンでコードを書いて実行できますか?
はい。すべてのJava Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。