Смекни!
smekni.com

Платформа Windows NT Платформа Apple Macintosh

Изменение исходного

текста программы


Рис. 2. Перенос приложения с платформы Windows NT

на платформу Macintosh

Вначале программист готовит исходные тексты приложения для платформы Windows NT и отлаживает их там. Для получения загрузочного модуля исходные тексты компилируются и редактируются. Полученный в результате загрузочный модуль может работать на процессоре фирмы Intel в среде операционной системы Windows NT.

Для того чтобы перенести приложение в среду операционной системы компьютера Macintosh, программист вносит необходимые изменения в исходные тексты приложения. Эти изменения необходимы из-за различий в программном интерфейсе операционной системы Windows NT и операционной системы, установленной в Macintosh. Далее эти исходные тексты транслируются и редактируются, в результате чего получается загрузочный модуль, способный работать в среде Macintosh, но не способный работать в среде Windows NT.

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

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

Сказанное иллюстрируется на рис. 3.

Платформа Windows NT Платформа Apple Macintosh


Платформа Sun Solaris


Рис. 3. Подготовка приложения Java для работы на разных платформах

Таким образом, приложение Java компилируется и отлаживается только один раз, что уже значительно лучше. Остается, правда, вопрос - как быть с программным интерфейсом операционной системы, который отличается для разных платформ?

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

Внутренняя реализация библиотек классов, разумеется, зависит от платформы. Однако все загрузочные модули, реализующие возможности этих библиотек, поставляются в готовом виде вместе с виртуальной машиной Java, поэтому программисту не нужно об этом заботиться. Для операционной системы Windows, например, поставляются библиотеки динамической загрузки DLL, внутри которых запрятана вся функциональность стандартных классов Java.

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

Еще одна проблема, возникающая при переносе программ, составленных на языке программирования С, заключается в том, что размер области памяти, занимаемой переменными стандартных типов, различный на разных платформах. Например, в среде операционной системы Windows версии 3.1 переменная типа int в программе, составленной на С, занимает 16 бит. В среде Windows NT этот размер составляет 32 бита.

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

В языке Java все базовые типы данных имеют фиксированную разрядность, которая не зависит от платформы. Поэтому программисты всегда знают размеры переменных в своей программе.

Глава 2. Введение в Java

2.1 Версии языка Java. Средства разработки.

Язык Java с момента создания находится в постоянном развитии. В реализации Java 1.1.6 находилось 23 пакета (в Java 1.0.2 их было 8), а количество классов – 503 (211). Последняя версия языка 2.0. Что касается средств разработки приложений и аплетов Java, то первоначально они были созданы фирмой Sun Microsystems и до сих пор пользуются популярностью. Базовой стандартной средой разработки является пакет JDK (Java Development Kit) фирмы Sun. Последняя версия этого пакета на сегодняшний день 1.4.0. Средства JDK не имеют графического интерфейса и запускаются из командной строки. Существует также множество других визуальных средств, таких как JBuilder, Symantec Cafe, VisualJ, Java WorkShop, Java Studio и другие. При написании программ в данной курсовой работе мной использовался стандартный набор JDK v. 1.4.0.

2.2. Примеры создания автономного Java приложения и

апплета.

В этой главе будет создана каноническая программа “HelloJava”. Эта программа будет создана в виде обычного Java приложения и в виде апплета.

2.2.1. Создание Java-приложения “HelloJava”.

Для создания программы можно использовать любой текстовый редактор, например Блокнот. Создаётся в Блокноте текстовый документ с расширением java и именем HelloJava и набирается следующий текст:

public class HelloJava

{

public static void main(String args[])

{

System.out.println("Hello, Java!");

} }

Язык Java требует, чтобы весь программный код был заключен внутри поименованных классов. Приведенный выше текст примера надо записать в файл HelloJava.java. Обязательно соответствие прописных букв в имени файла тому же в названии содержащегося в нем класса. Для того, чтобы оттранслировать этот пример необходимо запустить транслятор Java — javac, указав в качестве параметра имя файла с исходным текстом:

С: \> javac HelloJava.Java

Транслятор создаст файл HelloJava.class с независимым от процессора байт-кодом примера. Для того, чтобы исполнить полученный код, необходимо иметь среду времени выполнения языка Java (программа java), в которую надо загрузить новый класс для исполнения. Важно то, что в качестве параметра указывается имя класса, а не имя файла, в котором этот класс содержится, т.е. расширение class не указывается.

С: > java HelloJava

Если всё прошло успешно, т.е. если ни транслятор, ни интерпретатор не выдал сообщения об ошибке, то на экране появится строка Hello, Java!

Конечно, HelloJava — это тривиальный пример. Однако даже такая простая программа знакомит с массой понятий и деталей синтаксиса языка.

Строка 1

public class HelloJava

В этой строке определен один класс типа public с именем HelloJava. Полное описание класса располагается между открывающей фигурной скобкой во второй строке и парной ей закрывающей фигурной скобкой в строке 7.Заметим, что исходный файл приложения Java может содержать только один класс public, причем имя файла должно в точности совпадать с именем такого класса. В данном случае исходный файл называется HelloJava.java. Если назвать файл helloJava.java, транслятор выдаст сообщение об ошибке. И ещё если класс типа public с именем, совпадающем с именем файла, содержит определение метода main, то такой метод служит точкой входа автономного приложения Java. В этом он напоминает функцию main обычной программы, составленной на языке программирования C.

Строка 3

public static void main(String args [])

Такая большая длина строки является следствием важного требования, заложенного при разработке языка Java. Дело в том, что в Java отсутствуют глобальные функции. Рассмотрим каждый элемент третьей строки.

public

Это — модификатор доступа, который позволяет программисту управлять видимостью любого метода и любой переменной. В данном случае модификатор доступа public означает, что метод main виден и доступен любому классу.

static

Следующее ключевое слово — static. С помощью этого слова объявляются методы и переменные класса, используемые для работы с классом в целом. Методы, в объявлении которых использовано ключевое слово static, могут непосредственно работать только с локальными и статическими переменными.

void

Нужно просто вывести на экран строку, а возвращать значение из метода main не требуется. Именно поэтому и был использован модификатор void.

main

Все существующие реализации Java-интерпретаторов, получив команду интерпретировать класс, начинают свою работу с вызова метода main. Java-транслятор может оттранслировать класс, в котором нет метода main. А вот Java-интерпретатор запускать классы без метода main не умеет.