|
再利用としての継承
- 例えば...
- A さんが MyClass クラスを作って、B さんにプレゼントしたとする。
B さんは新たに YourClass クラスを MyClass クラスを継承して定義すれば、
無条件に MyClass クラスのメンバを再利用できます。
- オブジェクト指向プログラミングは、大規模なプログラムの作成に適したスタイル
- 例えば...
- A さんはクラスを作る人、B さんはクラスを使う人といった具合に分担できる
- オブジェクト指向設計の基本は、プログラム全体を複数のクラスに分割すること
汎化と継承
- 必要と思われるクラスを洗い出すことが、オブジェクト指向設計の第一歩となる
- 例えば...
- 車の管理システムを例とし、下記のように OpenCar クラス、SuperCar クラス、F1Car クラスを考える
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
-
|
|
|
|
!
-
|
|
|
|
!
-
|
|
|
|
!
| class OpenCar
{
public:
int number;
double gas;
int haikiryo;
};
class SuperCar
{
public:
int number;
double gas;
int maxSpeed;
};
class F1Car
{
public:
int number;
double gas;
int winCount;
};
|
- どのクラスも number, bas という同じメンバ変数を持っている
- 同じコードを何度も記述することになるので、効率的ではない
- 共通のメンバだけを纏めた BaseCar クラスを定義する
複数のクラスに共通するメンバを1つのクラスに纏めることを汎化という
- 汎化によって作成された BaseCar クラスを基本クラスとして定義し、
BaseCar クラスを継承して、OpenCar クラス、SuperCar クラス、F1Car クラスを派生クラスとして定義する
- 共通するメンバ変数を定義する回数は 1 回で済み、効率的
- オブジェクト指向設計での汎化は、プログラミング時には継承となる
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
|
-
|
|
|
!
-
|
|
!
-
|
|
!
-
|
|
!
| class BaseCar
{
public:
int number;
double gas;
};
class OpenCar : public BaseCar
{
public:
int haikiryo;
};
class SuperCar : public BaseCar
{
public:
int maxSpeed;
};
class F1Car : public BaseCar
{
public:
int winCount;
};
|
参考
|
|