オブジェクト指向は、なぜ最初に難しく感じるのか

広告

C#を学び始めると、多くの人がここで立ち止まります。

「変数までは分かった。」
「if文もfor文も分かった。」
「メソッドも書ける。」

ところが、

Person person = new Person();

この一行が急に難しく感じます。

実は、ここで難しくなる理由はプログラムを書く方法が変わるからです。


イメージで全体像を見てみましょう

▼ 図1 オブジェクト指向は「誰が仕事をするのか」を考えるプログラミング


今までは「命令」を書いていた

例えば次のコードを見てください。

int a = 3;
int b = 5;

Console.WriteLine(a + b);

頭の中では、

  1. 3を入れる
  2. 5を入れる
  3. 足す
  4. 表示する

という流れになります。

つまり、

「何をするか」

を順番に考えていました。

これが今まで学んできた世界です。


オブジェクト指向では考え方が変わる

オブジェクト指向になると、最初に考えるのは

「何をするか」

ではありません。

まず考えるのは、

「誰がやるのか」

です。

例えばゲームなら、

  • プレイヤー
  • 武器
  • アイテム

これらが登場人物になります。

プログラムも同じです。

「誰が仕事を担当するか」

を決める考え方なのです。


会社で考えてみよう

会社には、

  • 社長
  • 営業
  • 経理
  • 総務

がいます。

請求書を作る仕事を営業が全部担当するでしょうか。

もちろん違います。

経理が担当します。

社員一人ひとりが役割を持っています。

プログラムでも同じです。

注文を受ける
 ↓
注文クラス
料金を計算する
 ↓
商品クラス
支払いを行う
 ↓
支払いクラス

役割ごとに担当を分けることで、プログラムは分かりやすく、修正もしやすくなります。


オブジェクトとは「担当者」

銀行を例に考えてみましょう。

口座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ステップ

オブジェクト指向は、次の順番で考えると理解しやすくなります。

  1. 誰が仕事をするのか を決める
  2. その人が持つ情報 を考える
  3. その人ができる仕事 を考える
  4. 必要な人数だけオブジェクトを作る
  5. オブジェクトに仕事をお願いする

この順番で考えれば、クラスやオブジェクトの役割が自然に理解できるようになります。


まとめ

オブジェクト指向が難しいのは、文法が難しいからではありません。

プログラムを見る視点が変わるからです。

これまでは、

「何をするか」

を順番に書いていました。

オブジェクト指向では、

「誰が仕事を担当するか」

を最初に考えます。

この違いが理解できると、

  • クラス
  • オブジェクト
  • フィールド
  • メソッド

がバラバラの知識ではなく、一つの流れとしてつながって見えてきます。

オブジェクト指向とは、「難しい技術」ではありません。

役割を分担して整理する考え方」なのです。

さらに分かりやすくするなら、この総まとめイラストに加えて、記事の途中で「銀行口座のクラスから口座A・B・Cのオブジェクトが生まれる様子」を1枚、「命令型とオブジェクト指向の違い」を1枚追加すると、視覚的な理解がより深まります。

訪問数 1 回, 今日の訪問数 1回

広告

C#

Posted by hidepon