Но бизнес - это не рок-концерт, и мнению Кремниевой долины нельзя верить безоглядно. Одно дело, когда горстка разработчиков "на авось" принимает технологию, продвигаемую Sun, и совсем другое, если компания ставит крест на C++ и начинает писать важнейшие приложения на незрелом языке программирования, эффективность и даже будущее которого вызывают сомнения.

Java! Да здравствует революция!

Java - это язык программирования, который считается языком будущего. ActiveX, насчитывающий 10-летнюю технологию, представляет собой расширение модернизированной к новым компьютерным порядкам. Java сам является новым мировым порядком.

Шумная, впадающая в крайность рекламная кампания, развернутая Sun Microsystems и Microsoft, заглушила громкие дискуссии вокруг Java. В суть этих технологий никто не вдавался. На самом деле споры на эту тему вообще беспредметны. Если и можно сравнивать Java с каким-то продуктом Microsoft, то исключительно с Windows.

ActiveX позволяет использовать результаты труда десятков тысяч программистов, в течение 10 лет разрабатывавших Visual Basic. С ее помощью можно без труда дополнять существующие программы сетевыми функциями. Кроме того, она дает возможность ресурсам Internet взаимодействовать с ОС Windows - полезная, хотя порой несколько и опасная функция.

Полезная, поскольку компоненты ActiveX могут считывать поля записей из базы данных Microsoft Excel, включать определенные поля в документы, подготавливаемые в текстовом редакторе Microsoft Word, и просматривать итоговые документы с помощью Web-браузера (желательно Microsoft Internet Explorer). А опасна она потому, что дает возможность удаленному узлу обновлять личные рабочие расписания, внося в них данные о новых встречах.

