Instantly share code, notes, and snippets.

Embed
What would you like to do?
プログラミングのお題: 自動販売機 (設計進化重視バージョン)

自動販売機のプログラムをTDDで書いてみよう!

飲み物の自動販売機の動きを、プログラムで表現してください。

最終的な自動販売機の全機能は、不確定です。 テスト駆動開発のアプローチを有効活用して、 進化的に設計をどんどん変えていきましょう。

命名のヒント

自動販売機のプログラムを書こうとすると、 いろいろな英語表現を知っていると便利です。 まずは英語版のWikipediaを見てみると、 いろいろな言葉を拾えます。

以下にいくつかの例を挙げます。

https://en.wikipedia.org/wiki/Vending_machine

  • 自動販売機 = Vending Machine
  • 受け取り口 = cup, open compartment
  • 商品 = item, product
  • 飲み物 = beverage
  • (コインを)投入する = insert
  • (商品を)排出する = dispense
  • 支払い = payment
  • お釣り = change

お題1. ボタンを押すとコーラが出る

ボタンを押すとコーラが出ます。

お題2. お金を払う

100円コインを投入してからボタンを押すとコーラが出ます。 100円コイン以外は投入できません。

お題3. ウーロン茶追加

押したボタンに応じてコーラかウーロン茶が出ます。

他の飲み物も追加してみましょう。

お題4. レッドブル

200円入れるとレッドブルも買えます。

いろいろな値段をつけてみましょう。

お題5. ボタンが光る

入れたお金に応じて、買えるもののボタンが光ります。

お題6. 使えるコイン

100円コインの他に、10円、50円、500円コインも使えます。

お題7. お釣り

ボタンを押して飲み物を買うと、お釣りが出ます。

また、100円でコーラを買ったら、追加で100円入れないとウーロン茶は買えません。

お題8. 返却ボタン

飲み物を買わなくても、返却ボタンを押すと投入したお金が戻ってきます。

未確定の仕様

ここから先は、以下のA~Dのお題から ランダムに 選んでください。好きなものを選んでも構いません。

お題A. 在庫管理とリモート監視

お題A-1. 在庫管理

飲み物はそれぞれ限られた本数しか格納できません。在庫がなくなった飲み物は売れないようにしてください。

お題A-2. リモート監視

自動販売機に通信モジュールが追加されます。在庫管理の機能で、現在の在庫数を通信モジュール経由でリモートから問い合わせられるようにしてください。

通信機能は、実際に通信してもいいですが、通信モジュール(ライブラリ)が別途あるつもりで実装してもいいです。後者の場合は、テストを書くときに通信モジュールのテストダブル(スタブやモックなど)を使ってください。ライブラリのインターフェース(API)は自由に決めていいです。

お題A-2. リモートアラート

在庫が一定数より少なくなったとき、自動でリモートにアラートを出すようにしてください。

お題B. 挽きたてコーヒー

お題B-1. 挽きたてコーヒー

150円で挽きたて・淹れたてのコーヒーを提供してください。以下のステップが必要です。

  1. コーヒー豆を挽く
  2. お湯を沸かす
  3. 空のコップを出す
  4. コーヒーを淹れる
  5. コップを提供する
  6. コーヒーのかすを(内部のゴミ箱に)捨て、内部を洗浄する

お題B-2. コーヒー豆、コーヒーのかす

コーヒー豆は使っていると減ってきます。一定量を切ったら、コーヒーは提供できなくなります。

コーヒーのかすは内部のゴミ箱にたまっていきます。こちらも一定量たまると、コーヒーを提供できなくなります。

豆やかすの量は、コーヒーを作った回数で判定してください。

お題B-3. トラブル

コーヒーを淹れるステップの途中でなんらかのトラブルが起きたら、コーヒー提供は中止して返金します。

トラブルには以下のような種類があります。

  • コーヒー豆が足らない
  • 水が出ない
  • お湯が沸かない(温度が上がらない)
  • コップがなくなった
  • コーヒーかすを捨てられない(この場合は次回が提供できない)

お題C. カード対応

クレジットカードやFeliCaに対応してください。現金と違い、商品を選んでからカードを挿入・タッチして決済するという順番になります。

カード読み取り機が自動販売機に追加され、その機器を制御するライブラリを経由して処理を実行することになります。ライブラリをテストダブルで置き換える形でテストを書きましょう。ライブラリのインターフェース(API)は自由に決めていいです。

お題D. スマート自販機

ビッグデータとかディープラーニングとか。

お題D-1. 売れ行きデータ分析と予測

いつどんな商品がどのくらい売れたのか、ログを記録し、将来の売れ行き予測に活用してください。

お題D-2. 購入者データ取得

購入した人の顔をカメラで撮影し、性別・年齢などを推測して記録してください。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment