Thursday, July 27, 2006

Programming::ObjectOriented - 学部生向け授業

学部生向けの授業、というか輪講なんですが、オブジェクト指向プログラミングを二週連続で木曜日にやることになっていました。先週が一回目で、二回目が今週。今日もちょうど一週間前もやっつけ仕事のごとく、もりもりスライドを作りました。先週はオブジェクト指向プログラミングをやる上で知らないと訳がわからなくなる用語を教えました。そして今週は実践編ということで、プログラムのテクニックのようなものを教えることにしました。

教えるとはいっても、プログラムが組めるイコールプログラムを教えられるとは限りませんから。頭じゃなんとなく分かってるということを、一つ一つ言葉にして説明できる状態にまで自分を持っていかなければなりません。

しかしながら、何を教えたいかというのはある程度決まっていました。Iteratorの概念は教えたかったのです。加えて、関数オブジェクトやらデリゲートらへんの話をしたいなぁと思っていました。さらに言えば、デザインパターンも少し話したいと考えていました。

デザインパターンは私は以前ちらっと見た程度で、何が嬉しいのかも理解できず終いでした。ということで、今回の授業のためにお勉強することになりました。

詰まるところ、いかにしてクラス間の依存度を減らし、再利用生を高め、保守性を高めるか、ということですね。Iteratorはやりたいと思っていたのでIteratorパターンと、関数オブジェクト使ってアルゴリズムの切り替えなどの話はStorategyパターンが近いのでStorategyパターンをちゃんと勉強し、スライドを作り上げました。もう少し時間が在れば、ProxyパターンかAdaptorパターン、Abstract Factoryパターンらへんもやりたかったのですが。

そして課題も作らないといけません。6人中4人が前回の課題の一つであるプログラムをやってくれました。一人、ちんぷんかんぷんなC++のコードを書いていましたが(ちゃんと勉強してねーだろてめぇと思いました)。二人C++、もう二人がPerlで書いてきましたので、今度の課題はC++かPerlに搾ることにしました。

PerlだとC++ほど型の制限が強くないので、課題を出しづらいです。数字も文字列もインスタンスも全てスカラーに入れますので、C++でのテンプレートプログラミングと近いものがあるので、継承やインターフェースのメリットが伝わりにくいです。ということで、Iteratorを実装してもらうことにしました。ダイアモンド演算子でループ毎に値を取り出し、処理を行うっていうものです。<>をoverloadすれば楽勝ですが、見てると4年生の子はoverloadとか使ったことなさそうなので、スキルアップしてもらえるかな、と勝手に期待しています。

C++の課題は、モリモリSTL使ってもらうことにしました。イテレータも使いますし、関数オブジェクトも使うかもしれないという感じです。ちょっと酷かな?とか思いましたけど。

私は私でデザインパターンやUMLの勉強が出来ましたから良かったです。

No comments: