Как подходить к решению таких задач, как «дизайн торгового автомата» - PullRequest
14 голосов
/ 14 июля 2009

Я хотел знать, какие шаги я должен выполнить для решения таких проблем, как проектирование торгового автомата и разработка ряда проектных документов (таких как сценарий использования, диаграмма последовательности, диаграмма класса). Есть ли источник / ссылка, которую я могу прочитать, где говорится о том, как идти шаг за шагом.

Спасибо.

Ответы [ 9 ]

18 голосов
/ 14 июля 2009

Я не уверен, есть ли какой-либо общепринятый набор шагов, но самое простое, что можно сделать, это просто разбить каждый шаг так далеко, как только можешь.

  1. Начните с основных действий (вкладывая деньги, нажимая выбор, получая напиток)
  2. Продолжайте разбивать каждое действие на более мелкие действия и ответы, пока оно не станет почти тривиальным. Таким образом, чтобы положить деньги, вы должны знать, сколько было вложено, общее количество, которое было внесено, отображаемую сумму и т. Д.
  3. Подумайте о любых сценариях, в которых ваши действия больше не будут действительны (вы нажимаете на выделение, а машина пуста), и о том, как вы справитесь с этим. (вернуть свои деньги, предложить другой выбор и т. д.)
  4. Назначьте действия и ответы для участников и системы. Кто вкладывает деньги, кто отслеживает текущий итог?

Тогда вы можете основывать свои диаграммы последовательностей и диаграммы классов на том, что вы придумали.

5 голосов
/ 14 июля 2009

Ну, торговый автомат - это, по сути, конечный автомат .

Я бы решил, какими будут действительные входные данные (монеты и счета?) И какими будут выходные данные.

Каковы вероятные результаты от пользователя, подходящего к машине. Какие проблемы могут возникнуть? (слишком много денег, слишком мало денег) Как бы они поступили? (выдача сдачи, выдача возврата)

Наконец, запишите вещи, которые вам понадобятся для обработки сценариев использования. Ваши существительные, вероятно, классы. Вероятно, ваши глаголы являются методами, принадлежащими этим классам.

3 голосов
/ 14 июля 2009

В общем, подумайте о том, какие объекты задействованы в торговом автомате:

  • VendingMachine - возможно, абстрактный класс
  • DrinkMachine, SnackMachine и расширение классов VendingMachine
  • VendingProduct - абстрактный класс?
  • Drink, другие классы расширяются VendingProduct
  • Coke, расширение других классов Drink
  • & c, & c.

Но я уверен, что вы можете понять это довольно легко. Гайки и болты машины будут проходить в каком-то служебном классе с методами приема банкнот и монет, расчета изменений и т. Д.

Дополнительное чтение:

  • Здесь - хорошая статья о начале разработки ООП Аллена Холуба.
  • Здесь - начало дизайна кофейного автомата с использованием ООП.
2 голосов
/ 14 июля 2009

Полагаю, вы уже видели эту ссылку уже.

Не думайте сначала о коде (классах и т. Д.). Подумайте о вариантах использования и функциональных требованиях. Какие функции должен предоставлять торговый автомат? Как пользователи будут взаимодействовать с ним? Как насчет сопровождающих? При этом старайтесь не путать детали реализации с потребностями высокого уровня.

Затем, в зависимости от типа проекта class , подумайте о нефункциональных требованиях. Что является самым важным атрибутом: скорость, надежность, простота обслуживания, адаптируемость к новым ситуациям, безопасность, ...? Есть и другие возможности. Это не бинарные ответы, да / нет, думайте больше с точки зрения диапазонов и минимальных стандартов против оптимальных целей. Обратите внимание, что «оптимальный» зависит от точки зрения заинтересованной стороны. Простота использования и безопасность часто находятся в конфликте, поэтому вы должны выяснить, что важнее.

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

Тогда вы можете приступить к проектированию машины.

Существует множество различных диаграмм, которые вы можете использовать, чтобы помочь вам визуализировать проблему или объяснить предложенное решение другим.

1 голос
/ 16 апреля 2017

В некоторых случаях (например, в торговых автоматах) его можно решить с помощью объектно-ориентированного проектирования с помощью конечного автомата.

Исходный статус неактивен и переходит к вводу, если начинается набор, позволяет очищать, отменять и отправлять при наборе номера строки и столбца элемента, затем он отвечает за оплату после отправки строки элемента и номера столбца, и, наконец, он появляется Если товар успешно оплачен, в противном случае оплатите снова.

Для классов в торговом автомате должны быть некоторые кнопки для указания номера строки (A, B, C) и столбца (1, 2, 3), некоторые кнопки для очистки, отмены или отправки номеров строк и столбцов, некоторые слоты для приема платежей (наличными, монетами, кредитными / дебетовыми картами), некоторые слоты для хранения предметов (напитки, закуски и т. д.).

См. Блог

1 голос
/ 14 июля 2009

начните с определения "машины продавца":

Торговая машина - это машина, которая .....

вуаля! есть ваши требования.

0 голосов
/ 10 февраля 2016

Подойти к таким проблемам

  1. Определить требования, функциональные возможности использования

  2. Разбейте эти требования на тривиальные и базовые задачи

  3. Определение проблем и проблем, с которыми может столкнуться пользователь, и с точки зрения системы. все недействительные scnearios. также требования как производительность, безопасность, надежность.
  4. Определите решение для всех вызовов и проблем, перечисленных ранее
  5. пометить все существительные как классы, а глаголы и действие как метод. также определить открытые интерфейсы для класса на основе того, как классы будут взаимодействовать друг с другом и с внешними субъектами
  6. на основе сценария и постановки задачи попробуйте применить любой шаблон проектирования, если вы его знаете. (просто добавьте, чтобы показать свое знание шаблонов проектирования)
  7. представить свой дизайн с помощью диаграмм вариантов использования диаграмм классов и т. Д.

и определенно задайте много вопросов, чтобы очистить требования

0 голосов
/ 15 июля 2009

Не существует единственного правильного способа разработки всего программного обеспечения с нуля!

Вероятно, существуют десятки различных подходов, начиная от очень небольшого начального дизайна, такого как Evolutionary Design до Big Up Front Design, который был написан в августе 2005 года для JoelOnSoftware . Вероятно, существует более чем несколько промежуточных методов, которые имеют свое место, поэтому это зависит от того, какую методологию разработки вы хотите использовать, поскольку для некоторых может потребоваться более предварительный дизайн, как в подходе с водопадом, по сравнению с чем-то более гибким, где требования могут регулярно меняться, и это Это может вызвать много проблем или, по крайней мере, это теория.

0 голосов
/ 14 июля 2009

Эти мысли могут помочь:

С точки зрения интерфейса определите входы, выходы, ожидаемые условия, условия ошибки.

Решите, как хорошо это должно выглядеть.

Как долго это должно работать (срок службы).

Как часто нужно пополнять запасы?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...