マインクラフトを例えにしたオブジェクト指向(OOP)の学習資料
「1ブロックも1オブジェクト」「家はブロックの集合で1オブジェクト」という両方の視点を含めてストーリー仕立て考えてみましょう
目次
1️⃣ はじめに
プログラミングには 構造化プログラミング と オブジェクト指向(OOP) という考え方があります。
- 構造化プログラミング→ 作業を「順番に手順化」する。→ 同じ処理を繰り返す場合は、同じ手順を何度も書くことになる。
- オブジェクト指向(OOP)→ 現実世界のモノや概念を「オブジェクト(物)」として扱う。→ 似たものを「設計図(クラス)」として用意し、必要に応じて「実物(インスタンス)」を作る。
2️⃣ マインクラフトの世界をOOPで見ると?
🧱 視点①:ブロックもオブジェクト!
- マインクラフトの1つ1つのブロックは、それぞれが「Blockクラス」のオブジェクトです。
- 例えば:
- 草ブロック、石ブロック、木ブロック など種類は違っても、基本は Block という設計図。
- 座標(X,Y,Z)を持つのも属性(プロパティ)です。
- 壊す・置く などの操作が振る舞い(メソッド)です。
🏠 視点②:家はブロックの集合体としてのオブジェクト!
- 家を作るときは、複数のブロックを組み合わせて1つの建物を作ります。
- この「家」も House というクラスとしてまとめると便利です。
- House は、内部に複数の Block オブジェクトを持つ「集合オブジェクト」です。
3️⃣ OOP の重要な要素
OOP用語 | マイクラの例え |
---|---|
クラス(Class) | 設計図(ブロックや家の作り方) |
インスタンス(Instance) | 実際に置かれたブロック・建てた家 |
プロパティ(属性) | ブロックの種類、座標/家の色、窓の数 |
メソッド(振る舞い) | 壊す、置く、ドアを開ける、窓を割る |
4️⃣ C# のイメージコード
🧱 Blockクラス
class Block
{
public string Type; // ブロックの種類
public int X, Y, Z; // 座標
public Block(string type, int x, int y, int z)
{
Type = type;
X = x;
Y = y;
Z = z;
}
public void Destroy()
{
Console.WriteLine($"{Type} を壊しました!");
}
}
🏠 Houseクラス
class House
{
public List<Block> Blocks = new List<Block>();
public string Color;
public int WindowCount;
public House(string color, int windowCount)
{
Color = color;
WindowCount = windowCount;
}
public void AddBlock(Block block)
{
Blocks.Add(block);
}
public void OpenDoor()
{
Console.WriteLine("ドアを開けました!");
}
public void CloseDoor()
{
Console.WriteLine("ドアを閉めました!");
}
public void DestroyHouse()
{
foreach (var block in Blocks)
{
block.Destroy();
}
Console.WriteLine("家を壊しました!");
}
}
🗺️ ワールドでの使い方
// ブロックを置く
var block1 = new Block("石", 10, 64, 10);
var block2 = new Block("木", 11, 64, 10);
block1.Destroy(); // 石を壊しました!
// 家を建てる
var myHouse = new House("赤", 4);
myHouse.AddBlock(block1);
myHouse.AddBlock(block2);
myHouse.OpenDoor(); // ドアを開けました!
myHouse.DestroyHouse(); // ブロックを順に壊す+「家を壊しました!」
5️⃣ OOP の便利さはここにある!
✅ 同じ設計図(クラス)から何個でも作れる!
✅ ブロックも家も同じように「属性」と「振る舞い」を持てる!
✅ 「家を壊す」とき、ブロックもまとめて扱える!
✅ 拡張性が高い(例:村や街クラスを作って、家をまとめることも可能)
6️⃣ まとめ
- 1ブロックもオブジェクト!
- 家もブロックの集合体として1つのオブジェクト!
- オブジェクト指向は現実のモノのように「パーツを組み合わせて管理できる」考え方!
🗂️ さらに応用すると…
- 村 を Village クラスにする
- 住人 を Villager クラスにする
- プレイヤーも Player クラスのインスタンスと考える
✔️ ポイント
マイクラを思い出すと、「設計図 → 実物を何個でも作れる」「パーツを組み合わせて大きなモノを作れる」この考え方がオブジェクト指向です!
訪問数 3 回, 今日の訪問数 1回
ディスカッション
コメント一覧
まだ、コメントがありません