0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

オブジェクト指向が分かりにくい理由は「木と森」にあった話

0
Last updated at Posted at 2026-04-30

1. はじめに

オブジェクト指向で設計していると、こんな経験はないでしょうか?

  • クラス図は綺麗なのに、なぜか全体が分かりにくい
  • レビューで「全体が見えていない」と言われる

私はこれにずっと違和感を持っていました。

その違和感の正体を説明してくれたのが、
『木を見る西洋人、森を見る東洋人』という一冊です。

本記事では、この本で示されている「認知の違い」をもとに、
オブジェクト指向設計で何が起きているのかを整理します。


2. 「木を見る」と「森を見る」はどう違うのか

この違いは、単なる概念ではなく、実験レベルで確認されています。
『木を見る西洋人、森を見る東洋人』の中では、いくつか象徴的な例が紹介されています。


例1: 牛はどっちと仲間?

子供に「草」と「鶏」を見せて、こう質問します。

「牛はどっちと一緒?」

このときの答えはこう分かれます:

  • 西洋人 -> 「鶏」(どちらも動物だから)
  • 東洋人 -> 「草」(牛は草を食べるから)

ここにある違いはシンプルです:

  • 西洋: 属性・カテゴリで捉える(=木)
  • 東洋: 関係性で捉える(=森)

例2: 風船はなぜ向きを変えたか?

空を飛ぶ風船が上空で動く向きを変えたとき:

  • 東洋人 -> 「上空で風が変わった」
  • 西洋人 -> 「風船がそっちに行きたかった」

これはこういう違いです:

  • 東洋: 関係性を捉える
  • 西洋: 個体の表現を捉える

例3: この人は幸せか?

5人いる中で中央の人物が笑顔で、周囲の人が不満そうな写真を見せて:

「この人は幸せか?」

  • 西洋人 -> 「幸せだ(笑っているから)」
  • 東洋人 -> 「幸せそうだが、何かおかしい」

つまり:

  • 西洋: 個人の状態を見る(=木)
  • 東洋: 周囲との関係を見る(=森)

まとめ

これらをまとめると:

視点 特徴
木を見る 対象を切り出し、属性やカテゴリで理解する
森を見る 関係性・文脈の中で意味を捉える

この違いは、

「世界をどうモデリングするか」

そのものに直結しています。


3. オブジェクト指向は「木を見る」技術

ここまでの例を見ると分かる通り、

  • 西洋的な捉え方 = 対象を切り出して分類する(=木)
  • 東洋的な捉え方 = 関係性の中で意味を持たせる(=森)

という違いがあります。

では、オブジェクト指向はどちらに近いでしょうか?

答えは明確で、「木を見る」側です。

ここで一つ、興味深い事実があります。

『オブジェクト指向開発の落とし穴』に掲載されている、
主要な分析・設計手法の系譜を辿ると、

それらはすべて西洋圏で生まれたものであり、
東洋発のものは全く見当たりません。

つまりオブジェクト指向という考え方自体が、

「対象を分解し、境界を定義し、分類する」

という西洋的な認知の延長線上にあると考えられます。


オブジェクト指向では、

  • クラスを定義する
  • 属性を持たせる
  • メソッドを定義する
  • カプセル化する

といった形で、「対象を独立した存在として切り出す」ことを重視します。

つまりオブジェクト指向とは、

「世界をクラスという単位に分解する技術」

だと言えます。


クラス図の抽出とアリストテレス哲学

UMLのクラス図を作成する際、私たちは無意識に

「目の前の具体的な対象」から
「共通する本質」を抜き出す

という作業を行っています。

このプロセスは、古代ギリシャの哲学者
アリストテレスが提唱した「形相(エイドス)」の概念と
驚くほど似ています。


実体と形相の類似性

アリストテレスは、個別の物体(個体)には、

「そのものをそのものたらしめている本質(形相)」

が宿っていると考えました。

  • アリストテレスの視点
    目の前にある「個別の机」は、
    その背後にある「机という形相(型)」を具現化したものである

  • オブジェクト指向の視点
    メモリ上の「個別のインスタンス」は、
    設計時に定義した「クラス(型)」を具体化したものである


クラス図において

  • 属性(Attribute)
  • 操作(Operation)

を定義する行為は、

アリストテレスが『カテゴリー論』で試みた

「事物をどう定義し、分類するか」

という知的営みの現代版といえます。

私たちはモデリングを通じて、

図らずも数千年前の哲学者と同じ視座で
世界を解体しているのです。

4. しかし「木」だけでは設計はうまくいかない

ここで問題が起きます。

オブジェクト指向を真面目に学ぶほど、こうなりがちです。

  • クラス設計にこだわる
  • 責務分割を厳密に行う
  • 継承やインターフェースを整理する

しかし実務では、

  • なぜか分かりにくい
  • 修正しづらい
  • バグが出やすい

という状況に陥ることがあります。

これはなぜか?

答えはシンプルです。

「森」を見ていないからです。


5. 具体例(注文処理で考える)

例えばECサイトの注文処理を考えます。

木だけを見る設計

  • Orderクラスを定義
  • Itemクラスを定義
  • Paymentクラスを定義

それぞれの責務は正しい。

しかし、

  • 処理の流れが分からない
  • どこで状態が変わるか見えない

森を見る設計

先に「流れ」を考えます。

注文 -> 決済 -> 在庫確保 -> 配送

この流れを見ることで、

  • オブジェクト同士の関係
  • 状態の変化
  • 処理の責任範囲

が明確になります。

その上でクラスを設計すると、

「動く設計」になります。


6. 実務でよくある罠

このズレは、実務で頻繁に起こります。

パターン1: クラスは綺麗だが読めない

-> 木しか見ていない

パターン2: 責務は正しいが遅い

-> 相互作用(森)が最適化されていない

パターン3: 変更に弱い

-> 流れを考えていない


7. 解決策(視点を切り替える)

解決策はシンプルです。

設計時に、次の2つを意識します。

  • 今、自分は木を見ているのか
  • 今、自分は森を見ているのか

そして、意図的に切り替えます。

フェーズ 視点
要件理解 森(業務の流れ)
クラス設計 木(構造の分解)
見直し 森(相互作用の確認)

8. 結論

オブジェクト指向は「木を見る力」を強く要求する技術です。

しかし実際のシステムは、

「木の集まり」ではなく「森として動く」

ものです。

そのため重要なのは、

  • 木を定義する力(クラス設計)
  • 森を見る力(相互作用の理解)

この両方です。

設計で詰まったときは、次を確認してください。

  • クラスばかり見ていないか
  • オブジェクトのやり取りを見ているか

この2つを意識するだけで、設計の見え方は大きく変わります。


参考文献

  • リチャード・E・ニスベット『木を見る西洋人、森を見る東洋人』鈴木主税訳, ダイヤモンド社, 2004年, ISBN:978-4478910184
  • ジョン・ラカメラほか『オブジェクト指向開発の落とし穴』トッパン, 1996年, ISBN:978-4894712160
  • アリストテレス『カテゴリー論・命題論』山本光雄訳, 岩波書店, 1959年, ISBN:978-4003360415
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?