C言語入門で作成したプログラムは
「手続き型」と呼ばれ、今となっては古い作成方法です。「手続き型」では、処理の流れによって
プログラムを書いていく方法です。
「オブジェクト指向」では、処理は二の次です。一番に考えるのはオブジェクトです。
では、オブジェクトとは何かが問題になります。オブジェクトというのは、「モノ」です。
直訳なので怒られそうですが、オブジェクトとは実際に存在するもののことをいうのです。
そしてクラスとオブジェクトとは、ほぼ等価です。
そしてこのオブジェクトには決められた仕事や処理が決まっています。これがクラスで
定義するメンバーメソッドです。
ここで色鉛筆を例に取りましょう。「色鉛筆」は実際に存在するモノです。したがって
オブジェクトつまり「色鉛筆クラス」になるわけです(クラスという言葉に抵抗がある方は
「色鉛筆構造体だと思ってください)。色鉛筆には様々な色がありますので、メンバー変数
として「色」を決めましょう。そして、「芯の長さ」も含めましょう。
class Color{
int R;
int G;
int B;
}
class ColorPen{
Color color;
int length;
}
|
ところで、色鉛筆クラスは何をするんでしょう? 当然絵を描くことができます。
それではメンバーメソッドを定義しましょう。
class Color{
int R;
int G;
int B;
}
class ColorPen{
Color color;
int length;
void draw(){
:
:
}
}
|
クラスとは、こんな感じです。
C言語では、構造体のメンバー変数とそれを処理する関数が別々に定義されていましたので、
例えば、「色鉛筆構造体」と「箸構造体」があり、「絵を描く」関数と、「食べ物を食べる」関数
があった場合、「色鉛筆で食べ物を食べる」とか「箸で絵をかく」という奇妙なプログラムも
書くことができます。
「そんなバカな」と思われるかもしれませんが、大きなプログラムを複数の人が書く場合、
「そんなバカな」というようなミスが重大なバグを生む原因であることも少なくありません。
オブジェクト指向では、このように「モノ」と「それを扱う関数(メソッド)」が一緒に
クラスとして定義されていますので、「色鉛筆で食べ物を食べる」というミスは文法的に書
けないことになっています。
整理しますと、「オブジェクト指向」では「モノ(主にデータやデバイス)を
第一優先に考える」という分析・設計・実装方法なのです。