リアルワールドの設計例(例えば「社員管理システム」など)

オブジェクト指向プログラミング(OOP)の実践応用として、「社員管理システム(Employee Management System)」は、現実世界の対象(社員、部署、給与、勤務記録など)をソフトウェアのオブジェクトとしてモデル化する優れた例です。この設計を通じて、OOPの主要な概念(クラス、継承、カプセル化、ポリモーフィズム、抽象化)がどのように活用されるかを説明します。


1. 要件の整理(分析フェーズ)

社員管理システムの基本的な機能要件を洗い出します:

  • 社員の登録・編集・削除

  • 部署の管理

  • 給与計算

  • 勤務履歴の管理

  • 権限に応じたロール管理(一般社員・管理職など)


2. オブジェクトの抽出(設計フェーズ)

OOPでは、現実世界の概念を「クラス」としてモデル化します。以下は主なクラス例です:

  • Employee(社員)

  • Department(部署)

  • Payroll(給与)

  • AttendanceRecord(出勤記録)

  • Role(役割)


3. クラス定義の例

Employee クラス(カプセル化の例):

csharp
public class Employee { private int id; private string name; private string email; private Department department; private Role role; public Employee(int id, string name, string email, Department department, Role role) { this.id = id; this.name = name; this.email = email; this.department = department; this.role = role; } public string GetEmail() => email; public Department GetDepartment() => department; }

ポイント

  • データメンバーは private にし、外部とのやりとりはメソッドを通じて行うことで、カプセル化を実現。


Role クラスと継承・ポリモーフィズムの例

csharp
public abstract class Role { public abstract double CalculateBonus(double baseSalary); } public class RegularEmployee : Role { public override double CalculateBonus(double baseSalary) => baseSalary * 0.05; } public class Manager : Role { public override double CalculateBonus(double baseSalary) => baseSalary * 0.2; }

ポイント

  • Role を抽象クラスにすることで 抽象化 を適用。

  • CalculateBonus メソッドは ポリモーフィズム(多態性) を利用して、社員の役割に応じた振る舞いを実現。


Department クラス(集約の例)

csharp
public class Department { public string Name { get; set; } public List<Employee> Employees { get; set; } public Department(string name) { Name = name; Employees = new List<Employee>(); } public void AddEmployee(Employee employee) { Employees.Add(employee); } }

ポイント

  • Department は複数の Employee を集約する。これにより、オブジェクト間の関係(集約) を表現。


4. 設計のメリット

  • 保守性:各クラスが明確な責務を持つため、変更に強い。

  • 再利用性:クラスやメソッドが他のシステムでも再利用可能。

  • 拡張性:新たな役職(例えば「契約社員」)を追加する際、既存コードを変更せずにサブクラスを追加可能。

  • テスト容易性:各クラスが単一の責務を持つため、単体テストが行いやすい。


5. UML 図を用いた視覚化(補足)

このような設計はUMLクラス図によって視覚的に表現することで、開発者間の共通理解が深まります。たとえば:

  • EmployeeDepartment に所属(集約)。

  • Role は抽象クラスで、Manager, RegularEmployee などが継承。


結論

「社員管理システム」のような現実的なアプリケーションを通じて、オブジェクト指向の設計原則と実装技法を効果的に活用することができます。特に、抽象化、カプセル化、継承、ポリモーフィズムの四大原則がどのように連携し、実際の業務要件に対応していくかが明確に理解できます。こうしたモデル化によって、拡張性・保守性に優れたソフトウェア設計が可能となります。

生成日:2025/06/01