2008年12月14日日曜日

Head Firstオブジェクト指向分析設計

「Head Firstオブジェクト指向分析設計」を読みました。一見、かなりくだけた感じの本ですが、見かけほど簡単に読み終える本ではありません。内容は極めてまじめですし、途中にちりばめられた設問に答えるにはそれなりに時間も必要です。
 結論から言うと、良い本であることに間違いはありません。オブジェクト指向分析設計の入門者・中級者であれば必ず得るところがありますので、一読をお勧めします。但し、すべての疑問に答えてくれているわけではないので、難所もいくつかあります。以下にポイントをまとめておきます。
 第1章はギターショップの在庫システムをテーマに小さなクラス設計の問題から入ります。とりあえず実行できるものを設計した後、オブジェクト指向の基本原則を適用し、より保守と再利用が可能な設計に変更します。オブジェクト指向の基本原則ですが、実は、第8章にまとめてでてきます。第1章では原則についてあまり詳しく述べないので、この時点ではあまりピンときませんが、第8章を読んだ後に第1章に戻ると、設問が意図的であることが良くわかります。
 第2章、第3章ですが、ギターショップから離れて犬用ドアシステムについて考えます。システムが実行すべき要件について収集を行います。ユースケースを記述し要件と照らし合わせて漏れがないかをチェックします。第3章では要件が変更されす。オブジェクト指向設計の原則(第8章)に従い、第2章の設計をより良いものへと改善していきます。
 第4章も引き続き犬用ドアシステムについて考えますが、この章の話題の中心はテキスト分析です。非凡な才能や長年の経験に頼ることなく、クラスやメソッドの候補を探す手法としてテキスト分析を取り上げます。
 第5章ですが、再びギターショップの話題へと戻ります。在庫システムを拡張し、バンジョーやドブローなど、その他の楽器を扱えるようにします。楽器を表す抽象クラスとそのサブクラスを構成することで、設計の検討を進めます。しかし、サブクラスは抽象クラスと振る舞いが同じであり、プロパティが増える点だけが異なる、という点に気づき、設計を大胆に見直します。最終的には、サブクラス化をやめ、プロパティを格納するコレクションクラスを用います。本当にこの設計が正しいかどうかについては深く説明はされてませんので注意が必要です(1つ目の難所です)。
 第6章、これまでよりも大きな問題としてゲーム用フレームワークにとりかかります(2つ目の難所です)。複数の要件を束ねる、より漠然とした要件として、フィーチャという言葉が登場します。実際、本の説明でもフィーチャと要件の違いは曖昧だとしています。また、システムの全体像を把握するために、ユースケース図が登場します。そして、第2章でユースケースと要件とを照らし合わせたように、ユースケース図とフィーチャとを照らし合わせ、フィーチャに対応するユースケース図が記述されているかを確認します。こうして全体像を把握するわけですが、このような手法がどれぐらい有効かはなかなか実感できないでしょう。そして、最後に把握した全体像からざっくりとしたモジュール分割を行います。
 第7章ですが、引き続きゲーム用フレームワークを扱います。第6章で分割したモジュールをクラス設計にブレークダウンしていくわけですが、リスクの高い部分からブレークダウンを行っていきます(3つ目の難所です)。
 第8章は設計の原則です。ここでやっとオブジェクト指向設計の原則が要約されます。第8章を読んだ時点で、これまで本の中でどのように原則が適用されてきたか、振り返るのが良いと思います。
 第9章はイテレーションとテストということで、フィーチャ駆動開発とユースケース駆動開発について取り上げています。
 第10章は総まとめとしてオブジェクト指向開発のライフサイクルについて振り返り、仕上げとしてObjectvilleの地下鉄問題に取り組みます。
 以上、ざっとポイントだけ書きました。

ところで、下記のURLには本書を使ったレクチャのシラバスがあるようです。ご参考まで。
http://www.cs.colorado.edu/~kena/classes/6448/f08/lectures/

2008年12月1日月曜日

Puppyインストール、その後

Puppyをインストール後、DHCPに少し不便な部分があったので、手動で設定変更しました。バグがあるのか、ネットワーク接続する場合、毎回「接続」アイコンでDHCP IPアドレス取得を行う必要があります。うーむ。これは面倒。よくよくスクリプトを解析してみると、どうも/etc/rc.d/rc.networkに「接続」アイコンによる設定が反映されていない模様。というわけで/etc/rc.d/rc.networkの最後に

if [ -s /etc/eth0mode ]; then
. /etc/eth0mode
fi

を追加しました。これで起動すれば自動的にDHCP IPアドレス取得が行われネットワーク接続が楽々。