• выполнить текущую выборку как программу, написанную на языке Java или любом другом языке,
должны быть доступными для пользователя в любой момент, что является абсолютно выполнимым с точки зрения разработки.
5.8. Команды и трансформаторы
Хороший дизайн является более важным, чем вы думаете.
Когда сложность некоторого продукта или части программного обеспечения, или компьютерной системы превышает наши в ней потребности и создает трудности, это вполне оправданно вызывает в нас раздражение. Даже если нам требуется поработать с каким-то простым текстом, мы вынуждены разбираться в сотнях или, как в случае с Microsoft Office, даже тысячах команд и методов, которые нам не нужны. С другой стороны, если бы мы могли пользоваться этими командами по мере возникновения в них необходимости, это сняло бы ощущение избыточности и огромного когнитивного груза, даже если бы вся система стала от этого столь же сложной, каким являлось до этого само приложение.
Мечта о том, чтобы продукты были изначально действительно (а не внешне) просты и в то же время гибки, может быть достигнута на основе подхода, в котором система не должна быть сложнее, чем ваши потребности в данный момент, и при котором возможности системы можно наращивать постепенно. Чтобы понять, как это сделать, вспомним, что в разделе 5.1 было сказано о том, что почти все действия, выполняемые с помощью компьютера, включают содержание, которое вы вводите или получаете, и набор операций, которые вы применяете к этому содержанию. Также вспомним, что интерфейс для любой такой операции состоит из двух частей: выборе содержания и вызова операции. Например, в игре требуется убить монстра, или, выражаясь более прозаическим языком, выполнить операцию по изменению изображения монстра на изображение взрыва. Содержание выбирается с помощью курсора (курсор подводится к монстру), а операция вызывается с помощью клавиши на ГУВ. Между прочим, это довольно хороший интерфейс – быстрый и результативный.
Вызов команды для применения к выборке может дать три возможности:
• Операция может быть применена к выборке.
• Операцию бессмысленно применять к данной выборке.
• Операция может быть применена к данной выборке при условии, что эта выборка будет модифицирована.
В первом случае операция выполняется и содержание видоизменяется. Во втором случае содержание остается без изменения. В третьем случае для выполнения операции должен быть вызван другой процесс, с помощью которого выборка предварительно модифицируется.
Предположим, что вы выбираете часть фотографии, на которой изображен вид городской улицы, и пытаетесь применить к ней команду проверки орфографии. Вызов этой команды предполагает наличие некоторой последовательности символов (текста), но здесь обнаруживается фотография (растровое изображение). Одной из возможностей компьютера является возможность преобразовывать содержание из одного типа данных в другой.[39] В этом случае данные являются растровым изображением, а команда применима только к текстам, поэтому компьютер должен определить, имеется ли какой-нибудь трансформатор для преобразования растровых изображений в текст. Вообще такие трансформаторы существуют. Это так называемые программы для оптического распознавания символов (optical character recognition programs). Обычно программы для оптического распознавания знаков (OCR-программы) используются для конвертирования данных, полученных с помощью сканера, в текст, который можно редактировать. (Некоторые из цитат, которые приводятся в этой книге, были получены с помощью сканирования соответствующих статей и последующего использования OCR-программы для конвертирования полученного растрового изображения в текст.) Допустим, что в компьютере имеется такая программа. Тогда эта программа автоматически запускается и анализирует растровое изображение. Если программа обнаруживает какие-то распознаваемые символы (например, знак остановки и частично читаемый знак с надписью «Первая северная уица»), то начинается проверка орфографии этих текстов, в результате которой выдается сообщение о том, что обнаружено неизвестное слово «уица», и предлагаются возможные варианты исправления: «улица», «утица», «ушица», «лица».