独学プログラマー12章読んでみた:プログラミングパラダイム
第2部に突入です〜!!
お父さんが言うにはここからがやっと本題みたいです笑。
ちょっと難しい言葉がたくさん書いてあって上手にまとめられるかわからないけど頑張って書いていきます〜
プログラミングパラダイム
プログラミングパラダイムとはプログラミングのスタイル・手法のことです。
たくさんある中でも
- 手続き型プログラミング
- 関数型プログラミング
- オブジェクト指向プログラミング
が紹介されていました。
手続き型プログラミングとは今まで書いてきたようなコードを書く手法のことで、順番に処理を書いていって欲しい答えに少しずつ近づいていく手法です。
短いコードを書くのに適していますが状態を全てグローバル変数に持たせているので長いコードを書く場合、グローバル変数の数がどんどん増えてしまって、間違えて変数を上書きしてしまったりという問題が出てきます。
これを解決したものが関数型プログラミングです。関数型プログラミングはグローバルステートを排除したため、関数の引数によってのみ動作が変わるので上記の問題を解決できました。欠点としては、グローバルステートを持たせた方が簡単な問題を扱いずらいと言う点です。
オブジェクト指向プログラミングもグローバルステートを排除し上記の問題を解決したものですが、関数型とは違い関数の引数に状態を渡すのではなくオブジェクトに状態を持たせるものです。
クラスというものが出てきて、クラスとは表現したいオブジェクトを定義・分類したものです。オブジェクト指向プログラミングは複数のクラスで相互に作用するオブジェクトの集合を定義する、とありました。
うーん、なんとなくよくわからない、、と思ったけどこの例のおかげで多分理解できました。
オレンジがたくさんあって、その一つひとつがオブジェクトで、それぞれに共通の属性( 色・重さなど )があり、クラスでその属性を定義して個々のオブジェクトをそれぞれの属性値を与えて作成するというイメージです。
全てのオブジェクトはクラスのインスタンスで、例えばOrangeというクラスから2つのOrangeオブジェクトを作ると、それぞれはOrengeクラスのインスタンスです。
クラスの扱い方
class クラス名:
スイート
という形で定義するらしい。
クラス名は常に大文字で始まるキャラメルケースと呼ばれるやり方で定義するのが慣習みたいです。(Orange, LikeThis, etc)
スイートには主にメソッドと呼ばれる複合文を書きます。メソッドは関数に似ていますが、クラスの内部で定義し、そのクラスから生成したオブジェクトを通してしか呼び出せないという特徴と、少なくともひとつは引数を定義しなければいけないという特徴があります。
あるオブジェクトに属する変数をインスタンス変数と呼び、その定義にself変数というものを使います。
self . [ 変数名 ] = [ 値 ]
でインスタンス変数を定義できます。
インスタンス変数はdef __init__という特殊なメソッド内で定義し、ここに書くことでオブジェクトを作るときに 定義されます。( initはinitialize( 初期化 )の略です )
いっぱい私なりにまとめて書いて見たけど言葉にするの難しい。多分見た方が早い!!
チャレンジ問題2:円の面積を求める
チャレンジ問題のひとつに円の面積を求めるクラスを作ろうというものがあったのでそれを使って説明してみます。
# ( 1 )
円の面積を求めるためにpiを使いたかったのでmathをインポートしmath.piとしてpiを使えるようにします。
# ( 2 )
ここでクラスの定義です。
一つ目のメソッドでインスタンス変数を定義しています。こう書くことで引数で与えられた円の半径をself.rとして使えることができます。
二つ目のareaという名前のメソッドでpiを使って円の面積を計算して、その値を戻り値として返しています。
# ( 3 )
C言語でいうmain関数のような場所で、circleという名前のCircleクラスのオブジェクトを半径を10として生成し( インスタンス化 )、Circleクラスのareaメソッドを表示させることで円の面積を得ることができます。
終わりに
自分の言葉でまとめるってこんなにも難しいか〜と思いました。毎回言ってる気がするけどコードをひたすら書いて慣れるのが一番の近道かもしれない。。受験勉強でも数学とか物理とかひたすら解いて勉強してたからそんな感じでプログラミングも頑張りたい。。
あ、おそらく今年最初で最後になるであろう海外旅行に一緒に留年してる友達と行ってきました〜!!人生初めてのバリ!!最高でした!!来年も行こうって約束するくらい最高でした!!
みんなにも少し気分をおすそ分け。昨日帰ってきたら日本は急に秋で、、、私の季節がやってきた感がすごい。(私は秋生まれなので秋大好き)
現実に戻って日々、勉強筋トレ掃除洗濯その他諸々できるだけ頑張ります〜〜