2004年10月27日
川俣晶の縁側無意味監獄 total 6492 count

オブジェクト指向パラダイムは崩壊するか?

Written By: 川俣 晶連絡先

 これは思いつきのメモなので正しいという保証はありません。むしろ正しくないと思う方が正しい態度でしょう。

オブジェクト指向パラダイムとは何か? §

 オブジェクト指向という名を冠するオブジェクト指向モデリングや、オブジェクト指向プログラミングなどの総称として使う。

 しかしながら、オブジェクト指向に対する唯一、明瞭、幅広く同意された定義は存在せず、対象は明確ではない。

 ここでは、「自らオブジェクト指向を名乗るもの」をオブジェクト指向パラダイムに対応づけられるものと考える。

オブジェクト指向の問題点 §

 オブジェクト指向の問題点は、突き詰めていくと、それが示す対象が明確ではないことに行き着く感がある。

なぜ不明確な対象に対して明確に語りうるのか? §

 しかし、不明確なオブジェクト指向について明確に語るという現象が多く見られる。(ここでは、語る前にオブジェクト指向についての定義を事前に与えている事例は除外する。このような語りは、定義が明瞭であれば不明確とは言えない)

 不明確な対象に対して明確に語りうるということはどういうことか。

 常識的に考えれば、「不明確な対象に対して明確に語る」という行為は成立し得ない。

 しかし、「語るシステム」が不完全であれば、これは成立しうる。明確と不明確の境界が曖昧であれば、不明確な対象が明確であるかのような語りは成立する。

なぜ自らの語りの不明確性が認識されないのか §

 不明確な語りは、それを「実践」に移す段階で多くの問題を引き起こす可能性がある。

 それにも関わらず、不明確性が認識されない事例が多く見られるような気がするのはなぜか。

 問題の原因を「語りの不明確性」ではなく「実践の手法」に求め、場当たり的な手法の修正を永遠に繰り返すという事例が多く見られるように思える。

 なぜ問題の発生源として「語りの不明確性」と「実践の手法」の識別することができないのか。その理由は、語りの正しさを検証するシステムの不在にあるとと考えられる。より正確に言えば、語りの正しさを曖昧さ無く共有できる形で検証するシステムの不在である。

ここまでのまとめ §

 オブジェクト指向パラダイムの問題は以下の2つが考えられる。

  • 語るシステムが不完全である
  • 語りの正しさを検証するシステムの不在

語るシステムの不完全性とは何か §

 多くの場合、語るために使用されているのは日本語、英語などの自然言語である。

 自然言語は本来曖昧であるため、不完全であるのは当然の帰結である。

自然言語の曖昧さを脱却できるか? §

 通常、曖昧さの度合いを減らすためには、そのための形式的な人工言語を導入することが行われる。

 オブジェクト指向パラダイムの世界ではUMLがそのための形式的な人工言語と言えるかもしれない。UMLの流行は、自然言語の曖昧さを解決するために起こった必然的な動きと言えるかもしれない。

対象物の分類 §

 ここで、2つの対象物が存在することを明確にしておく。

  • プログラムについて語る言葉
  • 語られる対象となるプログラム

 UMLは、プログラムについて語る言葉となるべき人工言語である。言葉といっても文字で表現するものに限定されない。図によって語る表現も一種の言葉である。

 語る言葉とは別に語られる対象となるプログラムが存在する。

語りの正しさを検証するシステムとは何か? §

 今のところ、私が知る限り、プログラムやそれにまつわる様々なことの正しさを明確に検証するには実行してみるしかない。例外的に実行することなく検証できるものがあるが、それは例外としてここでは取り上げないとする。

 UMLで記述したダイアグラムは実行することができないので検証することができない。仮に、UMLによって語られた内容と、それを元に記述されたプログラムの内容に相違があっても、実行によってそれを検出するシステムを作ることはできない。(部分的な定義の照合などは実行できる可能性が考えられる)

 新しいUMLはプログラムとして実行できるが、そのUMLは既に「プログラムについて語る言葉」であることをやめ、「語られる対象となるプログラム」になってしまうことに注意が必要である。語る者と語られる者が同じになってしまっては、実行できるとしても何の証明にもならない。

 語りの正しさを検証するには、語る者と語られる者の分離が必要である。

