Introduction
Pythonでは「全てがオブジェクト」というのは広く知られていますが、それを自分でも理解できていませんでした。ということで、この記事ではオブジェクト指向とはどのようなものか、その概要をPythonを使って解説します(と、見栄を張ってはみましたが、もし間違いなどありましたら、どしどしコメントください)。
よくある車の例ではさっぱり理解できない...
昔からある、古典的なオブジェクト指向プログラミングの説明書きを掲載します。
普通車を例にしましょう。普通やの動作原理を知らなくても、運転の仕方さえわかっていれば、走る。普通車の設計書さえ持っていれば、スポーツカーやトラックなどを開発するときにも、ゼロから構築せずに、普通車の設計書を元に組み立てることができる。それがオブジェクト指向プログラミング。
...正直に申し上げると、この一文だけでは自分は理解ができませんでした。
そもそもオブジェクトとは?
今度は上図のように犬を例にしてみましょう。
この犬は「黒い毛」「つぶらな瞳」「~歳で体重10kg」などの状態を持っています。この状態をデータと呼びます。
犬はある規則に従って行動します。それが「4足歩行」「ワンとなく」「歩くと棒に当たる」などの振る舞いです。この振る舞いを処理と呼びます。
この状態(データ)と振る舞い(処理)の2つをまとめたものがオブジェクトと呼ばれるものです。
ではクラスやインスタンスとかいう専門用語は?
クラス
クラスは犬を作るための設計書、生物学でいうところのDNAに相当します。
プロパティ
このDNAには「犬はこのような状態で生まれ成長する」という、データを司る部分が刻み込まれています。これをプロパティと呼びます。
メソッド
さらにこのDNAには「犬はこのような振る舞いをする動物である」という処理を司る部分が刻み込まれています。これをメソッドと呼びます。
インスタンス
プロパティ・メソッドの2つが刻み込まれたDNAという設計書通りに作られた「犬本体」をインスタンスと呼びます。
オブジェクト指向の利点
コードの中身を知らなくても、使い方さえ知っていれば、スクリプトを動かすことができるところが大きな点です。上述の犬の例で言えば、犬のDNA構造を知ってさえいれば、ゴールデン・レトリーバやシェトランド・シープドッグなど、様々な種類の犬を作ることができるのです。
実感がわかないので、具体的なコード例を見てみよう
'''
dog.py
'''
class Dog:
def __init__(self):
print('I am a dog.')
def legs(self):
print('The number of legs is 4.')
def bark(self):
print('BowWow!')
スクリプトの詳細はさておき、一度、このような犬のDNAを作ってしまえば、例えばゴールデン・レトリーバがほしいときには
golden_retriever = Dog()
の一行だけで、「私は犬です」「4本足です」「ワンワン!」の3つのデータ・処理を行うゴールデン・レトリーバが作れます。シェトランド・シープドッグがほしければ
shetland_sheepdog = Dog()
とするだけで、同様のものを得ることができます。
実はオブジェクト指向害悪説も...
ここまでで、オブジェクト指向の良さやその例を掲載してきましたが、デメリットも当然あるようです。
私自身、完全理解にはほど遠い身。ですが、なんとなくの概念を整理したくて、この記事を書きました。