- 挨拶、自己紹介 (1min)
- トークの概要・対象者 (1min)
- 背景 (3min)
- 構造化プログラミング(手続き型プログラミング)とオブジェクト指向の紹介
- クラスまで踏み込む入門書が少ない(Pythonの状況)
- 問題:入門書のコードは変更しにくい (3min)
- Pythonは読みやすいが、手続き型で書いた場合、スクリプト全体を読まなければならない
- 保守のしやすさ→オブジェクト指向
- アプローチ:入門書のコードをオブジェクト指向で書き直す (2min)
- クラスまで踏み込む入門書が少ない中、オブジェクト指向をやってみたい人に例を示す
- 入門書のスクリプト例の紹介 (3min)
- 指定した画像を縮小するコード(構造化プログラミング)を例にする
- python resize.py path/to/target
- ディレクトリの中の各画像を縮小することもできる
- 書き換えて、以下の変更を容易に取り入れたい (2min)
- 縮小後の画像の保存先を指定したい
- サブコマンドで縮小の他にグレースケール化も実施したい
- 指針の紹介 (4min)
- オブジェクト指向について具体的な知見を共有した2冊を書き換えの指針とする
- 『現場で役立つシステム設計の原則』
- 『ThoughtWorksアンソロジー』の「オブジェクト指向エクササイズ」
- 9つのうち、全体的な指針となるエクササイズを紹介(名前を省略しない、など)
- [memo]「ファーストクラスコレクション」などは実際に試したコードを書き換えのところで示す
- 1枚画像を渡して縮小する (MVP) (5min)
- コマンドラインから指定された引数から対象と保存先を導出
- 縮小する処理のクラス(「インスタンス変数は2つまで」)
- 縮小する処理に対象と保存先を与えて呼び出す
- 機能追加1:画像の入ったフォルダを指定できるようにする 5min)
- 指定された引数から(対象, 保存先)の「ファーストクラスコレクション」を作成
- 縮小する処理に各要素を与えて呼び出す
- 実装1:マジックメソッドの上書きでリストのように扱う
- 実装2:UserListを使う
- 機能追加2:保存先をファイルパスまたはディレクトリパスで指定できる (3min)
- (対象, 保存先)のファーストクラスコレクション作成処理を更新
- 機能追加3:サブコマンドでグレースケールにもできる (4min)
- サブコマンドによって処理のクラスの呼び出しを分ける
- 処理のクラスは共通のインターフェース(Pythonでは抽象クラス)
- まとめ (2分)