支援対象地域:札幌、仙台、関東、愛知、関西、広島、福岡

  • TOP
  •   
  • コラム
  •   
  • Java オブジェクト指向1(カプセ

はじめに

Javaのオブジェクト指向を実現する上で重要となる3つの機能(カプセル化、継承、多態性)について3回にわたってご紹介します。 今回ご紹介する機能は、カプセル化です。

カプセル化

カプセル化とは、情報(データ)と操作(実装)を隠蔽することです。

ゲームのコントローラを操作する際、「○ボタンを押した場合、コントローラ内部でどのような処理が行われるか」ではなく、「○ボタンを押すことで、どのような操作ができるか」を意識することでしょう。
つまり、使い方(操作)が分かっていれば、内部処理を意識せずに使えるということが、カプセル化されているということです。

カプセル化を行うことで、次のようなメリットがあります。

 カプセル化のメリット

  • 予期せぬバグを防げる
  •   故意や間違いによるメンバ(フィールド及びメソッド)の利用を防止する
  • プログラムの拡張が容易になる
  • プログラムの構造が整理される
  •   機能をAPIとしてクラス単位で提供できる

アクセス制御

1.アクセス修飾子

Javaでは、各メンバやクラスに対してアクセス修飾子を設定する(アクセス制御)ことで、カプセル化を行います。

 《アクセス制御(メンバに対して)》

  • フィールドへのアクセス制御
  • アクセス修飾子 データ型 変数名;
  • メソッドへのアクセス制御
  • アクセス修飾子 メソッド宣言{…}
【アクセス修飾子】
制限 名前 プログラム内の
アクセス修飾子
アクセスの許可範囲
厳しい



緩い
private private 自分自身のクラスのみ
package private (何も記述しない) 自分と同じパッケージ内のクラス
protected protected 自分と同じパッケージ内 or 自分を継承したクラス
public public 全クラス

フィールドはprivate、メソッドはpublicとするのが一般的です。



 《アクセス制御(クラスに対して)》

  • クラスへのアクセス制御
  • アクセス修飾子 クラス宣言{…}
【アクセス修飾子】
制限 名前 プログラム内の
アクセス修飾子
アクセスの許可範囲
厳しい package private (何も記述しない) 自分と同じパッケージ内のクラス
緩い public public 全クラス

非publicクラスのみ許される特徴
  1. クラス名はソースファイルと異なってよい
  2. 1つのソースファイルに複数宣言してよい
  3. つまり、「1つのソースファイルに1つのpublicクラス」となり、「ファイル名 = publicクラス名」としなければならないということです。


2.getter / setter

IntroductionクラスでElementクラスのフィールドには、private修飾子がついているため、アクセスできません。 しかし、XXXメソッドやYYYメソッドについては、public修飾子がついているためアクセスできます。
つまり、フィールドへのアクセスは、メソッド経由で行うということです。

2種類のメソッドを使って、フィールドへアクセスします。 それが、getterメソッドsetterメソッドです。

 《getterメソッド》

 ある特定のフィールドから値を取得したい場合に使用します。

 public フィールドの型 getフィールド名(){
  return this.フィールド名;
 }
//getterメソッド使用例
public String getName(){
 return ths.name;
}

public String getAge(){
 return ths.age;
}

 《setterメソッド》

 ある特定のフィールドに値を設定したい場合に使用します。

 public void setフィールド名(フィールドの型 任意の変数名){
  this.フィールド名 = 任意の変数名;
 }
//setterメソッド使用例
 public void setName(String name){
  this.name = name;
 }

 public void setAge(String age){
  this.age = age;
 }

getter / setterのメリット
  1. Read Only、Write Onlyのフィールドを実現できる
  2. クラスの内部設計を自由に変更できる
  3.  フィールド名を変更しても、getXXXメソッドやsetXXXメソッドを呼び出している他のクラスには影響がない
  4. フィールドに異常値が設定されていないか検査できる
  5.  設定されようとしている値が妥当かどうか検査することは、プログラミングでは一般的

まとめ

カプセル化」についてご紹介しました。 お役に立てると幸いです。