カプセル化

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


目次:


定義例

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

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

exampleクラスを使用するコードを考えます。

1:

example ex1 = new example(10, 10);

2:

example ex2 = new example(10, 10);

3:

example ex3 = ex1.Add(ex2); // ex3.x == 20 ex3.y == 20

ex1とex2は同じクラスの異なるインスタンスです。ex1のAdd(example)メソッドの呼び出しでex2のフィールド、closedメンバ、にアクセスしています。

32:

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

33:

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

34:

em // 省略形

Riceは、クラス定義の内部に限り、クラスの全てのインスタンスのclosedメンバに無制限でアクセスできます。このようなカプセル化を"クラスレベルのカプセル化"と呼びます。

Copyright © Rice All rights reserved.