基礎から学ぶC#入門 90日コース | クラス・インスタンス・設計 - Day 31:クラスとは

Web APP 90日で身につけるC#
スポンサーリンク
スポンサーリンク

Day 31 のゴールと全体像

Day 31 から、いよいよ オブジェクト指向の世界に入っていきます。 この日はまず、土台となる次のキーワードをしっかり理解することが目標です。

  • クラス
  • オブジェクト
  • インスタンス
  • データと処理

ここまでの「変数・メソッド・配列・Dictionary」などは、 いわば「部品」でした。 Day 31 からは、それらの部品を 1つの「まとまり」として設計する考え方を学んでいきます。

クラスとは何か

クラスは「設計図」

クラスは、よく次のように説明されます。

クラス = オブジェクトの設計図

もう少し具体的に言うと、

  • どんな「データ」を持つか
  • どんな「処理(振る舞い)」ができるか

をまとめて定義したものがクラスです。

例えば、「人」を表すクラスを考えてみます。

  • データ
    • 名前
    • 年齢
  • 処理
    • 自己紹介する

これを C# のクラスとして書くと、次のようになります。

// 人を表すクラス
class Person
{
    // データ(フィールド)
    public string Name;  // 名前
    public int Age;      // 年齢

    // 処理(メソッド)
    public void Introduce()
    {
        Console.WriteLine($"こんにちは、{Name} です。年齢は {Age} 歳です。");
    }
}
C#

重要ポイント:

  • クラスの中には「データ」と「処理」が一緒に入ります。
  • 「人」という概念を、コードの世界に持ち込んだものが Person クラスです。

オブジェクト・インスタンスとは

クラスから「実体」を作る

クラスは「設計図」なので、それだけでは動きません。 設計図から「実体」を作る必要があります。

この「実体」のことを、

  • オブジェクト
  • インスタンス

と呼びます。 ほぼ同じ意味で使われることが多いです。

Person クラスからインスタンスを作る

先ほどの Person クラスを使って、実際に「人オブジェクト」を作ってみます。

class Program
{
    static void Main(string[] args)
    {
        // Person クラスからインスタンス(オブジェクト)を作成
        Person p = new Person();

        // データを設定
        p.Name = "太郎";
        p.Age = 20;

        // 処理を呼び出す
        p.Introduce(); // 「こんにちは、太郎です。年齢は 20 歳です。」と表示されます

        Console.ReadLine();
    }
}
C#

ここで行っていることは、

  1. Person p = new Person();
    • Person クラスから p という「人オブジェクト」を作る
  2. p.Name = "太郎"; / p.Age = 20;
    • その人の「データ」を設定する
  3. p.Introduce();
    • その人の「処理(振る舞い)」を実行する

という流れです。

重要ポイント:

  • クラスは「設計図」、インスタンス(オブジェクト)は「実際に動くもの」。
  • new クラス名() でインスタンスを作ります。

データと処理をひとまとめにする意味

これまでとの違い

ここまでの学習では、

  • データ:変数や配列、Dictionary
  • 処理:メソッド

というように、データと処理を「別々」に扱うことが多かったと思います。

オブジェクト指向では、

「あるもの(概念)に関するデータと処理を、1つのクラスにまとめる」

という考え方をします。

例えば、「成績管理」を考えるとき、

  • 名前
  • 点数
  • 合格かどうか判定する処理

をバラバラに書くのではなく、

「学生」というクラスにまとめる

という発想ができます。

Student クラスの例

// 学生を表すクラス
class Student
{
    // データ
    public string Name; // 名前
    public int Score;   // 点数

    // 処理:合格かどうかを判定する
    public bool IsPassed()
    {
        return Score >= 60;
    }

    // 処理:情報を表示する
    public void PrintInfo()
    {
        Console.WriteLine($"名前: {Name}, 点数: {Score}, 合格: {IsPassed()}");
    }
}
C#

このクラスを使うと、

class Program
{
    static void Main(string[] args)
    {
        Student s = new Student();

        s.Name = "花子";
        s.Score = 85;

        s.PrintInfo(); // 「名前: 花子, 点数: 85, 合格: True」と表示されます

        Console.ReadLine();
    }
}
C#

重要ポイント:

  • 「学生」という概念に関するデータ(名前・点数)と処理(合格判定・表示)が、1つのクラスにまとまっています。
  • これにより、「学生」という単位で考えやすくなり、コードの見通しが良くなります。

クラスを使ったミニ例題:複数の学生を扱う

List とクラスを組み合わせる

Day 29 では、Dictionary<string, int> を使って成績管理をしました。 Day 31 では、同じようなことを クラス+List でやってみます。

using System;
using System.Collections.Generic;

class Student
{
    public string Name;
    public int Score;

    public bool IsPassed()
    {
        return Score >= 60;
    }

    public void PrintInfo()
    {
        Console.WriteLine($"名前: {Name}, 点数: {Score}, 合格: {IsPassed()}");
    }
}

