Javaアプレット(26) メソッドの作成

ひきつづき作成したBMatrixクラスについて説明します。
今回はsetValue()やgetValue()などのメソッドについて説明します。
Javaではクラスという概念でデータと手続きをまとめています。データはメンバと呼ばれ手続きはメソッドと呼ばれます。もともとクラスはある「もの」(オブジェクト)を抽象化していることが多く、その「もの」に対する操作としてメソッドが定義されます。
BMatrixというのは2進数の行列という「もの」ですが、それを操作する手続きとして、setValue()やgetValue()を定義しています。
setValueは行列のある一つの要素に値(0か1)を設定するメソッドです。行列は数学では、
(a11 a12↓a21 a22)
のように表現されますが、例えばこのa12は1行目2列目の要素を表しています。setValue()でこの要素に0を入れるには、
a.setValue(1, 2, 0);
と書けばいいように定義しています。ここでaはBMatrixのオブジェクトとします。
getValueは行列のある一つの要素の値(0か1)を返すメソッドです。値はこのメソッドの戻り値として返しますので、setValueの型をintとしました。さきほどのgetValueは戻り値がないのでvoidとなっています。
value = a.getValue(1, 2);
でa12の値を取り出せます。
と、論理的にはそういうことなのですが、実際のコード(実装、インプリメントなどと言います)は、ビット列なのでちょっと複雑です。さきほどの2×2の行列はBMatrixの内部では、
int[][] cell = new int[2][1];
として定義され、以下のような構造になります。0の列はビットを表します。32個ずつあります。
図:2x2 2進行列の内部構造
【図36 2×2 2進行列の内部構造】
このうち使われるのは左の2ビットだけで右側の30ビットは使用されません。つまり列のほうは32ビットあるので、nx32行列まではint 1つで足りてしまいます。
仮にさきほどのように
a.setValue(1, 2, 1);
と値をセットすると、内部では1行目のintの値が2進数で01000000000000000000000000000000になります。
このような内部構造はメソッドの形(インタフェースと呼びます)には規定がなく、2×2の行列を
int[][] cell = new int[2][2];
とビットではなく整数(int)で表すことも可能です。つまり、インタフェースから内部構造は隠されていることになります。このことを隠蔽(いんぺい)と呼びます。
オブジェクト指向ではこの隠蔽をうまく使って効率よくプログラミングできるようにしています。
グラフ理論は集合の延長線上の数学で、数を扱うというより「もの」を扱う数学という感じがします。そういう意味では「もの」を中心に考える(Javaなどの)オブジェクト指向は、グラフ理論を扱うには向いているのかもしれません。
(つづく)

カテゴリーJava

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト /  変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト /  変更 )

%s と連携中

%d人のブロガーが「いいね」をつけました。