オブジェクト指向は、すぐわからなくて普通です

広告

IT学習者、とくにC#やUnityを学び始めた方が、高確率でぶつかる壁があります。

それが、

オブジェクト指向(Object-Oriented Programming)

です。

私は長年IT業界にいますが、正直に言うと、私自身もこの概念にかなり苦しみました。

電気工学を学び、
システム開発を経験し、
ネットワーク設計や大規模インフラ構築にも携わってきました。

アセンブラ、C言語、COBOL、VBA、Java、C#など、多くの言語にも触れてきました。 

それでも――

オブジェクト指向が「腹落ちした」と感じるまで、半年以上かかりました。

今日は、その話を書きます。


「3日わからない」くらいで諦めなくていい

IT学習で、よくこんな声を聞きます。

  • 何回聞いても class がわからない
  • new が何をしているのかわからない
  • インスタンスって何?
  • オブジェクト指向に向いてない気がする

でも、まず伝えたいのはこれです。

オブジェクト指向がすぐわからないのは普通です。

むしろ、最初から理解できる人のほうが少数です。

なぜなら、これは単なる文法ではないからです。


オブジェクト指向は「世界の見方」

例えば、手続き型の発想はこうです。

1. プレイヤーを作る
2. 移動させる
3. 敵と当たる
4. ダメージ計算
5. HPを減らす

これは「処理の流れ」を考えています。

順番に追えば理解しやすい。

一方、オブジェクト指向では発想が変わります。

考えるのは、

  • Player は何を持つ?
  • Enemy は何を持つ?
  • ダメージ計算は誰の責任?
  • UI更新は誰がやる?
  • GameManager はどこまで担当?

つまり、

処理の順番
ではなく
誰が責任を持つか

を考え始めます。

ここが難しい。


私が苦労した理由

今振り返ると、私が苦労した理由は明確です。

私はもともと、

  • ハードウェア
  • 通信
  • ネットワーク
  • システム設計

寄りの人間でした。

つまり、昔からこう考える癖がありました。

  • 信号はどう流れるか
  • パケットはどう届くか
  • CPUは何をするか
  • この処理はどの順番か

これは「フロー思考」です。

オブジェクト指向は違う。

そこに、

責務分離

という別軸が入ってきます。

つまり、

流れを見る脳(処理順序・制御フローを追う力)

役割を分ける脳(どのクラスが何を担当すべきか考える力)

両方が必要になる。

最初は脳が混乱します。


オブジェクト指向理解には段階がある

私は、理解には段階があると思っています。

レベル1:文法だけ知る

class Player {}

書ける。

でも意味は曖昧。


レベル2:使える

Player p = new Player();

インスタンス生成できる。

ただ、まだ本質理解ではない。


レベル3:分割できる

  • Player
  • Enemy
  • Weapon

など、クラス分けができる。


レベル4:設計できる

ここが本物です。

例えばレビューでこう思える。

その処理、GameManagerに持たせるの変では?

ここまで来ると、かなり理解できています。


Unityはさらに難しい

Unity学習者が混乱しやすい理由があります。

Unityは最初から、

  • MonoBehaviour
  • GameObject
  • Transform
  • Instantiate
  • Component

など、

オブジェクト指向の塊

を使うからです。

だから、こういう現象が起きます。

Unityでゲームは作れる
でも
オブジェクト指向は説明できない

これは珍しくありません。


半年かかっても遅くない

もし今、

  • クラスがわからない
  • インスタンスがわからない
  • オブジェクト指向が難しい

そう感じているなら、安心してください。

私はこう思っています。

  • 1週間でわからない → 普通
  • 1か月でわからない → 普通
  • 半年かかる → かなり普通
  • 実務で数年かけて理解 → あるある

実際、現役エンジニアでも、

  • God Class(全部入りクラス)
  • 密結合
  • 責務崩壊

を作る人はいます。

つまり、

オブジェクト指向を知っている

オブジェクト指向で設計できる

は別です。


ただし、誤解しないでほしいこと

私が半年かかったのは事実です。

でも、それは

半年間、何もしなくても突然わかった

という意味ではありません。

その間ずっと、

  • 自分でコードを書く
  • 動かす
  • 壊す
  • なぜそうなるか考える
  • 実務で使う

を繰り返していました。

ここが重要です。

わからない期間が長いこと

考えないこと

は、全く違います。

考え続ける人は、遅くても前進します。

でも、

  • 丸写し
  • AI任せ
  • エラーを読まない
  • 理解しようとしない

なら、半年経っても1年経っても苦しいままです。


最後に

オブジェクト指向で苦しんでいる人へ。

今わからなくても、大丈夫です。

大事なのは、

わからない状態で考えることをやめないこと。

私は半年以上、霧の中でした。

でも、

  • コードを書く
  • 読む
  • 設計を考える
  • 間違える
  • また考える

これを続けた結果、ある日つながりました。

オブジェクト指向は暗記ではありません。

ある日、視界が開けるタイプの学習です。

だから焦らなくていい。

ただし――

苦しむのは構いません。
わからなくても構いません。
でも、自分で考えることだけは、やめないでください。

それが、理解への最短ルートです。

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

広告