Программисту-профессионалу
Самое яркое событие с момента появления самой Паутины и наилучший инструмент для разработчиков - это Java. После того как этот язык был представлен общественности на конференции SunWorld в мае 1995 г., на гребне всеобщего увлечения Internet, интерес к нему приобрел характер взрывной волны. Но что же такое язык Java, и почему он стал "гвоздем" программы в этом году? Java предоставляет разработчикам средства дл добавления к страницам Web динамических, интерактивных содержательных материалов, превращая тем самым сегодняшние статичные страницы в реликты прошлого. Кроме того, Java располагает множеством замечательных функций для тех, кто заинтересован в разработке прикладных программ, способных работать в Internet.
Java - объектно-ориентированный язык, позволяющий программистам создавать платформо-независимые программы. Он порождает компактный и простой программный код, многие функциональные возможности которого черпаются из библиотек классов, имеющихся на клиентских компьютерах. Поскольку Java - интерпретируемый язык, готовая программа может выполняться на многих аппаратных платформах без перекомпиляции. Он также обладает надежной моделью обеспечения безопасности, позволяющей создавать прикладные модули, которые пользователи смогут загружать из сети не опасаясь, что с их компьютерами случится нечто ужасное. Вкупе все эти свойства делают Java прекрасным инструментом для разработчиков, желающих вывести интерактивную работу со своими Web-узлами на новый уровень.
В данной статье мы исследуем ряд вопросов, важных для весх, кто заинтересован в применении Java. Во-первых, мы ознакомимся со спецификацией языка, чтобы выяснить, вокруг чего же поднялся такой шум. Затем мы предпримем экскурсию по некоторому прикладному модулю Java, иллюстрирующему ряд типичных особенностей программирования на Java. Наконец, мы рассмотрим несколько сред разработки, которые уже сегодня позволят вам создавать прикладные Java-модули.
Исходный текст на языке Java может быть скомпилирован либо в прикладные программы Java (applications), либо в прикладные модули Java (applets). Прикладные программы Java выполняются как "родные" процессы в интерпретаторе Java, работающем на этапе выполнения программ (далее для краткости просто интерпретатор), тогда как прикладные модули Java загружаются из сети и исполняются в среде программы просмотра Web, такой как Netscape Navigator 2.0. Наше внимание в данной статье будет сосредоточено на прикладных модулях Java.
Модули Java не компилируются в исполнимый машинный код. Вместо этого они преобразуются в промежуточный байт-кодовый формат, соответствующий спецификации абстрактной виртуальной машины Java. Затем байт-код транслируется интерпретатором на клиентском компьютере. Прикладные программы, основывающиеся на применении байт-кодов, имеют колоссальное преимущество перед собственно исполнимыми программами: в них изначально заложена межплатформенная переносимость. Поскольку байт-код исполняется в интерпретаторе Java, последний может решить проблемы, связанные с различием в наборах команд, используемых ЦП, порядком расположения байтов в слове (в разных системах самый старший байт может располагаться в ячейке с меньшим или, наоборот, с большим адресом) и применением в конкретной операционной системой кодировки Unicode или в иной.
Вам не нужно перекомпилировать модуль Java, чтобы выполнить его на новом целевом компьютере: если на этом компьютере реализована среда выполнения Java, то он и так будет работать на нем. Подобная степень переносимости - это то, что делает прикладные модули Java особенно привлекательными для применения в Internet. Любое число пользователей, работающих с различными Web-браузерами на разных аппаратных платформах, могут загрузить из сети и выполнить созданный вами в единственном экземпляре прикладной модуль Java, тем самым многократно увеличив КПД разработчика.
Обеспечение безопасности - важное требование, предъявляемое к модулям Java. После того как Java-модуль загружен в ваш компьютер, его функциональные возможности должны быть ограничены. В общем случае этот модуль не может читать и записывать файлы в клиентской файловой системе, устанавливать сетевые соединения (за исключением центральной машины, с которой он был загружен), запускать другие прикладные программы на клиенте, вызывать собственные функции операционной системы клиента и непосредственно обращаться к памяти.
Выше перечислены лишь общие руководящие принципы, поскольку конкретная реализация модели защиты возлагается на поставщика Web-браузера. Например, программа Netscape Navigator 2.0 не позволяет производить чтение и запись каких-либо файлов, но служебная программа AppletViewer фирмы Sun, поставляемая в составе комплекса инструментальных средств разработки Java Developer's Kit (JDK), дает возможность прикладным модулям читать файлы, имена которых внесены в список управления доступом дл чтения.
Модель безопасности Java легко реализуема: загружаемый из сети в ваш Web-браузер байт-код перед исполнением подвергается верификации. После того как правильность байт-кода подтверждена, он исполняетс интерпретатором Java, который повышает степень защищенности Java, запрещая прямой доступ к памяти: прикладной модуль Java (или в данном случае прикладна программа) не может читать и писать непосредственно в память. Если бы прикладной модуль мог напрямую обращаться к памяти, то, как легко представить, он смог бы получить доступ и к операционной системе компьютера, нарушив тем самым модель безопасности.
Так что же происходит, когда вы считываете созданную средствами Java страницу с помощью Java-совместимого Web-браузера? Каким образом прикладной модуль Java оказывается на вашем компьютере? Последовательность событий такова:
Язык Java создан на базе языка Си++, но средства Си++, редко используемые и потенциально способные нарушить модель безопасности Java, удалены. В результате получился простой, объектно-ориентированный, многопотоковый язык, к характерным особенностям которого относятся иерархия классов с простым наследованием, мощный контроль типов, возможность нескольких потоков исполнения, автоматический "сбор мусора" и использование только простых переменных и функций (отсутствие указателей).
Простые типы данных, применяемые в языке Java, знакомы большинству разработчиков (см. таблицу). Обратите внимание на отсутствие целочисленных данных без знака и указателей любых типов. Однако поскольку Java не допускает использования собственных вызовов операционной системы, то для большинства разработчиков это не повлечет за собой никаких проблем.
Для классов Java возможно лишь простое наследование: класс Java может наследовать компоненты только одного базового класса. Это делается с помощью ключевого слова extends, например
public class Foo extends Applet
Ключевое слово public означает, что данный класс
доступен для классов вне данного исходного файла.
Кроме того, классы Java допускают использование интерфейсов, представляющих собой группу связанных функций, экспортированных классом Java, применение которых даст вам ряд важных преимуществ. Во-первых, поскольку интерфейс определяет постоянное представление вашего объекта, вы можете отделить то, как некто использует ваш объект, от того, как вы реализуете его функции. Во-вторых, класс Java допускает реализацию нескольких интерфейсов, поэтому в вашем распоряжении оказываются некоторые средства множественного наследования, вопреки существующим в Java запретам на такое наследование. Наконец, крайне важно близкое родство между интерфейсами Java и интерфейсами Interface Definition Language (язык определени интерфейса - IDL). Это родство позволяет вам использовать Java для построения распределенных объектов, соответствующих спецификациям Common Object Request Broker Architecture (CORBA - обобщенна архитектура посредника объектных запросов) или Component Object Model (COM - модель компонентного объекта).
Java - язык с мощным контролем типов. Это означает, что Java пытается определить все типы во врем компиляции. Если вы ссылаетесь на недопустимый тип или неверно выполняете приведение типов, то Java установит флаг ошибки уже во время компиляции. Как и другие объектно-ориентированные языки, Java допускает полиморфное поведение; вы можете ссылаться на объект, не указывая точно его класс.
Типы данных Java | |
---|---|
Тип | Описание |
byte | целое 8 разрядов со знаком |
short | целое 16 разрядов со знаком |
int | целое 32 разрядов со знаком |
long | целое 64 разрядов со знаком |
float | действительное 32 разрядов IEEE 754 |
double | действительное 64 разрядов IEEE 754 |
char | символ 16-бит Unicode |
boolean | логическое, принимающее значения "истина" или "ложь" (true or false) |
class | ссылочный |
array | ссылочный |
interface | ссылочный |
Java использует классы со счетчиком ссылок и автоматически увеличивает счетчик ссылок на объект всякий раз, когда какая-то часть программы обращается к объекту. Когда ссылка на объект перестает использоваться, Java автоматически уменьшает счетчик ссылок данного объекта на единицу. Если счетчик ссылок объекта становится равным нулю, объект подлежит удалению в качестве "мусора" (garbage collection). В среде интерпретатора Java выполняется отдельный поток сбора "мусора", который освобождает память, выделенную для объектов с нулевым числом ссылок.
Java обеспечивает работу многопотоковых прикладных программ. Для каждого экземпляра класса может быть запущен отдельный поток, если он является подклассом класса Thread:
public class Foo extends Thread
Но этот прием годится только для очень простых классов, которые не нуждаются в наследовании от каких-либо других классов. Так как Java не допускает множественное наследование, вы не можете им воспользоваться для снабжения вашего класса потоковыми возможностями. Однако если вы реализуете интерфейс под названием Runnable в вашем классе, то Java предоставит вам средства для работы с потоками, позволив создать новый объект Thread, который может быть как внешним, так и внутренним по отношению к вашему классу.
Диаграмма. Жизненный цикл прикладного модуля Java
Стрелки показывают события, происходящие в браузере; прямоугольники представляют соответствующие функции класса прикладного модул Java, вызываемые для обработки событий.
Выход из
_______ _______ страницы _______ _______
| | | | --------> | | | |
| init | ----------> | start | <-------- | stop | -------> |destroy|
|_______| Активизация |_______| Повторный |_______| Выгрузка |_______|
страницы вход в страницы
страницу
Лучший способ получить представление о каком-либо языке - начать программировать на нем. Вместо надоевшей программы "hello world" мы займемс составлением примера прикладного модуля, который "оживляет" логотип PC Magazine, перемещая его влево и вправо в окне. Этот пример проиллюстрирует несколько важных концепций программирования на Java, таких как класс, обладающий потоковыми возможностями, множество интерфейсов в одном классе, простая анимация, передача параметров из HTML-страницы, содержащей прикладной модуль, получение дополнительных файлов с сервера Web, обработка исключительных ситуаций и событий.
Мы рассмотрим, как создается прикладной модуль, как он инициализирует себя, анимирует GIF-файл, как пользователь взаимодействует с ним в течение его "жизненного цикла" и, наконец, как он уничтожается.
Первое, что следует сделать, принимаясь за подготовку нового прикладного модуля Java, - создать новый класс, производный от класса java.applet.Applet. В нашем прикладном модуле этот новый класс получил им Simple, в нем имеется несколько принадлежащих функций, которые вызываются средой выполнения Java в различные моменты жизненного цикла данного модуля (см. диаграмму). Перечислим эти функции - init(), start(), stop() и destroy(). Функция init() вызывается, когда прикладной модуль впервые загружается из сети Web-браузером. Функция start() вызывается после активизации Web-страницы браузером (когда пользователь впервые или повторно "посещает" страницу), а обращение к функции stop() следует, когда пользователь "покидает" страницу. Вы, как добропорядочный гражданин страны Java, должны приостановить выполнение своего прикладного модуля, когда Web-браузер вызывает функцию stop(). Функция destroy() вызывается, только когда браузер удаляет прикладной модуль из памяти. В этот момент вы высвобождаете все занятые вами ресурсы.
Java вызывает функцию init() нашего прикладного модуля для того, чтобы инициализировать данный экземпляр прикладного модуля. Прикладной модуль использует параметры с запустившей его HTML-страницы, чтобы выяснить, сколько необходимо места на экране. Параметры устанавливаются внутри кодовой последовательности <APPLET> исходного файла HTML:
<APPLET CODE=Simple.class WIDTH=300 HEIGHT=300
STEPSIZE=10 INTERVAL=100>
</APPLET>
Эти параметры нам нужны до того, как прикладной
модуль появится на странице Web. Вызвав функцию
getParameter(), реализованную в нашем суперклассе
java.applet.Applet, мы сможем получить параметры с
нашей страницы Web. Функция getParameter() передает в
вызывающую программу объект String, который должен быть
преобразован в простое целочисленное значение int.
Следующие строки программы
String ap = getParameter("STEPSIZE");
stepSize = (ap != null) ?
Integer.valueOf(ap).intValue() : 5;
демонстрируют интересный способ использования классов в
Java для выполнения требуемого преобразования типов. В
первой строке мы создаем новый объект String и
инициализируем его значением String, переданным
функцией getParameter(). Вторая строка программы
показывает, как в Java можно ссылаться на класс так,
будто это объект. Java автоматически создает экземпляр
объекта Integer, выполняя собственно преобразование
типов.
Наш прикладной модуль также должен загрузить GIF-файл для логотипа PC Magazine с нашего Web-сервера. Мы приступаем к загрузке, вызывая элемент-функцию класса Applet, getImage(), которая получает два параметра - URL и имя файла - и передает в вызывающую программу объект Image. Из соображений безопасности прикладной модуль Java не может установить сетевое соединение ни с одной центральной машиной, за исключением той, с которой он был загружен. Поэтому в модуле используется функция getCodeBase(), чтобы получить единственный доступный ему URL - центральной машины нашего прикладного модуля.
Затем нам необходимо узнать размеры объекта Image. Вместо того чтобы жестко задавать размер GIF-изображения в нашем прикладном модуле или в параметрах, встроенных в HTML-страницу, мы можем попросить, чтобы объект Image сам сообщил нам свой размер. Но одна из заложенных в язык Java фундаментальных конструктивных особенностей делает эту задачу не столь простой, как может показаться на первый взгляд: Java намеренно откладывает фактическую передачу объектов по Internet до того момента, пока это не станет абсолютно необходимым (то есть до тех пор, когда изображение должно быть выведено на экран). Просто вызов функции getImage() в действительности не загружает GIF-образ. Вместо этого мы должны асинхронно запросить размеры объекта Image. Асинхронная обработка в Java становится возможной благодаря использованию интерфейса обратных вызовов (callback interface). Наш класс Simple реализует интерфейс ImageObserver, обладающий единственной функцией, imageUpdate. При обращении к этой функции размер изображения передаетс в списке ее параметров в ходе фактической загрузки изображения в память, и теперь его размеры известны.
После того как прикладной модуль инициализирован, мы готовы к тому, чтобы начать его выполнение. Класс Simple является многопотоковым, но, поскольку наш класс уже унаследовал компоненты от класса java.applet.Applet, мы не можем использовать механизм наследования для того, чтобы наделить наш класс потоковыми возможностями. Вместо этого нам придетс реализовать интерфейс Runnable с его единственной принадлежащей функцией run(). Этот метод будет вызываться из созданного вовне объекта Thread в момент, когда придет время начать выполнение класса Simple.
Когда браузер будет готов к запуску нашего прикладного модуля, он вызовет функцию start() этого модуля. В этот момент мы создаем новый потоковый объект, moveImage, который управляет исполнением нашего объекта Simple. Затем мы вызываем принадлежащую функцию start() объекта Thread, который в свою очередь вызывает функцию run() интерфейса Runnable объекта Simple.
Интерфейс Runnable управляет исполнением нашего класса Simple. Функция run() интерфейса Runnable содержит бесконечный цикл: предложение while (True) с вложенным в него блоком try...catch. Это хорошо иллюстрирует возможности Java по обработке исключительных ситуаций. Обработчик исключительных ситуаций выявляет любые события, прерывающие исполнение нашего потока (такие, как нажатие пользователем клавиши Ctrl-C в программе AppletViewer, поставляемой в комплекте с JDK). При возникновении исключительной ситуации мы уничтожаем поток, в котором происходило исполнение, и покидаем функцию run().
Каким образом мы анимируем логотип PC Magazine? После того как поток передвигает объект Image на один шаг влево или вправо, функция run() переводит поток в состояние ожидания. Если run() обнаруживает, что объект Image достиг левой или правой границы видимой области прикладного модуля, она меняет направление движения на противоположное и отправляет объект в нужную сторону. После активизации потока функция run() перекрашивает просмотровую область прикладного модуля.
Как и любой другой язык, используемый для создани прикладных программ, исполняемых в среде графического интерфейса пользователя, Java должен располагать средствами обработки системных сообщений. Например, когда операционная система требует, чтобы наше окно было перерисовано, скажем, в ответ на перемещение пользователем перекрывающегося окна, для того чтобы открыть находящееся под ним окно нашего прикладного модуля, ОС проинформирует нас, и функция paint() языка Java возьмет выполнение этой задачи на себя. Paint() получает единственный параметр, объект Graphics, который представляет собой инкапсуляцию логической поверхности, на которую наносится рисунок. Функци paint() разрешает все проблемы, возникающие при визуализации логической поверхности рисунка, использу функции API операционной системы. Перенесение логотипа PC Magazine на логическое представление окна, в котором выполняется наш прикладной модуль, мы осуществляем с помощью элементов-функций класса Graphics.
Чтобы познакомиться с прикладным модулем, обратитесь к Web-серверу PC Magazine (http://www.pcmag.com). Вы можете загрузить все исходные тексты из оперативной информационной службы PC Magazine Online.
Инструменты Java сегодня
Джон Лэм
Программисты, работающие с языком Си++, привыкли к интегрированным средам разработки (IDE-UCP). Поскольку язык Java очень похож на Си++, представляется естественным сравнение среды разработки Java с существующими средами разработки Си++. Неудивительно, что среды разработки Java, рассматриваемые в данном обзоре, являются либо близкими родственниками, либо расширениями существующих ИСР Си++.
Разработчикам необходимо, чтобы интегрированна среда разработки обеспечивала пять основных возможностей: редактирование и просмотр исходного текста, редактирование ресурсов прикладных программ, интегрированная компиляция, интегрированная отладка и оперативная подсказка. Мы оценим каждую среду разработки Java по этим категориям, наиболее важна из которых, по всей видимости, - оперативна подсказка: при изучении нового языка полезно иметь быстрый доступ к документации языка и его библиотеке классов.
Сегодня: три претендента
Ко времени написания данной статьи в продаже имелись три среды для создания прикладных модулей (applets) и программ (applications) Java для Windows 95 и Windows NT 3.51.
Набор средств разработки Java Developer's Kit (JDK), версия 1.0 фирмы Sun Microsystems содержит компилятор Java, рабочие библиотеки Java для Windows 95 и NT, и простой отладчик с вызовом из командной строки. Мы также рассмотрим два продукта, поставляемые вместе с JDK и существенно улучшающие его характеристики: Symantec Cafe фирмы Symantec и Borland C++ Development Suite 5.0 фирмы Borland International.
Java Developer's Kit
В наборе JDK, версия 1.0, содержится минимальный набор инструментов и документации, необходимый вам для создания прикладных модулей и программ Java. В комплект инструментов входят компилятор Java, утилита просмотра Java AppletViewer и простой отладчик, вызываемый из командной строки. Необходимые библиотеки классов Java - вместе с исходными текстами - также включены в пакет поставки. Чтобы помочь вам в освоении языка, в JDK имеются набор документации по библиотекам классов и множество примеров Java-модулей.
К сожалению, JDK не обладает инструментами, позволяющими облегчить создание прикладных модулей Java. Нет возможности вести поиск в документации нужной информации, как в стандартных help-файлах Windows. (К счастью, уже сейчас вы можете получить документацию по библиотекам классов Java, преобразованную в формат help-файлов Windows, по адресу http://www.dippybird.com/java.html). В пакете JDK не предусмотрены редактор исходных текстов Java, инструмент make для создания проектов Java и удобные средства для формирования визуальных элементов прикладных модулей Java. Программистам с большим стажем работы в среде Windows это напомнит те дни, когда они создавали ресурсы диалогов с помощью блокнота Notepad.
Однако единственное, на что вы не сможете пожаловаться, - так это цена комплекта JDK: он загружается бесплатно с Web-сервера Java фирмы Sun. Воспользуйтесь им, чтобы как следует присмотреться к Java, прежде чем принять решение о покупке полного комплекта инструментов разработки Java. По крайней мере вы сможете скомпилировать образец прикладного модуля с помощью компилятора и написать простую программу, чтобы разобраться, что к чему. Но, когда вы будете готовы к большему, вам понадобитс настоящая среда разработки.
Java Developer's Kit 1.0Symantec Cafe
Цена, рекомендуемая изготовителем: бесплатно.
Sun Microsystems Inc., Mountain View, CA; 800-821-4643, 415-960-1300;
http://www.javasoft.com.
Symantec Cafe - автономная среда разработки Java на основе прекрасного инструментального комплекта для Си++ фирмы Symantec. Неудивительно, что Cafe обладает многими возможностями этого продукта, обеспечивая достаточно полную среду для создани прикладных модулей и программ Java.
Управление файлами исходных текстов для проектов и ассоциированными с ними окнами - именно та задача, в решении которой пытаются помочь разработчикам различные ИСР. Cafe облегчает управление окнами, создавая набор виртуальных "рабочих столов", навигация по которым происходит с помощью простых закладок. Cafe делит эти "рабочие столы" на пять категорий: Editing (Редактирование), Project (Проект), Output (Вывод), Desktop (Рабочий стол) и Debugging (Отладка). Для каждого "рабочего стола" вы можете провести индивидуальную настройку внешнего вида и компоновки отдельных окон с исходным текстом.
Важны также вопросы навигации и редактировани исходных файлов вашего проекта. Cafe позволяет выполнять навигацию по файлам и классам и, кроме того, обеспечивает цветовое выделение синтаксических конструкций в ваших исходных файлах во врем редактирования. Редактор тесно интегрирован как с файлами подсказки, так и с компилятором. Когда в ходе компиляции обнаруживается ошибка, вы можете перейти от сообщения об этом в выходном окне к соответствующей строке исходного текста.
Байт-кодовый компилятор Cafe зарекомендовал себ блестяще. В отличие от javac, компилятора Java, входящего в пакет JDK, компилятор Cafe работает значительно быстрее, что существенно сокращает врем выполнения всего цикла компилирования - тестировани - отладки. Среда выполнения Java тоже была оптимизирована, в результате чего прикладные программы Java здесь выполняются намного быстрее, чем в среде выполнения, обеспечиваемой JDK. Однако имейте в виду, что с точки зрения конечного пользователя производительность вашего прикладного модуля будет определяться реализацией среды выполнения Java на принимающей системе.
Cafe располагает интегрированным отладчиком, который обладает функциональными возможностями, привычными для программирующих на языке Си++. Cafe также позволяет назначать простые или условные точки прерывания, выполнять трассировку списка последовательности вызовов, просматривать выражения, выполнять программы в пошаговом режиме и "перешагивать" через процедуры. Вы можете даже проводить динамическую отладку многопотоковых прикладных модулей Java.
Спецификация языка Java не касается определени ресурсов, но для компоновки объектов окна пользовательского интерфейса, предусмотренных в вашем прикладном модуле Java, Cafe обращается к редактору ресурсов Windows. Это дает вам возможность "перетащить" с помощью метода drag-and-drop объекты окна в какую-либо форму и даже "привязать" к ним обработчики событий. Cafe сохраняет эту информацию в rc-файле Windows и генерирует программный код Java, необходимый для размещения объектов пользовательского интерфейса в этой форме. Вы можете назначить обработчик событий событию-щелчку кнопки, щелкнув на кнопке, выбрав закладку Events (События) из списка свойств кнопки, а затем событие-щелчок мышью. После этого Cafe создаст пустую процедуру-"заглушку", представит вам эту процедуру в редакторе, чтобы вы могли добавить собственный фрагмент программы для обработки событий.
В момент, когда эта статья готовилась к печати, пакет Symantec Cafe был наилучшим выбором дл большинства разработчиков Java. Дополнительную информацию вы сможете получить в разделе "На первый взгляд", PC Magazine/RE, 8/96.
Symantec CafeBorland C++ Development Suite 5.0
Цена, рекомендуемая изготовителем: 299,95 долл.
Symantec Corp., Cupertino, CA; 800-441-7243, 408-253-9600;
http://cafe.symantec.com/
В новом пакете Borland C++ Development Suite 5.0, в состав которого входит дополнительный набор инструментов для Java, фирма Borland выгодно использует свою удостоенную многих похвал среду Си++ для организации высокопродуктивной ИСР создани прикладных модулей и программ Java. Но Development Suite - не автономная среда разработки Java; некоторая непоследовательность в подходе фирмы Borland умаляет привлекательность этого продукта.
Development Suite - прекрасная среда дл просмотра и редактирования файлов исходного текста; она очевидно выигрывает от наличия средств управления проектом и просмотра файлов, превративших ИСР фирмы Borland в столь продуктивную среду. Пакет Development Suite обеспечивает управление файлами проекта, интегрированное управление версиями средствами PVCS и редактор с цветовым выделением синтаксических конструкций.
В нем также предусмотрен AppAccelerator, одна из первых реализаций "своевременного" (just-in-time) компилятора Java. AppAccelerator компилирует байт-код, сгенерированный компилятором javac фирмы Sun, перед его исполнением в "родные" машинные команды. Благодаря этому можно получить значительный прирост производительности; данный метод дает представление о том, как в будущем будут исполнятьс прикладные модули Java. Как и в случае с оптимизированной средой выполнения Java фирмы Symantec, в конечном счете быстродействие прикладных модулей будет определяться средой выполнени компьютеров конечных пользователей.
Недостатки пакета Development Suite проявляются в отладчике Borland Graphical Debugger. Отладчик, составленный на языке Java, должен запускаться в среде выполнения Java перед запуском прикладной программы. Отладчик Borland располагает большинством необходимых разработчику средств, таких как точки прерывания, просмотра и трассировка списка последовательности вызовов, но он работает медленно и не всегда надежно. Ему также требуется чрезмерно много времени для запуска сеанса отладки, да и сам он подвержен необратимым отказам.
К сожалению, Development Suite не дает возможности графического построения форм; вы должны вручную рассчитать координаты различных объектов пользовательского интерфейса и затем внести полученные значения в текст вашей программы. Пакету Development Suite также недостает способности связывать события с объектами, так что вам придетс вручную составлять программы обработчиков для тех событий, на которые вы хотите реагировать. Хотя эти функции не являются абсолютно необходимыми, они экономят массу времени и должны быть предусмотрены в будущих версиях пакета.
Borland C++ Development Suite 5.0Когда статья готовилась к печати
Цена, рекомендуемая изготовителем: 499,95 долл.
Borland International Inc., Scotts Valley, CA; 800-645-4559;
http://www.borland.com/.
Ряд новых инструментов Java появился слишком поздно, чтобы попасть в этот обзор. Компания Rogue Wave (http://www.roguewave.com.) недавно объявила о выпуске среды разработки JFactory, а корпораци Microsoft сообщила предварительную информацию о своей среде разработки Jakarta на конференции профессиональных разработчиков для Internet (Internet Professional Developer's Conference), фирма Sun Microsystems представила бета-версию продукта Java Workshop, оснащенную ГИП среды разработки, состоящей из редактора исходного текста, отладчика и диспетчера портфеля (portfolio manager). В связи с неуклонно растущей популярностью Java в скором времени следует ожидать появления еще большего числа продуктов данного класса.
Технологии ActiveX фирмы Microsoft
Джон Лэм
Является ли язык Java единственным инструментом для создания интерактивных прикладных программ дл Web? С недавних пор это не так. В ходе конференции профессиональных разработчиков для Internet (Internet Professional Developer's Conference - PDC) фирма Microsoft представила свои технологии ActiveX для создания интерактивных прикладных программ Web. В их составе клиентские технологии, серверные технологии, инструменты и прикладные программы.
Клиентские технологии ActiveX состоят из трех основных компонентов: ActiveX Controls (элементы управления), ActiveX Documents (документы) и ActiveX Scripting (средства создания сценариев). На конференции PDC фирма Microsoft продемонстрировала набор средств разработки ActiveX Development Kit, который можно бесплатно загрузить с Web-сервера Microsoft (http://www.microsoft.com/intdev/sdk/). В набор входят документация, образцы программ и библиотеки программ, которые позволят вам приступить к написанию клиентских прикладных программ ActiveX с использованием технологий ActiveX.
Элементы управления ActiveX Controls функционируют точно так же, как привычные средства управления OLE (OCX): они могут располагатьс локально на клиентской машине или загружаться из Internet. Вы можете использовать ActiveX Controls для управления взаимодействием с пользователем на клиентской стороне. Элемент управления ActiveX Control может быть простым, как кнопка, и сложным, как инструмент составления отчетов. Поскольку те же элементы управления ActiveX Controls могут использоваться в Visual Basic, следует ожидать широкого распространения элементов управлени ActiveX Controls, пригодных к применению в ваших Web-страницах.
Для координации действий элементов управлени ActiveX Controls на страницах Web в распоряжении разработчиков имеются средства создания сценариев ActiveX Scripting, для которых применяютс существующие ныне языки VBScript и JavaScript. Эти языки создания сценариев используют автоматизацию OLE для обмена информацией с элементом управлени ActiveX Control, который инициирует события OLE, обрабатываемые программой ActiveX Script в ответ на действия пользователя (такие, как щелчок на кнопке элемента управления ActiveX).
Документы ActiveX Documents - великолепный образец программной технологии. Воспользовавшись браузером Microsoft Internet Explorer 3.0, вы сможете наряду с HTML-страницами просматривать и активные документы. Кроме того, вы можете дать пользователям возможность перемещаться по документам, просматривать и редактировать их содержимое - что невозможно осуществить лишь средствами HTML - не выходя из среды Web-браузера, и тем самым предоставите в их распоряжение соответствующий интерфейс. Будуща модернизированная версия Explorer (рабочее название Nashville), которая выйдет в свет в конце 1996 г., позволит вам взаимодействовать со своим локальным жестким диском, локальной вычислительной сетью и сетью Internet с помощью одного и того же пользовательского интерфейса.
ОБ АВТОРЕ: Джон Лэм - директор подразделения разработки программного обеспечения Continuous Research компании, специализирующейся на создании дл разработчиков инструментов на базе OCX.