オブジェクト指向言語が流行した必然性について考える(3)

前記事で「構造化言語では主語が記述できなかったが、オブジェクト指向言語ではできるようになった」と説明しました。

しかし、これまでの記事を読んで「なぜ自然言語に対比してオブジェクト指向の説明を試みる」という迂遠な方法をとっているのか? と疑問に思っている人も多いと思います。

その理由は、プログラム言語の発展の歴史を「可読性との戦い」という観点から紐解いていくと、「オブジェクト指向言語が流行した必然性」が見えてくるのではないか? と考えているからです。

可読性が一番高い文章とは、おそらく口語(自然言語)で書いた文章です。口語の文章をコンピュータに読ませて、その文の意志を正確に読み取って実行してくれればプログラム言語の出番は必要ないのですが、そんなことはこの先当分ありえないでしょう。

となると、プログラム言語を進化させ口語に近づけることが「可読性を上げる」現実解となるでしょう。では、可読性という観点から簡単にプログラム言語の発展の歴史を見てみましょう(かなり適当です。ツッコミよろしくです)。

プログラム言語はまずマシン語(機械語)という2進数の数字の羅列から始まりました。さすがに数字の羅列は人間が読むには厳しかったので、命令語というものを追加したアセンブラという言語が生まれました。この命令語に口語的役割をあてはめるとすれば「動詞」があてはまるでしょう。ただこの命令語は予め用意されたもの使えませんでした。

これを関数(動詞的役割)という形で自由定義出来るようになったのが構造化言語(C言語)
同時に構造体という名詞的なものも定義出来るようになった。これで口語の文を構成する上で必要で重要なパーツ、名詞、動詞は揃ったので、可読性はかなりよくなった。

しかしもう一段可読性を上げようとして、それら品詞で「文を書く」ことをしようとすると「主語の記述能力」が足らないことに気がつく。

この能力を"偶然"埋めることになったのが「オブジェクト指向」という考え方、またはこの考え方によって生み出されたプログラム言語(Smalltalk等)。なぜ"偶然"なのかといえば「オブジェクト指向」という考え方は可読性を上げるという課題に取り組んだ結果生まれたわけではなく(Smalltalkを例にとると)「GUIのOSを作る過程」で生み出されたものだからです。

もっとも、このBLOGのコメントにてid:sumimさんに教えていただいたアラン・ケイ「ソフトウェア工学」は矛盾語法か?を読む限りでは、口語的に自然な形を意識しているようなので"偶然"ではないんでしょうが。

また、id:sumimさんのBLOGの オブジェクト指向の概念の発明者は誰ですか? で説明されているように「オブジェクト指向」という考え方自体も、命名直後(Smalltalk 1972年直後位?)から、C++(1979年)登場による再定義により意味が結構変わっています。僕の記事もC++以降のいわゆるクラスベースのオブジェクト指向の考え方の文脈で書かれています。

が、まあ難しく考えるときりがないし、結構みんなざっくり理解だったりします。そんな程度の理解で問題なかったりするので、細かい事は Wikipedia や他の人に任せますw。色物BLOGは色物らしく変化球アプローチで頑張りたいと思っていますw

さて、話を戻しましょう。

「可読性」を起点に考えを進めていくと、プログラム言語が口語文の形式に近づくためのかなり大きめの一歩を「オブジェクト指向言語」が埋めた、ということに気が付きます。

この一歩は可読性を上げるうえで避けては通れない道なので、あらゆる言語がオブジェクト指向化するという現象が「必然的」に起こった、個人的にそんな風に考えています。ここらへんが、僕が考える「オブジェクト指向言語が流行した必然性」の理由です。

かなり長ったらしく書きましたが、とにかくオブジェクト指向言語によって、口語の文に近づく為の最低限の条件「SV」の記述能力を得ることができた、という事実が重要で、この変化は マシン語アセンブラ アセンブラC言語 という変化とは本質的に違う

「プログラム言語で文が書けなかった」→「書けるようになった」

という抜本的な変化である、という認識が重要です。

この変化は個人的にパラダイムシフトと呼んでも良い位の大きな出来事だと思っています。大きな変化だからこそ、オブジェクト指向言語が開発の主流に成るにつれ、要件定義、設計手法、開発手法、テスト手法等ソフトウェア開発手法全般に多大な変化をもたらすことになったのだと思っています。

しかし、よくよく考えてみるとなんでこんな上流から下流に至るまで全部に影響が出てきたのだろう? とも思います。ここらへんについてはまた来週。