語りの正しさを検証するための条件 §

 ここまでの話をまとめると。

 語りの正しさを検証するためには、以下の2つの条件を満たす必要がある。

  • 実行可能な人工言語によって語る
  • 語る者と語られる者は分離されている

テスト駆動開発という解 §

 この条件を満たすものとして、テスト駆動開発が考えられる。

 テスト駆動開発は、これから作ろうとするプログラムについて、単体テストというプログラムを記述することを通して語る。つまり、実行可能な人工言語によって語る。

 そして、語った後で、それを満たすプログラムを記述する。つまり、語る者と語られる者は分離されている。

 これらの条件を満たすからこそ、テスト駆動開発は有効な手法たり得ると言える。この条件を満たさない手法は、(この文脈の意図において)テスト駆動開発と同レベルでの有効性を持ち得ない。

テスト駆動開発はオブジェクト指向パラダイムを救うか? §

 テスト駆動開発はオブジェクト指向パラダイムを救うだろうか?

 2つの理由から救えないと考えられる。

 まず第1に、オブジェクト指向パラダイムの世界では、上記条件を満たすもの(テスト駆動開発)と条件を満たさないものが、どちらも同程度の有効なものとする意見が多く見られ、全体として不明確さからの脱却の動きに乏しい。

 第2に、テスト駆動開発の基本的なコンセプト(実行可能な人工言語によって語る、語る者と語られる者は分離されている)は、オブジェクト指向パラダイムに全く依存していない。仮にテスト駆動開発を採用したいと考えた場合、オブジェクト指向パラダイムを採用する必然性は存在しない。非オブジェクト指向開発でテスト駆動開発を行っても問題はない。

オブジェクト指向パラダイムの崩壊時期 §

 オブジェクト指向パラダイムの崩壊は1990年代中期より既に始まっていたと考えられる。少なくとも、「すべて継承で表現せよ」という主張が上手く機能しなかった時点で、オブジェクト指向パラダイムの誤りは明確になっていたはずである。しかし、これは健全な方針修正によって、同じオブジェクト指向を名乗りつつ中身を入れ換えることで延命に成功したと考えられる。

 同様に健全な方針修正が可能であれば、オブジェクト指向パラダイムの延命は考えられるが、個人的にはそのような方向性を見出すことができない。従って、現時点でのオブジェクト指向パラダイム自己崩壊の流れは止まらないと推定する。

 このような自己崩壊は、2004年中に既に明確な流れとして出現していると感じるが、それはまだ顕在化していない。このまま、有効な対策が取られない場合、おそらく2005年中にはそのような流れは顕在化し、落ち目の弱者を叩くマスコミのオブジェクト指向バッシングが開始される可能性が考えられる。あるいは、多くのマスコミもオブジェクト指向を担いだ過去があるため、場当たり的な延命に協力するかもしれない。あるいは、他の有効な代替手法がないという理由で延命するかもしれない。

ポスト・オブジェクト指向パラダイムは何か §

 ポスト・オブジェクト指向パラダイムとして、テスト駆動開発が浮上する可能性は考えられる。(もちろん両者のカバー領域はあまりに違いすぎるが)

 しかし、メーカー、ユーザー、マスコミはセンセーショナルに問題を解決する革新的な技術、パラダイムを望むという観点に立てば、テスト駆動開発よりも、そのような条件を満たす別のパラダイムがポスト・オブジェクト指向パラダイムとして君臨する可能性が高いと考えられる。

 なお、オブジェクト指向パラダイムが自己崩壊したとしても、必ずしもオブジェクト指向「プログラミング」が無効となるわけではない。プログラムの複雑さを低減するという意味で、オブジェクト指向「プログラミング」が最善であるかどうかは分からないが、依然として有効であると考えられる。ただし、「日本語(自然言語)で語る」オブジェクト指向「プログラミング」の有効性は疑われるべきだろう。また、個人的にはエクストリーム・プログラミングも有効であると考える。ここでいうエクストリーム・プログラミングとは、ケント・ベックの著書「エクストリーム・プログラミング入門」に書かれた内容を意味し、他者によって拡張されたものを含まない。

補足 §

 これは単なるアイデアメモであって、内容の正しさを保証するものではありません。

 ゆえに、ここに書かれたことを信じてはいけません。