飲み物の自動販売機の動きを、プログラムで表現してください。
最終的な自動販売機の全機能は、不確定です。 テスト駆動開発のアプローチを有効活用して、 進化的に設計をどんどん変えていきましょう。
自動販売機のプログラムを書こうとすると、 いろいろな英語表現を知っていると便利です。 まずは英語版のWikipediaを見てみると、 いろいろな言葉を拾えます。
以下にいくつかの例を挙げます。
https://en.wikipedia.org/wiki/Vending_machine
- 自動販売機 = Vending Machine
- 受け取り口 = cup, open compartment
- 商品 = item, product
- 飲み物 = beverage
- (コインを)投入する = insert
- (商品を)排出する = dispense
- 支払い = payment
- お釣り = change
ボタンを押すとコーラが出ます。
100円コインを投入してからボタンを押すとコーラが出ます。 100円コイン以外は投入できません。
押したボタンに応じてコーラかウーロン茶が出ます。
他の飲み物も追加してみましょう。
200円入れるとレッドブルも買えます。
いろいろな値段をつけてみましょう。
入れたお金に応じて、買えるもののボタンが光ります。
100円コインの他に、10円、50円、500円コインも使えます。
ボタンを押して飲み物を買うと、お釣りが出ます。
また、100円でコーラを買ったら、追加で100円入れないとウーロン茶は買えません。
飲み物を買わなくても、返却ボタンを押すと投入したお金が戻ってきます。
ここから先は、以下のA~Dのお題から ランダムに 選んでください。好きなものを選んでも構いません。
飲み物はそれぞれ限られた本数しか格納できません。在庫がなくなった飲み物は売れないようにしてください。
自動販売機に通信モジュールが追加されます。在庫管理の機能で、現在の在庫数を通信モジュール経由でリモートから問い合わせられるようにしてください。
通信機能は、実際に通信してもいいですが、通信モジュール(ライブラリ)が別途あるつもりで実装してもいいです。後者の場合は、テストを書くときに通信モジュールのテストダブル(スタブやモックなど)を使ってください。ライブラリのインターフェース(API)は自由に決めていいです。
在庫が一定数より少なくなったとき、自動でリモートにアラートを出すようにしてください。
150円で挽きたて・淹れたてのコーヒーを提供してください。以下のステップが必要です。
- コーヒー豆を挽く
- お湯を沸かす
- 空のコップを出す
- コーヒーを淹れる
- コップを提供する
- コーヒーのかすを(内部のゴミ箱に)捨て、内部を洗浄する
コーヒー豆は使っていると減ってきます。一定量を切ったら、コーヒーは提供できなくなります。
コーヒーのかすは内部のゴミ箱にたまっていきます。こちらも一定量たまると、コーヒーを提供できなくなります。
豆やかすの量は、コーヒーを作った回数で判定してください。
コーヒーを淹れるステップの途中でなんらかのトラブルが起きたら、コーヒー提供は中止して返金します。
トラブルには以下のような種類があります。
- コーヒー豆が足らない
- 水が出ない
- お湯が沸かない(温度が上がらない)
- コップがなくなった
- コーヒーかすを捨てられない(この場合は次回が提供できない)
クレジットカードやFeliCaに対応してください。現金と違い、商品を選んでからカードを挿入・タッチして決済するという順番になります。
カード読み取り機が自動販売機に追加され、その機器を制御するライブラリを経由して処理を実行することになります。ライブラリをテストダブルで置き換える形でテストを書きましょう。ライブラリのインターフェース(API)は自由に決めていいです。
ビッグデータとかディープラーニングとか。
いつどんな商品がどのくらい売れたのか、ログを記録し、将来の売れ行き予測に活用してください。
購入した人の顔をカメラで撮影し、性別・年齢などを推測して記録してください。