Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
kernigan_paik.doc
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
2.91 Mб
Скачать

4.8. Пользовательские интерфейсы

До сих пор мы говорили главным образом об интерфейсах между ком­понентами программы или несколькими программами. Но есть же и еще один, очень важный, вид интерфейса — между программой и ее пользо­вателями-людьми.

Большинство примеров программ в этой книге основаны на работе с текстом, так что их пользовательский интерфейс представляется бо­лее-менее очевидным. В предыдущем разделе мы выяснили, что ошибки надо отслеживать и сообщать о них; при необходимости должны пред­приниматься попытки восстановления. Сообщение об ошибке должно включать в себя всю доступную информацию и быть максимально ин­формативным для каждого конкретного контекста; незачем выводить

estrdup failed

когда можно сообщить

markov: estrdup("Derrida") неудача: мало места в памяти

Нам ничего не стоит включить дополнительную информацию (вспо­мните, как мы это делали в estrdup), а пользователю это может помочь идентифицировать проблему или хотя бы просто подобрать корректные входные данные.

Если пользователь допустил ошибку, программа должна показать ему пример правильного ввода, как это сделано в функциях типа

/* usage: печатает подсказку и выходит */

void usage(void)

{

fprintf(stderr, "usage: %s [-d] [-n nwords]"

[-s seed] [files ...]\n", progname());

exit(2);

}

Имя программы, вырабатываемое функцией progname, идентифицирует источник сообщения. Это особенно важно в случае, если программа яв­ляется частью какого-то большого процесса. Если программа будет вы­водить сообщения вроде syntax error или estrdup failed, то пользова­тель может просто не понять, откуда пришло сообщение.

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

Эффективный способ создать хороший пользовательский интерфейс; для ввода — спроектировать специализированный язык для установки параметров, контролирования действий и т. п. Интерфейсы, основанные на языках, мы подробно обсудим в главе 9.

Защитное программирование, то есть такое программирование, при котором можно быть уверенным, что программе не страшен никакой некорректный ввод, не только защитит пользователя от самого себя и своих ошибок, но и предохранит всю систему в целом. Об этом речь пойдет главе 6, посвященной тестированию программ.

Большинство людей пользуется сейчас графическими интерфейсами. Графические пользовательские интерфейсы — отдельная большая тема, поэтому мы упомянем лишь о нескольких связанных с ними моментах. Во-первых, графический интерфейс трудно сделать "правильным", поскольку его пригодность и удобство оцениваются пользователями субъективно. Во-вторых, с чисто практической точки зрения в системе с графическим пользовательским интерфейсом размер кода, обрабатывающего взаимодействие с пользователем, как правило, гораздо больше, чем код для любого самого сложного алгоритма.

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

Стандартность и привычность интерфейса крайне желательны; это требование включает в себя последовательное использование терминов, модулей, форматов, шрифтов, цветов, размеров и всех остальных составляющих графическую среду элементов. Сколько различных английских слов используется для выхода из программы или закрытия окна? С десяток — от Abandon до control-Z; подобная непоследовательность может слегка запутать даже пользователя, для которого английский является родным языком, иностранца же она просто заводит в тупик.

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

модель программирования, поскольку она предоставляет способ инкап­суляции состояний и поведения окон. При этом используется наследо­вание для объединения одинаковых моментов в базовые классы и выне­сения различий в классы-наследники.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]