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#ここで行っていることは、
Person p = new Person();Personクラスからpという「人オブジェクト」を作る
p.Name = "太郎";/p.Age = 20;- その人の「データ」を設定する
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#このテンプレートをベースにして、
StudentProductBookCar
など、自分でクラスを考えて作ってみると、 「クラス・オブジェクト・インスタンス・データと処理」の感覚がぐっと身近になります。
Day 31 のまとめ
Day 31 では、
- クラス = オブジェクトの設計図
- インスタンス(オブジェクト) = 設計図から作られた実体
- データと処理を 1 つのクラスにまとめる意味
PersonやStudentの例を通して、クラスのイメージを具体化する
という流れで、オブジェクト指向の入り口に立ちました。
ここから先は、
- コンストラクタ
- カプセル化(
private/public) - プロパティ
- 継承・ポリモーフィズム
といった、オブジェクト指向の本格的な要素に進んでいきます。
しかし、そのすべての土台になるのが、 今日学んだ 「クラスとは何か」「インスタンスとは何か」「データと処理をまとめる」 という感覚です。
ぜひ、
- 自分で「何かのクラス」を考えて作ってみる
- List と組み合わせて「複数のオブジェクト」を扱ってみる
- メソッドを増やして「そのオブジェクトらしい振る舞い」を追加してみる
といった練習を通して、 オブジェクト指向を「難しい言葉」ではなく、 「現実のものをコードで表現する自然な考え方」として身につけていってください。

