導入
オブジェクト指向設計は、現代のソフトウェア開発において重要な役割を果たします。特に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()}`);
});
コードの行ごとの解説
- class Shape { … } – 基本的な形状クラスを定義します。このクラスは、面積を計算するための基本的な構造を提供します。
- protected area: number; – 面積を保持するプロパティです。protectedにすることで、派生クラスからのみアクセス可能です。
- public getArea(): number { … } – 面積を取得するためのメソッドです。外部から呼び出すことができます。
- class Circle extends Shape { … } – Shapeクラスを継承したCircleクラスです。円の面積を計算します。
- private calculateArea(): number { … } – 円の面積を計算するプライベートメソッドです。
- const shapes: Shape[] = [new Circle(5), new Rectangle(4, 6)]; – Shape型の配列を作成し、CircleとRectangleのインスタンスを格納します。
- shapes.forEach(shape => { … } – 各形状の面積をコンソールに出力します。
練習問題編
以下の練習問題に取り組むことで、オブジェクト指向設計の理解を深めましょう。
- 問題1: 三角形を表すTriangleクラスを作成し、面積を計算するメソッドを実装してください。
- 問題2: Shapeクラスに、形状の種類を返すgetTypeメソッドを追加してください。
- 問題3: CircleとRectangleの面積を比較し、面積が大きい方の形状を返すメソッドをShapeクラスに追加してください。
まとめ
- オブジェクト指向設計の基本概念を理解し、実際の業務に応用することが求められます。
- TypeScriptを活用することで、型安全性を確保しつつ、柔軟な設計が可能です。
- 練習問題を通じて、実際のシナリオに基づいた理解を深めることができます。