IT業界料理人「メリ爺」です。
料理インスタンスの生成の実装仕方をオブジェクト指向を用いて解説していきます。
万物、この世界の理をすべてオブジェクトに置き換えてオブジェクトにメッセージを投げるが如く調理をしていきます。
今回の実装はタンドリーチキンのインスタンス化です。
今後シリーズ化していきます!
動画でも解説しています。
よろしければ高評価、チャンネル登録お願いします!
利用クラス
今回利用するクラスはこちらになります。
食材クラス
- 鶏モモ肉
- ヨーグルト
- カレー粉
- 塩
- コショウ
器具クラス
- ジップロック
- オーブン
調理クラス
- 料理人
完成品クラス(これをインスタンス化します)
- タンドリーチキン
料理をインスタンス化するための実装
オーブンがファクトリークラスになる訳なんですが、ただ鶏肉を入れて焼くメソッドを実行してもタンドリーチキンのインスタンス化する事はできません。
と言う訳で正しくタンドリーチキンをインスタンス化する実装方法を説明していきます。
それではさっそくタンドリーチキンをインスタンス化していきましょう!
// 下ごしらえ
まずは下ごしらえです。
鶏モモ肉の味付けコレクションに塩とコショウをAddItem()します。
鶏肉.味付け.AddItem(塩); 鶏肉.味付け.AddItem(コショウ);
ムラがないようしっかりと揉みこんでいきます。
次はジップロックを使って鶏肉をヨーグルトとカレー粉に漬け込んでいきます。
ジップロックインスタンスが無い場合はビニール袋インスタンスでも大丈夫です。
ビニール袋はジップロックのスーパークラスだから代替可能です。
それでは漬け込んでいきます。
まずジップロックの中身コレクションにヨーグルトをAddItemします。同じくカレー粉もAddItemします。最後に鶏肉をAddItemしたらジップロックの【ロック】メソッドをコールします。
ビニール袋の場合は【縛る】メソッドになります
しばらく漬け込むために寝かせます。
引数には18,000,000msを指定して【寝る】メソッドをコールします
(5時間ほど寝かします)
ジップロック.中身.AddItem(ヨーグルト); ジップロック.中身.AddItem(カレー粉); ジップロック.中身.AddItem(鶏肉); ジップロック.Lock(); ジップロック.寝る(18,000,000);
【寝る】メソッドの効果で鶏肉の味付けコレクションに少しずつにカレー味と酸味、甘みなどがAddItemされて、更に肉の柔らかさプロパティがアップするぞ!
// 焼き処理
ジップロックから鶏肉をGetItem(取り出し)したら、オーブンの中身コレクションにAddItemしていきます。全ての肉をAddItemしたら、オーブンの【焼き】メソッドをコール!
引数の温度は250度、時間は25分に設定しました。
foreach (中身 in ジップロック.中身) { if (typeof(鶏肉) == 中身.GetType()){ オーブン.中身.AddItem(中身); } } オーブン.焼き(250,150000);
料理人が鶏肉の焼き状態を見ながら焼き時間を調節していきます。
陥りがちなのが、焼けたか判定をオーブンや鶏肉に実装してしまう事です。
オーブンや鶏肉が勝手に丁度良い焼き加減で調節したら怖いと思いますよね。
鶏肉の色プロパティを調理人が見て判断して焼き時間を調節する。これは料理人の責務ですね。実際に今回は25分じゃ足りなくて35分焼きました。
オーブンに入れても小まめにチェックしていきましょう!
さて焼き時間が完了したらオーブンから焼き上がりイベントが発生します。
オーブンをオープンして中身をGetItemしていきます。
手順通り実装できていれば、オーブンの中身からGetItemできるのは鶏肉インスタンスじゃなくてタンドリーチキンインスタンスです。焼きメソッドの中で鶏肉からタンドリーチキンインスタンスに型変換されています。
// テスト(実食)
それではテストしていきます。
見て!!めっちゃうまそう!!!
早速デバッグしましょう!
うめー!!!!!
うん!バグ無し!実装大成功です!!
やってみて
いやぁ、設計って難しい。実際にやり始めると、この世界って複雑だなぁと実感します。
はてなブックマークのコメントで「ステータスにした方が」とあったんですが、確かに最初はステータスにするか迷ったんですよねぇ。
しかし、鶏肉は自分がタンドリーチキンかどうかわかっていない!という結論になり、人間側から観点でのクラスにしました。鶏肉クラスを継承している筈。
まぁ、モデリングって色々な思想が入ってくるので正解ってなんだかわかりませんが、今後別の料理で今日出てきたクラスを流用するってなったらリファクタリングが必要になるかと思います(笑)
その辺を含めて、大目に見ながらワイワイみんなで議論してくれると嬉しいです!
応援してくれるって人ははてなブックマークとか拡散お願いします。
あと、「自分だったらこうする!」って意見もお待ちしています。
あーあと「単体テスト」と言う名の「味見」・・・してなかった(笑)
それでは次の実装をお楽しみに!!
コメント