はじめに
独学でJavaScriptやphpを学び始め、ようやくオブジェクト指向の雰囲気がわかるようになってきた初学者です。
オブジェクト指向にそって記述しているつもりが、形式的にクラスを利用しているだけだったり、結局依存関係だらけになっている状態です。今後もオブジェクト指向にそって記述していくことで理解が深まったり、優位性が活かせるようになるのかもしれません。
オブジェクト指向についてしっかりと目を向けた上で、プログラミングの経験を積むことが自分なりの理解を深掘りさせ、定着しやすいと考えております。
なので今回はオブジェクト指向の歴史に目を向けていきます。
歴史に目を向けるというよりも、どのような課題を解決するためにオブジェクト指向が成り立ち、現在のオブジェクト指向の定義が必要になったのかを掘り下げていきます。
プログラミング初学者の知識で理解しようとしているため、誤認なども多分にあるかと思いますのでご了承もしくはご指導ご鞭撻をいただければ幸いです!!
オブジェクト指向の誕生
Wikipediaの記述によると...
オブジェクト指向(object-oriented)という言葉自体は、1972年から80年にかけてプログラミング言語「Smalltalk」を開発したゼロックス社パロアルト研究所の計算機科学者アラン・ケイが、その言語設計を説明する過程で誕生している。
では、なぜ「Smalltalk」の開発が必要になったのか?
これまたWikipediaの記述によると
Smalltalk(スモールトーク)は、Simula のオブジェクト(およびクラス)、LISPの徹底した動的性、LOGO のタートル操作や描画機能に、アラン・ケイの「メッセージング」というアイデア[2]を組み合わせて作られたクラスベースで手続き型の純粋オブジェクト指向プログラミング言語、および、それによって記述構築された統合化プログラミング環境の呼称。
なんかよくわかりませんでした。
他にもいろいろと調べているとCUIがメインだったコンピュータ操作が、GUIというグラフィックを利用して操作するようになった。グラフィックやデータの見えるものを一つのオブジェクトとしてプログラミングできるようにしたらいいんじゃない?ということから作られたようでした。
なるほど、見えるもの単体で完結するようになったらいいのでは?という発想だったのかな。
んで、このプログラミング言語「Smalltalk」を説明するときにオブジェクト指向という言葉を使われたことが起源。
プログラミングの複雑化・開発コストの増加 ソフトウエア危機
80年代半ばになると、ハードウエアは高性能になった上コストも下がってくる。
これに伴ってコンピュータの利用領域が大きくなり、ソフトウエアの需要も大きくなる。さらに求められるソフトウエアは複雑化。複雑化されたソフトウエアの開発時間は増加。時間増加 = 費用の増加。供給を満たすために生産量だけを上げるため品質は低下。
この課題を解決するために、「構造化プログラミング」が台頭。
それまでは高速処理重視のプログラミングから、保守性重視のプログラミングへ向かったのが構造化プログラミング。書きやすく、理解しやすいプログラミングしようよということのようです。そうすることで開発がしやすくなるから、生産性があがるというものでした。
構造化プログラミングの課題
しかし構造化プログラミングは、制御構造は書きやすく理解しやすく。しかしデータ制御に関しては無法地帯。
書きやすく理解しやすいプログラミングのためには、データの構造化が必要。
あっちもこっちもグローバル変数だらけになったときに、どこで使われるかもわからないし、どんな状況かもわからないから結局理解しにくいという課題がありました。
オブジェクト指向の普及
書きやすく理解しやすいプログラミングを実現するために、理解しやすいデータ構造を定義することで、再利用性を向上させたのがオブジェクト指向です。
こういったことから、現在のオブジェクト指向のクラス・継承・ポリモーフィズム・カプセル化・抽象化・単一責任などの考え方が生まれてきた。
まとめ
概要にも満たないような内容でしたが、オブジェクト指向の普及について見てきました。
今までの課題を解決するために普及していったオブジェクト指向が、保守性・データの安全性・コードの再利用性・拡張性などを実現する記述であるということはよく理解できました。
オブジェクト指向の目的は明確になりましたが、上記の目的を達成するためには自らが記述している開発の未来像までしっかりと想像できていなければ実現はむずかしいとも感じました。
さらに技術の進化や、さまざまなニーズが増えている。
そのため本質的なオブジェクト指向が身についたと言えるときは、技術の進化と共に自身が成長することができたときになるのではないかと思います。