40代塾講師の「ほぼ独学プログラミング日誌。」23

記事
学び
『プログラミングで切り開く、新しい未来♪』

こんにちは塾講師のdainarです!
昨日は休憩時間中にPCがバグってしまいドキドキバクバクワナワナ→
声が上ずったままでの授業(反省)で生徒も気づいていたに違いない・・・💧
なのでブログ更新が本日になっておりますm(_ _)m

さて、曲がりなりにも基本書を片手に”独学”にて頑張ってきたプログラミング言語Pythonの学習。ですが、、、ここにきて”難関”の登場です!

目次 
1. オブジェクト指向
2. クラスは設計図

オブジェクト指向


ここまでの学習にはいろいろな英単語(命令語)が登場しました!
「print」「if」「input」「while」など・・・
単語から何となくですが”その命令の意味”が(少なくとも)理解できたのではないでしょうか?

ただ今回登場の『オブジェクト指向』
『オブジェクト』(物体)+『指向』([名](スル)ある方向・目的に向かうこと。また、方向や目的を指示してその方に向かわせること。志向。コトバンクより引用)

???

物体を目指して突撃すること!?

さすがに詰みそうになったので第二の基本書としている『実践力を身につける Pythonの教科書』(著)クジラ飛行机 マイナビ を手に取ってみると分かりやすい解説がされていました。

”オブジェクト指向というのは、人間の体に例えることができます。人間の体には、手や足や目や耳といった器官があります。それらの器官には、それぞれ個別の機能が備わっています。手は物を掴むことができますし、目は物を見ることができます。それらの器官が持つ機能は、別々のものですが、どれも人間が生きていくために必要なものです。果物を食べたい時には、目で果物がどこにあるのかを見て、手で果物を掴み、口の中へと放り込みます。オブジェクト指向というのも、それと同じで、1つのオブジェクトの中に、いろいろな機能を持つデータやメソッド(関数)があります。それぞれのメソッドは異なる機能を持っていますが、それらを組み合わせて使うことで、さまざまな役立つ処理を行うことができます。”

なるほど・・・
いろいろな機能をオブジェクトに持たせ、機能を組みあわあせて動作をさせるということかな?

さらに続きます。

”先ほどの例えで、人が食物を食べるという動作をプログラムで表してみましょう。人間というオブジェクトに、食物を食べるという動作をさせてみます。そのためには、どんなメソッドが必要でしょうか。
「周りを見る」「そこに果物があるかどうか判定する」「食物を掴む」「口を開ける」「口に入れる」「口を動かす」などなど、さまざまなメソッドが必要になるでしょう。”

人の例えは分かりやすい!
人という「物体」にいろんな動作をさせる命令(メソッド)があるということなんだろう。
class1.png

ちなみに「クラス(class)」はオブジェクトのひな型となるものだそうです。
さらに自作関数を意味する「def」の記述が見てとれるようにクラスには関数や変数を定義することができます。
クラス内で定義した関数のことを「メソッド(method)」と呼び、その第1引数には必ず「self」という引数が必要になります。(selfに関しては再登場します)

クラスは設計図


クラスとはオブジェクトのひな型でしたね。
例のプログラムでは「人」Humanというオブジェクトにさせる処理「メソッド(method)」を書いていきました。
ただし、クラスというのはあくまで”設計図”であり、これを元にオブジェクトを生成する必要があります。

オブジェクトの生成は【オブジェクト名 = クラス名 ( ) 】のように記述します。

# クラスHumanを元にオブジェクトを生成する
hito = Human ( ) ——- hitoというオブジェクトの生成

このhitoというオブジェクトは「周りを見る」search,「物を掴む」take,「口を開ける」open_mouth,「食物を食べる」eatという処理ができます。

hito. take ( ” Banana ” )
hito. eat ( )

という記述からどのような動作がなされるか想像できるでしょうか?

”ちなみに、オブジェクト指向では、クラスを元にして生成したオブジェクトのことを「インスタンス」と言います。
クラスとインスタンスの関係を表すのに良い例が「たいやき」です。たいやきは、その鋳型の通りの模様で作られます。鋳型がクラスに当たります。そして、鋳型があれば、全く同じ形のたいやきをいくつも作ることができます。つまり、1つクラスを定義すれば、全く同じインスタンスをいくつも生成することができるというわけです。”
『実践力を身につける Pythonの教科書』(著)クジラ飛行机 マイナビ

うん!たいやきの例は分かりやすいですね♪
今回は基礎となる概念の部分で書籍からの引用が多くなってしまいましたが、私の拙い解説よりはだいぶ理解が進んだのではないでしょうか(私になりに噛んで含めて解説しようとは、したのですよ💦)

改めてプログラムの設計というのはよく考えられているし、それを何とか噛み砕き、理解しよう、伝えようと格闘することで視界が開けてくる・・・
今、そういう感覚に浸っています。

※ 引数「self」に関してはぜひググってみてください!その中であなた自身にしっくりとくる解説に当たられるほうが良いかと思います。け、決して逃げているわけではありませんよ💧それくらい素人には分かりづらい概念でもあるのです・・・

今回は、ほぼ文字だけの記事になってしまいました。
「指向」の「思考」で疲れましたね・・・お後がよろしいようで。

では、また次回!(=´∀`)/
サービス数40万件のスキルマーケット、あなたにぴったりのサービスを探す