【オブジェクト指向クッキング】サッポロ一番塩ラーメン「あんかけ焼きそば」の実装

料理
スポンサーリンク

どうも、IT料理人「メリ爺」です。

今日はサッポロ一番塩ラーメンを「あんかけ焼きそば」にアレンジしてインスタンス化する実装をしていきます。

野菜も沢山摂れるので体にも良いし、何よりあんかけで体が温まるのでオススメです。

ちょーっと一手間かかりますが、めちゃくちゃ美味しいので、是非みなさんも実装してみてください。

動画での解説もしています。よろしければ高評価、チャンネル登録お願いします!

スポンサーリンク

準備するクラス

今回の実装に必要なクラスは次の通りです。

  • サッポロ一番塩ラーメン
  • 一人鍋用カット野菜
  • 片栗粉
  • フライパン
  • 調理人

そして、材料をインスタンス化したのがこちらです。

実装開始

それでは早速調理人の振る舞いを実装していきます。

ざっくりと説明するとサッポロ一番塩ラーメンを茹でる、野菜を茹でる、塩ラーメンのスープであんかけを作る、最後に野菜あんかけを麺にかけていきます。

(1)やきそばをインスタンス化する

まず最初にやきそばをインスタンス化していきます。

フライパンをコンロにAddItemしておきコンロの着火メソッドを呼び出します。

これでフライパンが加熱されます。

続いてフライパンに対して水をAddItemしていきます。

コンロはフライパンだけを加熱しています。その時フライパンの熱がフライパン内のItemに伝わっていく処理がコンロとフライパンには既に実装されています。

フライパンの水は加熱されて温度プロパティが100度を超えた瞬間にステータスが液体から気体に変化します。気体に状態変化した水インスタンスは液体に比べてメモリが1,700倍に膨れ上がります。

フライパンが保持できるメモリ容量を超えた場合、自動的にフライパンからDeleteItemされます。解放イベントでどうするか処理を実装しておけば水インスタンスを回収して液体にステータスを戻すことも可能ですが、今回イベントは実装しません。

するとどうなるのでしょう?

フライパンから参照が切れるのため、どこからも参照されなくなった水蒸気はガベージコレクション(空気)に回収(吸収)されていきます。しかし稀に吹きこぼれてメモリーリークします。注意が必要です。

加圧鍋はこのメモリ容量が拡張して中のメモリを圧迫した状態にしてます。メモリが圧迫した場合、水は気体にならない様になっています。しかし温度は上がっていくので液体状態のまま高温で調理可能な訳です。今後、圧力鍋クラスを使った実装もしたいですね。

さて、そうこうしている間に水のステータスが液体から気体に変化してきました。

ここでサッポロ一番塩ラーメンから中身をGetItemして、麺のみをフライパン内の水にAddItemします。

水自体も細かく見ていくと一つのインスタンスではなく複数のインスタンスの集合体で、その一つずつが少しずつ気体に状態変化しています。

加熱処理は熱インスタンスを内容物を伝達する事によって熱処理がされていきます。まさしく熱インスタンスがコンロからフライパン、フライパンから水、水から麺と移動しているんですね。Visitorパターンに近い実装です。

さて、ここで調理人のGripHandメソッドを呼出し、菜箸を持たせた上で麺をほぐす処理を行っていきます。このGripHandメソッドを呼ぶのを忘れると素手で麺をほぐす事になるので非常に危険です。

麺が良い感じでほぐれていきたら、水が全てガベージコレクションに回収されるのを待ちます。

水が全てガベージコレクションに回収されたら(蒸発したら)、ごま油をAddItemしていきます。

現在の状態はどうなっているのかと言うと、これまでフライパン→水→麺の状態だったのが、フライパン→ごま油→麺の階層に変化しています。水クラスは内容物に熱インスタンスを渡す場合に自身の温度をベースにした熱インスタンスを作成し受け渡すので、基本的には水インスタンスから100度以上の熱を渡される事はありません(加圧状態を除く)。

ごま油クラスはフライパンから受け渡された熱インスタンスをそのまま内容物のオブジェクトに引き渡すため、ごま油を経由しても100度以上の熱インスタンスが麺に渡ります。これが「焼く」です。

麺に焼き目がついたら麺が完成です。

