●トピック
・トップダウンプログラミング
・ボトムアッププログラミング
・手続き型言語
・オブジェクト指向言語
・ポリモーフィズム
・結合度
・凝縮度
・KISSの原則
●深く知る
プログラミングの目的はいかにして人間の意図通りの動きをコンピュータにさせるかどうかです。それを実現する際には、人間がそもそもどのように物事を考えているのかを、考えやすいのかを整理する必要があります。プログラミングでは、トップダウンとボトムアップという2つの考え方に落とし込むことに成功しています。トップダウンとはつまりは目的から手法を考えることであり、ボトムアップは手段から目的を考えることです。いずれが素晴らしいのかが議論の余地がありますが、プログラミング言語では手続き型とオブジェクト指向型という2つの系統に分かれました。手続き型もオブジェクト指向型はアプローチが異なるものであって、どちらが優れているというわけではありませんが、オブジェクト指向の考え方は自身が問題の解決の仕方をプログラミング言語化する事に加えて、自身の持つ問題を抽象的な視点で整理する事にも役立ちます。
トップダウンとボトムアップの違いをある例で説明しましょう。あなたがVRゲームを作るとします。VRゲームですから、VRの物理的な動作を画像に変換する必要があります。アプリを設計する際に、あなたはどのように課題を解決するのかを考えることになるでしょう。VRゲームがどのように動作するべきなのかを考えてから細かい要件に落とし込んでいくのか?それとも、VRの動作を画像に反映させる単機能を洗い出してから、今回開発するVRゲームにマッチした使い方を指南するのでしょうか?前者のトップダウンプログラミングは、最高レベルの要件から始まり、低レベルの技術的な実装の詳細に向かって進みます。後者のボトムアッププログラミングはその逆で低レベルの技術的実装の詳細から始まり、完全なプログラムの概念までの機能実装をします。どちらのアプローチであったとしても、リスクはあります。トップダウンアプローチが低レベルの独自のアプリ仕様によって連携できないとすると実装まで至れないでしょう。一方、ボトムアップは、機能に対して多くのプログラミングを実行するため、時間を浪費するリスクがあります。最終的に、必要とされない部分まで実施されている場合があります。C言語などの手続き型言語はトップダウンプログラミングでプログラムされてきました。Java言語などのオブジェクト指向プログラミングはボトムアップで設計されます。公開されているソフトウェアが多く利用され、リリースされます。
プログラミングは、動けばよいというものではありません。処理速度やセキュリティなど様々な観点がありますが、こと設計に関しては結合度と凝縮度が見られます。他のモジュールへの依存度を回避しつつ、内部構造はシンプルで無駄のない作りが望まれます。内部構造など特に気にしないように思えますが、修正が入った時などに全体の設計から見直さないといけない構造は素晴らしいとは言えないのです。