第1章 オブジェクト指向への再入門
オブジェクト指向プログラミングの特徴
- 小さいプログラムを作る時は別にどのような書き方をしても構わない
- 小さいサービスと大きいサービスの違いは?
- 大体、最初作る時は全て小さいだろう。そんな時はあまりオブジェクト指向を意識しすぎないでも良い。 機能追加などを経て大きくなっていく時にリファクタリングしながらオブジェクト指向の設計にして行けば良い。 最初は手続き型で初めて行く形で良いと思う。
- 小さいサービスと大きいサービスの違いは?
クラスとインスタンスで「似て非なるもの」を簡単に作る
よく似ているが少し違うものとは?
商品クラスというものがあったとしたら、お客さんによって商品は異なるので商品A、商品Bと異なるインスタンスができるクラスとインスタンスというのが初学者はイメージがしづらい
そもそも抽象的なものだから「これ」と定義づけるのが難しい。ここではクラスからインスタンスができるくらいに考えておいてまた後のコードで掴んで行くのが良いと思う。
クラスとインスタンスがない場合
- 手続き型プログラミングとなる
サブルーチンとは?
関数。モジュールとは?
単純にいうと部品。クラスとよく似たもの。
でもイメージしにくい。別途、調べる。
異なるクラスを同じように扱う
異なるクラスを同じ種別のクラスとして扱う。
例、じゃんけんの「戦略」をクラス化した場合
- 同じ手しか出さないクラス
- クラス名「同じ手クラス」
- 順番な手にするクラス
- クラス名「順番手クラス」
- ランダムな手にするクラス
- クラス名「ランダム手クラス」
- 上記を統括するじゃんけんの手を出すクラス
- クラス名「手を出すクラス」 があったとする。
それぞれのクラスは異なるが、共通しているのはじゃんけんの「手」というところである。
「手を出すクラス」としてはじゃんけんの「手」を出すことが出来れば良いので、「手」を返してくれる振る舞いを持つクラスであれば、どんなクラスでも問題はない。
ただ、この時点ではなぜ「戦略」をそれぞれ異なるクラスとして持つのか、メリットなどがまだ見えてこない。
この後の章でカプセル化、ポリモーフィズム、継承が出てくるのでそこでまた議論をしていく。
ps.弊社、輪読会を始めました。
昨年末から@fumiya-uehara @yamauchi_kkk と輪読会をしたいねと話をしていたのですが、緊急事態宣言でリモートになり一時中断。
解除後に運用ルールや第一回のテーマ選定などをしながら進めていき、本テーマで参加者を募集したところ4人のメンバーが集まり計7人でスタートを切りました。
輪読会をしたことがないメンバーなので手探りで進めていますが、読み終えると言うことよりも議論に重点を置いて進めてます。
週二回で進める予定ですが、水曜は既にランチ勉強会を行っているので、週の半分はお昼休みに集まって何かしらやってますw
できるなら毎日やりたいところですが、まずは定常的に運用していくことを目標として進めていきます。