【Java】年齢を設定・表示するプログラムからカプセル化を学ぶ【不用意なアクセスを防ぐ】

【アイキャッチ】カプセル化

カプセル化によってほかのオブジェクトからの不用意なアクセスを防ぎ、制限された使い道に限定することができます。そのため、作成したツールをより安全に使用できるようになります。

今回は「年齢を設定・表示するプログラム」を通して、オブジェクト指向に必須な知識である「カプセル化」について学んでいきます。

カプセル化とは?

カプセル化を一言で説明すると、以下のような内容になります。

カプセル化(英: encapsulation)は、コンピュータプログラミングで用いられる概念であり、特定のデータ構造とアルゴリズムなどをまとめたソフトウェア複合体の内側の詳細を外側から隠蔽することと定義されている。

カプセル化 – Wikipedia

カプセル化をすることで外部からの悪意のあるアクセスを制御できます。システム・ツールとしてより安全安心なものを作るためには必須の知識と言えるでしょう。

年齢を設定・表示するプログラムを作成する

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;
  }
}
要点
[1] 外部から直接アクセスできないよう、privateを使ってアクセスを制限している
[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クラス内からのみアクセスできるという点です。これが、いわゆるカプセル化の考え方になります。

乱数を使ったおみくじプログラム

【Java】乱数を使ったおみくじプログラムで分岐を学ぶ【初心者向け】

2021年1月13日

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() + "歳です");
  }
}
要点
[1] Ageクラスのインスタンスを作成
[2] setAgeメソッドの引数に-100・500・30を入力するが、Ageクラスの変数ageに格納されるのは30のみ
[3] getAgeメソッドで変数ageの値を受け取る
[4] birthdayメソッドで変数ageに1を加える

 

これでTestクラスからAgeクラスを利用して年齢を表示・設定することができました。

クラスやインスタンス、分岐などが分からないのであれば、ひとつずつ調べてから再度この記事を読むようにしてください。

【アイキャッチ】クラスとインスタンス

【Java】金運を占うプログラムでクラスとインスタンスを学ぶ【Randomメソッド】

2021年1月18日

カプセル化によって外部からの不用意なアクセスを防ぐ

今回は「年齢を設定・表示するプログラム」を通してカプセル化について学びました。

カプセル化されていないと外部からの不用意なアクセスによって、思わぬ処理がされてしまう可能性があります。

オブジェクト指向言語を学ぶ際には必要不可欠な知識になるので、ぜひ習得してください。

【アイキャッチ】7-Zip

【圧縮/展開ソフト】7-Zipとは何だろう?特徴やメリット・デメリットもご紹介

2021年9月17日

コメントを残す

メールアドレスが公開されることはありません。