WinFormアプリで学ぶオブジェクト指向プログラミング – カプセル化の基本

2024年8月19日

この資料では、初学者向けにC#のWinFormアプリケーションを使用して、オブジェクト指向プログラミング(OOP)のカプセル化の基本概念を学ぶためのサンプルを紹介します。具体的には、ユーザー情報を管理するクラスを作成し、そのデータをフォームに表示することで、カプセル化の役割と重要性を体験します。

1. カプセル化とは

カプセル化は、オブジェクト指向プログラミングの重要な概念であり、データ(フィールド)とその操作(メソッド)を1つの単位としてまとめ、外部からの直接アクセスを制限することを意味します。これにより、データの整合性が保たれ、コードの保守性が向上します。

2. サンプルアプリケーションの概要

このサンプルでは、ユーザーの名前と年齢を管理するクラスを作成し、そのデータをフォームで表示します。フォームは、ユーザーが入力した情報を使って、カプセル化されたクラスのインスタンスを作成し、そのデータをフォーム上に表示します。

3. クラスの実装

UserInfoクラスの実装

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

    public string Name
    {
        get { return name; }
        set { name = value; }
    }

    public int Age
    {
        get { return age; }
        set 
        {
            if (value >= 0)
            {
                age = value;
            }
        }
    }

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

    public string GetInfo()
    {
        return $"Name: {Name}, Age: {Age}";
    }
}

このクラスでは、nameageのフィールドをプライベートに設定し、パブリックなプロパティNameAgeを通じてデータをアクセスおよび変更します。年齢の設定では、負の数が許可されないようにしています。

4. WinFormデザイン

新しくプロジェクトを作成します(EncapsulationDemoApp)

フォーム要素の配置

  • テキストボックス (nameInput, ageInput): 名前と年齢を入力するためのフィールド。
  • ボタン (showInfoButton): ユーザー情報を表示するためのボタン。
  • ラベル (infoLabel): ユーザー情報を表示するためのラベル。

5. フォームコードの実装

Form1のコード

public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
    }

    private void showInfoButton_Click(object sender, EventArgs e)
    {
        string name = nameInput.Text;
        if (int.TryParse(ageInput.Text, out int age))
        {
            UserInfo user = new UserInfo(name, age);
            infoLabel.Text = user.GetInfo();
        }
        else
        {
            MessageBox.Show("有効な年齢を入力してください。");
        }
    }
}

このフォームコードでは、ユーザーが入力した名前と年齢を取得し、UserInfoクラスのインスタンスを作成して、その情報をラベルに表示します。int.TryParseメソッド内で変数ageを宣言することで、コードをより簡潔にしています。エラーメッセージも日本語で表示されるようにしています。

6. まとめ

このサンプルでは、カプセル化の基本概念を体験するために、ユーザー情報を管理するクラスを作成し、WinFormアプリケーションを通じてそのデータを表示しました。カプセル化により、データの整合性を保つとともに、外部からの不正なアクセスを防ぐ方法を学びました。

7. 演習問題

  1. UserInfoクラスに新しいプロパティ(例: Email)を追加し、カプセル化を適用してください。
  2. 年齢が120歳以上の場合にも設定できないようにコードを拡張してください。