クラスに書く処理
前回「クラスはデータセットの定義」と記載しましたが、当然処理もクラスに記述します。逆にデータが無く処理だけのクラスを作成することもあります。しかし基本はデータセットを定義する、必要に応じてそのデータセットの操作処理を記述する、と少し意識してください。クラスをどの単位で作成するかどんな処理を記述するか判断しやすくなります。
カプセル化
前回作成したstudentクラスに処理(メソッド)を追加してみました。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
class Student { private String name; private int kokugo; private int suugaku; public String getName(){ return name; } public void setName(String name){ this.name = name; } public int getKokugo(){ return kokugo; } public void setKokugo(int kokugo){ this.kokugo = kokugo; } public int getSuugaku(){return suugaku;} public void setSuugaku(int suugaku){this.suugaku = suugaku;} } |
たくさん処理がありますが、その中の「getName()」はクラス外の処理が名前(name)を取得するためのメソッドです。って、名前を取得するのは次の方法でも可能なはずです。
1 2 |
Student s = new Student(); String name1 = s.name; |
しかし2行目~4行目で変数を「private」で宣言しているため、クラス外から直接アクセスできないようにしています。
2 3 4 |
private String name; private int kokugo; private int suugaku; |
わざわざ外部からアクセスできないようにし、メソッドを通して名前を取得させるのはなぜでしょうか。それは、オブジェクト指向の作法、しきたり、因習なのです。これは、「カプセル化」の考えからきています。「カプセル化」とは、次の通りです。(ウィキペディアより)
一定の関連性を持つデータ(変数、プロパティ)と、それらを操作するコード(関数、プロシージャ)をひとまとめにしてオブジェクトとし、外部に対して必要とされるデータとコードのみを公開し、その他は内部に隠蔽する仕組みがカプセル化と呼ばれる。オブジェクトが持つコードは一般に「メソッド」と呼ばれる。オブジェクトの設計は単一責任の原則(英語版)に従い、一つの閉包機能をなすデータ構成とそれに関連したメソッドを定義するのが基本になる。公開されたデータは外部のメソッドから直接参照ないし変更する事できる。公開されたメソッドは同様に外部のメソッドから直接呼び出す事ができる。隠蔽されたデータとメソッドは外部からアクセスできず、これは情報隠蔽(英語版)と呼ばれる。
この連載の方針通り、深入りせずに進みましょう。クラス外から変数にアクセスする際にはメソッドを通し行います。そして用意するメソッド名に決まりがあります。変数名の頭1文字目を大文字にして、値を取得する場合は「get」を最初につけます。値を設定する時は「set」です。これらメソッドのことを「ゲッター」、「セッター」と呼ぶことがあります。
this
さらに記述方法にも慣習があります。9行目~11行目のメソッド「setName」は変数nameに値を設定します。この引数の変数名が「name」となっていて、クラス内の変数と同じ名前です。
2 |
private String name; |
9 10 11 |
public void setName(String name){ this.name = name; } |
大変紛らわしいのですが、設定する変数と同じ名前を引数名に付けることが多いのです。そして10行目で引数をクラス内の変数に設定していますが、「this.name」との記述になっています。これは引数が同名のためクラス内の変数を明示的に指定しているのです。
行数を減らす
変数毎にゲッター、セッターメソッドを書いているとプログラムが長くなってしまいます。そこで、18行目~19行目のように改行を省いて1行にすることもあります。
18 19 |
public int getSuugaku(){return suugaku;} public void setSuugaku(int suugaku){this.suugaku = suugaku;} |
決まり事や慣習があり、まるで校則の厳しい学校へ転入してきちゃったみたいですが、きっと楽しい学園生活が待っているはずです(たぶん)。