設計(インターフェースと継承)
インターフェースと小さな基底クラスを使ってシンプルなShape APIを設計します。契約に含めるものと実装の詳細を判断します。
「設計(インターフェースと継承)」はCoddyKit上の無料C# Academyレッスンです。 これはレッスン1/3です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはC# Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 C# Academyコースには全3レッスンが含まれています。
プロジェクトの概要
目標: 図形のための小さく明確な契約を定義します。
- 振る舞いにはインターフェイスを使用します
- 公開する範囲を最小限に保ちます
- 多くの図形を組み込めるようにします
契約を先に定義する
Area() と Perimeter() を持つ小さな IShape 契約を作成します。ユーティリティはインターフェイスに依存できます。
using System;
// Interface: minimal behavior all shapes must provide
public interface IShape
{
double Area();
double Perimeter();
}
// A tiny helper to print any IShape
public static class ShapePrinter
{
public static void Print(IShape s)
{
Console.WriteLine("A=" + s.Area() + " P=" + s.Perimeter());
}
}
public class Program
{
public static void Main(string[] args)
{
// No concrete shapes yet; interface compiles and is ready.
Console.WriteLine("Shape API ready");
}
}
省略可能な基底クラス
共通のヘルパー用に小さな抽象基底クラスを追加しても構いませんが、公式の契約はインターフェイスとして維持してください。
using System;
// Optional base for helpers; interface stays the main contract
public abstract class ShapeBase : IShape
{
public abstract double Area();
public abstract double Perimeter();
// Shared rounding helper
protected double Round2(double x)
{
return Math.Round(x, 2);
}
}
public class Program
{
public static void Main(string[] args)
{
Console.WriteLine("Base class prepared for shared helpers");
}
}
具体的な図形
具体的な図形はインターフェイスを実装します。クライアントは IShape を通じて、それらを一様に扱えます。
using System;
public interface IShape
{
double Area();
double Perimeter();
}
public class Rectangle : IShape
{
private readonly double _w, _h;
public Rectangle(double w, double h) { _w = w; _h = h; }
public double Area() { return _w * _h; }
public double Perimeter() { return 2 * (_w + _h); }
}
public class Circle : IShape
{
private readonly double _r;
public Circle(double r) { _r = r; }
public double Area() { return 3.14159 * _r * _r; }
public double Perimeter() { return 2 * 3.14159 * _r; }
}
public class Program
{
public static void Main(string[] args)
{
IShape a = new Rectangle(3, 4);
IShape b = new Circle(2);
Console.WriteLine("Rect A=" + a.Area() + " P=" + a.Perimeter());
Console.WriteLine("Circ A=" + b.Area() + " P=" + b.Perimeter());
}
}
IShape のコレクション
多くの図形を格納して同じ方法で処理するには、List<IShape> を使用します。
using System;
using System.Collections.Generic;
public interface IShape
{
double Area();
double Perimeter();
}
public class Rectangle : IShape
{
private readonly double _w, _h;
public Rectangle(double w, double h) { _w = w; _h = h; }
public double Area() { return _w * _h; }
public double Perimeter() { return 2 * (_w + _h); }
}
public class Circle : IShape
{
private readonly double _r;
public Circle(double r) { _r = r; }
public double Area() { return 3.14159 * _r * _r; }
public double Perimeter() { return 2 * 3.14159 * _r; }
}
public class Program
{
public static void Main(string[] args)
{
List<IShape> shapes = new List<IShape>();
shapes.Add(new Rectangle(2, 5));
shapes.Add(new Circle(1.5));
foreach (IShape s in shapes)
{
Console.WriteLine("A=" + s.Area() + " P=" + s.Perimeter());
}
}
}
設計チェックリスト
チェックリスト:
- インターフェイスを小さく明確な契約にします。
- 具体的な図形のフィールドは private に保ちます。
- 単純な計算には double を使用し、定数はローカルに保ちます。
- 型チェックよりもポリモーフィズムを優先します。
契約の選択
まとめ
まとめ: 小さな IShape インターフェイスを定義し、内部実装を private に保ち、ポリモーフィックな処理にはインターフェイスのコレクションを使用します。
よくある質問
「設計(インターフェースと継承)」レッスンは無料ですか?
はい。「設計(インターフェースと継承)」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、C# Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 C# Academyコースには全3レッスンが含まれています。
「設計(インターフェースと継承)」で何を学びますか?
インターフェースと小さな基底クラスを使ってシンプルなShape APIを設計します。契約に含めるものと実装の詳細を判断します。 ブラウザで直接実行するハンズオンコードでC# Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
C# Academyを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのC# Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン1/3です。
「設計(インターフェースと継承)」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このC# Academyレッスンでコードを書いて実行できますか?
はい。すべてのC# Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- 設計(インターフェースと継承)
- 実装とテスト
- ポリモーフィックな振る舞い