
オブジェクト指向って何ですか?



プログラミングにおける重要な考え方だ。
Pythonを使って解説しよう。
✔️ 本記事のテーマ
Pythonにおけるオブジェクト指向
✔️ 読者さんへの前置きメッセージ
本記事は「Pythonにおけるオブジェクト指向とは」について書いています。
この記事を読むことで
「オブジェクト指向という考え方 や オブジェクト指向をPythonで表現する方法」
を理解できます。
Pythonに限らずプログラミングの世界において、
オブジェクト指向の考え方はとても重要です。
これからプログラミングを学ぶ人や既に少しプログラミングを知っている人でも、
必ず抑えておくべき考え方と言えるでしょう。
そんなオブジェクト指向について、
この記事ではPythonでのコードを使って説明していきます。
それでは、Pythonでのオブジェクト指向について詳しく解説していきましょう。
オブジェクト指向とは?
オブジェクト指向とは、プログラミングでよく用いられる設計思想です。
もはや今では「オブジェクト指向について理解していること」が
優れたプログラマの条件の一つでもあると言えます。
ところが、オブジェクト指向を一言で説明するのはとても難しいです。
大まかな考え方としては
「役割ごとにプログラムを作成する」といった捉え方をすればOKです。
例えば、プログラムを学びたてのプログラマは、
一つのメイン処理に全てを詰め込むような書き方をするでしょう。
それから少し慣れてくると、
それぞれの機能単位で関数分割されたプログラムを書くようになるはずです。
参考記事:プログラミングで関数を作る意味とは?
オブジェクト指向は、
それらの関数のさらに上の階層としてクラスを定義して、
役割ごとにクラス分割します。
おそらく文字ベースでの説明だけではイメージがしにくいと思うので、
次からPythonのコードを使って解説しましょう。
Pythonにおけるオブジェクト指向
まずオブジェクト指向の基本は、クラス、プロパティ、関数 の構造です。
以下のようなサンプルコードで語られることが多いです。
class Human:
def __init__(self, name, age):
self.name = name
self.age = age
def introduce(self):
print('私の名前は' + self.name + 'です。')
print('年齢は' + str(self.age) + 'です。')
順番に、解説していきましょう。
オブジェクト指向をPythonコードで読み解く
今回は「人間クラス」を定義しています。
class Human:
そして、この人間クラスのプロパティとして「名前」「年齢」を定義します。
def __init__(self, name, age):
self.name = name
self.age = age
さらに、人間クラスの機能として「自己紹介」関数を用意しています。
def introduce(self):
print('私の名前は' + self.name + 'です。')
print('年齢は' + str(self.age) + 'です。')
このように「クラスを基本として、そのクラスの機能やプロパティとして変数や関数を定義していく」という考え方をオブジェクト指向といいます。
言い換えれば、オブジェクトをベースに、
そのオブジェクトの性質や機能として処理を定義する考え方ですね。
上記のサンプルコードは呼び出すときも、以下のようにオブジェクトベースで考えます。
tanaka = Human('田中', 20)
sato = Human('佐藤', 40)
tanaka.introduce()
sato.introduce()
# 出力
私の名前は田中です。
年齢は20です。
私の名前は佐藤です。
年齢は40です。
このように、名前と年齢を渡してインスタンスを生成することで、
人間クラスの「自己紹介」関数を使えるようになります。
Pythonの「オブジェクト指向3大原則」とは?
ここまでオブジェクト指向の全体像を説明しました。
さらに、オブジェクト指向には「3大原則」と呼ばれる原則があります。
それが以下の3つです。
- カプセル化
- 継承
- ポリモーフィズム
基本的にオブジェクト指向はこの3つの考え方で成り立っています。
順に、解説していきましょう。
カプセル化(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
オブジェクト指向では、
上記のコードのように関数を通してクラスのプロパティを操作します。
こうすることで、各クラスのプロパティを直接編集したり、参照しなくて済むので、プログラムの独立性や機密性が保つことができます。
このように、setter、 getter関数を通して、
プロパティを操作するという考え方がカプセル化です。
継承(Pythonコード)
継承とは
「各クラス(機能)を共通のクラスを基にして(引き継いで)作成するという考え方」
です。
この共通のクラスのことを、よくスーパークラス(基底クラス)などと呼びます。
from abc import *
class Human(metaclass = ABCMeta):
def __init__(self, name, age):
self.name = name
self.age = age
@classmethod
@abstractmethod
def introduce(self):
print('私の名前は' + self.name + 'です。')
print('年齢は' + str(self.age) + 'です。')
class Student(Human):
pass
上記のコードでは、Studentクラスで特に何も定義していません。
しかし、StudentクラスはHumanクラスを継承しているので、
Humanクラスのプロパティ、関数が使用できるのです。
Suzuki = Student('鈴木', 15)
Suzuki.introduce()
# 出力
私の名前は鈴木です。
年齢は15です。
このように、全てのクラスをスーパークラスを継承して作成することで、
プログラムの整合性を保つことができます。
それにより、意図していない実装を防ぐことで、
バグを減らしたり、コードの品質を高めることができます。
ポリモーフィズム(Pythonコード)
最後に、ポリモーフィズムについて解説します。
ポリモーフィズムとは、
ざっくり言うと「同じ機能は同じ名前で定義しよう」という考え方です。
別のクラスの機能でも、同じ名前として定義しておくことで、それらを呼び出すときに各クラスの違いを意識せずに使うことができます。
例えば、pythonでは以下のように数字でも文字列でも同じように足すことができます。
>>> 1+2
3
>>> 'a'+'b'
'ab'
同じ「足す」という処理を、
数字クラス、文字列クラスの機能として同じ名前で定義することで、
機能を使う側にとって便利な実装になります。
このようにポリモーフィズムを使うことで、
新たなクラスを追加したなどに他への影響を減らすことができるので、
保守性の高いプログラムを作成することができます。
オブジェクト指向やPythonについてもっとスキルをつけるなら
オブジェクト指向について解説しました。
オブジェクト指向はプログラミングを仕事にする人にとって不可欠の考え方です。
オブジェクト指向についてしっかりと考え方を理解するなら、Udemyの教材がオススメです。
>> Python でわかる オブジェクト指向 とはなにか?【Python オブジェクト指向 の「なぜ?」を「徹底的に」解説】
Udemyは動画ベースで学習ができるので、
実際のコードや図解を見ながら、学習を進めることができます。
さらに今なら30日間返金保証がついているので、
一度購入して自分の思っていたものと違った場合は費用がかかりません。
先ほどの教材はオブジェクトを基礎が徹底的に解説されています。
またPythonコードをベースに動画が進んでいくので、
Pythonを知っている人であればスムーズに理解が進むはずです。
その質の高さから、Udemy内のベストセラーコンテンツに指定されています。
また、Pythonについて基礎から学ぶのであれば、オンラインスクールがオススメです。
オンラインスクールで学習すると、講義も分かりやすく、
サポート体制もしっかりしているので、これからPythonを学ぶ人にもオススメです。
オンラインで無料レッスンを体験することもできるので、
自分にあっているかどうかを確かめることができます。
オススメは以下の3つです。
どのスクールも無料体験が用意されているので、
契約前に自分に最適なスクールを探すことができるでしょう。
✔️オススメのプログラミングスクール ベスト3
- 未経験からIT業界へ転職なら【DMM WEBCAMP】
※ROLANDさんがプロモーターを務める有名スクールです。無料体験の内容も充実していて人気です。 - プログラミングのオンラインスクールCodeCamp
※ここも有名なスクールです。サポート体制がしっかりしているので安心です。 - 3ヶ月間のプログラミングスクール【Tech Boost】
※比較的新しいスクールですが、そのクオリティの高さから伸びてきているスクールです。
プログラミングスクールについては「プログラミングスクールで失敗しないためには【オススメベスト3も紹介】」の記事でも紹介しています。
気になった方はぜひチェックしてみて下さい〜!
コメント