Сергей Дунаев

 

Для тех, кто уже программирует на Delphi или Visual Basic, в архитектуре Java-Beans, на первый взгляд, нет ничего нового. Суть та же: написание повторно используемых компонентов и сборка из них готовых программ, как из строительных блоков. Специальный контейнер готовых компонентов, может включать набор простейших кнопок, текстовых прокручиваемых полей и списков или более сложные компоненты, такие, как календарь и даже электронная таблица (см. рис. 1 - 3).

Рис. 1. Компонент Slider

В традиционных языках программирования имеются специальные средства для создания таких компонентов, например инструменты Visual Basic Extensions (VBX), независимые от языка OLE Custom Controls (OCXs), или специальные средства в ОС Unix - toolkits и widgets. Что же нового принесла с собой Java? Java кристаллизовала и отшлифовала эту технологию и придала ей кросс-платформную и даже тотальную универсальность. Показательно, что в игру моментально включились производители серверов баз данных, такие, как Informix, Oracle, Sybase, которые стали предлагать свои базы в качестве контейнеров JavaBeans. Например, сервер Informix c Universal Data Option может действовать как контейнер Enterprise JavaBean, предоставляя функции управления JavaBean. Это позволяет Java-программистам создавать приложения, воспринимающие БД Informix как компонент JavaBean. Более того, JavaBeans-компоненты имеют мост к элементам AciveX и могут использоваться в рамках этой технологии.

Рис. 2. Компонент “Календарь”

Java Beans Bridge for ActiveX обеспечивает пользователей всех продуктов, построенных на основе технологии ActiveX, например Word, Visual Basic, Delphi и др., выступающих как полноценные контейнеры OLE/COM/ActiveX, возможностью встраивать и использовать переносимые компоненты JavaBeans точно так же, как если бы они были элементами ActiveX. Специальная графическая утилита записывает в OLE-формате библиотечную и регистровую информацию о выбранном JavaBean, т. е. как бы вводит его в семью OCX-элементов. Bean может действовать как сервер OLE/COM/ActiveX, а следовательно, любой его метод может быть вызван из Visual Basic или Delphi. В то же время и сам Bean способен реагировать на события, определяемые компонентами из контейнера OLE/COM/ActiveX. Так, он может обрабатывать события, инициированные в языке сценариев Visual Basic Script.

Рис. 3. Графическое программирование функций калькулятора

Для программистов это означает, что они смогут пополнять свои большие, написанные, к примеру, на Visual Basic или Delphi приложения модулями на Java, если они оформлены как JavaBeans. Программист может вообще не задумываться, каким образом этот модуль сделан, просто он будет применять для своих целей его свойства и методы. Парадигма программирования расширяется благодаря тому, что JavaBeans имеют много других замечательных особенностей.

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

- методы, которые можно вызывать;

- свойства, которые можно изменять;

- события, которые можно обрабатывать.

Выяснение этих характеристик со стороны других компонентов называется интроспекцией. В архитектуре Java эти методы были реализованы изначально и заключены в базовый класс java.lang.reflect. Тем не менее в архитектуре Java-Beans существуют дополнительные классы BeanInfo и Introspector.

Интересно отметить, что почти сразу после опубликования стандартов на спецификации JavaBeans стали появляться системы программирования на Java (например, Visual Age фирмы IBM), которые предлагают разработчикам графические средства программирования для построения собственных событийных моделей и управления взаимодействием компонентов на основе JavaBeans. Это очень важно, учитывая то обстоятельство, что, хотя в базовой концепции JavaBeans описывается только локальное взаимодействие компонентов в пределах одной виртуальной Java-машины, на самом деле подразумевается, что эти компоненты могут находиться где угодно и взаимодействовать друг с другом по протоколу RMI или CORBA.

Графическое программирование применяется для того, чтобы минимизировать, а в идеале вообще исключить ручное написание кода с использованием текстового редактора. Вместо этого используются графические наглядные средства, которые связывают схематические изображения компонентов и определяют их реакцию на то или иное событие с помощью задания свойств или вызова нужных методов. На рис. 4 показано, как с помощью графических средств программируются функции компонента “Калькулятор”. Выбор событий и действий над ними осуществляется из предлагаемого списка. Исходный код на Java генерируется автоматически.

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

