目的
このページでは、ある程度プログラミング言語に馴染んできた人を対象として、プログラミング言語にとらわれず、システムを設計する上で必要な考え方の例を提示し、効率的な設計ができるようになることを目的としています。
とりあえずC言語をかじったことがあるひとを対象にしていますが、C#だろうがC++だろうが、Ruby, Java, perl……問わずオブジェクト指向を理解できるように書いたつもりです。
構造化プログラミング
オブジェクト指向の前に、オブジェクト指向がはやる前の概念を述べていきます。
CPUは機械語、すなわち0と1の列を読み込んで判断し、実行します。CPUは機械語以外は理解できませんから、CPUにできることは既存の命令を解釈・実行することだけです。さてCPUには大きく分けて、計算とジャンプができます。つまり、多くのプログラミング言語に存在するifやforという命令はないのです。
プログラミングをする際に、goto文を使うことはコンピュータにとって自然なことです。しかし、すべてがgoto文で構成されると、プログラムの量が増えるに従って人間が処理を追い切れなくなってきました。
そこで、gotoだけでなく、処理の流れを分かりやすくするためにC言語ではif文, switch文, for文, while文が存在しています。これらはgoto文を使わなくてもプログラムの流れを、「条件分岐」、「繰り返し」という意味のまとまりとして記述できます。これは構造化プログラミングの1つです。
続いて、これらの構造化手法を使って更に抽象的な処理のまとまりを関数やモジュールとしてまとめ、何らかのデータを機能を通して変換し、変換されたデータを使ってさらに処理を続ける……といった流れを構築できるようになりました。ここで言うデータとは、C言語で言う構造体などに相当し、データ→機能A→データ'→機能B→データ''と順次処理をしていきます。
このように、処理を意味単位に抽象化し、データをも意味単位に抽象化することで人間が見てわかりやすいようになりました。構造化プログラミングでは、制御とデータをそれぞれ抽象化することを要請しています。
オブジェクト指向
構造化プログラミングは制御とデータのそれぞれの抽象化がポイントです。実際、これを心がけることで多くのプログラムは見やすいものとなります。ところが、これを以てしても複雑な処理を考えると難しくなってきます。
オブジェクト指向では、制御とデータをひとまとまりにしたオブジェクトを考え、オブジェクトとオブジェクトとのつながりを記述するものです。オブジェクトが、他のオブジェクトにどのような影響を及ぼすかを記述していくのです。これによって、構造化プログラミングを更に抽象化できます。
つまり、オブジェクト指向では、抽象化された対象を明確にし、その抽象化された対象の相互の影響を記述していきます。
オブジェクト指向は、構造化手法とは相反するものではなく、より抽象度を高めたものです。オブジェクト指向でも、制御を記述する必要がありますし、その制御は構造化手法に基づいて書かれます。初心者はまずは構造化プログラミングからマスターしていきましょう。
最終更新:2014年01月20日 17:38