WinFormアプリで学ぶオブジェクト指向プログラミング – カプセル化の基本
この資料では、初学者向けに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}";
    }
}
このクラスでは、nameとageのフィールドをプライベートに設定し、パブリックなプロパティNameとAgeを通じてデータをアクセスおよび変更します。年齢の設定では、負の数が許可されないようにしています。
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. 演習問題
UserInfoクラスに新しいプロパティ(例:Email)を追加し、カプセル化を適用してください。- 年齢が120歳以上の場合にも設定できないようにコードを拡張してください。
 






ディスカッション
コメント一覧
まだ、コメントがありません