Часть V.
Приложения клиента: язык Java

"То, что не излечивается лекарствами, излечивается ножом; то, что не излечивается ножом, излечивается раскаленным железом; то, что не излечивается раскаленным железом, следует считать неизлечимым."

Гиппократ

Глава 5.1. Введение в язык Java

5.1.1. Что такое Java?

Java — это мощный язык программирования, разработанный в 1995 г. фирмой Sun Microsystems для интерактивного телевидения и управления бытовыми устройствами. Однако, быстрое развитие Сети открыло истинное призвание Java — создание небольших программ, называемых аплетами (applets), которые могут быть загружены Веб-обозревателем с сервера и исполнены на стороне клиента. По ряду причин, подробно рассмотренных ниже, Java стал обязательным атрибутом каждого Веб-сервера и каждого Веб-обозревателя, претендующего на соответствие требованиям современности.

Популярность Java в World Wide Web объясняется тем, что он имеет одно принципиальное отличие от всех остальных языков программирования. Как известно, все языки делятся на компилируемые и интерпретируемые. Программа на компилируемом языке (например, C++) перед использованием должна быть предварительно скомпилирована и собрана в загрузочный модуль в машинных кодах. Такой модуль характеризуется высокой скоростью работы, но он жестко привязан к конкретной платформе и конкретной операционной системе; для его переноса в другую среду требуется перекомпиляция всей программы. Интерпретируемые языки (например, JavaScript, Perl и вообще все сценарные языки) не требуют предварительной компиляции, программы на них исполняются интерпретатором, который читает исходный текст программы и немедленно его исполняет. Преимуществом таких языков является их гибкость и быстрота разработки, а недостатком — низкая скорость работы и полная зависимость от исполняющей системы (высокий уровень языка требует высокого уровня исполняющей среды, а это всегда приводит к несовместимости).

Разработчики Java избрали средний путь, который состоит в следующем. Программа на языке Java (обычно это файл с расширением .java) компилируется в промежуточный стандартный код, который называется байт-кодом (такие файлы имеют расширение .class). Этот код не является машинным языком какого-либо конкретного процессора, а специально создан авторами Java; его следует рассматривать как язык ассемблера виртуальной Java-машины, не имеющей физической реализации. Для того, чтобы скомпилированная Java-программа могла исполняться на конкретном компьютере, на него нужно установить программу, интерпретирующую байт-коды Java (обычно эту программу также называют виртуальной Java-машиной). Поскольку байт-коды Java — это язык уровня ассемблера, нетрудно добиться полной совместимости реализаций виртуальных машин для разных платформ. Описанный процесс графически выглядит так:

Этапы исполнения Java-программы

В результате мы получаем платформо-независимый язык, программы на котором исполняются существенно быстрее, чем на интерпретируемых языках (хотя, конечно, существенно медленнее, чем на языках компилируемых, но это обязательная плата за независимость от платформы). Описанное соотношение языков программирования проиллюстрировано на следующем рисунке:

Классификация языков программирования

Концепция виртуальной машины имеет ряд следствий, важных для применения Java в Сети.

  • Прежде всего, виртуальная машина позволяет решить проблемы безопасности компьютера, на котором исполняется Java-программа; последняя видит только виртуальную машину и ничего не знает о физической среде исполнения, а, следовательно, мы можем четко определить полномочия данной программы по доступу к файлам, каталогам и пр. составляющим операционной среды.
  • Поскольку Java-программа хранится в виде байт-кодов, сервер может передать ее на компьютер-клиент, а тот немедленно запустить ее исполнение (разумеется, при условии, что на клиенте установлена виртуальная Java-машина). Именно так работают аплеты, что и обеспечило их популярность.
  • Виртуальная Java-машина устроена так, что позволяет собирать программы по кусочкам во время исполнения (это называется динамическим связыванием модулей). Поскольку исполняющая система Java содержит помимо самой виртуальной машины большую библиотеку стандартных модулей, динамическое связывание позволяет нам передавать по Сети только написанные нами для конкретной задачи модули, что резко сокращает объем передаваемой информации.

Наше описание языка Java соответствует спецификации Java 2, которая является на сегодня базовой для существующих реализаций. Описание стандартных пакетов, используемых для создания аплетов, соответствует Sun Java SDK 1.3.1, который использовался автором для отладки приведенных ниже примеров.

5.1.2. Обзор языка

В основу Java был положен синтаксис C++, но в некоторых отношениях эти два языка существенно различаются. Можно сказать, что Java представляет собой C++, из которого убраны все потенциально опасные конструкции и добавлены несколько идей из других языков программирования. В частности, Java не имеет препроцессора, запрещает прямой доступ к памяти и арифметику указателей, не допускает переопределения операторов и не поддерживает множественного наследования классов. С другой стороны, Java является строготипизированным языком, поддерживает динамическое управление памятью (включая сборку мусора) и многопотоковое выполнение программ.

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

5.1.3. Создание и выполнение Java-программ

Для создания программ на языке Java необходимо установить на свой компьютер соответствующее программное обеспечение. Java 2 SDK корпорации Sun включает в себя компилятор, виртуальную машину, библиотеку стандартных классов и несколько полезных утилит. Последнюю версию SDK можно бесплатно загрузить с узла http://java.sun.com/j2se/1.3/index.html Внешняя ссылка.

Порядок разработки и отладки программы на языке Java таков:

  • Исходный текст программы набирается в любом текстовом редакторе и сохраняется в файле с расширением .java, например myfile.java.
  • Этот файл компилируется командой javac myfile.java. Если компиляция прошла успешно, то создается файл байт-кодов myfile.class.
  • Этот файл пригоден для исполнения. Если мы написали Java-программу, то он исполняется командой java myfile.class, а если Java-аплет, то командой appletviewer myfile.class.

Отметим, что стандартный дистрибутив Java SDK не содержит интегрированной среды разработки и отладки программ, без которой написание Java-аплетов превращается в длинный и нудный процесс. Поэтому для создания сколь-нибудь серьезных аплетов вам понадобится интегрированная среда; лучшими (из бесплатных) на сегодня являются Forte for Java Внешняя ссылка и Borland JBuilder Внешняя ссылка.

После завершения отладки вызов аплета может быть включен в текст HTML-документа и выполнен Веб-обозревателем. Этот процесс был описан ранее и будет более подробно рассмотрен в примерах данной части.