仙台ファクトリーのkish(@31_kish)です。
ビデオカメラのクラス図と聞いたとき、機能が多く、膨大なクラスの数になるだろうと思った。
IDEなどでクラスを作った場合、処理の流れがテストできるが
図だけで作ると処理の流れが見えないので、メソッドやプロパティを考えるのが難しい。
クラス図を元にプログラミングを行うと勘違いをしていたが
クラス図とはクラス間の関係を表現するものであり、細かいメソッドの処理などは考慮しなくても良いらしい。
クラス図を作るまでの過程を以下にまとめた。
機能を洗い出す
実際にビデオカメラを触りながら大まかに機能を洗い出した。
あれ、意外と少ない。
- 各種ボタンの動き
- 液晶画面に表示される内容
- 動画・静止画の撮影
- 動画・静止画のプレビュー
機能をMVCで考える
次に行ったことは、MVCで表現すること。
コントローラー
- 電源の管理(入・切)
- ACアダプタの状態を監視
- 録画状態のビューを呼ぶ
- ビューの入力を監視
- 録画ボタンの状態を監視(開始・停止)
- ズームボタンの状態を監視(拡大・縮小)
- 撮影モードの状態を監視(動画・静止画)
- 画面の状態を監視、状態によるビューを呼ぶ(録画・再生・メニュー)
- 端子の状態を監視(接続済み・未接続)
- モデルに状態を通知
ビュー
- 時計を表示
- 録画時間を表示
- バッテリーの表示
- モードを表示
- メニューを表示
- ズームボタンの表示
- 傾きを表示
モデル
- コントローラーから通知を受け取る
- 傾きを補正
- 電源を切る
- 電源を入れる
- ACアダプタの状態を受け取り、バッテリ、外部電源を変更
- 録画を開始
- 録画を停止
- 録画した動画を保存する
- ズームボタンの状態を受け取り、レンズの状態を変更(拡大・縮小)
- 撮影モードの状態を受け取り、撮影モードの変更(動画・静止画)
- 端子の状態を受け取り、機器への接続を開始・停止
クラス図をつくった
はじめはViewがModelのインスタンスを持っていて複雑になっていたが
ご指摘をいただき、シンプルにまとめることができた。