Н. И. Лобачевского Факультет Вычислительной Математики и Кибернетики Кафедра иисгео Язык программирования Си Курс лекций

Вид материалаКурс лекций

Содержание


3.3. Интерфейс пользователя не должен напоминать компьютерную программу (принцип прозрачности)
Подобный материал:
1   ...   5   6   7   8   9   10   11   12   ...   29
^

3.3. Интерфейс пользователя не должен напоминать компьютерную программу (принцип прозрачности)


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

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

К сожалению, подобный уровень четкости восприятия зачастую отсутствует в пользовательских интерфейсах. Представьте себе графический интерфейс пользователя Windows на автомобиле. Вы трогаетесь, выбрав в главном меню пункт «Движение автомобиля». Щелчком должно открыться меню «Переключение скорости», которое предложит набор опций «Вперед», «Назад» и «Нейтраль». Щелкните мышью на одной из них для выбора нужного направления. Затем вернитесь в меню «Движение автомобиля» и выберите команду «Поехали». Появится диалоговое окно «Скорость», где вы должны воспользоваться ползунком для ввода желаемой скорости. Однако, установить правильную скорость не так легко из-за грубого разрешения ползунка (пол-миллиметра на мышке дает около 1 км/ч), поэтому, скорее всего, вы установите 59,7 км/ч, вместо 60. Затем в диалоговом окне вы нажимаете кнопку «Поехали», вслед за чем появляется сообщение «Ручной тормоз стоянки не убран — нажмите Fl для справки» (динамик издает громкий звук). Покорно щелкаете кнопкой «ОК», чтобы убрать окно сообщений, затем снова пытаетесь открыть главное меню, но машина просто посылает вам звуковой сигнал. Наконец, поняв, что дело в том, что диалоговое окно «Скорость» еще отображается, вы щелкаете на кнопке «Отмена», чтобы убрать его. Вы открываете меню: «Ручной тормоз на стоянке» и убираете флажок «Включен».

Затем вы снова открываете окно «Поехали». И вновь получаете сообщение (и громкий звук) о том, что вы должны сначала выбрать направление в меню «Переключение скорости». В этот момент вы решаете, что лучше стоило бы пройтись на работу пешком.

Вот вам другой пример: занимаясь недавно подготовкой обзора, я просмотрел несколько программ авиационных бортовых журналов. («Бортовой журнал» — это очень простой табличный документ. Каждая строка соответствует отдельному полету, а столбцы разбивают общую продолжительность полета по категориям: итоговая продолжительность, продолжительность полета в облаках и т.п. В других столбцах полет помечается как деловой и так далее).

До сих пор самым лучший из интерфейсов всегда выгляел совершенно одинаково, как привычный бумажный журнал, но он автоматизировал нудную работу. Вы вводили время в «итоговый» столбец — и то же самое время появлялось в других подходящих по смыслу столбцах. Значения по столбцам складывались автоматически для получения итогов по категориям. Вы могли легко генерировать необходимые отчеты и экспортировать данные в формат ASCII с разделителями из символов табуляции, который читается поистине любыми в мире программами электронных таблиц или подготовки текстов. Для непривычного взгляда весь интерфейс казался, мягко говоря, разочаровывающим, но он был функциональным и интуитивно понятным, а программа — короткой и быстрой. Однако самым важным было то, что этот интерфейс выглядел как бортовой журнал, а не как программа для Windows.

Другой крайностью был ошеломляющий графический интерфейс пользователя (GUI) под Windows: у него были диалоговые окна; у него была трехмерная графика; вы могли генерировать круговые диаграммы, показывающие процент продолжительности полета в облаках по отношению к вашему общему налету на «Цесне-172» за последние 17 лет; вы могли помещать внутри отсканированную фотографию самолета...- вот вам картина! Программа выглядела превосходно, но использовать ее было почти невозможно. Практической необходимости для создания большинства из генерируемых ей диаграмм и отчетов не было. Ввод данных был неудобным и медленным — нужно было вызвать диалоговое окно с полями, разбросанными по всей его поверхности. Фактически вы должны были прочитать все, чтобы обнаружить ту категорию, которая вас интересовала, а некоторые из категорий были скрыты за кнопками, с неизбежностью приводя к сложному поиску. Чтобы добавить еще каплю дегтя, скажу, что эта программа была надстроена над сервером реляционной базы данных (помните, что это для поддержки простой таблицы без реляционных связей). Она заняла 30 Мбайт на моем диске. Почти пять минут уходило у меня на запись, которая требовала около 10 секунд на листах бортового журнала или упомянутом ранее простом графическом интерфейсе пользователя. Программа была бесполезна, но, конечно, потрясающа.

Одна из главных трудностей состояла в том, что инструментарий для второй программы определяет проектирование интерфейса. Все эти программы были разработаны на Visual Basic, языке очень высокого уровня (который мне, между прочим, по сути дела, не сильно нравится). Приложения, созданные при помощи таких генераторов приложений, как Visual Basic (или Power Builder, или Delphi, или ...), обычно имеют специфический внешний вид, который незамедлительно говорит об инструменте, использованном для построения этого приложения. Разработчик интерфейса не может надеяться на помощь, если этот специфический облик не подходит для конкретного проекта. Пользователи генераторов приложений должны на выбор иметь несколько вариантов, чтобы затем использовать тот генератор, который лучше всего соответствует требованиям данного интерфейса. Несмотря на это, опыт мой показывает, что наиболее приемлемые программы со временем должны перенести по меньшей мере часть кода из интерфейса на язык низкого уровня типа С или С++; поэтому важно, чтобы ваш генератор приложений позволял использовать и код низкого уровня.