カプセル化によってほかのオブジェクトからの不用意なアクセスを防ぎ、制限された使い道に限定することができます。そのため、作成したツールをより安全に使用できるようになります。
今回は「年齢を設定・表示するプログラム」を通して、オブジェクト指向に必須な知識である「カプセル化」について学んでいきます。
カプセル化とは?
カプセル化を一言で説明すると、以下のような内容になります。
カプセル化(英: encapsulation)は、コンピュータプログラミングで用いられる概念であり、特定のデータ構造とアルゴリズムなどをまとめたソフトウェア複合体の内側の詳細を外側から隠蔽することと定義されている。
カプセル化をすることで外部からの悪意のあるアクセスを制御できます。システム・ツールとしてより安全安心なものを作るためには必須の知識と言えるでしょう。
年齢を設定・表示するプログラムを作成する
1.年齢を管理するAgeクラスを作成
まずは年齢を管理するためのAgeクラスを作成します。
class Age { // [1] priveteで定義されているクラス内からのみ変更可にする private int age = 20; // [5] ageの値を1増やすbirthDayメソッド void birthDay() { age++; System.out.println("誕生日おめでとう!"); } // [2][3] setAgeメソッド経由でageを変更 public void setAge(int i) { // ageの条件を設定 if (i < 0) { System.out.println("0以上の値を入力してください"); } else if (200 < i) { System.out.println("200以下の値を入力してください"); } else { age = i; } } // [4] getAgeメソッド経由でageを返す public int getAge() { return age; } }
[2] 変数ageに値を代入するためのsetAgeメソッド
[3] 年齢を表す変数ageなので、0~200の数字のみに代入を限定している
[4] 変数ageの値を返すgetAgeメソッド
[5] ageの値を1増やし、「誕生日おめでとう!」と出力するbirthDayメソッド
Ageクラス内の「setAge」では、外部から年齢を設定できます。0~200までの数字に制限したいため、if文による分岐を使って0より小さく、200より大きい数字を排除しています。
「getAge」は外部から年齢を取得することができます。「private int age = 20;」で変数ageが20に初期化されているため、クラスをインスタンス化した直後にgetAgeメソッドを使うと20を返します。
「birthDay」は設定されている年齢に1を足し、「誕生日おめでとう!」という文字列を出力するメソッドです。
ここで大切なのはprivateによって変数ageが外部から直接参照できず、Ageクラス内からのみアクセスできるという点です。これが、いわゆるカプセル化の考え方になります。
Ageクラスを利用するTestクラス
年齢を管理するAgeクラスを作成したので、
public class Test { public static void main(String[] args) { // [1] Ageクラスのインスタンス Age pei = new Age(); // [2] 引数に-100 pei.setAge(-100); // [2] 引数に500 pei.setAge(500); // [3] pei.getAge()の戻り値は20 System.out.println("ぺいの年齢は" + pei.getAge() + "歳です"); // [2] 引数に30 pei.setAge(30); // [3] pei.getAge()の戻り値は30 System.out.println("ぺいの年齢は" + pei.getAge() + "歳です"); // [4] birthDayメソッドで年をとる pei.birthDay(); // [3] pei.getAge()の戻り値は31 System.out.println("ぺいの年齢は" + pei.getAge() + "歳です"); } }
[2] setAgeメソッドの引数に-100・500・30を入力するが、Ageクラスの変数ageに格納されるのは30のみ
[3] getAgeメソッドで変数ageの値を受け取る
[4] birthdayメソッドで変数ageに1を加える
カプセル化によって外部からの不用意なアクセスを防ぐ
今回は「年齢を設定・表示するプログラム」を通してカプセル化について学びました。
カプセル化されていないと外部からの不用意なアクセスによって、思わぬ処理がされてしまう可能性があります。
オブジェクト指向言語を学ぶ際には必要不可欠な知識になるので、ぜひ習得してください。
コメントを残す