В базах данных благодаря JavaBeans теперь могут сохраняться разнообразные данные, в том числе и самых непредсказуемых типов. В этой связи на первый план выступает проблема подготовки специалистов, способных найти применение этим поистине безграничным возможностям. Проектировщики должны начать мыслить в совершенно иных категориях, что весьма трудно. Главная роль в будущем будет принадлежать системному аналитику, системному проектировщику, а не программисту. Это хорошо понимали еще в 60-е годы создатели первых ОС, которые называли себя системными архитекторами. В книге “Как создаются и разрабатываются большие системы” одного из создателей памятника человеческому гению - операционной системы IBM OS/360 - Брукса-младшего приводится замечательное высказывание. Автор говорит, что он дал бы 1 млн. долл. тому, кто изобрел идею часов - циферблат и стрелки, заключенные в металлический корпус с прикрепленным к нему ремешком, и всего только 100 тыс. долл. тому, кто привел этот механизм в действие, т. е. изготовил и соединил вместе все шестеренки, пружинки, оси и т. д. Программирование никогда не должно становиться самоцелью, это всего лишь средство. Компонентная архитектура JavaBeans предполагает именно такой подход к программированию.

Идея часов - это пример истинной компонентной модели с тремя основными компонентами: корпус, циферблат и стрелки, и она доказывает, что никогда нечто не возникает из ничего. Все мы в той или иной мере являемся наследниками идей, изложенных в книгах Брукса, Дейкстры, Йодана.

Какие еще возможности предлагает компонентная архитектура Java-Beans?

Любой созданный компонент сохраняется на компьютере точно так же, как и обычные файлы. Java помнит структуру объекта, и вы при желании всегда можете воспользоваться интерфейсом java.io. Serializable, чтобы получить стандартную форму графа объектов или преобразовать компонент с помощью интерфейса Externalizable, когда надо представить этот компонент в качестве элемента другой объектной среды, например ActiveX. Естественно, что слишком большие компоненты можно упаковать, и это даже рекомендуется для снижения трафика сети, когда вы работаете в распределенной системе. Для этого необходимо использовать стандартный Java-архиватор, который создает файлы с расширением .jar. Java-архивы могут содержать классы, изображения, справочную информацию, и к каждому архиву прикрепляется специальный файл manifest, описывающий содержание архива и даже связи между компонентами.

JavaBeans можно создавать с помощью пакета Beans Development Kit (BDK) или из любой RAD-системы, поддерживающей эту технологию, например Sybase PowerJ или Borland JBuilder. В сущности эти системы просто облегчают работу кодировщику, предлагая ему каркасы классов различных типов, в которые он вкладывает свои коды или использует готовые компоненты JavaBeans. Как и обычные программы и аплеты, новый Bean можно создать по образцу. Нужно просто следовать определенным концептуальным правилам, хорошо изложенным в спецификации JavaBeans.

В настоящее время доступна для опробования новая версия Enterprise JavaBeans, в которой детально проработаны соотношения компонент/контейнер. Теперь в единую объектную среду можно инкапсулировать совокупность компонентов, объединенных в контейнере, а сам контейнер может выступать в виде родительской среды, скрывая от компонентов особенности внешней, подчас даже чуждой им среды и предоставляя им для функционирования свой контекст.

Заслуживает также внимания и инициатива IBM/Lotus, предложившей компании Sun обогатить имеющийся интерфейс Java-Beans средствами для эффективного обмена данными между компонентами, получившими название InfoBus. Ключевым понятием в этой спецификации, уже вошедшей во все новые реализации JDK, является информационная шина. Эта шина описывается классом InfoBus. Компоненты подключаются к ней и выставляют на нее данные, в том числе и структурированные, которыми они хотят обменяться с другими компонентами. Обмен происходит в асинхронном режиме и не накладывает никаких ограничений. Доступ к данным осуществляется по их именам. Методы класса InfoBus порождают экземляры класса, т. е. информационные шины, обеспечивают подключение к ним компонентов и обрабатывают события, связанные с обменом данными.

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

К автору можно обратиться по адресу: sbd@polytech.ivanovo.su.

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