Выбрать главу

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

Большинству пользователей не интересно, что находится «под капотом» тех систем, которые они применяют. Дон Норман (Don Norman), эксперт по юзабилити и защитник удобства применения технологий с точки зрения пользователя, говорит просто: для потребителя пользовательский интерфейс и есть система (Norman, 1988 [53]). Но бывают исключения. При определенных обстоятельствах технология, спрятанная «под капотом», становится важной для пользователя. Она становится важной, если легковой автомобиль не может разогнаться и безопасно обойти грузовик. Или когда компилятор не может выдавать качественный код. Технология приобретает значение, если двигатель нужно ремонтировать или регулировать через каждые 5000 км. Она важна, если Windows необходимо перезагружать через каждые несколько часов из-за утечки памяти в пакете офисных презентаций.

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

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

От ГПИ к ООПИ

Что же такое ООПИ1? Еще одна аббревиатура с двойным «О» или что-то еще? Существует ли настоящий объектно-ориентированный пользовательский интерфейс? Захочет ли его применять уважающий себя человек? Если это всего лишь ГПИ с возможностью непосредственного мани-пулирования визуальными объектами, то добавление 00 почти ничего не меняет для ПИ.

Одна из постоянных трудностей в мире ОО становится особенно неприятной, когда речь заходит о пользовательском интерфейсе. Эта трудность — различие (или чаще его отсутствие) между объектами в программном обеспечении или программных моделях и объектами в банальном смысле, то есть объектами внешнего физического мира, который так часто с высокомерием называют «реальным миром». Многие новички в объектной технологии попали в ловушку, думая, что для успеха в работе с объектами достаточно найти объекты в реальном мире, настрочить немного кода для классов, к которым принадлежат объекты, и программное обеспечение уже готово для поставки. Что может быть более бесшовным? Как убедительно показали Айвар Джекобсон (Ivar Jacobson) и другие методисты, в качественных программных системах многие из наиболее важных объектов не соответствуют напрямую объектам из реального мира или предметной области.

Банальное и техническое значения слова «объект» все еще объединяют или путают. Согласно повседневной терминологии, все пользовательские интерфейсы содержат в себе объекты, которыми пользователи могут манипулировать. Тот факт, что некоторые объекты представляют собой монохромные символы, управляемые с помощью команд с клавиатуры, не делает их менее достойными именоваться «объектами».

В своей книге на эту тему Дэйв Коллинс (Dave Collins, 1995 [9]) предложил «определение» ООПИ, основанное на трех характеристиках: (1) пользователи воспринимают объекты и воздействуют на них; (2) пользователи классифицируют объекты исходя из поведения объектов; (3) все интерфейсные объекты объединены в одну общую согласованную концептуальную модель. Звучит неплохо, но первый пункт относится к пользователям, а не к пользовательским интерфейсам. Можно возразить, что восприятие объектов присуще человеческому мозгу, если речь идет об обычных объектах, либо является феноменом, существующим только для разработчиков, если речь идет о программных объектах. Второй пункт, касающийся классификации, также относится к пользователям, а не к интерфейсам. Это правило почти наверняка не подходит для всех людей (или даже для кого-то одного), если принимать во внимание все возможные обстоятельства. Люди классифицируют обычные объекты по многим свойствам и показателям, которые не относятся к поведению. Например, вы можете сказать, что все политики действуют почти одинаково, однако ваш друг при этом похож на Билла Клинтона. Что касается третьего предполагаемого свойства ООПИ, то согласованность модели является характеристикой любых хорошо организованных пользовательских ин-терфейсов: хорошие интерфейсы внутренне непротиворечивы и воспринимаются как одно целое.

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

Ни один из пользователей, чей здравый смысл не повредился за годы болтовни с объектно-ориентированными компиляторами, не скажет, что его взаимодействие с графическим пользовательским интерфейсом заключается в «отправке сообщений объектам». Пользователи не отправляют сообщения объектам. Они что-то делают с ними или с их помощью. Даже так называемое «прямое манипулирование» является своего рода неправильным направлением, сбивающим с прямого пути. Пользователи ничем не манипулируют напрямую, когда перемещают мышь по столу для перемещения курсора или изменения картинки. Наша способность научиться таким действиям и воспринимать их как разумные является еще большим даром человеческого мозга, чем способность программировать компьютер для участия в этой пантомиме курсоров и пикселов.

Поверхностные элементы

Есть ли вообще смысл выставлять механизмы объектной технологии в интерфейсе, предназначенном для конечных пользователей? Как правило, если логика и структура программы становятся видны на экране, что-то является неправильным. Это признак конструкции вида «изнутри наружу», в которой интерфейс становится тонкой и пятнистой кожей, покрывающей бугорчатые внутренности. Наоборот, конструкция вида «снаружи внутрь» означает то, что внутренние компоненты и их внешние проявления отражают потребности пользователя, а не структуру программы.

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

Коллинс противопоставляет ООПИ другим, не объектно-ориентированным ПИ, но тот соломенный заборчик, который он возводит, на самом деле является древним интерфейсом командной строки. В интерфейсах командной строки глагол (команда) ставится перед дополнением (параметром). Иногда утверждается, что грамматика типа «дополнение-глагол» в ООПИ является более естественной и более гибкой — выбираете картинку и щелкаете по инструменту изменения цвета или перетаскиваете документ к принтеру.