C#中級

中級 C#で学ぶオブジェクト指向設計|ケーススタディ編

導入

オブジェクト指向設計は、ソフトウェア開発において重要な役割を果たします。特に大規模なプロジェクトでは、設計の適切さが後のメンテナンス性や拡張性に大きく影響します。このケーススタディでは、架空のプロジェクトを通じて、オブジェクト指向設計の実践的な適用方法を探ります。

教科書レベルの解説(オブジェクト指向設計)

重要な概念の整理

オブジェクト指向設計の中心的な概念には、カプセル化、継承、ポリモーフィズムがあります。カプセル化はデータとメソッドを一つのユニットにまとめ、外部からのアクセスを制限します。継承は、既存のクラスから新しいクラスを作成する手法で、コードの再利用性を高めます。ポリモーフィズムは、異なるクラスのオブジェクトが同じインターフェースを使用できるようにし、柔軟な設計を可能にします。

コード例(C#)


public abstract class Shape
{
    public abstract double Area();
}

public class Circle : Shape
{
    private double radius;

    public Circle(double radius)
    {
        this.radius = radius;
    }

    public override double Area()
    {
        return Math.PI * radius * radius;
    }
}

public class Rectangle : Shape
{
    private double width;
    private double height;

    public Rectangle(double width, double height)
    {
        this.width = width;
        this.height = height;
    }

    public override double Area()
    {
        return width * height;
    }
}

public class ShapeCalculator
{
    public static double TotalArea(List shapes)
    {
        double total = 0;
        foreach (var shape in shapes)
        {
            total += shape.Area();
        }
        return total;
    }
}

コードの行ごとの解説

  1. Shapeクラス: 抽象クラスで、全ての図形クラスが継承する基本的な構造を提供します。
  2. Circleクラス: 半径を持つ円の具体的な実装です。Areaメソッドで面積を計算します。
  3. Rectangleクラス: 幅と高さを持つ長方形の具体的な実装です。Areaメソッドで面積を計算します。
  4. ShapeCalculatorクラス: 複数の図形の面積を合計する静的メソッドを提供します。これにより、異なる図形を一つのリストで扱うことが可能になります。

ケーススタディ編

架空のプロジェクトとして、図形を扱うアプリケーションを考えます。このアプリケーションでは、ユーザーが円や長方形などの図形を追加し、それらの面積を計算する機能があります。オブジェクト指向設計を用いることで、異なる図形を一つのインターフェースで管理できるようになり、拡張性が向上します。

しかし、この設計には落とし穴も存在します。例えば、新しい図形クラスを追加する際、既存のコードに影響を与えないようにする必要があります。そのためには、継承を適切に使用し、Shapeクラスのインターフェースを変更しないことが重要です。また、ShapeCalculatorクラスを利用する際に、リストに異なる図形を追加する際の型安全性を考慮する必要があります。

まとめ

  • オブジェクト指向設計を用いることで、コードの再利用性と拡張性が向上します。
  • 新しいクラスを追加する際の影響を最小限に抑えるために、インターフェースの設計が重要です。