【ClassPractice01】クラスとは何か?〜なぜ必要なのかから理解する〜
C#を学習していると、必ず出てくる言葉があります。
クラス
オブジェクト
new
ここでつまずく人がとても多いです。
今日は、いきなり難しい説明はしません。
まずは、
「なぜクラスが必要なのか」
から考えてみましょう。
① プロジェクトを追加する
ExtraPractice.slnを開く- ソリューションを右クリック
- 「追加」→「新しいプロジェクト」
- 「コンソール アプリ」を選択
- プロジェクト名を次の名前にする
ClassPractice01
- 「作成」をクリック
■ 配列だけで管理してみる
例えば、
3人のプレイヤーを管理するとします。
それぞれに
- 名前
- HP
- MP
があるとします。
今まで学んだ知識で書くとこうなります。
string[] names = new string[3];
int[] hp = new int[3];
int[] mp = new int[3];
names[0] = "勇者";
hp[0] = 100;
mp[0] = 30;
動きます。
ですが、ここで考えてみてください。
問題1
「勇者のHPはどれ?」
→ hp[0]
では、
問題2
「勇者の名前はどれ?」
→ names[0]
ここで重要なことに気づきます。
0番がズレたらどうなる?
もし
names[0] = "勇者";
hp[1] = 100;
と書いてしまったら?
勇者のHPは100ではなくなります。
■ データがバラバラ問題
今の状態はこうです。
名前の箱
HPの箱
MPの箱
全部バラバラ。
「1人分」がまとまっていません。
■ 1人分をまとめたい
ここで考えます。
1人分をひとまとめにできたら便利では?
そこで登場するのが
クラス
です。
② Playerクラスを作る
ClassPractice01 を右クリックし、「追加」→「クラス」を選びます。
ファイル名を Player.cs にして追加します。
③ Player.cs に書く
namespace ClassPractice01
{
public class Player
{
public string Name;
public int Hp;
public int Mp;
}
}
このコードでは、名前・HP・MPをひとまとめにした Player 型を作っています。クラスとは、プログラムで使う型を自分で作るための仕組みです。
④ Program.cs に書く
Player p1 = new Player();
p1.Name = "勇者";
p1.Hp = 100;
p1.Mp = 30;
Console.WriteLine("名前: " + p1.Name);
Console.WriteLine("HP: " + p1.Hp);
Console.WriteLine("MP: " + p1.Mp);
new Player() でPlayer型の実体を作り、名前・HP・MPを代入しています。
⑤ F5で実行する
F5キーを押してプログラムを実行します。
次のように表示されれば成功です。
名前: 勇者
HP: 100
MP: 30
何が起きている?
class Playerで新しい型を作ったnew Player()でPlayer型の実体を作ったp1の中に名前・HP・MPをまとめた- まとめたデータを画面に表示した
これで「プロジェクトを作る → クラスを書く → オブジェクトを作る → 実行して確認する」までを一通り体験できました。
■ 複数作れる
Player p2 = new Player();
設計は同じでも、中身は別です。
これが
オブジェクト(インスタンス)
です。
■ ここで少しだけ例え話
クラスは
設計図
です。
new は
実際に作る
という意味です。
設計図があっても、
実際に作らなければ存在しません。
■ 今日のポイント
最初に覚えることはたった1つです。
クラスとは、データをまとめるための仕組み
それだけです。
■ よくある誤解
× オブジェクト指向は難しい
× 哲学的なもの
× 3大要素を覚えるもの
違います。
最初は、
データをきれいにまとめる道具
それだけ理解すれば十分です。
■ 次に進むために
次の段階では
- メソッドをクラスの中に入れる
- 処理もまとめる
という話になります。
ですが今はまだそこまでいきません。
まとめ
- 配列だけでは管理が大変
- 1人分をまとめたい
- そのための仕組みがクラス
- クラスは「自分で作れる型」
- new は実体を作る
ここまで理解できれば、
オブジェクト指向の第一歩は成功です。
実際に作って動かしてみよう
確認課題
Playerをもう1人作り、名前・HP・MPを別の値にして、それぞれのデータが独立していることを確認しましょう。
シリーズの次のページ
- 一覧へ:オブジェクト指向 学習ロードマップ
- 次のStep:ClassPractice02へ







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