Это непросто  -  сказать OLE "да"

 

Проверка реальности

 

Около двух лет назад я сидел в лекционном зале IBM, когда Джим Каннавино демонстрировал одну из немногих вещей, которые отличают OpenDoc от OLE,  -  множественные активные объекты.

 

Я смотрел, как на экране сразу пара часов показывала время, и спрашивал себя, с какой стати мне может понадобиться несколько активных объектов внутри документа.

 

Апрель 1996 года. Представители IBM пришли к нам в лабораторию, чтобы отметить долгожданное начало поставок OpenDoc SDK for Warp. На экране  -  пара часов, показывающих время. Некоторые вещи никогда не меняются.

 

На самом деле по крайней мере одна вещь все-таки изменилась. Теперь у меня появилась практическая потребность в множественных активных объектах. Я обнаружил это, когда впервые попытался создать действительно сложный объектно-ориентированный документ, а недостатки Microsoft OLE испытывали мое терпение.

 

Первое, что я попытался сделать, -  это поместить три объекта "электронная таблица Excel" в документ Word. Каждый объект содержал информацию за одну неделю и столбец "итого с начала года на текущую дату" (YTD  -  year-to-date), где эта информация могла накапливаться. Я надеялся использовать формулы, которые бы автоматизировали накопление в столбце YTD с помощью межобъектной относительной адресации.

 

Это сработало, частично. Когда я из второго объекта ссылался на ячейки первого, связь работала. Участвующие в ней итоговые значения во втором объекте изменялись, если корректировалось содержимое ячеек первого объекта, на которые они ссылались.

 

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

 

Вынужденный пока смириться с ограничениями OLE, я создал третий объект, который содержал ссылки на второй. Это не работало вообще. Очевидно, на ячейки, содержащие межобъектные ссылки, нельзя ссылаться из другого объекта. OLE рушился и горел у меня в руках.

 

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

 

Модальное безумие

 

Звонит телефон. Это другой сотрудник PC Week просит данные по предыдущему обзору. Переключаюсь в Excel, открываю таблицу Reviews и выполняю поиск. Во время поиска я не могу посмотреть таблицу, если только не закрою диалоговое окно поиска. Я тихо рычу: "Разве приложения Windows 95 не должны быть многопоточными? А как тогда со всеми этими модальными штучками?"

 

Ох, не знал я, что вскоре мне предстояло обнаружить, насколько они модальны. Возвращаюсь в Word, оставляя диалоговое окно поиска Excel на экране, и дважды щелкаю на одном из объектов Excel. Бам  -  и я получаю чрезвычайно информативное диалоговое окно, сообщающее:"Unknown is busy" ("Неизвестное приложение занято").

 

Excel оставалась в модальной операции и не могла принять объект-таблицу, с которой я хотел поработать.

 

В качестве последнего отчаянного усилия я удалил все объекты и собрал их в одну обычную таблицу Excel. Затем вставил в документ Word ссылки OLE на эту таблицу. Мой ThinkPad 486-33 с 20 Мб памяти почти умер от напряжения, когда я попытался отредактировать эти объекты на месте. В сущности, они были бесполезны.

 

Фактически OLE оказался не в состоянии помочь мне собрать сколько-нибудь сложный объектно-ориентированный документ. Возможно, у вас дело будет обстоять так же. Быть может, это чуть-чуть приоткрывает дверь перед OpenDoc.

 

Дэвид Берлинд

Версия для печати