どうも!仙台ファクトリーのkouです。
今回は、「ネスカフェバリスタ」のクラス図と格闘した話を綴っていきたいと思います。
クラス図とは何か
クラス図とは、一言で言うとオブジェクト同士の関係性
を示したものです。
どういう風に動くかなどは一切考慮せずに、構造だけを示します。
記述方法
次のように記載します。
-———–
| クラス名 |
-———–
| 属性 |
-——
| 操作 |
-——
見づらくてすみません。
これを1つのクラスとして、各々のクラスを特殊な線形(関連とか集約)で繋いでいきます。
詳しくは、IT戦科さんのクラス図(Class Diagram)が参考になります。
方針
さて、ざっくりクラス図の書き方を押さえた上で作成に入ったわけですが、私は次のような方針を立ててクラス図の作成を進めました。
- ①取り扱い説明書を読んで、どういう表示・機能があるか把握
- ②それらからオブジェクトを抽出
- ③そのオブジェクトの属性、操作を考える
- ④それらのオブジェクト間の関係性を記述する
①表示・機能の抽出
まずは表面的な部分を抽出してみました。
パネル表示
- 通常表示
- コーヒー抽出表示
- コーヒー抽出量調整中表示
- カップ温め表示
- 電源切表示及びオートオフ表示
- メンテナンス表示
- リンス表示
- 給水お知らせ表示
- 抽出準備表示
- 各種エラー表示
点灯パネルは6つしかないのに、パネルの組み合わせや色の変化でこれだけの表示種類がありました。
機能
- コーヒー作成機能
- すすぎ機能
- カップあたため機能 *ブラック系のみ可能
- 湯量調整機能 *ブラック系のみ可能
ボタンの同時押しなどですすぎ機能やカップのあたためができます。 普段は、電源ボタンを押して飲みたいコーヒーのボタンを押すだけで出来上がるわけですが、詳しく見るとこのように多くの機能があります。 カップあたため機能を使っている人(というか知ってる人)はいるんでしょうか。。。
ちなみに私はコーヒー飲まないです。
②オブジェクトの抽出
ここがもっとも苦戦したところです。
どれをどうオブジェクトにすればいいのか非常に悩みました。 さっぱり分からないんです。
最初は、ネスカフェ本体をネスカフェクラスとし、そして実際にコーヒーを作成する内部の部分をコーヒークラスとし、2つのクラスに詰め込もうとしました。
ネスカフェクラスがViewController担当、コーヒークラスがModel担当です。
ちなみにどうして、MVCモデルで考えたかというと
- M : 内部
- V : タッチパネル
- C : ボタン
という風に見立てることができたからです。
上図でチェックしてもらったところ、更に細分化できるという指摘を受けたので、修正したのが下記になります。
③オブジェクトの属性、操作の考察
実際には②と同時並行に進めていましたが、
ここも苦戦しました。
構造を書く前に属性や操作をあちこちに書いていたため、どのクラスが何を管理するのかがぐちゃぐちゃになってしまったからです。(手順通りにやってれば。。。)
だからノートに役割をメモ書きしています。
まずはこちらを作成
しかし、
・NescafeBlackModelが入力を持っているのはおかしい
・Controllerが曖昧
ということで考え直して、修正したのがこちら。
Controllerにボタンを押した際のイベント処理を全てまとめました。
④オブジェクトの関係性の考察
- 各々のコーヒークラスがNescafeMakeModelクラスを継承【汎化】
- MVC同士は、1:1の関連【関連】
課題の所感
オブジェクトの関係性を表すのがクラス図なのに、属性や操作のことを考えすぎて思いの外に時間が取られてしまいました。
MVCモデルで考えられることに気づいたときに、一瞬視界が開けた気はしたのですが、なかなか細分化が進まずに苦戦しました。また、多重度も怪しいですし、ビューなんか。。。
まだフィードバックを受けてないので、受け次第修正点を追記していこうと思います。
今回は以上です。