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