Реализовать следующую модель: имеется кофемашина (CoffeeMachine), позволяющая готовить различные варианты кофе.
В соответствующие ёмкости машины (контейнеры) в определённых количествах загружаются ресурсы: зёрна кофе, вода и молоко. Каждый контейнер вмещает ограниченное количество ресурса, имеет ёмкость (capacity). В любой момент времени в контейнер можно загрузить или извлечь из него определённое количество ресурса. Извлечь (метод GetResource) больше, чем осталось -- нельзя. Загрузить (метод LoadResource) больше, чем он может вместить (с учётом имеющихся остатков) -- нельзя. Такие ситуации должны сопровождаться запуском исключений.
Для приготовления кофе можно использовать несколько разных рецептов: эспрессо, фильтрованный, капучино. Каждый рецепт требует определённого количества ресурсов для приготовления, а также имеет название (в терминах исходного кода его удобно отразить перечислением RecipeName. Сопоставление рецепта и набора требуемых ресурсов можно выразить с помощью словаря (см. “Полезные советы” к предыдущей лабораторной работе в части перечислений)).
Перед тем, как машина будет готова к использованию, для неё нужно определить набор доступных рецептов (он определён производителем и не меняется). С помощью вызова метода приготовления кофе BrewCoffee машина будет принимать команду на приготовление указанного рецепта (в качестве параметра передаётся нужный элемент перечисления). Машина, имея в распоряжении ресурсы, будет забирать из контейнеров указанное в соответствующем рецепте количество воды, молока и зёрен. Если ресурсов недостаточно, должно запускаться исключение (см. ”Полезные советы”), говорящее о проблеме.
Поскольку устройство машины скрыто от пользователя, его также можно смоделировать с помощью, условно, двух частей: модуль помола (GrinderUnit) и модуль варки (BrewingUnit). Эти модули являются частью машины и пользователь не взаимодействует с ними напрямую. Т.е. при вызове метода приготовления кофе машина отдаёт нужное количество зёрен модулю помола, который возвращает помол (GroundCoffee), затем передаёт этот помол модулю варки, который и завершает работу по приготовлению напитка (Coffee) (см. “Модель предметной области” из “Полезных советов”).
Таким образом, результатом должно быть решение для Visual Studio, состоящее из следующих частей:
1) Проект с модульными тестами (тип проекта -- “Тестовый проект xUnit”), покрывающими фукнциональность контейнеров, модулей варки и помола, а также кофемашины. См. “Полезные советы”, раздел “Разработка через тестирование (TDD)”. Тестами должны быть покрыты составные части модели, требования к которым приведены выше.
2) Проект с моделью кофемашины (тип проекта -- “Библиотека классов”).
| Гарантия на работу | 1 год |
| Средний балл | 4.54 |
| Стоимость | Назначаете сами |
| Эксперт | Выбираете сами |
| Уникальность работы | от 70% |