実践的オブジェクト指向分析・設計と実装 (続き その2)
最終日は昨日より難易度の高い例題でほぼ 1日演習でした。対象は自動通話分散システムで、複数のオペレータと外線が登場し、レースコンディションの発生する問題でした。
最初からほとんどアドバイスのない状態で 2人 1組でモデルを考えていきます。途中ランチにもでたので、分析/設計に要した時間は 3-4 時間ほどでしょうか。途中間違った方向にも進みましたが、最終的にはなんとか実装に落ちる設計にたどり着けました。
一見長いようにも感じますが、すっきりした設計にしあがり、ユースケースを満たす上で疑問になる部分がすべて解消されているので、実装に落とすのはけっこう機械的な作業になります。最初に時間はかかりますが、手戻りが少ない分、作業に無駄がないですし、分析/設計に自信ももてます。
分析/設計において重要だったのは、初日からのキーメッセージどおり、
- オブジェクトレベルで考え、
- ユースケース実現の詳細度をあげる
に尽きました。オブジェクトレベルで多重度、関連を具体的にイメージし、無駄のないもたせ方を検討します。そして、ファンクションがコールされる流れをイメージし、ユースケースがちゃんと満たされていくことを確認します。
文章にしてしまうとこれだけなのですが、実際に演習を通じて手と頭を動かしてみると、なかなか思うようにはいかないです。
もっと素振りをして身体に馴染ませる必要がありますね... (^^;
以下は、初日からのメモの抜粋です。
講義の隙間隙間で先生がいろいろな話をしてくださったので、それを含めてのメモです。
- ラーニングツリーの講座
- 多重度
- B -----> A
- 0..* 0..1
- 左: 任意の A のオブジェクト 1つ "を" 参照する B のオブジェクトががいくつあるか
- 右: 任意の B のオブジェクト 1つ "が" 参照する A のオブジェクトがいくつあるか
- オブジェクト指向分析
- RUP
- 仕様と分析/設計
- 仕様は「what」で、分析/設計は「How」
- 正しい/正しくないは、仕様に対しての実装
- 仕様自体に正しい/正しくないはない、あるのは良い/悪いくらい
- 良い/悪いは教育しにくい (フィードバックをかけづらいので)
- ある意味才能、その才能をもつ者の発想をいかに早く実現するか
- 機会損失
- やる/やらない、いずれも決定
- やらないという決断をした場合の機会損失も当然ある
- 日本ではやると決断したときの責任だけ追求、だから皆やらない
- ユースケース分析/設計
- 上流下流の分離
- 工場ではうまくいっていたので、丸投げ文化の助長
- システムではうまくいかない
- 難しい部分を実装までアーキテクト、それ以外を開発者
- Life is beautiful: ソフトウェアの仕様書は料理のレシピに似ている
- 多態性
- オブジェクトはインテリジェンスをもっている
- 結合度を下げるためにメッセージパッシング
- 作家
- 小さい頃にどれだけ本を読んでいたかが重要
- 書くことは重要ではない
- むしろ、早くから書き過ぎると型にはまってしまう
- プログラムも同様、綺麗なソースをたくさん読みましょう
- アーキテクトの立ち位置
- PM でない
- PM とツートップの権限
- リスクを見つけられないひとがリスクの管理をしてもだめ
- 管理部門からの心からのサポートが必要 # ここが日本で弱い
- フィードバックを受け入れる
- PM でない
- フェーズ
- 方向付け (ビジネス観点、アウトライン、機能の選択)
- 推敲 (アーキテクチャの決定、計画/費用の見積り)
- 作成
- 移行
- とくに方向付けでは、分野ごとの専門家が集らないと本質的な問題の解決には至らない
- テスト
- 契約
- 最初に詳細なユースケースまではやはり決まらない
- 実装をはじめてから擦り合わせていくことも重要
- ここで上下関係がはいってきてしまうのが日本
- 米国の場合は、契約で縛ってしまう
- 両者の中間的なところが落とし所か..
- スーパースター
- 理論的な知識、バックグラウンド
- どんな環境でも動かす
- スーパースターを育てる、権限を与える
- 自分で提案して、自分で開発 (アイデアを具現化する能力)