class Program
{
    static void Main(string[] args)
    {
        // 学生のリスト
        List<Student> students = new List<Student>();

        // 学生を3人登録
        Student s1 = new Student { Name = "太郎", Score = 70 };
        Student s2 = new Student { Name = "花子", Score = 85 };
        Student s3 = new Student { Name = "次郎", Score = 55 };

        students.Add(s1);
        students.Add(s2);
        students.Add(s3);

        // 全員の情報を表示
        Console.WriteLine("=== 学生一覧 ===");
        foreach (Student s in students)
        {
            s.PrintInfo(); // 各学生のメソッドを呼び出します
        }

        Console.ReadLine();
    }
}
C#

ここでのポイントは、

  • Student クラスが「学生」という概念を表している
  • List<Student> が「学生の集まり」を表している
  • foreach で 1 人ずつ取り出し、PrintInfo() という「学生自身の処理」を呼び出している

という構造になっていることです。

重要ポイント:

  • クラスを使うと、「1人の学生」を 1 つのオブジェクトとして扱えるようになります。
  • List と組み合わせることで、「複数の学生」を自然な形で扱えます。

クラス設計の考え方をステップで整理する

ステップ 1:現実の「もの」をイメージする

まず、プログラムで扱いたい「もの」をイメージします。

例:

  • 学生
  • 商品
  • ユーザー

ステップ 2:その「もの」が持つデータを洗い出す

学生なら:

  • 名前
  • 点数
  • 学年

商品なら:

  • 商品名
  • 価格
  • 在庫数

などです。

ステップ 3:その「もの」ができる処理(振る舞い)を考える

学生なら:

  • 合格かどうか判定する
  • 自己紹介する

商品なら:

  • 税込み価格を計算する
  • 在庫があるかどうか判定する

ステップ 4:データと処理をクラスにまとめる

例:商品クラス

class Product
{
    // データ
    public string Name;
    public int Price;

    // 処理:税込価格を計算する(消費税 10% と仮定)
    public int GetPriceWithTax()
    {
        return (int)(Price * 1.10);
    }

    // 処理:情報を表示する
    public void PrintInfo()
    {
        Console.WriteLine($"商品名: {Name}, 価格(税抜): {Price}, 価格(税込): {GetPriceWithTax()}");
    }
}
C#

このように、

「現実のもの → データと処理 → クラス」

という流れで考えるのが、オブジェクト指向の基本的な設計ステップです。

Day 31 用のクラステンプレート

最後に、Day 31 の復習や練習に使える クラスの基本テンプレートを示します。

// 何かを表すクラス(ここでは Example としています)
class Example
{
    // 1. データ(フィールド)
    public string Name;  // 名前
    public int Value;    // 値

    // 2. コンストラクタ(初期化用)※後の回で詳しく扱いますが、軽く触れておきます
    public Example(string name, int value)
    {
        Name = name;
        Value = value;
    }

    // 3. 処理(メソッド)
    public void Print()
    {
        Console.WriteLine($"Name: {Name}, Value: {Value}");
    }

    public bool IsLarge()
    {
        return Value >= 100;
    }
}

class Program
{
    static void Main(string[] args)
    {
        // クラスからインスタンスを作成
        Example ex = new Example("サンプル", 150);

        // メソッドを呼び出す
        ex.Print(); // 「Name: サンプル, Value: 150」と表示
        Console.WriteLine($"IsLarge: {ex.IsLarge()}"); // true

        Console.ReadLine();
    }
}
C#

このテンプレートをベースにして、

  • Student
  • Product
  • Book
  • Car

など、自分でクラスを考えて作ってみると、 「クラス・オブジェクト・インスタンス・データと処理」の感覚がぐっと身近になります。

Day 31 のまとめ

Day 31 では、

  • クラス = オブジェクトの設計図
  • インスタンス(オブジェクト) = 設計図から作られた実体
  • データと処理を 1 つのクラスにまとめる意味
  • PersonStudent の例を通して、クラスのイメージを具体化する

という流れで、オブジェクト指向の入り口に立ちました。

ここから先は、

  • コンストラクタ
  • カプセル化(private / public
  • プロパティ
  • 継承・ポリモーフィズム

といった、オブジェクト指向の本格的な要素に進んでいきます。

しかし、そのすべての土台になるのが、 今日学んだ 「クラスとは何か」「インスタンスとは何か」「データと処理をまとめる」 という感覚です。

ぜひ、

  • 自分で「何かのクラス」を考えて作ってみる
  • List と組み合わせて「複数のオブジェクト」を扱ってみる
  • メソッドを増やして「そのオブジェクトらしい振る舞い」を追加してみる

といった練習を通して、 オブジェクト指向を「難しい言葉」ではなく、 「現実のものをコードで表現する自然な考え方」として身につけていってください。

タイトルとURLをコピーしました