プログラミングの考え方のことをプログラミングパラダイムといいます。
そのプログラミングパラダイムの一つがオブジェクト指向プログラミングです。
他にも、論理型プログラミングや、関数型プログラミング、それに前回説明した構造化プログラミングもプログラミングパラダイムの1つです。
そのようにいろいろあるプログラミングパラダイムですが、今どきのプログラミングの基本はオブジェクト指向プログラミングというものです。はやりのPythonもよく使われているJavaやC#というプログラミング言語も
いろいろなプログラミング言語でオブジェクト指向プログラミングできるようになっています。
で、そのオブジェクト指向プログラミングって何なんでしょうか?
なんでもオブジェクト
オブジェクト指向の考え方は、『なんでもオブジェクトにしよう』です。
それで、『オブジェクト』って何でしょうか?オブジェクトは英語でObjectで物とか物体とかという意味です。UFOのフルネームunidetified flying object(未確認飛行物体)のobjectです。
それで、それをプログラミングでどう使うのかということですが、とにかくいろいろなものをオブジェクトで定義して、そのオブジェクト同士の関連付けしたりオブジェクトに対して何らかの命令をすることでプログラミングしていくというのがオブジェクト指向プログラミングです。
たとえば、自動車も人も電車も自動販売機もスマホもすべてオブジェクトで定義してそれに対して、人は車に乗るというような関連付けしたり、車を走らせるというような命令をすることでプログラミングしていきます。
もう少し具体的に見ていきましょう。
オブジェクトは属性と手続きをまとめる
車をオブジェクトにするというのは、それでは具体的にどのようにしたらよいかです。
車には、「タイヤがある」「ハンドルがある」「エンジンがある」というような属性があります。その属性ももっと詳細に規定することができます。
「タイヤが4個ある」「ハンドルは右側」「2000ccのエンジン」というようにオブジェクトの固有の情報を持たせます。これをオブジェクトの属性といいます。人だったら、「性別が男」「年齢が20歳」「住所が奈良県」等の属性をつけることができます。
これらは、そのオブジェクトの個別の性質を表すことになります。
次にそのオブジェクトに何ができるのかの手続きをつけていきます。車だったら「前に進む」「後ろに進む」「右に曲がる」「左に曲がる」「止まる」などの操作がその手続きになります。
人だったら「歩く」「走る」「食べる」「寝る」等いろいろできますね。初めからすべての操作を書きだすことは難しいと思いますので、まずは他から利用されるような操作を書き出すことにします。
それで、これらの属性と手続きを一つにまとめます。それがオブジェクトです。
例えば、同じ操作を持つ車があるとします。先ほど書き出した「前に進む」「後ろに進む」「右に曲がる」「左に曲がる」「止まる」という5つの操作がある車です。その上で、属性に「タイヤが4個ある」「ハンドルが右側にある」「2000ccのエンジンがある」というものを設定するとそれが1つの車のオブジェクトになります。
また、属性に「タイヤが6個ある」「ハンドルが左側にある」「5000ccのエンジンがある」を設定するとそれは別の車のオブジェクトになります。基本的に属性が変わると同じ車のオブジェクトでも別のものになります。
設計図を作る
先に述べたように属性が変わると別のオブジェクトになります。同じ車でも毎回一から作るの面倒ですよね。そこで設計図を用意しておきます。家でも同じですよね、設計図を用意しておいて同じ家を作るれるようにしますが、中に入れる家具や人によってそれぞれ違う家になりますね。
オブジェクト指向でもこのようなことができます。それがクラス定義です。車の設計図をクラス定義して、その属性が違う車を何個も作りやすくするのです。
例えば、
車:タイヤはX個、ハンドルはZ側、エンジンはYcc
といううようなクラス定義しておいて、オブジェクトを作るときにこのX,Y,Zに実際の値をいれて
タイヤは4個、ハンドルは右側、エンジンは2000ccというオブジェクトを作ります。
こうすることによってちゃんと決まった形のオブジェクトを作れるようになります。
それではプログラムでは何をオブジェクトにしたらいいの?
このように具体的なものをオブジェクトにするのはわかりやすいかとは思います。
ではいざプログラムする場合にはどのようなオブジェクトを考えればいいのでしょうか?
例えば、四角を書くようなプログラムを考えてみます。この場合、四角をオブジェクトとして定義するとわかりやすいです。
四角をもう少しく簡単にするために長方形とします。そうすると、先に属性は何になるかというと
縦、横の長さを属性にすることができます。長方形なので角はすべて直角です。それも属性にしていいでしょう。そうすると
四角形:縦100ピクセル、ヨコ200ピクセル、角1:90度、角2:90度、角3:90度、角4:90度
というような属性を設定することができると思います。ここでピクセルは長さの単位です。コンピュータではディスプレイに表示させる際に長さの単位でピクセルというものを使います。
あと何が考えられるでしょうか?例えば四角を各線の色とか、線の太さや中の塗りつぶしの色などそのようなものが属性として定義することができます。
また、四角形の操作はどのようなものが考えられるでしょうか。
その四角形をある場所に書くということが考えられます。先の四角形属性ではその場所がなかったので、『指定された場所に描く』という操作が考えられます。また、『XXへ移動する』とか、『〇度回転する』とかも操作として考えられますので、そのような操作を四角オブジェクトに作っていくことになります。
オブジェクトができたら
このようにオブジェクトができたら終わりではなく、前に述べたように関連付けたり、オブジェクトに対して
命令したりすることでプログラムを構築していきます。
上で定義した操作を他のオブジェクトから命令することでオブジェクトに動作がでてきます。車のオブジェクトに対して、人が「前に進め」というと車オブジェクトが動いてくれますね。このようなことをすることでプログラムに動きが出てきます。
その詳しい話はまた次で、今回はこのあたりで失礼します。
コメント