オブジェクト指向エクササイズしませんか?@HIROCASTERでございませう。
オブジェクト指向エクササイズについては、少し前から興味を持っていたので、資料(書籍)だけ手に入れていました。実際にその資料と照らし合わせて、CDEC2012でおこなわれた発表について、理解を深めたいと思います。
大圖さんは専門学校の教員です。専門学校でこういったオブジェクト指向の教育がおこなわれているとしたら羨ましいです。学生時代にこういった指導が受けたかったです。これはCDEC2012での発表資料のようです。
ThoughtWorksアンソロジー ―アジャイルとオブジェクト指向によるソフトウェアイノベーション ThoughtWorks Inc.、株式会社オージス総研 オブジェクトの広場編集部 |
の5章に記載されているオブジェクト指向エクササイズを中心に語られています。
オブジェクト指向エクササイズ
下記のルールで、1000行程度のソフトウェアを書いてください。
1. 1つのメソッドにつきインデントは1段階までにすること
2. else句を使用しないこと
3. すべてのプリミティブ型と文字列型をラップすること
4. 1行につきドットは1つまでにすること
5. 名前を省略しないこと
6. すべてのエンティティを小さくすること
7. 1つのクラスにつきインスタンス変数は2つまでにすること
8. ファーストクラスコレクションを使用すること
9. Getter、Setter、プロパティを使用しないこと
というルールが適応できない場合は優先すべきルールを選択し、どのルールを適応するのか判断して欲しいとの旨が記載されています。
9つのうち
- 7つがデータのカプセル化
- 1つポリモフィズの適切な利用(else句をつかわない)
- 1つが明確でわかりやすい命名標準
オブジェクト指向エクササイズの目的
エクササイズ全体の目的は、コードレベル、あるいは概念レベルにおいて重複のないコードを作り上げることです。目標とするのは、日々扱っている複雑さを抽象化したシンプルでエレガントな概念を、簡素に表現するコードです。
このエクササイズを実際にやってみると、考えさせられることが数多くあります。非常にハードです。書籍には20時間かかってもルールに従ったソフトウェアをつくってみる体験が大切と書かれています。
「こんなルール無理だよ」って思うものを時間を掛けてでも、実現させることによって、その部分があなたにとって新しい価値なのです。今までになかった新しい体験と知識なのです。
オブジェクト指向を全く知らない手続き型言語しかやったことのな人が、このルールを適応して、時間を掛けて悩み、答えを出していくということは、多くの新しい見方をコードに与えることになります。
その新しい見方を得られる方法の1つとして、オブジェクト指向エクササイズがあるのです。
ルールを設けて体を動かすと常識がくつがえる
手続き型言語をやっている人からする常識が、オブジェクト指向エクササイズをやると全く違うものを常識としていると感じるのではないでしょうか。
私も同じような体験をテスト駆動開発で、体験したことがあります。テスト駆動開発にはテストファーストとものがあり、実際のソフトウェアのコードよりも先にテストコードを書くというものがあります。
これをはじめて聞いたときは「どうやってテストコードを先に書くの?むずかしくない?」と真剣にそう思ったものでした。ですが、実際にテストを先に書く様を見て、自分でおぼつかないながらもテストを先に書いて、ソフトウェアのコードを書いてという、よちよち歩きの様なテスト駆動開発をはじめました。
そして、しばらくすると常識がくつがえりました。「テストコードは先に書ける。いや書くべきだ!」と。
オブジェクト指向が完璧に身につくわけではない
オブジェクト指向エクササイズはオブジェクト指向の常識を身につけるために、作られたルールを守って、あなたの知らないことを気づかせるための1つの方法です。
このルールを守れば、完璧なオブジェクト指向が適応されたソフトウェアができるというわけではありません。オブジェクト指向を元にしたコードを書かざる終えなくなるということです。
より理想の状態にするためには、少なからず、オブジェクト指向を知識で詳しく知る必要があり、デザインパターンの知識も必要になってくるのではないか感じます。コードを書きながら学んでいってもよいでしょう。
プレゼン資料にも登場していますが、下記書籍はアジャイルという言葉がタイトルに入っていますが、アジャイルそのものよりもオブジェクト指向とデザインパターンの内容がガッチリ書かれている書籍です。
アジャイルソフトウェア開発の奥義 第2版 オブジェクト指向開発の神髄と匠の技 ロバート・C・マーチン、瀬谷 啓介 |
原著者は、みんな大好きボブおじさんです。Clean Coderの著者です。このブログをご覧頂いている方はこちらのエントリーでご存じなのではないではないでしょうか?
Robert C. Martin、角征典 |
実際のシステムにも適応できる
今回あげたルールは実際のシステムには適応できないと考えている方も多いと思いますが、書籍を確認すると著者自身が10万行以上のシステムにこのルールを適応して完成させる予定だと書かれています。
実際にエクササイズがやりたくなりますね!Agile渋谷でやろうかな…。
ThoughtWorksアンソロジー ―アジャイルとオブジェクト指向によるソフトウェアイノベーション ThoughtWorks Inc.、株式会社オージス総研 オブジェクトの広場編集部 |
あわせて読みたい
大圖さんはCDEC2011でもコードレビューについての発表をしています。生徒がアジャイル開発で授業を受けていることが読み取れます。ほんと、羨ましい。