オブジェクト指向におけるカプセル化とは?

オブジェクト指向におけるカプセル化とは?Python
ゆうすけ
ゆうすけ

カプセル化って何ですか?

資格マフィア
資格マフィア

オブジェクト指向の3大原則の一つだ。

 

✔️ 本記事のテーマ

オブジェクト指向のカプセル化について

 

✔️ 読者さんへの前置きメッセージ

本記事は「オブジェクト指向のカプセル化とは」について書いています

 

この記事を読むことで
「カプセル化の考え方 や コードでカプセル化を表現する方法」
を理解できます。

 

プログラミングの世界において、オブジェクト指向の考え方はとても重要です。

 

カプセル化はそのオブジェクト指向において重要な考え方の一つです。

 

この記事ではカプセル化について、サンプルコードを交えて徹底的に解説していきます。

 

それでは、詳しく解説していきましょう。

 

カプセル化とは?(オブジェクト指向3大原則)

カプセル化とは?(オブジェクト指向3大原則)

カプセル化とは、オブジェクト指向の3大原則の一つです。

 

オブジェクト指向とは、プログラミングにおける基本的な設計思想です。

 

オブジェクト指向を理解することで、
作成するプログラムの保守性や品質を高めることができます。

 

また、チーム開発では、欠かすことのできない考え方と言えるでしょう。

 

そんなオブジェクト指向の中でも、カプセル化は重要な考え方です。

 

なお、3大原則のうち、他の2つについては
Pythonでオブジェクト指向を解説するの記事でも解説しています。

 

オブジェクト指向の基本から理解するならぜひ読んでみてください。

 

カプセル化の考え方(オブジェクト指向の基本)

カプセル化の考え方(オブジェクト指向の基本)

カプセル化の考え方は「メソッドを使ってプロパティを操作する」ということです。

 

メソッドとはクラスに用意されている関数、プロパティとはクラスに用意されている変数です。

 

図で説明すると、以下のようなイメージです。


オブジェクト指向とは?


このように、クラスのプロパティはカプセルの中(= 外からアクセスできない)において、メソッドを外からアクセスできるようにしておくことで、各クラスのプロパティを秘匿させる設計がカプセル化です。

 

なお、関数化することの意義については
プログラミングで関数を作る意味とは?」の記事でもう少し詳しく解説しています。

 

テキストベースだけでは、少し分かりにくいかもしれません。
そこで、次から実際にコードを使って解説していきます。

 

カプセル化をコードで表す(オブジェクトベースコード)

カプセル化をコードで表す(オブジェクトベースコード)

カプセル化について、以下のコードを使って説明しましょう。

 

class Human:
    def __init__(self, name, age):
        self.name = name
        self.age = age

    def setter_age(self, age):
        self.age = age

    def getter_age(self):
        return self.age

 

まず、オブジェクト指向の考え方に沿って、クラス(オブジェクト)を定義します。

 

そして、処理に必要な値(変数)を、このクラスのプロパティとして定義します。
サンプルコードの「self.name」や「self.age」がそれにあたります。

 

そして、これらのプロパティの値を使うときは、クラスのメソッド(関数)を通すようにします。

 

これがカプセル化です。

 

さらに、このクラスを使うときのコードを実際に見てみましょう。

 

sato = Human('佐藤', 20)

sato_age = sato.getter_age()
sato.setter_age(21)

 

値を参照するときはgetterを使用します。

 

上のサンプルコードでは、Humanクラスのインスタンスのgetter_age()を使うことで、satoオブジェクトのageを取得しています。

 

クラスのプロパティに値をセットするときはsetterを使用します。

 

上のサンプルコードでは、satoオブジェクトを21に変更するとき、setter_age()を使って、ageの値を書き換えています。

 

このように、getterとsetterを使うことがカプセル化の基本的な考え方になります。

 

次は、このgetter、setterについて、詳しく解説しましょう。

getter()

sato_age = sato.getter_age()

getterはプロパティの参照用のメソッドです。

 

クラス外からプロパティにアクセスするときは、直接参照するのではなく、getterによって値を取得します。

 

getterを使ってアクセスすることで、各クラスのプロパティを意識することなく、その値を参照することができます。

setter()

sato.setter_age(21)

setterはプロパティの設定用のメソッドです。

 

クラス外からプロパティに値をセットするときは、直接代入するのではなく、setterによって値をセットします。

 

setterを使ってアクセスすることで、各クラスのプロパティを意識することなく、値をセットすることができます。

 

どちらかというと、このsetterがキモで、このsetterでValidationチェックなどを行います。

 

それにより、設計者が意図しない値がセットされることを防いで、バグを減らすことができます。

 

カプセル化やオブジェクト指向についてもっとスキルをつけるなら

カプセル化やオブジェクト指向についてもっとスキルをつけるなら

オブジェクト指向のカプセル化について解説しました。

 

オブジェクト指向について正しく概念を理解するなら、以下の書籍がオススメです。

 

この書籍はオブジェクト指向についてかなり丁寧に書かれています。

「オブジェクト指向とは?」だけでなく「なぜオブジェクト指向を使うのか?」
といった背景や理由の部分まで丁寧に解説されています。

そのため、オブジェクト指向の全体像から詳細まで正しく理解することができます。

 

オブジェクト指向の理解を深めたい方にオススメの一冊です。

 

エンジニアとしての自身の価値をチェックする(完全無料)

エンジニアとして、

自分の価値がどれくらいのものかご存知でしょうか?

 

エンジニアとしてIT業界に身を置いていると

今の会社でずっと働くのか、フリーランスとして独立するのか …

と様々な選択肢があります。

 

どの選択肢が正解なのかを見極めるためにも、選択肢を広げるためにも

自身の価値を知っておくことはとても重要です。

 

TechClips ME では、

職務経歴書をアップロードするだけで企業からのスカウトを受けることができます。

▼▼▼▼▼

▲▲▲▲▲

しかもTechClips MEでは想定年収を企業から提示してくれるので、

自身の価値を数字で分かりやすくたしかめることができます。

 

登録はもちろん完全無料なので、一度登録してみると良いかもしれません。

 

コメント

タイトルとURLをコピーしました