0Pricing
C# Academy · レッスン

設計(インターフェースと継承)

インターフェースと小さな基底クラスを使ってシンプルな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フィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. 設計(インターフェースと継承)
  2. 実装とテスト
  3. ポリモーフィックな振る舞い
← C# Academyに戻る