Это непросто - сказать 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.
Дэвид Берлинд