PHASE2 LOG

主にIT関連・ゲームのログ

Javaのお勉強~カプセル化とprivate~

      2016/03/12

 

オブジェクト指向の特徴のひとつがカプセル化というものです。

今回はその意味と方法をお勉強してみます!

 

カプセル化とは

 

カプセル化ではフィールドやメソッドなどのメンバを他のオブジェクトから隠す

(外部から非公開とする)ことができます。

 

カプセル化することのメリットは、オブジェクト内で仕様に変更があった場合でも

外部のオブジェクトへの影響が少ないことです。

また、意図していない値が使われることを防ぎます。

 

private修飾子

 

カプセル化を行う際には、メンバに「private」を追加します。

privateをつけたメンバは、他のオブジェクトから利用できなくなります。

 

では、どうやって外部から操作できるようになるかというと、

privateがついていないメソッドを通してならカプセル化されたメンバが利用できます。

 

ここで例を見てみましょう。

class Pet {
	//privateでカプセル化
	private String name;
	
	//セッター
	void setName(String n){
		name = n;
	}
	
	//ゲッター
	String getName() {
		return name;
	}
}

//Petクラスを継承
class Dog extends Pet {
	void Print(){
		System.out.println(getName() + "くん");
	}
}

class Capsule {
	public static void main(String[] args){
		Dog gonta = new Dog();
		gonta.setName("ごん太");
		gonta.Print();
	}
}

 

フィールド「name」がprivateによってカプセル化されたメンバです。

こちらは外部のクラスであるDogクラスやCapsuleクラスからは直接参照することが

できません。

 

なので、privateのついていないPetクラスのsetName()メソッドgetName()メソッド

によって値の参照や変更を行います。

 

それから、DogクラスはPetクラスを継承していますが、nameはカプセル化されているので

継承されていません。

 

イメージにするとこんな感じです。

capsule

 

 

セッターとゲッターについて

 

上記のソースに出てきたsetName()メソッドをセッターといい、

getName()メソッドをゲッターといいます。

 

簡単にいえば値をセットするのがセッターで、値を取得(ゲット)するのがゲッターですね。

 

実はこのメソッド名って何でもいいのですが、何をするメソッドかわかりやすくするために

セッターにはメソッド名に「set」を、ゲッターならメソッド名に「get」を

つけるのが望ましいようです。

 

あとから誰がみても保守しやすいプログラミングができるように心がけたいですね!

 

人気ブログランキング

 -