TypeScript上級

上級 TypeScriptで学ぶオブジェクト指向設計|練習問題編

導入

オブジェクト指向設計は、現代のソフトウェア開発において重要な役割を果たします。特にTypeScriptを用いることで、型安全性を確保しつつ、柔軟で拡張性のあるコードを書くことが可能です。本記事では、実際の業務で遭遇する具体的なシチュエーションを通じて、オブジェクト指向設計の原則を深く理解し、練習問題を通じてその理解をさらに深めます。

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

重要な概念の整理

オブジェクト指向設計には、カプセル化、継承、ポリモーフィズムといった基本的な概念があります。これらは、ソフトウェアの再利用性や保守性を高めるための基盤となります。特に、現場でのシステム拡張や変更に対応するためには、これらの概念を適切に活用することが重要です。

例えば、カプセル化を適切に行うことで、クラスの内部状態を外部から隠蔽し、インターフェースを通じてのみアクセスを許可することができます。これにより、内部の実装が変更されても、外部のコードに影響を与えないようにすることができます。

コード例(TypeScript)


class Shape {
    protected area: number;

    constructor() {
        this.area = 0;
    }

    public getArea(): number {
        return this.area;
    }
}

class Circle extends Shape {
    constructor(private radius: number) {
        super();
        this.area = this.calculateArea();
    }

    private calculateArea(): number {
        return Math.PI * this.radius * this.radius;
    }
}

class Rectangle extends Shape {
    constructor(private width: number, private height: number) {
        super();
        this.area = this.calculateArea();
    }

    private calculateArea(): number {
        return this.width * this.height;
    }
}

const shapes: Shape[] = [new Circle(5), new Rectangle(4, 6)];
shapes.forEach(shape => {
    console.log(`Area: ${shape.getArea()}`);
});

コードの行ごとの解説

  1. class Shape { … } – 基本的な形状クラスを定義します。このクラスは、面積を計算するための基本的な構造を提供します。
  2. protected area: number; – 面積を保持するプロパティです。protectedにすることで、派生クラスからのみアクセス可能です。
  3. public getArea(): number { … } – 面積を取得するためのメソッドです。外部から呼び出すことができます。
  4. class Circle extends Shape { … } – Shapeクラスを継承したCircleクラスです。円の面積を計算します。
  5. private calculateArea(): number { … } – 円の面積を計算するプライベートメソッドです。
  6. const shapes: Shape[] = [new Circle(5), new Rectangle(4, 6)]; – Shape型の配列を作成し、CircleとRectangleのインスタンスを格納します。
  7. shapes.forEach(shape => { … } – 各形状の面積をコンソールに出力します。

練習問題編

以下の練習問題に取り組むことで、オブジェクト指向設計の理解を深めましょう。

  1. 問題1: 三角形を表すTriangleクラスを作成し、面積を計算するメソッドを実装してください。
  2. 問題2: Shapeクラスに、形状の種類を返すgetTypeメソッドを追加してください。
  3. 問題3: CircleとRectangleの面積を比較し、面積が大きい方の形状を返すメソッドをShapeクラスに追加してください。

まとめ

  • オブジェクト指向設計の基本概念を理解し、実際の業務に応用することが求められます。
  • TypeScriptを活用することで、型安全性を確保しつつ、柔軟な設計が可能です。
  • 練習問題を通じて、実際のシナリオに基づいた理解を深めることができます。