Реализация этих возможностей сулит определенные выгоды, но, с другой стороны, выявляет некоторые проблемы ActiveX.

  • ActiveX сама по себе является второстепенной технологией. С технической точки зрения, ближе всего к ней стоит OpenDoc - метод создания многократно используемых программных компонентов, которые могут быть включены в приложения Macintosh. Несомненно, Active X стимулировала и будет продолжать стимулировать новаторские приложения, но в итоге появится лишь ряд интересных прикладных программ.
  • ActiveX полезна только для расширения Windows-приложений. Microsoft немало выиграла, решив передать ActiveX на рассмотрение организации по стандартизации и наметив совместные работы с независимыми компаниями по переносу этой технологии в операционные среды Microsoft и Unix. Подобные инициативы обнадеживают, но, к сожалению, они не получат широкого распространения.
  • ActiveX по своей природе не обеспечивает защиту данных. Internet наводнена ужасными слухами о том, как немецкие хакеры перевели деньги, используя управляющие элементы ActiveX, или о разработчике, создавшем управляющий элемент, который стирает информацию с жесткого диска и отключает компьютер. Сама Microsoft не утверждает, что ActiveX не станет причиной неприятностей точно так же, как производители оружия не исключают возможности использования их детища в опасных для человека целях.
  • Вместо этого Microsoft ссылается на свою модель электронной подписи, согласно которой разработчики управляющих элементов ActiveX должны "подписывать" их, что дает конечным пользователям выбрать надежную организацию. Это изящная попытка решить сложную проблему, но она обречена на неудачу, поскольку разработчики уже могут подделывать их. Да и как конечным пользователям определить тех, кому можно доверять, а с кем следует быть поосторожней.

    В свою очередь Java предлагает компонентную архитектуру, которая является сильной стороной ActiveX, и несколько возможностей, реализация которых совершенно невозможна на основе ActiveX.

    Принципиальная разница в том, что Java - это язык программирования, в то время как ActiveX представляет собой группу приложений, написанных на языке программирования. Фактически компонентная архитектура, превращающая ActiveX в необходимый инструмент разработки Windows-приложений, реализована в виде подмножества Java-приложений. Приложения этого подмножества носят название Java Beans.

    Java-приложения могут выполняться под управлением почти всех операционных систем, поскольку они в действительности взаимодействуют не с ОС, а с виртуальной машиной, оптимизированной для конкретной платформы. Это означает, что разработанное однажды приложение одинаково эффективно выполняется во многих операционных средах. Претендовать на это не может ни один продукт Microsoft, включая ActiveX.

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

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

    Независимо от того, чем продиктованы действия Microsoft, она сконцентрировала усилия на сохранении и продлении жизни Windows. Любая технология или продукт, которые открывают перед пользователем возможности отказаться от Windows (в нашем случае это Java), предаются анафеме.

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


    К. Сэвидж - аналитик по вопросам технологии из компании Agency.com, специализирующейся на интерактивном маркетинге. С 1994 г. участвовал в разработках Internet, в основном в реализации проектов корпоративных интерактивных систем, в том числе Web-узлов компаний British Airways, Claris, Lucent Technologies, GTE и MetLife. Его любимым стандартом является H.323.

    Популярные термины, которые нужно знать всем, кто намерен работать с технологией Java

    Java - это не только язык программирования. Это нечто большее. Некоторые рассматривают его на уровне языка C++, другие относятся как к нечитаемому SmallTalk. Язык Java объектно-ориентированный и интерпретируемый. В отличие от C++, Java поддерживает только однократное наследование. Он содержит функции присвоения имен, защиты данных, "сбора мусора" и обеспечения производительности. Вместе с тем Java - это не только язык, но и переносимая операционная система. Программы Java компилируются в байт-коды, которые могут исполняться под управлением любой ОС, способной воспринимать их (т. е. любой ОС, имеющей адаптер). Платформа Java состоит из базовых классов Java (Java Core Classes), виртуальной машины Java (Java Virtual Machine) и интерфейса, поддерживающего переносимость (Porting Interface).

    Applet (апплет). Другое название - мини-приложение. Апплет может выполнять или не выполнять перечисленные объектные функции. Он может делать только одну операцию над связанными с ним данными. При использовании апплета пользователь передает ему запрос на выполнение, запуская таким образом соответствующие мини-приложения.

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

    Class (класс). Если существует объект, то существует и класс, но наличие объекта в действительности не означает наличия класса. Причина в том, что группирование объектов в классы основывается на наследовании. Сходные объекты организуются в один и тот же класс. Объекты одного и того же класса имеют одинаковые свойства. Например, объект "заказчик" может быть частью класса "заказчики". Объекты высшего класса содержат свойства, которые в различных сочетаниях будут наследоваться классами более низкого уровня.

    Common Obejct Request Broker Architecture, CORBA (обобщенная архитектура объектных запросов). Стандартная архитектура брокера объектных запросов, принятая консорциумом Object Management Group. Distributed Component Object Model, DCOM (распределенная объектная модель компонентов). Архитектура брокера объектных запросов, определенная корпорацией Microsoft.

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

    Encapsulation (инкапсуляция). Функция, превращающая объект, компонент или апплет в отдельный автономный элемент. Инкапсуляция определяет упаковку данных и процессы в интерфейсе, позволяющие скрыть детали реализации и защитить их от искажения.

    Infrastructure (инфраструктура). Составная часть всей вычислительной системы или приложения, обеспечивающая специальные. Как правило, 70% приложения состоит из инфраструктуры (т. е. процессов доступа к данным или обмена сообщениями между приложениями).

    Inheritance (наследование). Определяет взаимоотношение между классами, облегчающее многократное использование (подклассы наследуют свойства базового класса). Наследование может быть одиночным (только один подкласс) или множественным (несколько подклассов).

    Java Beans. Расширение существующей объектной модели Java, которое обеспечивает возможности, аналогичные функциям OLE-объектов технологии ActiveX и компонентов OpenDoc. Апплеты без Java Beans можно включать в Web-страницы, но они не могут взаимодействовать с другими апплетами, расположенными на этой же странице. Используя Java Beans, разработчики смогут реализовывать функции связывания и встраивания, присущие современным технологиям подготовки составных документов, таким как OLE и OpenDoc. Объект, апплет или компонент? Их легко спутать. Ниже приводятся значения этих терминов и их взаимоотношения.

    Java OS. Данная ОС - единственная операционная система Java, которой не нужен адаптер для исполнения объектов Java. Она разработана для использования в таких устройствах, как сетевые компьютеры и интеллектуальные карты, путем ее переноса на микропроцессоры (Java Chips).

    Java Remote Method Invocation, RMI (метод удаленного вызова объектов Java). Простой протокол взаимодействия между процессами, обеспечивающий услуги по удаленному вызову объектов Java. Java RMI работает только с приложениями Java и не распространяется на объекты или компоненты, написанные на других языках программирования, например на C++.

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

    Object model (объектная модель). Определяет интерфейс и протоколы, поддерживаемые объектом (компонентом в компонентной модели).

    Object-oriented and component-oriented applications (объектно- и компонентно-ориентированные приложения). Полные приложения, создаваемые путем объединения и согласования отдельных элементов. Компоненты не имеют каких-либо классов.

    Object Request Broker, ORB (брокер объектных запросов). Продукт, входящий в состав инфраструктуры, который реализует обмен данными между объектами и компонентами. ORB позволяет этим объектам осуществлять обмен (посылать и получать сообщения) независимо от системных аспектов (т. е. языка, операционной системы, местонахождения и т. д.).

    Polymorphism (полиморфизм). Определяет возможность выбора на основе целевого объекта метода, позволяющего посылать один и тот же запрос нескольким объектам (апплетам или компонентам) и вызывать разные действия. Например, вызов метода "рисование формы" активизирует различные ответные действия у квадратного, круглого и треугольного объекта, несмотря на одно и то же имя метода.

    - Карен Баучер,
    директор Standish Group International.

    ActiveX! Все мы хотим переделать мир!

    Накал дискуссий о достоинствах ActiveX и Java достиг такого уровня, что его участники стали напоминать больных лихорадкой.

    Наша компания FlexiInternational поставляет приложения бухгалтерского учета многонациональным корпорациям, осуществляющим операции с различными валютами, таким как Citicorp и Sikorsky Aircraft. Эти продукты представляют собой крупномасштабные приложения оперативной обработки транзакций, которые должны отвечать типичным требованиям к бухгалтерскому учету, предъявляемым организациями с предельно сложной структурой.

    Чтобы добиться такой адаптируемости, мы изначально решили создавать ПО на основе объектно-ориентированных методов, писать весь код на Microsoft Visual C++ и оптимизировать его для широкого спектра баз данных и операционных систем серверов. Мы должны были учесть разнообразные потребности постоянных пользователей бухгалтерской и финансовой документации, например экспертов по анализу бюджета, и новой категории случайных пользователей, в том числе руководителей отделов и внешних торговых партнеров.

    Компоненты ActiveX производства Microsoft можно писать на C++ и некоторых других языках, а также с помощью сред визуализации. Управляющие элементы ActiveX реализуются в компании FlexiInternational теми же методами, что и приложения, создаваемые путем многократного использования ее собственных библиотек финансовых классов. Настольные приложения клиент-сервер и браузер-сервер разрабатываются с применением одних и тех же управляющих элементов.

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

    За 15 лет работы программистом я неоднократно становился свидетелем того, как некоторые группы разработчиков терпели крах, когда, пытаясь поддерживать несколько комплектов исходного кода для одного и того же приложения, шли на чрезмерные расходы и неразумное распределение усилий. Двойной комплект кода затрудняет для корпораций, отвечающих за текущее сопровождение ПО, осуществление своевременной адаптации результирующего приложения с Internet-расширениями. Языковая независимость ActiveX позволяет избежать дублирования при создании и сопровождении отдельных Internet-расширений, усложняющего существующие клиент-серверные модули и затрудняющего их сопровождение.

    Кроме того, всегда, а в особенности при работе с приложениями оперативной обработки транзакций, на первом месте стоит вопрос о производительности. Программистов еще предстоит убедить, что такие приложения можно с успехом писать на языке Java. Интерпретируемость Java приводит к тому, что пользователям зачастую приходится выполнять малоприятный ручной ввод данных.

    Для ряда приложений оперативной обработки транзакций, которые отнимают у пользователей массу времени, столь же важно качество визуализации. Согласно данным корпорации IDC, почти на 80% настольных ПК корпораций установлена Windows. Пользователи, постоянно работающие с Windows, привыкли к такому комфорту, который не может быть достигнут при работе с Java. Загружая апплеты Java, я всегда вспоминаю Windows 2.0. Вряд ли наши пользователи согласятся на такое ухудшение качества.

    Я не противник Java. Для приложений, рассчитанных на людей, которые работают с ними не постоянно, а от случая к случаю, широко разрекламированная платформенная независимость Java создает неоценимые преимущества. Несмотря на проблемы совместимости Java, это качество все же привлечет разработчиков Internet-приложений.

    Часто высказывается недовольство по поводу защищенности приложений ActiveX; все только и говорят о том, как "предательские" компоненты стирают файлы, завершают работу Windows или украдкой запускают клиентские программы. Шумиха вокруг таких несанкционированных проникновений привела к тому, что толпы экспертов и хакеров принялись взламывать механизмы защиты ActiveX. Однако ответом на эту шумиху станут действия Microsoft по защите этой технологии. К настоящему моменту в ее активе впечатляющий перечень мер по усилению слабых звеньев, разработанных, как правило, в течение 48 часов или менее после обнаружения дефектов.

    Как бы то ни было, для пользователей intranet выполнение приложений ActiveX ненамного отличается от исполнения программ с любого другого файлового сервера. В обоих случаях система работает потому, что программы создавались в известной, заслуживающей доверия среде.

    Я часто слышу, что стратегия, в основу которой положена технология ActiveX, "чрезмерно ориентирована на Microsoft/Windows" и заводит информационные системы в тупик. Мы считаем это мнение ошибочным. В конце концов, спецификации ActiveX были предоставлены независимой группе по стандартизации намного раньше, чем спецификации Java. По мере того как Microsoft, Software AG и DEC будут расширять сферу приложений ActiveX, перенося их на другие платформы, аргумент с Windows утратит силу. Кроме того, следует отметить, что, в то время как Microsoft пытается приспособить Java-приложения к Windows, Sun упрямо твердит о правах собственности и о том, что Java OS никогда не будет поддерживать ActiveX.

    Наша стратегия, основывающаяся на ActiveX, нацелена на Internet. Эта стратегия компонентного программирования, которая сулит выгоды заказчикам, не желающим использовать Web-приложения. Поскольку технология ActiveX базируется на объектной модели Windows, одни и те же компоненты ActiveX могут быть в дальнейшем скомбинированы с другими OLE-приложениями, открывая возможность создания приложений, оптимизированных для конкретной сферы бизнеса. У нас есть клиенты, которые уже интегрировали продукты FlexiInternational в унаследованные клиент-серверные приложения.

    В войне между Java и ActiveX обе стороны пытаются завоевать симпатии пользователей и долю рынка за счет достижений в области совместимости. К счастью, как свидетельствует история, информационные системы не терпят "функционального вакуума". Дефицит средств, обеспечивающих взаимодействие приложений Java и ActiveX, постепенно ликвидируется. Каким образом? Самыми разными путями, - используя генераторы, преобразующие код Visual Basic в Java, Windows-терминалы, вплоть до "виртуальной машины ActiveX", которая может работать под управлением Java OS.


    С. Боуз - один из основателей и исполнительный директор компании FlexiInternational Software, поставщика финансовых и бухгалтерских систем для более чем 100 международных промышленных предприятий. Компания является поставщиком комплексных решений Microsoft.

    Поделитесь материалом с коллегами и друзьями