В.Г.Бендаринов, г. Горький

О программировании интерфейсов

При чтении программы, опубликованной в № 2 за 1990 r. (c. 36), управляющей программатором ППЗУ, в глаза бросилась самая начальная её часть - выбор режима работы. Она, конечно, предельно проста и предусматривает все режимы работы, но неудобна. Возможно, пользователь БК этого сразу не поймёт, но пользователю компьютеров типа IBM с более совершенным программным обеспечением этого доказывать не нужно.

Следует сформулировать основные положения, которых надо придерживаться при программировании интерфейсов:

  1. Когда у компьютера возникает потребность спросить пользователя, что ему надо делать дальше, он должен представить пользователю:
    • причину останова работы;
    • меню режимов работы;
  2. Когда спрашивает компьютер, именно он является инициатором, поэтому он должен ограничить действия пользователя, иначе пользователь может быть не понят, если введёт команду не вовремя.
  3. Компьютер безмозглый. Поэтому вследствие неаккуратности программиста может сложиться такая ситуация: когда, не навредить работе, лучше её совсем прекратить, выключив питание компьютера (например, безальтернативный вопрос об удалении файла). Поэтому из любого режима следует предусматривать выход.
  4. При составлении сервисных программ типа HELP, меню лучше, если они будут занимать меньшую часть экрана, т.е. оставлять предыдущую картинку.
  5. Пользователь должен иметь полное представление о своих возможностях, т.е. иметь хорошую полную систему меню.
  6. Если пользователь вводит команду с клавиатуры текстом, он может ошибиться. Поэтому в таких случаях, следует обязательно предусматривать обработку ошибок, расширенные диагностические сообщения и помощь.
  7. Любое сообщение компьютера должно быть предельно ясным и не допускать разночтений.

Теперь приведём структуру таких программ в PASCAL-TURBO.

Program MenuExample, Var
Koordinate: integer;
Key : Char ;
{$l Menu.HEL}
{$l OffOld.HEL} {в эти файлы надо записать процедуры, выполняющие}
{$l ChangeK.HEL} {соответствующие действия и использующие глобальные}
{$l OnNew.HEL} {переменные Key и Koordinate}
{$l Makes.HEL}
Begin
    Menu; {вывод текста меню }
    Repeat;
    If KeyPressed Then
    Begin
        Key: = ReadKey; {B более ранних версиях использовать Read(Kbd, Key)}
        OffOld; {убрать отметку предыдущего режима }
        ChangeKoordinates; {изменить координаты } OnNew; {отметить новый режим}
        If Key = #27 Then Exit; {выход по нажатию ESC} End;
        Until Key = #13; {до нажатия ENTER }
        Case Koordinate Of
            K1: Make1; {действие 1}
            K2: Make2; {действие 2}
            {включить все действия } 
        End;
    End;
End.

Заключение рецензента

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

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

Организация взаимодействия с ЭВМ существенно зависит от того, какие технические средства ввода/вывода и программное обеспечение имеются у неё, и от того, с какой целью этот интерфейс создаётся: с целью ли взаимодействия с профессионалом-программистом или с целью облегчения работы неподготовленного пользователя. Во всех случаях разработка приемлемого интерфейса сопровождается многими компромиссами, связанными с большим числом факторов. К числу таких факторов относятся:

Лучшие диалоговые программные средства включают в себя десятки вложенных меню, контекстно-зависимые подсказки в любом из режимов, возможность возврата назад при неверных действиях, наличие средств для создания макросов и макрокоманд для часто повторяющихся действий, графический интерфейс с использованием "мыши" или джойстика. Всего не перечислить. При этом все возможности ввода/вывода ЭВМ могут быть задействованы для диалогового интерфейса с пользователем программы или комплекса.

Практические ограничения интерфейса часто связаны только с ограниченными фантазией и умением разработчиков программ.

Положения по проектированию интерфейса, предложенные В.Г. Бендариновым, известны опытным пользователям и программистам. Они касаются разработки диалоговых программ. Надо напомнить, что игровые программы являются сугубо диалоговыми и к ним применимы эти принципы. Несмотря на общую правильность постулатов, приведённых автором, хочу остановиться на нескольких моментах

Во-первых, из всех предложенных правил имеются исключения (особенно в игровых программах).

Во-вторых, никакие советы не заменят собственной вдумчивой проработки взаимодействия программы с пользователем. Стандартные решения приедаются.

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

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

В-пятых, вопросы интерфейса с программами настолько важны, что разработчики систем программирования иногда включают средства создания и поддержки меню в состав системных библиотек. Например, система Турбо-Паскаль для персональных ЭВМ типа IBM PC имеет специальный пакет библиотечных файлов Turbo Professional, среди которых есть эти средства, поддержанные специальной диалоговой системой. Они достаточно просты в освоении и позволяют создавать удобный интерфейс действительно высокого уровня.

Скелет программы на Турбо-Паскале, представленный автором, пригоден для простого меню, в котором тема меню выбирается только один раз. Для многократного использования меню необходимо цикл REPEAT и оператор CASE охватить ещё одним циклом.

В головной программе не учтено, что управляющие символы, в частности символы, вырабатываемые клавишами перемещения курсора, требуют двух операторов ReadKey (или Read (Kbd, Key), поэтому во включаемых процедурах необходим свой анализ значения переменной Key и считывание второй половины кода для управляющей клавиши.

Кроме этого, в операторе CASE вместо K1 и K2 требуются некоторые целые значения, чтобы программа соответствовала синтаксису ПАСКАЛЯ.

Без процедур, выполняющих рисование, отметку, смену координат в меню, текст данной программы несёт чисто символическую нагрузку и особой ценности без них не имеет.

Как и с помощью каких средств проектируют меню профессионалы, программирующие на БЕЙСИКЕе, можно узнать в выпуске журнала "Мир ПК", № 1, 1990 (Джим Вудграфф. Генератор меню). Статья Д. Вудграффа будет полезна не только профессионалам.

Performed by © gid, 2012-2022.