1. はじめに
エンジニアとして設計業務に従事していると、「オブジェクト指向」という概念が驚くほどスムーズに腹落ちする時と、逆に「なぜこんなに回りくどい捉え方をするのか」と違和感を覚える瞬間に遭遇します。
この違和感の正体を探るヒントが、認知心理学者リチャード・ニスベット氏の著書『木を見る西洋人、森を見る東洋人』(ISBN 978-4478910184)にあります。本作では、西洋と東洋における「世界の捉え方」の根本的な違いが論じられています。
本稿では、オブジェクト指向分析設計開発を単なる技術論としてではなく、人文学・哲学の文脈から再定義し、私たちがモデリングの際に行っている「思考の正体」を解き明かします。
2. なぜオブジェクト指向分析設計開発は西洋でしか生まれなかったのか
結論から言えば、オブジェクト指向分析設計開発という思想は西洋の歴史的・文化的背景における「必然」の結果です。
現に、『オブジェクト指向開発の落とし穴』(ISBN 4894712164)という書籍にはOMT、OOSA、OOSE、boochをはじめとする設計手法が登場しますが、それらの系譜をたどっていくと、すべてが西洋で生まれ、東洋からは生まれていないことがわかります。その根拠は、前述の『木を見る西洋人、森を見る東洋人』(P.159)に記された認知プロセスの差にあります。
「分類」の西洋、「関係」の東洋
書籍では子供に「牛・鶏・草」を見せ、「牛はどちらの仲間か?」と質問する実験が紹介されています。
| 地域 | 解答 | 意味 | 解説 |
|---|---|---|---|
| 西洋的な回答 | 鶏 | どちらも動物である | 共通の動作に着目し、カテゴリー(クラス)で分類します |
| 東洋的な回答 | 草 | 牛は草を食べる | 対象間の関係性(メッセージング)に着目します |
また、上空で向きを変える風船について、
| 地域 | 解答 | 解説 |
|---|---|---|
| 西洋的な回答 | 彼(風船)がそっちに行きたかった | 対象に意思や文脈を投影します |
| 東洋的な回答 | 上空で風が変わった | 対象間の関係性(メッセージング)に着目します |
周囲が不機嫌な中で一人だけ笑顔の人物に対しても、
| 地域 | 解答 | 解説 |
|---|---|---|
| 西洋的な回答 | 本人が笑っているから幸せだ | 個体の表現のみを評価します |
| 東洋的な回答 | 幸せそうだけど、何か様子がおかしい | 全体の場(コンテキスト)から判断します |
対象を周囲から切り離し、それ自体を「独立した実体」として分析し、内部に属性を閉じ込める――。このカプセル化や責務の分離という思想は、西洋的な世界認識そのものなのです。
--
3. クラス図の抽出とアリストテレス哲学
UMLのクラス図を作成する際、私たちは無意識に「目の前の具体的な対象」から「共通する本質」を抜き出す作業を行います。このプロセスは、古代ギリシャの哲学者アリストテレスが提唱した**「形相(エイドス)」**の概念と驚くほど酷似しています。
実体と形相の類似性
アリストテレスは、個別の物体には、そのものをそのものたらしめている「形相(本質・設計図)」が宿っていると考えました。
アリストテレスの視点: 目の前にある「個別の机」は、その背後にある「机という形相(型)」を具現化したものである。
オブジェクト指向の視点: メモリ上の「個別のインスタンス」は、設計時に定義した「クラス(型)」を具体化したものである。
属性や操作を定義する行為は、アリストテレスが『カテゴリー論』で試みた分類学の現代版といえます。私たちはモデリングを通じて、図らずも数千年前の哲学者と同じ視座で世界を解体しているのです。
4. 進化と多様性:OOPにおける「振る舞い」の再定義
西洋的な分類(継承)に基づいた開発が、実際の生物(オブジェクト)の多様性にどう対応するかを具体例で見てみましょう。
「動物」という基底クラスから「人」「牛」「鳥」を派生させ、共通メソッドを定義します。
「食べる」メソッドのオーバーライド
| 対象 | 動作 |
|---|---|
| 人 | 一般的な咀嚼・消化処理を書きます |
| 牛 | 進化の過程で胃を4つ持ちました。4つの胃を直列に通過させ、微生物の力を借りて分解し、再び口に戻して噛み直す(反芻)という特殊な多段階消化プロセスを実装します |
| 鳥 | 軽量化のため歯がありません。小石を飲み込み、砂嚢(さのう)という器官の中で小石を利用して咀嚼する選択を取りました |
| ゴキブリ | 胃(前胃)にキチン質の歯を持つ。咀嚼と消化を胃で同時に行う |
「排泄」メソッドの多態性(ポリモーフィズム)
環境や制約によって、内部実装(ロジック)は劇的に変化します。
| 対象 | 動作 |
|---|---|
| 哺乳類 | アンモニアを尿素に変え、液体として排泄します。水が比較的容易に手に入る環境への最適化です |
| 鳥類 | 飛行のために極限まで軽量化を図りました。水分を保持して重くなるのを防ぐため、尿を固形(尿酸)にして糞と一緒に排泄します。 |
「寝る」メソッドの特殊解
| 対象 | 動作 |
|---|---|
| 人間や牛や鳥 | 「静止して寝る」という共通処理を親クラスから継承できます |
| マグロ | 泳ぐことでエラに酸素を送り込む「衝突強制換気」という呼吸法をとるため、静止すると窒息します。そのため、以下のいずれかの仮説に基づいた特殊な振る舞いを記述する必要があります |
マグロの睡眠の仮設
| 仮説 | 動作 |
|---|---|
| 半球睡眠説 | 片方の脳を休ませながら、もう片方の脳で泳ぎ続ける(非同期並列処理のような振る舞い) |
| 落下・遊泳説 | 水面まで泳ぎ上がり、重力を利用して沈降しながら一時的に脳を休ませる(バッチ処理的な間欠動作) |
このように、共通するインターフェースを保ちつつ、生存戦略上、特殊化が必要な部分だけを変更する。これこそがOOPの醍醐味です。
5. 「木」に固執するリスクと「森」の視点
しかし、西洋的な「木を見る(個を見る)」視点だけでは、優れたシステムは構築できません。ここで重要になるのが、東洋的な「森を見る(関係性を見る)」視点です。
エンジニアがしばしば陥る罠に、クラス単体の設計(木)に完璧を求めるあまり、システム全体の「相互作用(森)」を見失うというものがあります。
木を見る設計: クラス図は美しいが、各オブジェクトがどう連携してビジネスロジックを実現するかが見えていない。
森を見る設計: シーケンス図を重視し、オブジェクト間のメッセージングの流れを最適化する。
優れたオブジェクト指向設計とは、西洋的な「厳格な個の定義」を行いながら、同時に東洋的な「コンテキスト(文脈)と場の把握」を両立させることにあるのではないでしょうか。
6. 結び:二つの視点を行き来する
オブジェクト指向設計は、西洋哲学の「実体論」という強力な武器をソフトウェアの世界に持ち込みました。
しかし、真に柔軟で堅牢なシステムを作るためには、西洋的な「分析」によって切り分けられたパーツを、東洋的な「統合」の視点でもう一度繋ぎ合わせる必要があります。マグロが酸素を取り込むために独自の睡眠をとるように、あるいは鳥が飛ぶために排泄の仕組みを特化させたように、オブジェクトもまた、置かれた環境(コンテキスト)との関係性の中でその振る舞いを決定します。
「木」を定義し、「森」を描く。
この二つの認知モードを自覚的にスイッチすることこそが、アーキテクトに求められる真のメタ認知スキルであると私は考えます。
前回投書の5章以降が納得行かないので再投書します。
執筆協力:Gemini
参考文献
- リチャード・E・ニスベット『木を見る西洋人、森を見る東洋人』鈴木主税訳, ダイヤモンド社, 2004年, ISBN:978-4478910184
- ジョン・ラカメラほか『オブジェクト指向開発の落とし穴』トッパン, 1996年, ISBN:978-4894712160
- アリストテレス『カテゴリー論・命題論』山本光雄訳, 岩波書店, 1959年, ISBN:978-4003360415