#この記事の内容
オブジェクト指向に生命を持ち込むな!に対するアンサーです。
オブジェクト指向は生命を含むオブジェクトを取り扱う、というのが個人的な結論です。だいぶ駆け足で書いたので、粗いかもしれませんがご了承ください。
#オブジェクト指向は現実世界の写し
なぜ、「オブジェクト指向は現実世界をそのままソフトウェアに表現する」と言われるのでしょうか。もちろん、現実世界を単純にそのまま持ってこればそれで万事OKという話ではありません。だけれども、オブジェクト指向と現実世界は密接な関係があります。(単純に持ってきて成功するかどうかの話は、設計原則やGoFデザインパターンにも当てはまることでしょう。世の中そんなに甘くないということです。。。)
それは、「オブジェクト指向」を扱う人間が「現実世界」にいるからです。現実世界を作り出しているのは、まさに我々人間なのでです。哲学的な話になるかもしれませんが、「現実世界」を認知しているから「現実世界」があると言えます。つまり、「現実世界」というものは、ある種、主観的に認知した産物なのです。
その「現実世界」をどのように認知しているかという、その手法が、そのまま「オブジェクト指向」に反映できると考えています。
「オブジェクト指向」の世界は何も摩訶不思議なSF世界ではありません。むしろ、現実的な自然な世界こそが、真の「オブジェクト指向」の世界といえるでしょう。何も違和感がなく、自然に取り扱える、それはまさに設計の理想とも言えるでしょう。それは、我々が「現実世界」の不明な部分を探求することはあっても、そのものに不自然さを感じない(否定しない)ことと同じと言えないでしょうか。
もし、「オブジェクト指向」の世界に四次元ポケットがあるのであれば、なぜ我々はこんなにも苦しむのでしょうか。さっさと、秘密道具を使って解決すれば良いのではないでしょうか。そうならないのは、(言葉遊びかもしれないが)「オブジェクト指向」の世界は、「現実世界」のように甘くはなく、むしろ、この厳しい状況は、「現実世界」の方に近いとも思えます。
「オブジェクト指向」の世界には足りないものが多すぎます。もし、事足りているのであれば、進化は止まっているでしょう。それでも模索され続けているのは、まさに「足りていない釘」を探している状況なのではないでしょうか。
つまり、「オブジェクト指向」の世界は、今私たちが生きているこの「現実世界」と似ていると言えるでしょう。
#生命はモノである
生命はどこからきたのでしょうか。突然何もないところから生まれたのでしょうか。
そう、生命はモノから生まれたのです。(たぶん笑)
生命とモノを区別する意味はないのです。
#人は生命を創れる
モノ創り=自由なものを試行錯誤して自由なものを創れる、ということであれば、なぜ世の中に四次元ポケットがないのでしょう。
結局、モノ創りだって制限だらけで、「閉じた世界でのみ自由」というだけで、子作りと何も変わりません。また、子作りにも色々とあるのです⋯。
#意識の存在証明
哲学的な話でいうと、自分に自由意志(意識)があるかどうかわかりませんし、そのことを気にすることに価値はありません。
なぜなら、オブジェクト指向の世界も、現実世界も作り上げるのは、(あろうがなかろうが)同じ「意識」からなので。
#スタンバるか、スタンバらないかは「それ」次第
生命がたまたまそう造られただけで、オブジェクトが必ずしもそうとは限りません。それは、オブジェクトの仕様次第で、スタンバることもスタンバらないように作ることもできます。違うものを比べても、それは違うに決まっています。
動くかどうかであれば、植物はどうなのでしょうか。凍結させた生物はどうなのでしょう。それはスタンバッているというのかスタンバっていないのか。ここまでくれば言葉遊びの次元かもしれませんが⋯。
#融通とは本質的に「統計」
人が空気読むのも、今まで生物たちが生き残ってこれたのも、「統計(経験)」のおかげです。生命だって、未知の領域に踏み込んだ途端に破綻するのではないでしょうか?それはまさに(統計(経験)を持たない)赤ん坊のようなものではないでしょうか。
#生命の移植はまさに「規格」を利用している
もし、生命に規格がないのであれば、移植は不可能でしょう。それどころか、あらゆる手術が不可能でしょう。なぜなら、今までの知見が次の患者に適用できるとは限らないのだから。
移植や手術ができるのであれば、それはまさに規格の適合なのではないでしょうか。ただ、私たちはそれらを完全に把握していないだけなのです。
#出産ではなく、認知
モノが誕生するのは、それを認知するからである。出産において、どこから我が子なのか、という非常に難しい問題があります。それは結局、認知というものを用いて解決するほかないのです。
認知という感覚は非常に大事です。
#生命もオブジェクトも、すべては抽象化された情報として認知される(存在する)
世の中のものは情報の塊(データ)とも言えるのではないでしょうか。なぜなら、人はセンサ(情報を取得するモノ)でしか現実世界を認知することができないからです。情報以外を取り扱うことってあるのでしょうか。また、情報は、見方によって姿を変えます。全ての情報を同時に取り扱うことはすごい負荷がかかります。それは人にとっても、機械にとっても同じでしょう。
だから、抽象化を行なうのです。
#オブジェクト指向は生命も含む万物を取り扱う
オブジェクト指向設計を行なう上で、あえて生物のみに焦点を当てる必要はありませんが、それらを区別する必要はありません。なぜなら我々は、生物であろうがなかろうが、同じような認識を行なうからです。必要なければ使わない、必要であれば使うということなだけです。
例えば、犬の翻訳機が必要になって、犬種ごとに言語が異なっていた場合はどうでしょうか。動物医療ロボットで、各動物ごとに治療が異なる場合はどうでしょうか。実際はもっと複雑かもしれません。
取り扱う「オブジェクト」に線引きは、そもそも不要なのです。「オブジェクト指向」がうまく取り扱えないというのは、ただ単に分析結果(設計)が目的とあっていないということだと思います。その「オブジェクト」にどのような「性質(特徴)」を盛り込めば良いのか、それに尽きるのです。(個人的には、その役割はインターフェースが一番適している(バランスが取れている)と思っています。)
そもそも「オブジェクト指向は現実世界をそのままソフトウェアに表現する」ということを実直に実行できるでしょうか。個人的には、それは無理なのだと思っています。設計原則にしても、GoFデザインパターンにしても無理なのです。なぜなら、(オブジェクト指向世界の)現実はそこまで単純ではないから。「オブジェクト指向」がうまく機能していない原因はもっと他にあると思います。
どのように、「オブジェクト指向」と付き合えばいいのでしょうか。それにはまず、現実世界を見ましょう。おおよそのことは、細部を気にせず物事を取り扱っているはずです。その感覚はそのまま「オブジェクト指向」にも用いることができるはずです。今見えている課題をきちんと分析し、どのように取り扱うべきか、取り扱えば良いのか、深く考える必要があります。それには、先人の知恵は大いに役に立つでしょう。
「オブジェクト指向」そのものを用いるのは非常に難しいと思います。それは普段私たちが行っている自然な行動と非常によく似ている、というかそのものだと考えているが、それにしたって一朝一夕で身につけたものではありません。それと同じで、「オブジェクト指向」が取り扱う課題が複雑(未知な部分もあることも含めて)なことであることが多いため、一朝一夕でできるものではないでしょう。経験によるところが大きいので、言葉を尽くしたって伝わりきれるものではありません。