C#中級

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

導入

オブジェクト指向設計は、ソフトウェア開発において効率的かつ柔軟なシステムを構築するための強力な手法です。特にC#を用いた開発では、クラスやオブジェクトの概念を駆使して、現実世界の問題をモデル化することが求められます。本記事では、特定のシチュエーションを通じてオブジェクト指向設計の実践的な側面を探ります。

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

重要な概念の整理

オブジェクト指向設計の基本的な概念には、カプセル化、継承、ポリモーフィズムがあります。これらの概念を理解し、適切に適用することで、コードの再利用性や保守性を向上させることが可能です。特に、カプセル化はデータとメソッドを一つの単位にまとめ、外部からのアクセスを制御することで、システムの堅牢性を高めます。

コード例(C#)


public class User
{
    private string name;
    private int age;

    public User(string name, int age)
    {
        this.name = name;
        this.age = age;
    }

    public string GetUserInfo()
    {
        return $"Name: {name}, Age: {age}";
    }
}

public class Admin : User
{
    private string role;

    public Admin(string name, int age, string role) : base(name, age)
    {
        this.role = role;
    }

    public string GetAdminInfo()
    {
        return $"{GetUserInfo()}, Role: {role}";
    }
}

コードの行ごとの解説

  1. public class User: ユーザー情報を管理するクラスを定義。
  2. private string name;: ユーザー名を保持するプライベートフィールド。
  3. public User(string name, int age): コンストラクタでユーザー名と年齢を初期化。
  4. public string GetUserInfo(): ユーザー情報を文字列として返すメソッド。
  5. public class Admin : User: Userクラスを継承したAdminクラスを定義。
  6. private string role;: 管理者の役割を保持するプライベートフィールド。
  7. public string GetAdminInfo(): 管理者情報を取得するメソッド。

練習問題編

以下の問題に取り組み、オブジェクト指向設計の理解を深めてください。

  1. 問題1: Userクラスにメールアドレスを追加するためのプロパティを実装せよ。

    模範解答:

    
    public string Email { get; set; }
    

  2. 問題2: Adminクラスに権限を追加するためのメソッドを作成せよ。

    模範解答:

    
    public void SetPermissions(string permissions) { /* 実装 */ }
    

  3. 問題3: Userクラスに年齢を更新するメソッドを追加せよ。

    模範解答:

    
    public void UpdateAge(int newAge) { age = newAge; }
    

  4. 問題4: Adminクラスで、役割が「SuperAdmin」の場合に特別なメッセージを表示するメソッドを追加せよ。

    模範解答:

    
    public void DisplaySpecialMessage() {
        if (role == "SuperAdmin") {
            Console.WriteLine("You have all the privileges.");
        }
    }
    

  5. 問題5: Userクラスのインスタンスを3つ作成し、リストに保存して表示するプログラムを作成せよ。

    模範解答:

    
    List users = new List();
    users.Add(new User("Alice", 30));
    users.Add(new User("Bob", 25));
    users.Add(new User("Charlie", 35));
    users.ForEach(u => Console.WriteLine(u.GetUserInfo()));
    

まとめ

  • オブジェクト指向設計は、システムの柔軟性と拡張性を高めるために重要。
  • 継承やカプセル化を適切に活用することで、コードの再利用性が向上する。
  • 実際の業務においては、設計の段階での落とし穴に注意が必要。