独学プログラマー13章読んでみた:オブジェクト指向プログラミング
13章は12章の続きのような感じでした。
オブジェクト指向プログラミングには大切な概念である4大要素というものがあるそうで、、
それぞれどのようなものなのかを説明してくれてました。
カプセル化
カプセル化は2つの概念で成り立っていて、1つ目は「オブジェクトによって複数の変数とメソッドをまとめること」です。2つ目は「データをクラス内に隠蔽して外から見えないようにすること」です。本を読んでいる感じでは2つ目がより重要なのかなと思いました。クラスの外からオブジェクトを利用するコードをclientと呼びます。
一般的にclientから内部のデータを直接操作されることを防ぐものはプライベート変数やプライベートメソッドを使ってコードを書き、clientから直接操作できるようにする時はパブリック変数を使用します。
しかし、pythonにはプライベート変数がありません。そこで、clientからアクセスして欲しくない変数やメソッドには名前の前にアンダースコア( _ )をつけます。これはpythonを書く人の中では暗黙の了解的な感じなのかなと思いました。アンダースコアから名前が始まっているものは、使うべきではないですが、自己責任で直接操作することができます。誤解を恐れてもう一度言いますが、基本的にはアンダースコアから始まっている名前の変数や関数は使うべきではないです!!
自分がコードを書くときに気をつけないとですね。。
抽象化
抽象化とは「対象から小さな特徴を除いて、本質的な特徴だけを集めた状態」にする手順のことです。これはクラスのメソッドを作るときに不必要な詳細を省略し、必要な特徴だけを変数として与えるということなのかな。。多分。。例えば、人間には身長とか性別、年齢、目の色など色々な情報が個人個人であるけれど、作りたいものに応じて必要な変数を選び出すということが抽象化ということ。と私は認識しました。
ポリモーフィズム
これは私には聞き覚えのない言葉でした。ポリモーフィズムとは「同じインターフェースでありながらデータ型に合わせて異なる動作をする機能」とありました。んー、どういうことだ、、と思いましたが
というように、同じprint( )でも上は文字列に対応していて、下は整数に対応しています。データ型に依存せず、同じ動作をするということでした。
ダック・タイピングというプログラミングの作法があるらしく、あるオブジェクトが使いたいデータ型に期待する動作をしてくれるなら、そのオブジェクトがなんのクラスのインスタンス化は気にしないというものです。実行してみてうまくいったらそれでOKという、授業の課題をやっている私みたいな考え方ですね!!この考え方をダック・タイピングというらしいです。名前の由来が可愛い〜と思ったのですが「それがアヒルのように歩き、アヒルのように鳴くのなら、それはアヒルだ」という比喩からきているらしい。数学の証明みたいですね!なんの動物でも同じことが言える気がするけど、そこは気にしないことにしましょう。。
継承
プログラミングの継承は、遺伝的継承に似ていて、クラスのメソッドや変数を受け継ぎます。継承元となるクラスを親クラスと言い、継承先のクラスを子クラスというらしい。日本語のボキャブラリーが私は乏しいのですが、継承というのは受け継ぐということなのかな。継承する時は親クラスの名前を、子クラスの引数として与えてあげれば変数やメソッドなどが引き継がれるらしい。子クラスで親クラスの中にあるメソッド名と同じ名前のメソッドを作ると上書きされて、子クラスのメソッドに置きかわります。これをメソッドオーバーライドというらしいです。
終わりに
チャレンジ問題は次回に回します〜。
今日先輩の中間発表があって聞いてきたんですけど、みんなすごい上手に大人っぽい難しい言葉を使っていて、1歳しか私と変わらない先輩たちなのに、どんな育ち方をしたらナチュラルに難しい感じのかっこいい言葉を使えるんだろうと思いました。。
誰か教えてください。
私、本読むの好きな子だったはずなのにおかしい。