10年後も通用するオブジェクト指向と関数型言語の本質を解説。オブジェクト指向は、プログラミングをはじめ、フレームワーク、デザインパターン、UML、モデリング、設計、アジャイル開発手法と、ソフトウエア開発全体を支える総合技術です。それらを「プログラミング技術」と「汎用の整理術」の2つに分けて説明。
オブジェクト指向と現実世界は似て非なるもの
IT業界では毎年のように、技術トレンドを表す新しい言葉が生まれています。こうした言葉には2000年以降に流行したものだけでも、ユビキタス、Web 2.0、BPM、グリッドコンピューティング、SaaS、SOA、クラウドコンピューティングなどがあります。
このような言葉は、しばしばバズワード(buzzword)と呼ばれます。英単語のbuzzは、蜂や機械がブンブンうなり続ける様子を表すため、「うっとうしい」「耳障りな」といったニュアンスを含むのでしょう。
バズワードには市場を作り出す役目があります。潜在的なニーズと技術の可能性をうまくとらえた言葉は顧客の関心を集めるため、ベンダーは製品やサービスのマーケティングに利用し、イベント会社はセミナーのテーマに取り上げ、マスコミは出版物で流布します。こうした動きが活発になると、関連する製品やサービスも充実し、さらに多くの顧客の関心を集めて、業界全体を巻き込む大きなブームになることもあります。
しかし多くの場合、バズワードの寿命はさほど長続きしません。たいていは半年ぐらいで、3年も持てば長持ちの部類に入るでしょう。
バズワードの寿命は、そのコンセプトがどれだけ魅力を持っているかに依存しますが、あわせて技術がどこまで成熟しているかにも依存します。第2章のウォーミングアップで取り上げた「ネオダマ」のように、対象とする技術が一般的に普及してしまうことで寿命が終わる場合もあれば、「人工知能」のように、いつまで経っても技術がコンセプトに追いつかないことで表舞台から消えていく場合もあります。
IT業界で注目されては消えていく技術トレンドを表す言葉たち。バズワードとなって一気に注目を浴びたものの10年後はどうだかわからない。このような英語やカタカナ表記の言葉は「うっとうしい」「耳障り」と思う人も多いのでは?なるべくこのような言葉は噛み砕いて簡単な表現で代替したいのですが、それを表す言葉が思いつかなかったりして思い悩みます。「オブジェクト指向」もそんなバズワードの一つ。
汎用の整理術に化けたオブジェクト指向
プログラミング言語の仕組みとして考案されたオブジェクト指向が、なぜ「汎用の整理術」に化けたのかを少しだけ考えてみたいと思います。なぜならOOPのクラスと集合論は実際には随分違う仕組みであり、冷静に考えればこれらを一緒に扱うのは相当な発想の飛躍に思えるからです。
まず挙げられるのは、「クラス」という名前でしょう。この名前は、最初のOOPであるSimula67において、サブルーチンと変数をまとめる仕組みのキーワードとしてすでに使われていました。英語のclassは分類を意味します。そこから何でも分類する仕組みに応用され、集合論に発展したのは自然の流れでしょう。
そして「オブジェクト指向(Object Oriented)」という言葉そのものです。これこそ「モノ指向」「モノ中心」を意味する言葉であり、「機能中心からもの中心へ」「森羅万象はオブジェクト」といった大きな発想転換をイメージさせる言葉です。しかしこの「オブジェクト指向」という言葉は、Simula67が登場したときにはまだ存在しておらず、その次に登場したSmalltalkを考案したアラン・ケイ氏がつけたものだそうです。Smalltalkでは継承構造によるクラスライブラリを整備しましたが、その最上位クラスの名前はObjectです※1。この仕組みでは、Smalltalkで作られたクラスはすべてObjectクラスのサブクラスになるため、「現実世界と同じように、森羅万象はObject(モノ)である」という発想に容易にたどりつきます。そしてそこから集合論に化けるのは自然の成り行きでしょう。
もしかするとプログラミング言語のSimula67を開発した時点で、サブルーチンと変数をまとめる仕組みに「クラス」と名づけたことには、さほど深い理由がなかった可能性もあります(Simula67を開発したO. J. ダール氏とK. ニガード氏はノルウェー人で、英語のネーティブスピーカーではなかったそうです)。
歴史に「れば、たら」は禁物ですが、もし「クラス」ではなく、集合論をイメージしづらい「モジュール」などの別の名前がつけられていたとしたら、ソフトウエア開発技術の歴史は大きく変わっていたかもしれません。
機械中心からモノ中心へこれを合言葉にそれが集合論に化けたのは自然の成り行き。その歴史は偶然の産物的な洗濯の中で生成された開発技術の結晶と言える。
プログラミングをかじった程度の僕には難解な言い回しが多く「オブジェクト指向」の中身を知るのにはちょっとといった印象。とりあえず一時期耳によく入ってきた言葉なので読んどくかと思ったが必要なかった。
【サブスク】 Kindle Unlimited
僕が利用している読書コミュニティサイト
【本が好き】https://www.honzuki.jp/
【シミルボン】https://shimirubon.jp/