我が家のOOPの研修
プログラミングとOOP をどう教えるかって難しいですね。「個体発生は系統発生を繰り返す」式もいいのですが、心情としては最初から OOP を教えたいところです。でも今の私にはちょっと勝てるイメージがわかないかな。
さて、もともとは Cバリバリなウチのチームが C++ に鞍替えするときにメンバ向けに作った研修がありまして、それがいつの間にやら毎年恒例の講義になってしまいました。今日はちょっとそれをご紹介。ターゲットは 「プログラムはできるけど OOP は解らない人」で、秋以降の新人とか2年目君がターゲットです。
仕事は Python じゃないのですが、研修自体のメインの言語は Python を使ってます。理由は
- 文法が素直
- Pythonのドキュメント(標準でついてくるやつ)が良くできている
- 対話型インタプリタがあると話が早い*1
- 継承を教えないでポリモーフィズムの話を進められる(←あたしの趣味)
- あたしがPythonが好き!(ぉ
ってトコロです。
内容としては、良いプログラムとは何かと抽象化の話から、基本的なOOPLの機能説明、カモノハシ本の 8クイーンをやって、Observer パターンを導出してオシマイというお手軽なものです。
8クイーンは、まず宿題で自力でとかせてから、カモノハシ本な解法の概要を紹介して、CRCカードでロールプレイ。で、持ち帰って再実装させます。CRCカードでロールプレイするのは、オブジェクト間に責務を分散する様子と、アンチクラス指向の施策として、同じクラスなのに複数のオブジェクト間で確かに責務を分担してる様を実感させたいという下心。ついでに、最後のお持ち帰り宿題で、一番端のクイーンをどうするかの解が生徒でばらばらになるので、一つの解として SentinelQueen(NullObject)を置く物を紹介(さり気なくポリモーフィズムを印象づける姑息なあたし)
Observerパターンは、VBとか使ってなにも知らないで作ると出来ちゃう、コントローラが頑張る GUI同期表示更新から(宿題で作らせるとだいたいこんな感じで出してくる)、Open-Closeの原則 に沿うように改良していくと、自然に Observerパターンが登場する・・・って感じで。詳しくはこちらのエントリをば。(→概念としてのインターフェイス - みねこあ)
で、最後にデザインパターンの存在自体を紹介して、もっと勉強したけれは オライリーの HeadFirstデザインパターン で独習してね、と生徒に丸投げして終了です。(手抜きだなぁ)
*1:主に「生徒:○○ってできますか?」「私:やってみー」