Полагаю, вы уже видели эту ссылку уже.
Не думайте сначала о коде (классах и т. Д.). Подумайте о вариантах использования и функциональных требованиях. Какие функции должен предоставлять торговый автомат? Как пользователи будут взаимодействовать с ним? Как насчет сопровождающих? При этом старайтесь не путать детали реализации с потребностями высокого уровня.
Затем, в зависимости от типа проекта class , подумайте о нефункциональных требованиях. Что является самым важным атрибутом: скорость, надежность, простота обслуживания, адаптируемость к новым ситуациям, безопасность, ...? Есть и другие возможности. Это не бинарные ответы, да / нет, думайте больше с точки зрения диапазонов и минимальных стандартов против оптимальных целей. Обратите внимание, что «оптимальный» зависит от точки зрения заинтересованной стороны. Простота использования и безопасность часто находятся в конфликте, поэтому вы должны выяснить, что важнее.
После этого вы можете вернуться к своим вариантам использования и посмотреть, как на них влияют ваши нефункциональные требования. Это где переговоры происходят с вашим клиентом, который в данном случае, вероятно, вы. Нужно ли жертвовать функциями, чтобы достичь какой-то другой цели? Каков риск и вознаграждение для каждой функции? Легко реализовать функции, которые обеспечивают высокую ценность, это здорово. Трудно реализовать (из-за ограничений) функции, которые только добавляют небольшую ценность, должны быть четко расставлены по приоритетам в последнюю очередь. Две другие комбинации требуют тщательного обдумывания.
Тогда вы можете приступить к проектированию машины.
Существует множество различных диаграмм, которые вы можете использовать, чтобы помочь вам визуализировать проблему или объяснить предложенное решение другим.