メッセージ指向なオブジェクト指向でのUMLって?

オブジェクト指向は単なるオブジェクト間のメッセージのやり取りに過ぎない、という言葉は、僕の身近な人たちにとっては僕から一度は聞いたことがあるだろう。そんな考えに関して注目エントリが下記。書いてある内容はほぼ同意なんだけど、部分的に引っかかりを感じざるを得ないので、僕の意見をエントリしてみる。 「 イマドキのオブジェクト指向」- アークランプ より:

では、「イマドキのオブジェクト指向」とは何か。それはメッセージ指向という解釈です。オブジェクト指向は「メッセージによる処理の分割」であり、「分離された処理をオブジェクトと呼ぶ」と定義します。これまではオブジェクト指向とは「オブジェクトによる処理の分離」であったわけです。

太古の昔から、オブジェクトは「メッセージのやり取りによる処理の委譲の繰り返し」だったはず。「継承ではなく委譲を使いましょう」なんて思想は、オブジェクト指向の基本であり、それはメッセージのやり取り。そもそも、オブジェクト指向って聞いてメッセージのやり取りが真っ先に思いつかない人間は、過去も現在も未来も、オブジェクト指向についての理解がズレているということになる。 特に、上記のような「メッセージのやり取り」という概念がない or 薄い捉え方をしてしまう原因は、メッセージのやり取りであることを素直に取り入れている言語が少ない、もしくは取り入れられている言語が今まで普及してこなかった、ということに起因すると考えられる。つまり、JavaやC++など、構造化言語から派生した言語を習得することによってオブジェクト指向を学んでしまった人間にとっては、メッセージのやり取りという発想ではなく、あくまで「関数(=メソッド)を呼び出す」という発想しかない。つまり、他のオブジェクトに対しての処理の委譲について、基本的に完全な同期処理しか体験できないために、メッセージングの手法が限定され、結果としてメッセージングという考えに行き着かない、ということなんだろう。 別にSOAとかのアーキテクチャからオブジェクト指向のメッセージングを見い出すのではなく、Rubyなどの「メソッド呼び出しをメッセージとして捉えることができるオブジェクト指向言語」をちゃんと経験することによって、本来のオブジェクト指向の考え方を体験して欲しい、と僕なんかは考えるわけである。

 ここで振り返ると、現在のシステムで重要なのは「オブジェクトのデザイン」よりも「関係性のデザイン」であることが分かるのではないでしょうか。もちろんオブジェクトのデザインは変わらず重要です。ですが、関係性のデザインをうまく使うことで、よりシステム開発が進歩する気がします。

 その点でオブジェクト指向という名称は視野を狭くしてしまうのです。UMLも関係性のデザインについては非常に弱い。

UMLの話は、真逆だと思う。純粋にオブジェクト指向の領域において、UMLは他のどのコンピュータ言語よりも、素直にメッセージングに関する記述ができるはず。単にクラス図だけを取り出して話をするのであれば、確かに静的関連しか情報は得られない。しかし、UMLの各図の仕様は、メッセージングについて同期であれ非同期であれ、更には処理の待ち合わせであったり、オブジェクト間の動的な関連(=ランタイム時のメッセージのやり取りから生じる関係性)なんかも、ちゃんと記述することが可能である。 更に、オブジェクト指向においてのメッセージのやり取りの具体的な送受信実装手法を切り離して、純粋なオブジェクト間の動的なメッセージのやり取り(=本来のオブジェクト指向設計)は、UMLが得意とする部分である。もっとUMLが、SOAなどのアーキテクチャやRubyなどのオブジェクト指向をちゃんと取り入れている言語での開発について、多く使われてもいいのではないか、と思うのだが、なぜかUMLは敬遠される。勝手な想像をするに、それは偽オブジェクト指向言語(=構造化とオブジェクト指向の中間、的な)においてUMLを適用しようとして体験したGAPの印象があるから、という理由に思えてならないのが、実際のところどんなんだろうか?

このエントリーをはてなブックマークに追加

Yoichiro

(よういちろう)