モノに注目する
オブジェクト指向プログラミングの事を、Object Oriented Programming と言います。
モノに注目してプログラムを作成することが、オブジェクト指向プログラミングです。
逆に、手続き型プログラミングでは、「まずこの処理、次にこの処理、...」というように、処理の流れを考え、順番に羅列していきます。
下記、手続き型プログラミングと比較することで、オブジェクト指向プログラミングの
イメージを掴んでいただきます。
簡単な「車に給油し、残量を表示する」というプログラムを例とします。
手続き型プログラミング
- サンプルコード
-
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
|
-
|
|
!
-
|
!
-
|
!
-
|
|
|
|
|
|
|
|
|
!
| #include <stdio.h>
typedef struct _car
{
int num;
double gas;
} car_t;
static void
setGas (car_t *car)
{
car->gas += 1.00;
}
static void
showCar (car_t *car)
{
printf ("car:num = %d, car:gas = %f\n", car->num, car->gas);
}
int
main (void)
{
car_t car;
car.num = 1234;
car.gas = 25.0;
setGas (&car);
showCar (&car);
return 0;
}
|
- 実行結果
car:num = 1234, car:gas = 26.000000
- ポイント
- 皆さんは、無意識のうちに手続き型言語をマスターし、慣れ親しんでいるはずです。
C言語では処理を関数で記述する為、手続き型プログラミングは、様々な関数を羅列するものとなります。
オブジェクト指向型プログラミング
- サンプルコード
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
|
-
|
|
|
|
|
!
-
|
!
-
|
!
-
|
|
|
|
|
|
|
|
|
!
| #include <stdio.h>
class Car
{
public:
int num;
double gas;
void setGas (void);
void showCar (void);
};
void
Car::setGas (void)
{
gas += 1.00;
}
void
Car::showCar (void)
{
printf ("car:num = %d, car:gas = %f\n", num, gas);
}
int
main (void)
{
Car car;
car.num = 1234;
car.gas = 25.00;
car.setGas ();
car.showCar ();
return 0;
}
|
- 実行結果
car:num = 1234, car:gas = 26.000000
- ポイント
- 手続き型プログラミング言語を使っても、オブジェクト指向型プログラミングを使っても、プログラムの機能に違いはありません。
オブジェクト指向プログラミング言語では、処理(及びデータ)の所有者であるオブジェクトを考える必要があります。
car.setGas()、car.showCar() の順番で処理が羅列されているのは手続き型プログラミング言語と同じです。
ただし、それぞれの処理(関数)に、所有者が存在することに注目してください。
まとめ
- 処理の所有者 = オブジェクト
- 個々のオブジェクトが処理を持ち、オブジェクトが他のオブジェクトの関数を呼び出すことでプログラムを動作させるのが、
オブジェクト指向プログラミング
- モノとモノとが対話していることをプログラムで表す
- 対話のことをメッセージパッシング(message passing)と言う
- C++ 言語は、C言語にオブジェクト指向プログラミングの為の機能を追加したもの。
従来の手続き型プログラミングを行うことも可能
オブジェクト指向プログラミングのメリット
- 手続き型言語は、大規模なプログラムの作成に適していない
- 膨大な処理(関数)が羅列されただけの複雑なものになってしまう
- 大規模なプログラムの複雑さを軽減する
- 1つのプログラムの中に、10000個の処理があったとしても、50個の処理に分割されて所有されていれば、
1つのオブジェクトあたりの処理は、200程度になる
- プログラムの修正が容易になる
- 現実世界のモノに対応させてプログラムのオブジェクトを作成すれば
- 現実世界をモデリングするのに便利
参考