Menu
Coddy logo textTech

まとめ - 従業員の階層構造

CoddyのC#ジャーニー「オブジェクト指向プログラミング」セクションの一部 — レッスン 24/70。

challenge icon

チャレンジ

簡単

この章のすべての継承の概念を統合した、従業員階層システムを構築しましょう。異なる従業員タイプが共通の属性を共有しながら、ボーナスの計算方法が異なる会社構造を作成します。

コードは4つのファイルに分けて構成します:

  • Employee.cs: Company 名前空間内にベースとなる Employee クラスを定義します。すべての従業員は Name (string) と Salary (decimal) を持ちます。両方の値を受け取るコンストラクタを作成してください。デフォルトで給与の10%を返す virtual メソッド CalculateBonus() を追加します。ToString() をオーバーライドして、"{Name} - ${Salary}" を返すようにします。
  • Manager.cs: Employee を継承する Manager クラスを Company 名前空間内に定義します。マネージャーには追加の TeamSize プロパティ (int) があります。コンストラクタは名前、給与、チームサイズを受け取り、base を使用して親クラスを初期化する必要があります。CalculateBonus() をオーバーライドして、給与の15%にチームメンバー1人につき$50を加えた額を返すようにします。ToString() をオーバーライドして、"{Name} - ${Salary} (Manager, Team: {TeamSize})" を返すようにします。
  • Developer.cs: Employee を継承する Developer クラスを Company 名前空間内に定義します。デベロッパーには ProgrammingLanguage プロパティ (string) があります。コンストラクタは名前、給与、プログラミング言語を受け取ります。CalculateBonus() をオーバーライドして、給与の12%を返すようにします。ToString() をオーバーライドして、"{Name} - ${Salary} (Developer, {ProgrammingLanguage})" を返すようにします。
  • Program.cs: メインファイルで、入力値を使用して各従業員タイプを1つずつ作成します。ポリモーフィズムを実証するために、3つすべてを Employee 参照の配列に格納します。配列をループで回し、各従業員の ToString() の結果と、それに続いてボーナスを出力します。

以下の8つの入力を受け取ります:

  • ベース従業員の名前
  • ベース従業員の給与
  • マネージャーの名前
  • マネージャーの給与
  • マネージャーのチームサイズ
  • デベロッパーの名前
  • デベロッパーの給与
  • デベロッパーのプログラミング言語

各従業員の情報とボーナスを以下の形式で出力してください:

{ToString result}
Bonus: ${CalculateBonus result}

例えば、入力が John, 50000, Sarah, 80000, 5, Mike, 70000, C# の場合、出力は以下のようになります:

John - $50000
Bonus: $5000
Sarah - $80000 (Manager, Team: 5)
Bonus: $12250
Mike - $70000 (Developer, C#)
Bonus: $8400

各従業員タイプが異なる方法でボーナスを計算しているにもかかわらず、単一の Employee 配列を通じてそれらすべてを処理できることに注目してください。これが継承とポリモーフィズムを組み合わせる力です!

自分で試してみよう

using System;
using Company;

class Program
{
    public static void Main(string[] args)
    {
        // 基本の従業員の入力を読み込む
        string empName = Console.ReadLine();
        decimal empSalary = Convert.ToDecimal(Console.ReadLine());
        
        // マネージャーの入力を読み込む
        string mgrName = Console.ReadLine();
        decimal mgrSalary = Convert.ToDecimal(Console.ReadLine());
        int teamSize = Convert.ToInt32(Console.ReadLine());
        
        // 開発者の入力を読み込む
        string devName = Console.ReadLine();
        decimal devSalary = Convert.ToDecimal(Console.ReadLine());
        string progLang = Console.ReadLine();
        
        // TODO: Employee、Manager、Developer をそれぞれ1つずつ作成する
        
        // TODO: ポリモーフィズムを示すために、これら3つすべてを Employee 配列に格納する
        
        // TODO: 配列をループで回し、各従業員の ToString() とボーナスを出力する
        // 形式:
        // {ToString の結果}
        // Bonus: ${CalculateBonus の結果}
    }
}

オブジェクト指向プログラミングのすべてのレッスン