一旦フライパンをコンロからGetItemした後にフライパンから麺をGetItemして、皿にAddItemします。この順番にやらないと大変な事になります。

(2)あんかけをインスタンス化する

続いてあんかけの実装です。

再びコンロの上にフライパンをAddItemしてごま油をAddItemして、カット野菜を袋から全てGetItemして、フライパンにAddItemしていきます。

さぁ、ここで再び疑問が出てきます。「カット野菜をどう表現するのか?」です。

「カットされている」とステータスで表現するのか、それとも複数の野菜インスタンスの集合で表現すべきなのか?

私はこう考えます。

ステータスだとしたら、カットされた野菜が複数存在することをどの様に表現すべきでしょう?物理的に複数存在するものを個数だけで表現すると辻褄があわなくなります。モデリングは投影する世界と近似にする事が大原則です。ここを踏み外すとあっという間に破綻します。

そう考えるとカットされている野菜は個々がインスタンス化されていると考えるのが妥当と判断しました。

今回はカット野菜を購入してきたのですが、では自分で野菜を切る場合はどうなるのでしょうか?

野菜自体が切られる事を実行できない訳です。切る処理は別に存在します。切るクラスがあるのか、はたまた何かのメソッドになるのか?

今回はそこを追求しませんが、野菜自体は切られる時の振る舞いが実装されていると考えて、野菜が切られる瞬間に自己のクローンを生成する実装がもっとも妥当なのかなぁと思います。

皆さんはどう考えますか?

話を本題に戻します。

再び調理人にGripHandメソッドを呼出し、菜箸を持たせてからフライパンの中身をかきまぜます。

野菜が少しだけしんなりしたらフライパンに水をAddItemします。

野菜が柔らかくなるまで煮込んでいきます。

煮立った水が少しガベージに回収されるくらいまで煮ます。

液体ステータスの水の量が減ってきたら最初にサッポロ一番塩ラーメンからGetItemしたスープの素を、スープの小袋からGetItemして水へAddItemします。ここもスープの小袋からGetItemし忘れてフライパンにAddItemする人もいるので注意が必要です。

再び調理人のGripHandメソッドを呼出し、菜箸を持たせてからフライパンの中身をかきまぜます。

スープがよく混ざったらとろみを付けていきます。

片栗粉インスタンスの登場です。

片栗粉インスタンスを水にAddItemした状態で熱インスタンスを受け渡されると、水のとろみプロパティを上げる効果があります。

しっかりととろみが着いたら餡の完成です。

フライパンからGetItemして麺が入っている皿にAddItemして実装完了です!!

テスト

テストの実施です。

テストに必要なのは・・・アレです。

はい出ました!金色のアレです。

今日はシークワーサーで行きたいと思います。

はいまずは麺リフトから。

うーん、イイ感じですね。

実食

んまい!

味ベースはサッポロ一番塩ラーメンのスープ。

具材に練り物があっても良いかも。

はい!ここで仕様変更です。

本当の開発なら仕様変更は揉めるポイントですが、オブジェクト指向クッキングで大歓迎。

カラシ?お酢?

違いますラー油をAddItemしちゃいます。

うん!旨い。辛味がんまい。

と言う訳でデバッグ終了。

実装完了です。

合格です。

振り返り

とろみプロパティはもう少し上げた方が良いかもですが、基本的には問題ありませんね。

ちょっとひと手間で大きくアレンジ可能なサッポロ一番塩ラーメンで作る「あんかけ焼きそば」

皆さんもぜひ実装してみてくださいね!

それでは次の実装をお楽しみに!

開発プロジェクトの裏メニュー

摂り忘れましたが、あんかけがすこし余ったので翌日、卵かけご飯にAddItemしたらメチャクチャうまかったのでご報告しておきます。

よろしければ拡散お願いします!

最後まで記事を読んでいただき本当にありがとうございます。

本記事が「役に立った」「楽しかった」と思っていただけたらTwitterなどで他の方へ記事を紹介、拡散していただけると嬉しいです。

下にある「シェアする」のボタンを利用していただくと簡単です。

あなたの拡散がブログ継続の原動力になっています。

ブログランキング・にほんブログ村へ
にほんブログ村

料理
スポンサーリンク
シェアする
メリ爺をフォローする
空と僕の記憶

コメント