Home News DOC Class DL Others Cooker
Documents  >  Tutorial  >  カプセル化
カプセル化

カプセル化はメンバへのアクセス制限のことです。


目次:


定義例

open メンバ

closed メンバ

クラスレベルのカプセル化

定義例

前ページで定義した example クラスを以下に示します。

1:

class example

2:

int x;

3:

int y;

4:

open fitter example() // デフォルトフィッタ。

5:

x = 0;

6:

y = 0;

7:

endfitter

8:

open fitter example(int xx, int yy) // 引数二つのフィッタ。

9:

x = xx;

10:

y = yy;

11:

ef // 省略形

12:

open setter X(int val)

13:

x = val;

14:

endsetter

15:

open getter int X

16:

return x;

17:

endgetter

18:

open setter Y(int val)

19:

y = val;

20:

es // 省略形

21:

open getter int Y

22:

return y;

23:

eg // 省略形

24:

open method void Clear()

25:

x = 0;

26:

y = 0;

27:

return; // オプション、無くてもよい。

28:

endmethod

29:

open method example Add(int vx, int vy)

30:

return new example(x + vx, y + vy);

31:

endmethod

32:

open method example Add(example ve) // 同名、引数違い。

33:

return new example(x + ve.x, y + ve.y);

34:

em // 省略形

35:

endclass

open メンバ

上記の定義例においてアクセス制御子 open から定義が始まるメンバを open メンバと言います。

open メンバはクラス定義の外部からドット演算子を経由して呼び出すことができます。

closed メンバ

上記の定義例には出てきませんが、アクセス制御子 closed から定義が始まるメンバを closed メンバと言います。

フィールドも closed メンバです。

closed メンバはクラス定義の外部からドット演算子を経由して呼び出すことができません。

クラスレベルのカプセル化

上記の定義例の32~34行目を抜き出しました。

32:

open method example Add(example ve) // 同名、引数違い。

33:

return new example(x + ve.x, y + ve.y);

34:

em // 省略形

example クラスの引数 ve のフィールドにドット演算子を経由してアクセスしています。

Add(example) メソッドは example クラスのメンバなので、 example クラスのインスタンスに対しては closed メンバまでアクセスすることができます。


クラス定義の内部では、そのクラスの全てのインスタンスの closed メンバに無制限でアクセスできます。

Copyright © Rice All rights reserved.