オブジェクト指向は、なぜ最初に難しく感じるのか
C#を学び始めると、多くの人がここで立ち止まります。
「変数までは分かった。」
「if文もfor文も分かった。」
「メソッドも書ける。」
ところが、
Person person = new Person();
この一行が急に難しく感じます。
実は、ここで難しくなる理由はプログラムを書く方法が変わるからです。
イメージで全体像を見てみましょう
▼ 図1 オブジェクト指向は「誰が仕事をするのか」を考えるプログラミング

今までは「命令」を書いていた
例えば次のコードを見てください。
int a = 3;
int b = 5;
Console.WriteLine(a + b);
頭の中では、
- 3を入れる
- 5を入れる
- 足す
- 表示する
という流れになります。
つまり、
「何をするか」
を順番に考えていました。
これが今まで学んできた世界です。
オブジェクト指向では考え方が変わる
オブジェクト指向になると、最初に考えるのは
「何をするか」
ではありません。
まず考えるのは、
「誰がやるのか」
です。
例えばゲームなら、
- プレイヤー
- 敵
- 武器
- アイテム
これらが登場人物になります。
プログラムも同じです。
「誰が仕事を担当するか」
を決める考え方なのです。
会社で考えてみよう
会社には、
- 社長
- 営業
- 経理
- 総務
がいます。
請求書を作る仕事を営業が全部担当するでしょうか。
もちろん違います。
経理が担当します。
社員一人ひとりが役割を持っています。
プログラムでも同じです。
注文を受ける
↓
注文クラス
料金を計算する
↓
商品クラス
支払いを行う
↓
支払いクラス
役割ごとに担当を分けることで、プログラムは分かりやすく、修正もしやすくなります。
オブジェクトとは「担当者」
銀行を例に考えてみましょう。
口座A
口座B
口座C
それぞれ残高は違います。
口座A 残高10万円
口座B 残高3万円
口座C 残高50万円
しかし、どの口座にも共通してできる仕事があります。
- 預け入れる
- 引き出す
- 残高を確認する
つまり、
- 仕事(メソッド)は共通
- 持っている情報(変数・フィールド)はそれぞれ違う
これがオブジェクトです。
クラスとは「仕事内容」
ここで初めてクラスが登場します。
クラスとは、
「銀行口座という担当者は何ができるのか」
を書いたものです。
例えば、
残高を持つ
預け入れる
引き出す
残高を表示する
という仕事内容をまとめています。
そして、
口座A
口座B
口座C
という担当者(オブジェクト)を何人でも作ることができます。
なぜオブジェクトを作るの?
例えば銀行を変数だけで作るとします。
int balanceA;
int balanceB;
int balanceC;
balance(バランス)=残高
さらに、お金を預ける処理を作ると、
DepositA();
DepositB();
DepositC();
Deposit(デポジット)=預け入れる、入金する
人数が100人なら、
balance(残高)も100個Deposit(預け入れ)も100個
必要になります。
これでは管理がとても大変です。
そこでオブジェクト指向では、
BankAccount account1 = new BankAccount();
BankAccount account2 = new BankAccount();
BankAccount account3 = new BankAccount();
- BankAccount(バンクアカウント)=銀行口座
- account(アカウント)=口座
という仕組みを用意します。
これなら「銀行口座」という仕組みを一つ作るだけで、必要な人数分だけ簡単に口座を増やすことができます。
これがオブジェクト指向の大きなメリットです。
初学者が混乱する理由
ここが一番大事です。
今までは、
変数を書く
↓
計算する
↓
表示する
という流れでプログラムを書いていました。
ところがオブジェクト指向では、
担当者(オブジェクト)を作る<br>↓<br>担当者に仕事をお願いする
という流れになります。
つまり、
命令を書くプログラミングから、役割を設計するプログラミングへ考え方が変わる
のです。
この「考え方の転換」が、初学者が最初につまずきやすい理由です。
覚える順番はこの5ステップ
オブジェクト指向は、次の順番で考えると理解しやすくなります。
- 誰が仕事をするのか を決める
- その人が持つ情報 を考える
- その人ができる仕事 を考える
- 必要な人数だけオブジェクトを作る
- オブジェクトに仕事をお願いする
この順番で考えれば、クラスやオブジェクトの役割が自然に理解できるようになります。
まとめ
オブジェクト指向が難しいのは、文法が難しいからではありません。
プログラムを見る視点が変わるからです。
これまでは、
「何をするか」
を順番に書いていました。
オブジェクト指向では、
「誰が仕事を担当するか」
を最初に考えます。
この違いが理解できると、
- クラス
- オブジェクト
- フィールド
- メソッド
がバラバラの知識ではなく、一つの流れとしてつながって見えてきます。
オブジェクト指向とは、「難しい技術」ではありません。
「役割を分担して整理する考え方」なのです。
さらに分かりやすくするなら、この総まとめイラストに加えて、記事の途中で「銀行口座のクラスから口座A・B・Cのオブジェクトが生まれる様子」を1枚、「命令型とオブジェクト指向の違い」を1枚追加すると、視覚的な理解がより深まります。









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