четверг, 14 апреля 2011 г.

Урок 3. О ТЗ и алгоритме


Мне пришло в голову, что многие из Вас, знакомясь со вторым уроком, могли задаться вопросом: «О чем, собственно, речь, о каком программном продукте говорит автор?» Я как- то так вскользь упомянул, что в продолжении нескольких следующих уроков буду рассказывать о разработке программы бытового таймера, не сказав ничего более конкретного. Так вот, уважаемый читатель, любая программа, которую Вы будете создавать не для собственных нужд, должна быть описана в документе, называемом «Техническое задание». Такой документ обязательно нужно получить от заказчика, иначе Вы рискуете попасть в ситуацию, когда заказчик откажется оплатить Ваш труд, сославшись на то, что Вы написали совсем не то, о чем он Вас просил (все ж — живые люди: ну, забыл, устал, не с той ноги встал и вообще: «Я вам этого не говорил» - любимая фраза заказчиков...).
Не хотелось бы пугать тех, кто еще не сталкивался с заказчиками, но «предупрежден — значит вооружен». Я хочу предупредить моего читателя, что общение с заказчиком — дело очень непростое. Заказчика нужно уметь слушать, слышать и понимать, проявляя максимум выдержки и терпения.

Ну, достаточно, перейдем к делу, не претендуя на абсолютную полноту изложения данного непростого вопроса, просто, чтобы показать в первом приближении, как это может выглядеть.
Техническое задание на создание программы «Бытовой таймер»
Назначение программы: программа предназначена для выполнения обратного отсчета времени от значения, задаваемого оператором.
Требования к программе:
  • Программа «Бытовой таймер» (рабочее название MyTimer) должна быть сформирована в виде законченного запускаемого модуля.
Примечание. Не претендуя на полноту, я постараюсь дать понять, какие моменты нельзя упустить. Например, в данном пункте дается подрядчику «вольная» на выбор среды разработки, одновременно с исключением:
а) транслируемых языков, требующих запуска некоей оболочки для работы программы
(к таким относится, например, Basic)

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





Первое, что должна сделать программа — обратиться к некоему хранилищу за всеми необходимыми данными для своей работы и считать их из этого хранилища, разместив в массивах и переменных при   необходимости.
Забегая вперед, скажу, что в качестве хранилища настроек программы я выбрал не обычный текстовый файл, а файл типа «ini». В отличии от простого текстового файла, файлы данного типа имеют определенную структуру  и более пригодны на мой взгляд для хранения подобных данных. Меня могут спросить, почему бы эти данные не разместить в реестре Windows?  Ничего нет плохого, если все необходимые данные для работы своей программы Вы разместите в реестре операционной системы. Но в этом случае, Вам придется позаботиться о написании деинсталлятора программы, чтобы в случае удаления программы из компьютера, в реестре не осталось ненужных записей. К сожалению, многие программисты забывают об этом или относятся к работе с реестром не с должным вниманием, что приводит... в общем, к нехорошему это приводит... Урок мой не об этом, и в данной серии уроков я не ставлю себе целью описывать работу с реестром операционной системы.
Примем во внимание, что наша программа не будет требовать инсталляции.

Далее, программа должна визуализировать полученные настройки, и вывести на экран главное меню.
В результате, получились три ветви алгоритма: А, В и С. (Ветвь «Файл-Выход» не стоит принимать во внимание в силу ее простоты: она приводит к завершению работы программы).
Двинемся от простого к сложному.
Ветвь «С» должна выводить окно «О программе».
Ветвь «В» - давать возможность настраивать быстрые кнопки (их предполагается 6 штук, каждая из которых может иметь свои отличные настройки) и выбирать исполняемый таймером в качестве звукового сигнала файл.
Наконец, ветвь «А».
В порядке эргономической важности:
  • запуск таймера,
  • остановка таймера,
  • Увеличение количества минут
  • Уменьшение количества минут
  • Увеличение количества секунд
  • Уменьшение количества секунд


Комментариев нет:

Отправить комментарий

Примечание. Отправлять комментарии могут только участники этого блога.