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

オブジェクト指向におけるカプセル化とは?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チェックなどを行います。

 

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

 

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

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

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

 

オブジェクト指向はプログラミングを仕事にする人にとって不可欠の考え方です。

 

オブジェクト指向についてしっかりと考え方を理解するなら、
Udemyの教材がオススメです。

>> Python でわかる オブジェクト指向 とはなにか?【Python オブジェクト指向 の「なぜ?」を「徹底的に」解説】

 

Udemyは動画ベースで学習ができるので、
実際のコードや図解を見ながら、学習を進めることができます。

 

さらに今なら30日間返金保証がついているので、
一度購入して自分の思っていたものと違った場合は費用がかかりません。

 

先ほどの教材はオブジェクトを基礎から徹底的に解説してくれています。
またPythonコードをベースに動画が進んでいくので、
Pythonを知っている人であればスムーズに理解が進むはずです。

 

その質の高さから、Udemy内のベストセラーコンテンツに指定されています。

 

また、Pythonについて基礎から学ぶのであれば、オンラインスクールがオススメです。


オンラインスクールで学習すると、講義も分かりやすく、
サポート体制もしっかりしているので、これからPythonを学ぶ人にもオススメです。


オンラインで無料レッスンを体験することもできるので、
自分にあっているかどうかを確かめることができます。


オススメは以下の3つです。
どのスクールも無料体験が用意されているので、
契約前に自分に最適なスクールを探すことができるでしょう。

✔️オススメのプログラミングスクール ベスト3

プログラミングスクールについては「プログラミングスクールで失敗しないためには【オススメベスト3も紹介】」の記事でも紹介しています。


気になった方はぜひチェックしてみて下さい〜!

コメント

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