初学者目線の Python オブジェクト指向

目次

概要

本投稿は, ## ITRC Advent Calendar 2019の15日目の記事です.

はじめに

最近私はPythonのオブジェクト指向プログラミング(以下, OOP)について勉強しました.
実は私はOOPで一度挫折しており, 半年ほどプログラミングをサボっていました.
「そろそろ何か作りたいな」と思い, もう一度勉強し直したところ, まあまあ理解し始めたので初心を忘れぬうちにまとめようと思います.

この記事ではOOPの詳細については説明しません.
まだ概要を理解していない初学者がどういうことを考えているのかについてまとめます.
私が誰かにOOPを教えたり説明することになったときに役立てるために書いています.

読む前の注意

この記事では何度か「抽象化」という言葉が出てきます. しかし私(筆者)は抽象化という言葉の理解が十分でないので, 間違った意味で使っているかもしれません. この記事では階層構造を作り, 下の層を意識させないという意味で使います. 理解でき次第この記事に追記予定です.

初学者の定義

私の体験を元に書くので, 初学者はOOPで挫折したときの私レベルとします. よってここでは「ランダムな数値を表示できる」のが初学者の定義とします.

なぜ挫折したのか

  1. 新しい用語がたくさん出てきたから.
  2. オブジェクト指向の勉強方法についての記事がたくさんあって, どうすればいいのかわからなかったから.
  3. コードは基本的に1つのファイルで書くものだと思っていたから.

1.については自分の努力不足もあります.

2.について. まず, 比喩を多用されます. 次にオブジェクト指向は理解できるものではないとも言われます. 人によって考え方は違うので教え方が違うのは当たり前かもしれませんが, どう勉強するか方針が建てられず混乱しました.

3.について. 私はランダムな数値を出すコード(せいぜい20 ~ 30行くらい)しか書いたことがなかったので, オブジェクト指向のメリットを説明されてもすごく共感することはできませんでした.

なぜ期間を空けたらわかりはじめたのか

プログラミングをやらない間にコンピュータの設計について勉強していたからです. 特に「抽象化」について勉強していたのが役に立ちました.

他には, 情報を調べることに慣れ始めたからです. 経験から, 間違った記事や不十分な記事を掲載することが多いサイト(不幸なことに検索上位に出てくる)を避けるようになりました.

これは今(OOPを理解してから)思うことなのですが, 作りたいものがあって, それを作るためにOOPを知ろうとしていたのもあると思います. 実際にどういうコードを書くのか想像しながら調べていたのが理解の手助けになりました.

挫折した原因に対して

  1. 新しい用語がたくさん出てきたから.

再び勉強し始めたときに面白くなってきてその勢いでいろいろ調べたので, 何か対策をしたわけではありません. “ノリ”でやりました.

  1. オブジェクト指向の勉強方法についての記事がたくさんあって, どうすればいいのかわからなかったから.

Pythonの公式ドキュメントを軸にやったのが解決につながりました. 調べながらわかったのは,「オブジェクト指向」と検索するのでなく, 例えば, 「スコープ」,「モジュール」,「データ型」といったように調べるとわかりやすい記事が出てくるということです(ますます一度目の努力不足が浮き彫りに…). OOPのすべてを短く簡潔な記事で理解してもらうのは難しいです.

  1. コードは基本的に1つのファイルで書くものだと思っていたから.

これは, 複雑で大きなものを作る際に「抽象化」を行うことを知ったので解決されました. スクリプトとモジュールといった用語を知っていれば少しは勉強し続けたかもしれないと思います.

理解してから思うこと

ある程度概要がわかってから思うのは, 確かに比喩を用いると説明しやすいということです. 特にインスタンスの説明に向いています.

また, 難しいと言われる理由は, 恐らくその人がオブジェクト指向の範囲をプロジェクトの設計まで含んでいるからだと思います.
何をメソッドにしてどれをクラスにまとめるかを実際に業務でやっている人からすると, オブジェクト指向が簡単だとは言えないのではないのでしょうか(筆者に実務経験は無い).

念の為補足しておくと, 比喩を用いたサイトすべてが良いとは言えません. 何に例えるかに熱心になっている記事や, ほとんどが比喩で終わる, 技術力以前に国語力を疑う記事や, 適切でない比喩で説明しているサイトは絶対に悪いです.

まとめ

文句だけ言って終わるのはどうなんだと言われそうなのですが, 知識不足で中途半端なことを書くのは良くないと思ったのでやめておきます.

ここまで読んでくれたみなさんありがとうございました.
他の人の記事は楽しいことを書いているのでぜひ読んでください.