【初心者用】オブジェクト指向におけるカプセル化について

カプセル化とは、オブジェクト指向における考え方の一つです。

オブジェクト指向については、他サイトで色々と説明が為されておりますが、調べるのが億劫な方は、ざっくり「各々の細かい処理を別クラスに分けて部品化し、メインとなるクラスからそれらを呼び出すという考え方」程度には認識しておいてください。

今回は、カプセル化とはどういった考え方か、その具体例を交えて説明していきたいと思います。

1. カプセル化って何?

冒頭でも述べましたが、カプセル化とは、オブジェクト指向における考え方の一つです。

その考え方とは、ずばり、

「オブジェクト化したクラスにおいて、必要な変数のみを公開し、それ以外を隠蔽する」

というものです。


これによるメリット・デメリットは後述いたしますが、主に「変数の公開・非公開を明確にすることで、外部からのアクセスを制限し、余計な操作を防ぐ」ことを目的として行われます。

2. 具体例を交えて

アクセス修飾子について

カプセル化において、大事なことの一つとして、「アクセス修飾子」があります。

これは、主にクラス(プログラムの大枠となるもの)やそのメンバーとなるメソッド(命令)、変数(データ)を宣言する際につける、外部に対する公開範囲を決めるものです。

具体例として、以下に簡単に書いてみますね。

  1. public class forEx {
  2.     public static void main(String[] args) {
  3.         String sName = "太郎";
  4.         System.out.println(sName);
  5.     }
  6. }


以上は、画面に「太郎」と表示させるものですが、1行目と3行目に、それぞれ最初に「public」と書いているのが分かるでしょうか。

これが、アクセス修飾子というものです。


アクセス修飾子は、いくつかの種類があるので、ざっくり説明していきます。

・public
どのクラスからでもアクセス可能にする修飾子です。


・protected
同じパッケージ(クラスを目的に合わせてグループ分けしたもの)のものからならアクセス可能な修飾子です。
異なるパッケージでも、そのクラスを継承したサブクラス内部からならアクセスが可能です。


・(何もつけない)
アクセス修飾子がついていない場合です。
同じパッケージのものからならアクセス可能です。
protectedに似ていますが、異なるパッケージからのアクセスは不可能です。


・private
同じクラスからのみ、アクセス可能です。(他のクラスからはアクセスできません)


上の例文でも書いてますが、アクセス修飾子の書き方は、以下のようになります。

  1. Private String sName = "太郎";


これは変数の例ですが、クラスであれメソッドであれ、アクセス修飾子が一番最初につくようになります。

実際に使ってみる

具体例として、以下のようなプログラムを組んでみました。

  1. public class TaxCalc {
  2. &nbs

3. カプセル化のメリット

操作がしやすい

プログラミングをする人間が1人だけだと恩恵は薄いですが、複数人で開発を行う場合、そのオブジェクトを利用する際に、操作の大まかな仕様さえ知っていれば、オブジェクト内の操作の実装やデータを知る必要がありません。

そのため、設計の段階で使いやすくしておけば、開発の高速化を見込めます。


アクセス可能個所を絞ることによるエラー防止

private修飾子を利用することで、直接のアクセスによるメンバ変数の書き換え、それに伴うエラーの類を防ぐことができます。

4. カプセル化のデメリット

ソースコードの量が増える

private修飾子でアクセスが絞られたりすると、直接アクセスできない分プログラムを書かねばならず、ソースコードの量が増えます。


クラスの作成に知識や経験が求められる

熟練者が作成したクラスは、よく考えられて作られているため、可用性・可読性などが高く信頼性も高いのですが、理解の乏しい人間が作成したクラスは無駄が多い可能性があります。

そのため、効率化を狙ったつもりが、逆に非効率になってしまったりエラーが発生するリスクがあります。

ですが、プログラミングの理解次第で解決できる問題ですので、あまり気にする必要はないかもしれません。