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

23.04.2019
Категорії: Книги по Java

На появление первой версии Java в 1996 году откликнулись не только специа­лизированные компьютерные газеты и журналы, но даже такие издания, как The New York Times, The Washington Post и Business Week. Java - единственный язык про­граммирования, удостоившийся десятиминутного репортажа на National Public Radio. Это было удивительное время. Тем дням и последующей истории языка Java посвящена данная глава.

Оглавление

Введение в язык Java

В этой главе...

  • Программная платформа Java
  • Характерные особенности языка Java
  • Java и Internet
  • История языка Java
  • Распространенные заблуждения относительно языка Java

На появление первой версии Java в 1996 году откликнулись не только специа­лизированные компьютерные газеты и журналы, но даже такие издания, как The New York Times, The Washington Post и Business Week. Java - единственный язык про­граммирования, удостоившийся десятиминутного репортажа на National Public Radio. Это было удивительное время. Тем дням и последующей истории языка Java посвящена данная глава.

П рограммная платформа Java

В первой редакции этой книги говорилось следующее.

По поводу этого абзаца наш редактор долго спорил с одним из руководителей ком­пании Sun. Но и сейчас, по прошествии долгого времени, такая оценка кажется нам правильной. Действительно, Java обладает целым рядом преимуществ, о которых мы поговорим чуть позже. Однако более поздние дополнения далеко не так элегантны, как исходный вариант языка, и виной тому пресловутые требования совместимости.

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

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

Х арактерные особенности языка Java

  • простой;
  • переносимый;
  • объектно-ориентированный;
  • интерпретируемый;
  • распределенный;
  • высокопроизводительный;
  • надежный;
  • многопотоковый;
  • безопасный;
  • динамичный,
  • не зависит от архитектуры компьютера;

В данном разделе мы

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

Руководство, о котором идет речь, можно найти по адресу http://java.sun.com/docs/white/langenv/ . Характерные особенности Java описаны в документе, который находится по адресу ftp://ftp.javasoft.com/docs/papers/java-overview.ps .

Простота

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

Синтаксис языка Java, по существу, представляет собой упрощенный вариант син­таксиса языка С++. В этом языке нет файлов заголовков, указателей структур, объеди­нений, перегрузки операторов, виртуальных базовых классов и т.п. (Различия между Java и С++ упоминаются на протяжении всей книги.) Однако разработчики не стреми­лись исправить все недостатки языка С++. Например, синтаксис оператора switch в языке Java остался неизменным. Зная С++, несложно перейти к языку Java.

Если вы привыкли к визуальной среде программирования (например, Visual Basic), язык Java может показаться сложным. Его синтаксис некоторые считают странным (хотя понять смысл выражения не составляет труда). И что самое главное, при работе на языке Java приходится намного больше программировать. Начинающие программи­сты нередко предпочитают Visual Basic, так как его визуальная среда программирования позволяет почти автоматически создавать инфраструктуру приложения. Чтобы достичь того же результата с помощью языка Java, необходимо вручную написать достаточно большой объем кода, но программы, получающиеся при этом, более компактны.

"Другой аспект простоты - краткость. Одна из целей языка Java - обеспечить раз­работку независимых программ, способных выполняться на машинах с ограничен­ным объемом ресурсов. Размер основного интерпретатора и средств поддержки клас­сов составляет окало 40 Кбайт; стандартные библиотеки и средства поддержки потоков, в том числе автономное микроядро (self-contained microkernel), занимают еще 175 Кбайт".

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

Поддержка объектов

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

За прошедшие 30 лет объектный подход уже доказал свое право на жизнь, и без не­го невозможно представить себе современный язык программирования. Действи­тельно, особенности Java, связанные с объектами, сравнимы с языком С++. Основное различие между ними заключается в механизме множественного наследования, кото­рый в языке Java заменен механизмом интерфейсов. Механизмы отражения (см. гла­ву 5) и сериализации (см. главу 12) позволяют реализовать постоянные (persistent) объекты и средства для создания графически^ пользовательских интерфейсов на ос­нове готовых компонентов.

Если вы никогда не использовали объектно-ориентированные языки, внимательно изучите главы 4-6. В них излагаются основы объектного подхода и демонстрируются его преимущества над такими традиционными, процедурно-ориентированными язы­ками, как С или Вasic, проявляющиеся при разработке сложных проектов.

Поддержка распределенных вычислений

"Язык Java предоставляет разработчику обширную библиотеку программ дм передачи данных на базе протоколов TCP/IP (Transmission Control Protocol/Internet Protocol -протокол, управления передачей/Internet-протокол), HTTP (Hypertext Transfer Protocol -протокол передачи гипертекстовой информации) и FTP (File Transfer Protocol - прото­кол передачи файлов). Приложения, написанные на языке Java, могут открывать объ­екты и получать к ним доступ по сети; при этом для адресации используются URL (Uniform Resource Location - унифицированный локатор ресурсов) ".

Язык Java предоставляет мощные и удобные средства для работы в сети. Каждый, кто когда-либо пытался писать программы для работы в глобальной сети, будет при­ятно удивлен тем, как легко решаются на Java самые трудные задачи, например от­крытие гнезд (socket). (Работа в сети будет описана во втором томе данной книги.) Связь между распределенными объектами в языке Java обеспечивается механизмом вызова удаленных методов (эта тема также затрагивается во втором томе).

В настоящее время сложные распределенные приложения обычно реализуются на базе Java 2 Enterprise Edition (J2EE).

Надежность

"Язык Java предназначен для написания программ, которые должны надежно рабо­тать в любых ситуациях. Основное внимание в данном языке уделяется раннему об­наружению возможных ошибок контролю в процессе выполнения программы, а так­же устранению ситуаций, которые могут вызвать ошибки... Единственное сущест­венное отличие языка Java от языка С++ заключается в модели указателей, принятой в Java, которая исключает возможность записи в произвольно выбранную область памяти и повреждения данных".

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

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

Безопасность

"Язык Java предназначен для использования в сетевой или распределенной среде. По этой причине большое внимание было уделено безопасности. Java позволяет созда­вать системы, защищенные от вирусов и несанкционированного доступа."

В первом издании мы написали: "Никогда не говори никогда", - и оказались правы. Вскоре после выхода первой версии Java Development Kit группа экспертов по вопросам безопасности из Принстонского университета обнаружила первые ошибки в системе за­щиты Java 1.0. Компания Sun Microsystems развернула исследования в области безопас­ности Java-программ. В частности, она обнародовала спецификацию и код виртуаль­ной машины и библиотек, ответственных за защиту. Это ускорило выявление и устра­нение ошибок. Следует заметить, что количество таких ошибок было относительно невелико и чтобы воспользоваться ими, злоумышленник должен был бы обладать доволь­но глубокими знаниями.

Перечислим некоторые ситуации, возникновение которых предотвращает систе­ма безопасности языка Java.

  • Намеренное переполнение стека выполняемой программы - один из распро­страненных способов атаки.
  • Повреждение участков памяти, находящихся за пределами пространства, выде­ленного процессу.
  • Несанкционированное чтение файлов и их модификация.

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

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

Независимость от архитектуры компьютера


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

Эта идея не нова. Более двадцати лет назад она была предложена Никлаусом Виртом (Niclaus Wirth) для языка Pascal; эта же технология была реализована в системе UCSD Pascal. Очевидно, что код, интерпретируемый с помощью виртуальной машины, всегда будет работать медленнее, чем машинные инструкции, поэтому целесообразность та­кого подхода у многих вызывает сомнение. Однако эффективность байтового кода можно существенно повысить за счет компиляции, осуществляемой в процессе вы­полнения программы. Этот механизм доказал свою эффективность и даже использо­вался при создании платформы.NET.

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

Переносимость


"В отличие от языков С и С++, ни один из элементов спецификации Java не зависит от реализации. И размер основных типов данных, и арифметические операции над ними строго определены ".

Например, тип int в языке Java всегда означает 32-разрядное целое число. В языках С и С++ тип int может означать как 16-разрядное, так и 32-разрядное це­лое число. Единственное ограничение заключается в том, что размер типа int не может быть меньше размера типа short int и больше размера типа long int. Фиксированный размер числовых типов позволяет избежать многих неприятно­стей, связанных с выполнением программ на разных компьютерах. Бинарные дан­ные хранятся и передаются в неизменном формате, что также позволяет избежать недоразумений, связанных с разным порядком следования байтов на разных плат­формах. Строки сохраняются в стандартном формате Unicode.


"Библиотеки, представляющие собой часть системы, предоставляют интерфейс, обеспечивающий переносимость программ. Например, в языке предусмотрен абст­рактный класс Window и его реализации для операционных систем Unix, Windows и Macintosh".

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

Использование интерпретатора

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

Инкрементное связывание имеет свои преимущества, однако в данном случае оценка несомненно завышена. В любом случае средства разработки Java работают до­вольно медленно. Если вы, например, привыкли к скорости, которую обеспечивает среда Microsoft Visual С++, то, перейдя на Java, вы поначалу будете разочарованы. (Последняя версия Visual Studio существенно проигрывает по сравнению с классиче­ской средой разработки. Независимо от того, каким языком вы пользуетесь, вам явно придется обратиться к руководству с просьбой выделить более быстродействующий компьютер.)

Производительность

"Хотя обычно интерпретируемые байтовые коды имеют достаточную производи­тельность, бывают ситуации, когда требуется еще более высокая эффективность. Байтовые коды можно транслировать во время выполнения программы в машинные команды для процессора, на котором выполняется данное приложение".

Если для выполнения байтовых кодов применяется интерпретатор, не следует употреблять словосочетание "высокая производительность". Однако на многих плат­формах возможен специальный тип компиляции, обеспечиваемый так называемыми синхронными компиляторами (just-in-time Compilers - JIT). Они транслируют байто­вые коды в машинориентированные команды, сохраняют результат в памяти, а затем по мере необходимости вызывают его! Поскольку при этом интерпретация выполня­ется только один раз, данный подход во много раз увеличивает скорость работы. Не­смотря на то что синхронные компиляторы не обеспечивают такой производитель­ности, как компиляторы, ориентированные на конкретные типы процессоров, они работают намного быстрее интерпретаторов, обеспечивая для некоторых программ 10- и даже 20-кратное ускорение. Эта технология постоянно совершенствуется, и не исключено, что со временем она обеспечит скорость, характерную для кода, генери­руемого традиционными компиляторами. Например, синхронный компилятор может определить, какой фрагмент кода выполняется чаще, и оптимизировать его по скоро­сти выполнения.

Поддержка потоков

"Наличие нескольких потоков обеспечивает лучшую интерактивностъ и возмож­ность выполнения программ в реальном масштабе времени ".

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

Динамичность

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


Это очень важно в тех случаях, когда требуется добавить код в уже выполняемую про­грамму. Ярким примером этого является код, который загружается из глобальной сети для выполнения браузером. В версии Java 1.0 получить информацию о работающей программе было непросто, однако последняя версия языка Java раскрывает перед программистом как структуру, так и поведение объектов. Это весьма ценно для систем, которые должны ана­лизировать объекты в ходе выполнения программы. К таким системам относятся средства создания графического пользовательского интерфейса, интеллектуальные отладчики, включаемые компоненты и базы данных.
Компания Microsoft выпустила продукт под названием J++, который очень похож на Java. Синтаксис языка практически совпадает с Java. Подобно Java, J++ использует для выполнения байтовых кодов виртуальную машину, однако интерфейс с внешним кодом существенно отличается. Кроме того, дополнительные языковые конструкции, реали­зованные Microsoft, вряд ли пригодны для чего-то, кроме взаимодействия с Windows API. Основные библиотеки Java и J++ (используемые для работы со строками, с сете­выми соединениями, для поддержки потоков, выполнения математических вычислений и т.д.) совершенно идентичны. В то же время библиотеки для работы с графикой, соз­дания пользовательских интерфейсов и доступа к удаленным объектам существенно отличаются друг от друга. В настоящее время Microsoft прекратила поддержку J++ и со­средоточила свои усилия на другом языке, который называется С# и несколько напо­минает Java, но использует другую виртуальную машину. Создан даже язык J#, предна­значенный для переноса приложений J++ на виртуальную машину, используемую С#. Языки J++, С# и J# в данной книге рассматриваться не будут.

J ava и Internet

При работе по сети Java-программы используются просто - пользователи загружают байтовые коды языка Java по сети и выполняют их на своих машинах. Программы Java, ра­ботающие под управлением Web-браузеров, называются аплетами. Для использования аплета нужен Web-браузер, поддерживающий язык Java и способный интерпретировать бай­товые коды. Лицензия на исходные коды языка Java принадлежит компании Sun, настаи­вающей на неизменности как самого языка, так и структуры его основных библиотек. К сожалению, в реальности все не так. Разные версии браузеров Netscape и Internet Explorer поддерживают разные версии языка Java, причем некоторые из этих версий зна­чительно устарели. Эта неприятная ситуация создает все больше препятствий при разра­ботке аплетов, которые позволяли бы использовать преимущества последней версии язы­ка Java. Чтобы решить данную проблему, компания Sun разработала программу Java Plug-in, позволяющую формировать наиболее современную среду для запуска Java-программ в браузерах Netscape и Internet Explorer (подробнее об этом - в главе 10).

Загрузка аплета напоминает вставку рисунка на Web-страницу. Аллет становится частью страницы, а текст обтекает занимаемое им пространство. Изображение, реа­лизуемое аплетом становится динамичным. Оно реагирует на команды пользователя, изменяет в зависимости от них свой внешний вид и выполняет обмен данными между компьютером, на котором выполняется аплет, и компьютером, где этот аплет посто­янно хранится.

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

Рис. 1.1. Аплет Jmol

С помощью аплетов на Web-страницу можно добавлять новые кнопки и текстовые поля.. Однако, если соединение производится по телефонной линии, такие аплеты медленно загружаются. Почти то лее самое можно сделать с помощью языка Dynamic HTML, форм языка HTML (Hypertext Markup Language - язык разметки гипертекстовых данных) или языка сценариев, например JavaScript. Первые аплеты предназначались для анимации: вращающиеся глобусы, танцующие персонажи мультфильмов, изменяющиеся тексты и т.п. Однако для решения этой задачи требовалась лишь малая часть возможностей аплетов: большинство из перечисленного могут делать и анимированные GIF-файлы. Поэтому аплеты целесообразно применять не столько для оформления Web-страниц, сколько для реализации сложных взаимодействий с пользователем.

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

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

И стория языка Java

В данном разделе кратко описывается история языка Java. В основу раздела положены различные опубликованные материалы (в частности, интервью с создателями языка Java в июльском выпуске электронного журнала SunWorldaa 1995 год).

История Java восходит к 1991 году, когда группа инженеров из компании Sun под руководством Патрика Нотона (Patrick Naughton) и члена Совета директоров (и разностороннего специалиста) Джеймса Гослинга (James Gosling) занялась разработкой языка, который можно было бы использовать для программирования бытовых устройств, например, контроллеров для переключения каналов кабельного телевидения. Так как подобные устройства не потребляют много энергии и имеют малый памяти, язык должен был быть маленьким и генерировать очень компактные программы. Кроме того, поскольку разные производители могут выбирать разные процессоры, было важно не привязаться к конкретной архитектуре. Проект получил кодовое название "Green".

Стремясь реализовать компактный и независимый от платформы код, разработчики возродили модель, использованную при реализации первых версий языка Pascal на заре эры персональных компьютеров. Никлаус Вирт, создатель языка Pascal, в свое время разработал переносимый язык, генерирующий промежуточный код для некоей гипотетической машины. Такие гипотетические машины называются виртуальными, отсюда термин - виртуальная машина Java (Java virtual machine -JVM). Этот промежуточный код можно выполнять на любой машине, имеющей соответствующий интерпретатор, Инженеры, работавшие над проектом "Green", также использовали виртуальную машину, что решило их основную проблему.

Большинство сотрудников компании Sun имели опыт работы с операционной системой Unix, поэтому в основу разрабатываемого ими языка был положен язык С++, а не Pascal. Они сделали язык объектно-, а не процедурно-ориентированным. Как сказал Гос-линг в своем интервью: "Язык - это всегда средство, а не цель". Сначала Гослинг решил назвать его Oak (Дуб). (Возможно потому, что он любил смотреть на дуб, растущий прямо под окнами его офиса в компании Sun.) Потом сотрудники компании узнали, что слово Oak уже используется в качестве имени ранее созданного языка программирования, и изменили название на Java.

В 1992 году в рамках проекта Green был выпущен первый продукт, названный *7. Это было устройство интеллектуального дистанционного управления. (Помещаясь в объеме 6x4x4 дюйма, оно имело мощность рабочей станции SPARK.) К сожалению, ни одна из компаний - производителей электронной техники не заинтересовалась этой разработкой. Затем группа стала заниматься созданием устройства для кабельно-го телевидения, которое могло бы осуществлять новые виды услуг, например включать видеосистему по требованию. И снова они не получили ни одного контракта. Примечательно, что одной из компаний, отказавшихся подписать с ними контракт, руководил Джим Кларк (Jim Clark) - основатель компании Netscape, впоследствии сделавшей очень много для развития языка Java.

Весь 1993 год и половину 1994 года продолжались безрезультатные поиски покупателей продукции, разработанной в рамках проекта "Green" (группа, работающая над проектом, выделилась под названием "First Person, Inc."}. Патрик Нотон, один из основателей группы, в основном занимавшийся маркетингом, налетал в общей сложности более 300 тысяч миль, пытаясь продать разработанную технологию. Работа группы "First Person, Inc." была прекращена в 1994 году.

Тем временем в рамках глобальной сети развивалась система World Wide Web. Ключевым элементом этой системы является браузер, превращающий гипертекстовые данные в изображение на экране. В 1994 году большинство пользователей применяли некоммерческий WetH>pay3ep Mosaic, разработанный в суперкомпьютерном центре Университета штата Иллинойс в 1993 году. Частично этот браузер был написан Марком Андреессеном (Mark Andreessen). В то время Марк заканчивал университет, и браузер был его дипломной работой. (Затем он стал одним из основателей и ведущим специалистом компании Netscape, и к нему пришли слава и богатство.)

В своем интервью журналу Sun World Гослинг сказал, что в середине 1994 года разработчики языка поняли: "Нам нужно создать высококачественный браузер. Такой браузер должен представлять собой приложение, соответствующее технологии кли-ентчзервер, в которой жизненно важным является именно то, что мы сделали: архитектурная независимость, выполнение в реальном времени, надежность, безопасность - вопросы, которые не были чрезвычайно важны для рабочих станций. И мы создали такой браузер".

Реальный браузер был разработан Патриком Нотоном и Джонатаном Пэйном (Johnatan Payne). Позднее он был доработан и получил имя Hotjava. Чтобы продемонстрировать все возможности Java, браузер был написан на этом языке. Однако разработчики не забывали о таких средствах, которые теперь называются аплетами, наделив свой продукт способностью выполнять код внутри Web-страниц. Продукт, созданный в рамках новой технологии, был представлен на выставке Sun World "95 23 мая 1995 года и вызвал всеобщий интерес к Java.

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

Выпуск версии Java 1.2 стал основной новостью конференции JavaOne в 1998 году. В новой версии слабые средства для создания графического пользовательского интерфейса и графических приложений были заменены мощным инструментарием. Это был шаг вперед, к реализации лозунга "Write Once, Run Anywhere" ("Однажды реализовано- везде выполняется"), выдвинутого при разработке предыдущих версий. В декабре 1998 года через три дня (!) после выхода в свет название новой версии было изменено на громоздкое словосочетание Java 2 Standard, Edition Software Development Kit Version 1.2 (Стандартная редакция пакета инструментальных средств для разработки программного обеспечения на языке Java 2, версия 1.2).

Кроме Standard Edition, были предложены еще два варианта: Micro Edition ("микроредакция") для портативных устройств, например для мобильных телефонов, и Enterprise Edition (редакция для корпоративных приложений). В нашей книге внимание в основном уделено Standard Edition.

Версии 1.3 и 1.4 пакета инструментальных средств Standard Edition намного совершеннее первоначальной реализации Java 2. Они обладают новыми возможностями, производительность их повышена, и, разумеется, они содержат намного меньше ошибок. В процессе развития Java многие взгляды на аплеты и серверные программы были пересмотрены. В частности, оказалось, что на базе Java можно разрабатывать высококачественные серверные приложения.

В версии 5.0 язык Java подвергся наиболее существенной модификации с момента реализации версии 1.1. (Первоначально версия 5.0 имела номер 1.5, но на конференции JavaOne в 2004 г. была принята новая нумерация версий.) После многолетних исследований были добавлены новые базовые конструкции, хотя при этом не были выдвинуты требования модификации виртуальной машины. Ряд элементов, например циклы "for each", автоматическое представление простых типов в виде объектов и метаданные были явно "навеяны" языком С#. Изменение и дополнение базовых языковых конструкций - болезненный процесс, но многие из средств версии 5.0 настолько удобны, что разработчики наверняка примут их с энтузиазмом.

В табл. 1.1 приведена информация об этапах развития языка Java.

В табл. 1.2 показан рост объема библиотеки АРІ по мере появления новых версий пакета JDK.

Таблица 1.1. Этапы развития языка Java

Таблица 1.2. Рост объема библиотеки АРІ для Java Standart Edition

Р аспространенные заблуждения относительно языка Java

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

ЯзыкJava - это расширение языка HTML.

Java - это язык программирования, а язык HTML - это способ описания структуры Web-страниц. Между ними нет ничего общего, за исключением HTML-дескрипторов, позволяющих размещать на Web-страницах аплеты, написанные на языке Java.

Я использую XML, поэтому мне не нужен язык Java.

Java - это язык программирования, a XML - средство описания данных. Данные, описанные с помощью языка XML, можно обрабатывать программами, написанными на любом языке программирования, но лишь библиотека API языка Java содержит превосходные средства для обработки таких данных. Кроме того, на языке Java реализованы многие программы независимых производителей, предназначенные для работы с XML-документами. Более подробную информацию по этому вопросу можно найти во втором томе данной книги.

Язык Java легко выучить.

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

Язык Java со временем станет универсальным языком программирования для всех платформ.

Теоретически это возможно. Именно об этом мечтают все производители программного обеспечения, кроме компанйи Microsoft. Однако есть много приложений, прекрасно работающих на персональных компьютерах, которые не будут так же хорошо работать на других устройствах или под управлением браузера. Кроме того, эти приложения написаны так, чтобы максимально использовать возможности процессоров и платформенноориентированных библиотек. В любом случае они уже перенесены на все важные платформы. К таким приложениям относятся текстовые и графические редакторы, а также Web-браузеры. Обычно эти приложения пишутся на языке С или С++, и пользователь ничего не выиграет, если переписать их на языке Java. Помимо всего прочего» после реализации на языке Java эти программы станут, по крайней мере, в ближайшем будущем, менее эффективными.

Язык Java - это не больше чем еще один язык программирования.

Java - прекрасный язык программирования. Многие программисты отдают предпочтение именно ему, а не языку С или С++. Однако в мире существуют сотни великолепных языков, так и не получивших широкого распространения, в то время как языки с очевидными недостатками, такие как С++ и Visual Basic, достигли ошеломительных успехов.

Почему так происходит? Успех любого языка программирования в основном определяется его системой поддержки, а не элегантностью его синтаксиса. Существуют ли стандартные библиотеки, позволяющие сделать именно то, что необходимо программисту? Разработана ли удобная среда для создания и отладки программ? Интегрирован ли язык и его инструментарий в инфраструктуру компьютера? Язык Java достиг успехов в области серверных приложений, поскольку его библиотеки классов позволяют легко сделать то, что раньше было трудно реализовать, например, поддерживать работу в сети и обеспечивать выполнение нескольких потоков. Тот факт, что язык Java уменьшил количество ошибок, связанных с указателями, также говорит в его пользу. Благодаря этому производительность труда программистов повысилась. Однако не в этом кроется причина его успеха.

С появлением языка С# Java устарел.

Разработчики С# использовали многие удачные технические решения, применявшиеся в языке Java, такие как полностью определенный язык, использование виртуальной машины и систему "сборки мусора". Однако по ряду характеристик С# уступает Java, это вопросы безопасности и переносимости программ. Самое очевидное преимущество С# - это прекрасная среда разработки. Если вы работаете в системе Windows, может быть, вам стоит использовать С#. Если же оценить реальную ситуацию, то на сегодняшний день Java остается основным инструментом очень многих программистов.

Java разработан и поддерживается компанией Sun, поэтому пользоваться им не следует.

Мнения на этот счет расходятся. Когда недостатки данного языка были очевидны, хотелось, чтобы их поскорее исправили в рамках открытой системы. Однако на сегодняшний день ситуация не так проста.

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

Если оценить известные на данный момент открытые языки, ясно видно, что они никак не превосходят Java. Наиболее популярными считаются "три буквы Р" в "LAMP" (Linux, Apache, MySQL и Perl/PHP/Python). Эти языки имеют ряд положительных качеств, но в то же время в них не согласованы изменения, вносимые в разные версии, возможности библиотек ограничены, а возможности инструментов разработки явно недостаточны.

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

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

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

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

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

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

Все программы на языке Java выполняются под управлением Web-браузеров.

Все аплеты, написанные на языке Java, действительно выполняются под управлением Web-браузеров. Собственно, это и есть определение аплета- программа, выполняемая в среде, реализуемой Web-браузером. Однако вполне возможно и уместно создавать независимые Java-npoграммы, которые никак не связаны с Web-браузером. Эти программы (обычно называемые приложениями) являются полностью переносимыми. Их можно без всяких изменений выполнять на другой машине! Поскольку язык Java более удобен и менее подвержен ошибкам, чем язык С++, многие разработчики выбирают именно его. А если учесть наличие средств доступа к базам данных, например Java Database Connectivity (см. том 2), то трудно предпочесть Java какой-то другой язык. Очень удобен Java для начинающих, выбравших его в качестве первого языка программирования.

Большинство программ, рассматриваемых в этой книге, являются независимыми приложениями. Конечно, аплеты очень забавны. Однако Java-приложения более важны и полезны.

Javoranaembt представляют большую опасность для системы защиты.

В свое время было опубликовано несколько отчетов об ошибках в системе защиты языка Java. Большинство из них касалось реализаций языка Java в конкретных браузерах. Исследователи восприняли это как вызов и принялись искать глобальные недостатки в системе защиты Java, которые делали бы бессмысленной модель безопасности аплетов. Их усилия не увенчались успехом. Обнаруженные ошибки в конкретных реализациях вскоре были исправлены, и, после этого, насколько мы знаем, ни одна реальная система не была взломана посредством аплета. Чтобы оценить значение этого факта, вспомните о миллионах вирусных атак на выполняемые файлы операционной системы Windows и макросы редактора Word, действительно вызвавшие немало бед. При этом критика недостатков платформы была удивительно беззуба. Кроме того, механизм ActiveX в браузере Internet Explorer мог бы вызвать много нареканий, однако способы его взлома настолько очевидны, что лишь немногие специалисты потрудились опубликовать результаты своих исследований.

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

ЯзыкJavaScript - упрощенная версия языка Java.

Язык JavaScript - это язык сценариев, который можно использовать в составе Web-страницы. Он был разработан компанией Netscape и сначала назывался LiveScript. Синтаксис языка JavaScript напоминает синтаксис языка Java, однако на этом их сходство заканчивается (за исключением имени, конечно). Подмножество JavaScript было стандартизовано как ЕСМА-262, однако его расширения, необходимые для реальной работы, стандартизованы не были. В результате сложный JavaScript-сценарий, который можно было бы выполнять как под управлением браузеров компании Netscape, так и с помощью браузера Internet Explorer, остался несбыточной мечтой.

Пользуясь языком Java, можно заменить компьютер Internet-устройством стоимостью 500 долларов.

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

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

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

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

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

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

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

Многие разработчики поначалу жестко критиковали смелый лозунг Sun "Write once, run everywhere", обнаруживая все больше и больше несоответствий и нестыковок на различных платформах. Однако надо признать, что они просто были слишком нетерпеливы. Java только появилась на свет, а первые версии спецификаций были недостаточно исчерпывающими.

Очень скоро специалисты Sun пришли к выводу, что просто свободно публиковать спецификации (что уже делалось задолго до Java) недостаточно. Необходимо еще и создавать специальные процедуры проверки новых продуктов на соответствие стандартам. Первый такой тест для JVM содержал всего около 600 проверок, через год их число выросло до десяти тысяч и с тех пор все время увеличивается (именно его в свое время не смог пройти MS IE 4.0). Безусловно, авторы виртуальных машин все время совершенствовали их, устраняя ошибки и оптимизируя работу. Все-таки любая, даже очень хорошо задуманная технология требует времени для создания высококачественной реализации. Аналогичный путь развития сейчас проходит Java 2 Micro Edition (J2ME), но об этом позже.

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

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

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

В Java существует всего 8 типов данных, которые не являются объектами. Они были определены с самой первой версии и никогда не менялись. Это пять целочисленных типов: byte, short, int, long, а также к ним относят символьный char. Затем два дробных типа float и double и, наконец, булевский тип boolean. Такие типы называются простые, или примитивные (от английского primitive), и они подробно рассматриваются в лекции, посвященной типам данных. Все остальные типы - объектные или ссылочные (англ. reference ).

Синтаксис Java почему-то многих ввел в заблуждение. Он действительно создан на основе синтаксиса языков C/C++, так что если посмотреть на исходный код программ, написанных на этих языках и на Java, то не сразу удается понять, какая из них на каком языке написана. Это почему-то дало многим повод думать, что Java - это упрощенный C++ с дополнительными возможностями, такими как garbage collector. Автоматический сборщик мусора (garbage collector) мы рассмотрим чуть ниже, но считать, что Java такой же язык, как и C++,- большое заблуждение.

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

Но, как уже говорилось, С++ принципиально не годился для новых задач, которые поставили себе разработчики из компании Sun, поэтому модель Java была построена заново, причем в соответствии с совсем другими целями. Дальнейшие лекции будут постепенно раскрывать конкретные различия.

Что же касается объектной модели, то она скорее была построена по образцу таких языков, как Smalltalk от IBM, или разработанный еще в 60-е годы в Норвежском Вычислительном Центре язык Simula, на который ссылается сам создатель Java Джеймс Гослинг.

Другое немаловажное свойство Java - легкость в освоении и разработке - также получило неоднозначную оценку. Действительно, авторы потрудились избавить программистов от наиболее распространенных ошибок, которые порой допускают даже опытные разработчики на C/C++. И первое место здесь занимает работа с памятью.

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

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

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

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

Наконец, Internet-бум 90-х годов набирал обороты и выдвигал новые, более жесткие требования к срокам разработки. Многолетние проекты, которые были в прошлом обычным делом, перестали отвечать потребностям заказчиков, новые системы надо было создавать максимум за год, а то и за считанные месяцы.

Кроме введения garbage collector, были предприняты и другие шаги для облегчения разработки. Некоторые из них уже упоминались - отказ от множественного наследования, упрощение синтаксиса и др. Возможность создания многопоточных приложений была реализована в первой же версии Java (исследования показали, что это очень удобно для пользователей, а существующие стандарты опираются на телетайпные системы, которые устарели много лет назад). Другие особенности будут рассмотрены в следующих лекциях. Однако то, что создание и поддержка систем действительно проще на Java, чем на C/C++, давно является общепризнанным фактом. Впрочем, все-таки эти языки созданы для разных целей, и каждый имеет свои неоспоримые преимущества.

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

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

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

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

Совокупность описанных свойств Java позволяет утверждать, что язык весьма приспособлен для разработки Internet- и интранет (внутренние сети корпораций)-приложений.

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

Итак, подведем итоги. Java -платформа обладает следующими преимуществами:

* переносимость, или кроссплатформенность;

* объектная ориентированность, создана эффективная объектная модель;

* привычный синтаксис С/С++;

* встроенная и прозрачная модель безопасности;

* ориентация на Internet-задачи, сетевые распределенные приложения;

* динамичность, легкость развития и добавления новых возможностей;

* простота освоения.

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

Основные версии и продукты Java

Сразу оговоримся, что под продуктами здесь понимаются программные решения от компании Sun, являющиеся "образцами реализации" (reference implementation).

Итак, впервые Java была объявлена 23 мая 1995 года. Основными продуктами, доступными на тот момент в виде бета-версий, были:

* Java language specification, JLS, спецификация языка Java (описывающая лексику, типы данных, основные конструкции и т.д.);

* спецификация JVM ;

* Java Development Kit, JDK - средство разработчика, состоящее в основном из утилит, стандартных библиотек классов и демонстрационных примеров.

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

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

JDK долгое время было базовым средством разработки приложений. Оно не содержит никаких текстовых редакторов, а оперирует только уже существующими Java -файлами. Компилятор представлен утилитой javac (java compiler). Виртуальная машина реализована программой java. Для тестовых запусков апплетов существует специальная утилита appletviewer. Наконец, для автоматической генерации документации на основе исходного кода прилагается средство javadoc.

Первая версия содержала всего 8 стандартных библиотек:

* java.lang - базовые классы, необходимые для работы любого приложения (название - сокращение от language);

* java.util - многие полезные вспомогательные классы;

* java.applet - классы для создания апплетов;

* java.awt, java.awt.peer - библиотека для создания графического интерфейса пользователя (GUI), называется Abstract Window Toolkit, AWT, подробно описывается в лекции 11;

* java.awt.image - дополнительные классы для работы с изображениями;

* java.io - работа с потоками данных (streams) и с файлами;

* java.net - работа с сетью.

Таким образом, все библиотеки начинаются с java, именно они являются стандартными. Все остальные (начинающиеся с com, org и др.) могут меняться в любой версии без поддержки совместимости.

Финальная версия JDK 1.0 была выпущена в январе 1996 года.

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

Вторая цифра изменилась от 0 до 4 (последняя на момент создания курса). В каждой версии происходило существенное расширение стандартных библиотек (212, 504, 1781, 2130 и 2738 - количество классов и интерфейсов с 1.0 по 1.4), а также добавлялись некоторые новые возможности в сам язык. Менялись и утилиты, входящие в JDK.

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

Хотя с развитием версии 1.х ничего не удаляется, конечно, какие-то функции или классы устаревают. Они объявляются deprecated, и хотя они будут поддерживаться до объявления 2.0 (а про нее пока ничего не было слышно), пользоваться ими не рекомендуется.

Вместе с первым успехом JDK 1.0 подоспела и критика. Основные недостатки, обнаруженные разработчиками, были следующими. Во-первых, конечно, производительность. Первая виртуальная машина работала очень медленно. Это связано с тем, что JVM, по сути, представляет собой интерпретатор, который работает всегда медленнее, чем исполняется откомпилированный код. Однако успешная оптимизация, устранившая этот недостаток, была еще впереди. Также отмечались довольно бедные возможности AWT, отсутствие работы с базами данных и другие.

В декабре 1996 года объявляется новая версия JDK 1.1, сразу выкладывается для свободного доступа бета-версия. В феврале 1997 года выходит финальная версия. Что было добавлено в новом выпуске Java?

Конечно, особое внимание было уделено производительности. Многие части виртуальной машины были оптимизированы и переписаны с использованием Assembler, а не C, как до этого. Кроме того, с октября 1996 года Sun развивает новый продукт - Just-In-Time компилятор, JIT. Его задача - транслировать Java байт-код программы в "родной" код операционной системы. Таким образом, время запуска программы увеличивается, но зато выполнение может ускоряться в некоторых случаях до 50 раз! С июля 1997 года появляется реализация под Windows и JIT стандартно входит в JDK с возможностью отключения.

Были добавлены многие новые важные возможности. JavaBeans - технология, объявленная еще в 1996 году, позволяет создавать визуальные компоненты, которые легко интегрируются в визуальные средства разработки. JDBC (Java DataBase Connectivity) обеспечивает доступ к базам данных. RMI (Remote Method Invocation) позволяет легко создавать распределенные приложения. Были усовершенствованы поддержка национальных языков и система безопасности.

За первые три недели JDK 1.1 был скачан более 220.000 раз, менее чем через год - более двух миллионов раз. На данный момент версия 1.1 считается полностью устаревшей и ее развитие остановилось на 1.1.8. Однако из-за того, что самый распространенный браузер MS IE до сих пор поддерживает только эту версию, она продолжает использоваться для написания небольших апплетов.

Кроме того, с 11 марта 1997 года компания Sun начала предлагать Java Runtime Environment, JRE (среду выполнения Java). По сути дела, это минимальная реализация виртуальной машины, необходимая для исполнения Java -приложений, без компилятора и других средств разработки. Если пользователь хочет только запускать программы, это именно то, что ему нужно.

Как видно, самым главным недостатком осталась слабая поддержка графического интерфейса пользователя (GUI). В декабре 1996 года компании Sun и Netscape объявляют новую библиотеку IFC (Internet Foundation Classes), разработанную Netscape полностью на Java и предназначенную как раз для создания сложного оконного интерфейса. В апреле 1997 года объявляется, что компании планируют объединить технологии AWT от Sun и IFC от Netscape для создания нового продукта Java Foundation Classes, JFC, в который должны войти:

* усовершенствованный оконный интерфейс, который получил особое название - Swing ;

* реализация Drag-and-Drop;

* поддержка 2D-графики, более удобная работа с изображениями;

* Accessibility API для пользователей с ограниченными возможностями

и другие функции. Компания IBM также поддержала разработку новой технологии. В июле 1997 года стала доступна первая версия JFC. Первоначально библиотеки назывались, например, com.sun.java.swing для компонентов Swing. В марте 1998 года вышла финальная версия этой технологии. За полгода продукт был скачан более 500.000 раз.

Выход следующей версии Java 1.2 много раз откладывался, но в итоге она настолько превзошла предыдущую 1.1, что ее и все последующие версии начали называть платформой Java 2 (хотя номера, конечно, по-прежнему отсчитывались как 1.х.х, см. выше описание правил нумерации). Первая бета-версия стала доступной в декабре 1997 года, а финальная версия была выпущена 8 декабря 1998 года, и за первые восемь месяцев ее скачали более миллиона раз.

Список появившихся возможностей очень широк, поэтому перечислим наиболее значимые из них:

* существенно переработанная модель безопасности, введены понятия политики (policy) и разрешения (permission);

* JFC стал стандартной частью JDK, причем библиотеки стали называться, например, javax.swing для Swing (название javax указывает, что до этого библиотека считалась расширением Java);

* полностью переработанная библиотека коллекций (collection framework) - классов для хранения набора объектов;

* Java Plug-in был включен в JDK ;

* улучшения в производительности, глобализации (независимости от особенностей разных платформ и стран), защита от "проблемы-2000".

С февраля 1999 года исходный код самой JVM был открыт для бесплатного доступа всем желающим.

Самое же существенное изменение произошло 15 июня 1999 года, спустя полгода после выхода JDK 1.2. На конференции разработчиков JavaOne компания Sun объявила о разделении развития платформы Java 2 на три направления:

* Java 2 Platform, Standard Edition (J2SE);

* Java 2 Platform, Enterprise Edition (J2EE);

* Java 2 Platform, Micro Edition (J2ME).

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

J2SE предназначается для использования на рабочих станциях и персональных компьютерах. Standard Edition - основа технологии Java и прямое развитие JDK (средство разработчика было переименовано в j2sdk).

J2EE содержит все необходимое для создания сложных, высоконадежных, распределенных серверных приложений. Условно можно сказать, что Enterprise Edition - это набор мощных библиотек (например, Enterprise Java Beans, EJB) и пример реализации платформы (сервера приложений, Application Server), которая их поддерживает. Работа такой платформы всегда опирается на j2sdk.

J2ME является усечением Standard Edition, чтобы удовлетворять жестким аппаратным требованиям небольших устройств, таких как карманные компьютеры и сотовые телефоны.

Далее развитие этих технологий происходит разными темпами. Если J2SE уже была доступна более полугода, то финальная версия J2EE вышла лишь в декабре 1999 года. Последняя версия j2sdk 1.2 на данный момент - 1.2.2.

Тем временем борьба за производительность продолжалась, и Sun пытался еще больше оптимизировать виртуальную машину. В марте 1999 года объявляется новый продукт - высокоскоростная платформа (engine) Java HotSpot. Была оптимизирована работа с потоками исполнения, существенно переработаны алгоритмы автоматического сборщика мусора (garbage collector) и многое другое. Ускорение действительно было очень существенным, всегда заметное невооруженным взглядом за несколько минут работы с Java -приложением.

Новая платформа может работать в двух режимах - клиентском и серверном. Режимы различались настройками и другими оптимизирующими алгоритмами. По умолчанию работа идет в клиентском режиме.

Развитие HotSpot продолжалось более года, пока в начале мая 2000 года высокопроизводительная JVM не вошла в состав новой версии J2SE. В эту версию было внесено еще множество улучшений и исправлений, но именно прогресс в скорости работы стал ключевым изменением нового j2sdk 1.3 (последняя подверсия 1.3.1).

Наконец, последняя на данный момент версия J2SE 1.4 вышла в феврале 2002 года. Она была разработана для более полной поддержки web-сервисов (web services). Поэтому основные изменения коснулись работы с XML (Extensible Markup Language). Другое революционное добавление - выражение assert, позволяющее в отладочном режиме проверять верность условий, что должно серьезно упростить разработку сложных приложений. Наконец, были добавлены классы для работы с регулярными выражениями.

За первые пять месяцев j2sdk 1.4 было скачано более двух миллионов раз. В августе 2002 года уже была предложена версия 1.4.1, остающаяся на данный момент самой современной.

В заключение для демонстрации уровня развития Standard Edition приведем стандартные диаграммы, описывающие все составляющие технологии, из документации к версиям 1.3 и 1.4.


1.1.Составляющие технологии версии 1.3.


1.2. Составляющие технологии версии 1.4.

Заключение

В этой лекции мы рассказали о том, какая непростая ситуация сложилась в корпорации Sun в эпоху развития персональных компьютеров в конце 1990 года. Патрик Нотон в своем письме сумел выявить истинные причины такого положения и обозначить истинные цели для создания успешного продукта. Благодаря этому при поддержке Джеймса Гослинга начался проект Green. Одним из продуктов, созданных в рамках этого проекта, стала совершенно новая платформа OaK. Для ее продвижения Sun учредила дочернюю компанию FirstPerson, но настоящий успех пришел, когда платформу, переименовав в Java, сориентировали на применение в Internet.

Глобальная сеть появилась в апреле 1993 года с выходом первого браузера Mosaic 1.0 и завоевывала пользовательскую аудиторию с поразительной скоростью. Первым примером Java -приложений стали апплеты, запускаемые при помощи специально созданного браузера HotJava. Наконец, после почти четырехлетней истории создания и развития, Java была официально представлена миру. Благодаря подписанию лицензионного соглашения с Netscape, это событие стало поистине триумфальным.

Как уже отмечалось ранее, платформа Java EE ориентирована на построение корпоративных приложений.

Существует четыре платформы, основанные на языке Java (рис. 8.2):

    Java Platform, Standard Edition (Java SE),

    Java Platform, Enterprise Edition (Java EE),

    Java Platform, Micro Edition (Java ME),

Рис. 8.2. Платформы Java™

Любая из Java платформ включает виртуальную машина Java (Java Virtual Machine –JVM) и описания интерфейсов для разработки приложений (традиционно называется Application programming interface – API). Приложения, написанные на языке Java, транслируются в байт код (файлы с расширением class). JVM представляет из себя программу, ориентированную на конкретную аппаратно–программную архитектуру (операционная система, разрядность процессора), и позволяющая запускать программы, транслированные в байт код. API представляет из себя коллекцию компонентов, которые используются при разработке приложений на конкретной платформе. Любая платформа Java включает виртуальную машину и API, что позволяет запускать приложения для этой платформе на любой машине, обеспечивая реальную кроссплатформенность. При этом обеспечиваются основные заявленные преимущества языка программирования Java: независимость от аппаратно-программной платформы, функциональность, устойчивость, легкость разработки и безопасность.

Центральной является платформа Java Standard Edition. Java SE реализует основную функциональность языка Java: начиная от примитивных типов и базовых классов, до сложных классов, обеспечивающих удаленное сетевое взаимодействие, безопасность, доступ к базам данных, реализацию графического интерфейса пользователя и обработку XML документов (XML parsing).

Платформа Java Enterprise Edition является масштабной настройкой над Java SE. Java EE предоставляет API и окружение для выполнения Java EE приложений (Java EE Server), необходимые для разработки, развертывания и выполнения масштабируемых, крупномасштабных, многоуровневых, распределенных, устойчивых, безопасных приложений уровня предприятия.

8.3.2 Элементы и технологии Java ee

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

Контекст технологий платформы Java EE представлен на рис. 8.3.

Рис. 8.3. Контекст технологий Java EE

Являясь надстройкой над платформой Java SE, высокоуровневые технологии Java EE (EJB, JSF, JMS и др.) основаны на некоторых базовых технологиях, обеспечивающих:

    поиск и получение ресурсов по именам (JNDS – Java Naming and Directory Service – Служба каталогов и именований Java, основанная на поддержке JNDI API);

    вызов методов удаленных объектов (RMI – Remote Method Invocation);

    связь с базами данных посредством SQL;

    поддержка транзакций средствами JTS (JTS – Java Transaction Service – Служба транзакция Java, обеспечивающая работу согласно Java Transaction API – JTA).

Платформа Java EE использует упрощенную модель приложений. Каждое приложение имеет определенную структуру, а параметры развертывания приложения определяется так называемым дескриптором поставки. Дескриптор поставки представляет из себя XML описание. Структура Java EE приложения представлена на рис. 8.3.

Рис. 8.3. Структура Java EE приложения

Основными структурными элементами Java EE приложения являются:

    Web модуль, включающий компоненты web уровня,

    EJB модуль, включающий компоненты, реализующие бизнес-логику корпоративного приложения,

    каталог дескрипторов поставки META-INF.

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

Кроме того каждая версия Java EE (на момент написания материала последней версией была Java EE7 и вышел ранний черновой релиз Java EE8) использует огромный ряд новых технологий, с которыми можно познакомиться на сайте Oracle по адресу www.oracle.com/technetwork/java/javaee/tech/index-jsp-142185.html

Приложение уровня предприятия на платформе Java Enterprise Edition представляет из себя многоуровневое приложение. Использование нескольких уровней позволяет программно разделить приложение на функционально независимые части (рис. 8.4). Обычно многоуровневые приложения имеют клиентский уровень, уровень бизнес логики и уровень связи с данными.

Рис. 8.4. Архитектура Java EE приложения

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

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

Любой Java EE сервер реализует модель «компонет-контейнер». В этой модели сервер предоставляет контейнер, в который устанавливается (с учетом десктриптора поставки) соответствующий компонент, созданных разработчиком приложения. В общем случае Java EE сервер предоставляет два вида контейнеров: web контейнеры (реализуется web уровень) и EJB контейнеры (реализуется уровень бизнес-логики).

В соответствии с рисунком 8.4., Java EE приложение может содержать следующие основные компоненты:

    компоненты Web уровня:

    • Servlets. Сервлеты – экземпляры классов, написанные на языке Java и удовлетворяющие спецификации Java Servlets. Представляют из себя элементы самой первой технологии web уровня. На сегодняшний день используются в различных фреймворках, строящих приложения по шаблону ММС2;

      JSP – Java Server Pages – компоненты, представляющие из себя текстовые файлы, которые компилируются в сервлеты исполняемой средой. Более адаптированы для работы с различными языками разметки (HTML, XML и т.п.);

      компоненты JavaServer Faces technology – технология для реализации пользовательского интерфейса;

    компоненты уровня бизнес логики, включают в себя компоненты, удовлетворяющие спецификации Java Enterprise Bean (EJB) и Java Persistence API (JPA). Как отмечалось выше, EJB компоненты отвечают за реализацию бизнес-логики приложения, а JPA компоненты – за обмен с базами данных.

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

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

Вы - начинающий Java-разработчик? На этой странице вы найдете обзор основных Java™-технологий и их места в разработке современного программного обеспечения. Эта страница, содержащая ссылки на вводные статьи developerWorks по этой и смежным темам, другие образовательные материалы, а также на материалы для загрузки и продукты IBM, является превосходной отправной точкой для изучения Java.

Что такое "технологии Java"?

Java - это одновременно язык программирования и платформа.

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

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

В дополнение к API каждая полноценная реализация платформы Java должна включать следующее:

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

JVM также является проверенной средой для выполнения приложений, написанных на отличных от Java языках. В частности, Groovy, Scala и специализированные реализации Ruby и Python предоставляют разработчикам возможность исполнения на JVM динамических и функциональных языков (более подробная информация приведена в разделе Какое отношение имеет Java к динамическим языкам и функциональному программированию?).

Язык Java был разработан компанией Sun Microsystems. В настоящее время развитие Java-технологий, в том числе работа над спецификациями, эталонными реализациями и тестами совместимости, осуществляется под контролем открытой некоммерческой организации JCP (Java Community Process), которая объединяет Java-разработчиков и держателей лицензий. В 2007 г. Sun выпустила свободную версию Java, включающую основные компоненты платформы, под лицензией GNU GPL v2 (GPLv2). Подробнее об этой версии можно прочитать в разделе Java и разработка свободного программного обеспечения.

Зачем следует изучать Java?

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

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

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

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

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

  • Java SE (Java Platform, Standard Edition) . Используя Java SE, вы можете создавать и развертывать Java-приложения для настольных компьютеров и серверов, а также разрабатывать встроенное программное обеспечение и программы для систем реального времени. Редакция Java SE включает классы, необходимые для создания Web-сервисов, и базовые компоненты Java EE (Java Platform, Enterprise Edition). Текущей версией платформы Java SE является Java SE 6, также известная как "Мустанг". При этом многие разработчики по-прежнему используют Java SE 5 (Java 5.0, или "Тигр").
    • Прекрасный обзор возможностей Java SE 5 приведен в статьях колонки . Большая часть аспектов программирования для платформы Java SE 5, для которой были созданы многие существующие приложения, по-прежнему актуальны и для Java SE 6.
    • В статье описываются новые возможности Java SE 6, служащие для мониторинга и оценки производительности приложений.
    • В статье приводится введение в скриптовый язык, работающий поверх платформы Java SE 6 и служащий для упрощения программирования сложных пользовательских интерфейсов.
    • В серии из двух статей под названием содержится введение в API, предоставляемый Java SE 6, который позволяет Java-приложениям выполнять динамический скриптовый код и наоборот. .
  • Java EE (Java Platform, Enterprise Edition) . Эта корпоративная версия платформы помогает разработчикам создавать и развертывать переносимые, надежные, масштабируемые и безопасные серверные приложения на Java. Развивая возможности Java SE, Java EE предоставляет API Web-сервисов, компонентных моделей, удаленного взаимодействия и управления для реализации корпоративного программного обеспечения по принципам SOA и Web 2.0.
    • Прочитайте статьи и , в которых содержится вводный обзор возможностей последней версии платформы Java EE.
    • Обратите внимание на серию - популярной инфраструктуре для создания легковесных и надежных приложений Java EE.
    • Дополнительная информация о Java EE приводится в статьях колонки .
    • Статьи серии Начало пути: Миграция на платформу Java (EN) были написаны специально для разработчиков.NET, клиент-серверных приложений для Windows и приложений ASP, чтобы помочь им перейти на Java.
  • Java ME (Java Platform, Micro Edition) . Java ME предоставляет среду для выполнения приложений, созданных для широкого круга мобильных и встроенных систем, например мобильных телефонов, карманных компьютеров, телевизионных приставок и принтеров. Эта редакция платформы предоставляет средства создания гибких пользовательских интерфейсов, надежную модель обеспечения безопасности, полный спектр встроенных сетевых протоколов, а также мощную поддержку сетевых и оффлайновых динамически загружаемых приложений. Приложения, базирующиеся на спецификациях Java ME, могут быть запущены на множестве устройств и при этом способны эффективно задействовать их системные возможности.

Какие технологии являются основными компонентами платформы Java?

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

Технологии, входящие в состав Java SE:

  • Java Foundation Classes (Swing) (JFC) - это набор библиотек Java-классов, служащих для создания графических интерфейсов пользователя и реализации других графических функций в клиентских Java-приложениях. Руководство .
  • JavaHelp - это независимая от платформы расширяемая справочная система, позволяющая разработчикам и техническим писателям встраивать справочные страницы в апплеты, программные компоненты, приложения, операционные системы и устройства, а также создавать справочные Web-системы. Обратитесь к статье .
  • Благодаря Java Native Interface (JNI) Java-приложения, выполняющиеся внутри JVM, могут взаимодействовать с программами и библиотеками, написанными на других языках программирования.
  • Технология Java Web Start упрощает развертывание Java-приложений, позволяя пользователям загружать и запускать функционально насыщенные программные средства, например, электронные таблицы, одним нажатием на кнопку мыши, без инсталляции (см. статью ).
  • Java Database Connectivity (JDBC) - это API, предоставляющий средства для доступа к большинству реляционных источников данных из Java-приложений. С его помощью можно подключаться к множеству баз данных SQL, а также другим табличным источникам данных, например, электронным таблицам и неструктурированным файлам.
  • Java Advanced Imaging (JAI) - это объектно-ориентированный API, предоставляющий простую высокоуровневую модель программирования, упрощающую манипулирование изображениями.
  • Java Authentication and Authorization Service (JAAS) - это технология, предоставляющая сервисам средства для аутентификации пользователей и проверки их прав доступа. Она включает Java-реализацию стандартной инфраструктуры PAM (Pluggable Authentication Module) и поддерживает авторизацию на уровне пользователей.
  • Java Cryptography Extension (JCE) - это набор пакетов, предоставляющих инфраструктуру и реализации алгоритмов шифрования, генерации и обмена ключами и установления подлинности сообщений (Message Authentication Code - MAC). Эта технология также включает поддержку симметричных, асимметричных, блочных и поточных шифров, а также безопасных потоков и опечатанных объектов (sealed objects). Более подробную информацию можно получить в руководстве .
  • Java Data Objects (JDO) - это стандартная абстрактная модель долговременного хранения Java-объектов, базирующаяся на интерфейсах. С ее помощью разработчики могут напрямую сохранять экземпляры Java-классов предметной области в постоянном хранилище (например, базе данных). Эта модель в ряде случаев может заменять прямую запись в файл, сериализацию, JDBC, а также использование серверных компонентов EJB, как управляемых контейнерами (Container Managed Persistence - CMP), так и самостоятельно хранящих состояние (Bean Managed Persistence - BMP).
  • Пакет Java Management Extensions (JMX) содержит средства для создания распределенных, модульных, динамических и доступных через Web приложений для управления и мониторинга устройств, программного обеспечения и сетей, основанных на предоставлении сервисов (см. статью ).
  • Java Media Framework (JMF) позволяет добавлять аудио-, видео- и другую медиа-информацию в приложения и апплеты на Java (см. руководство ).
  • Java Naming and Directory Interface (JNDI) - это унифицированный интерфейс для обращения к различным сервисам имен и каталогов в корпоративной сети. С его помощью приложения могут эффективно подключаться к различным службам имен и каталогов в гетерогенной среде уровня предприятия.
  • Java Secure Socket Extensions (JSSE) - это набор пакетов для обеспечения безопасного обмена информацией в Интернете. Они реализуют Java-версию протоколов SSL (Secure Sockets Layer) и TLS (Transport Layer Security) и предоставляют средства для шифрования данных, проверки целостности сообщений, аутентификации на сервере и на клиенте (последняя возможность не является обязательной).
  • Java Speech API (JSAPI) включает в себя спецификации JSGF (формат грамматики Java Speech) и JSML (язык разметки Java Speech). Этот пакет предоставляет возможности для использования речевых технологий в пользовательском интерфейсе. JSAPI - это кросс-платформенный API для поддержки распознавания голосовых команд, систем речевого ввода данных и синтеза речи. За более подробной информацией обратитесь к следующему разделу статьи .
  • Java 3D - это API, предоставляющий кросс-платформенные и масштабируемые возможности для работы с 3D-графикой в Java-приложениях. API организован в виде набора объектно-ориентированных интерфейсов, складывающихся в единую простую высокоуровневую модель программирования.
  • Механизм Metadata Facility позволяет разработчикам определять атрибуты для классов, интерфейсов, полей и методов, благодаря чему они могут подвергаться специальной обработке со стороны средств разработки, развертывания и сторонних библиотек на этапе выполнения приложения (см. статью ).
  • Java Content Repository API - это API для доступа к репозиториям контента в Java SE независимо от их реализации. Подобные репозитории представляют собой высокоуровневые системы управления информацией и являются расширенными вариантами классических репозиториев данных.
  • Enumerations (перечисление) - это тип данных, позволяющий описывать различные элементы данных в виде типизированного набора констант.
  • Generics (обобщенные типы) позволяют создавать классы с параметрами (абстрактными типами), которые указываются на этапе инстанциирования. За подробностями обратитесь к статье , а также ознакомьтесь со статьей , в которой рассказывается о том, как обобщенные типы облегчают работу с коллекциями в Java SE 6.0.
  • Утилиты Concurrency - это набор классов, предоставляющих функциональность среднего уровня, которая обычно требуется приложениям, выполняющим параллельную обработку данных.
  • Java API for XML Processing (JAXP) - это API, при помощи которого Java-приложения могут разбирать и преобразовывать XML-документы вне зависимости от используемого процессора XML. Это позволяет приложениям легко переключаться между разными процессорами без изменений в прикладном коде. В свою очередь, технология JAXB (Java API for XML Binding ) предоставляет возможности для автоматизации сопоставления документов XML и объектов Java.
  • SOAP with Attachments API for Java (SAAJ) предоставляет разработчикам функции для формирования и обработки сообщений в соответствии со спецификацией SOAP 1.1 c указанием SOAP with Attachments (SOAP с вложениями). За более подробной информацией обратитесь к статье ).

Технологии, входящие в состав J2EE:

  • Enterprise JavaBeans (EJB) - это компонентная модель, которая упрощает разработку связующего программного обеспечения, предоставляя такие сервисы, как управление транзакциями, обеспечение безопасности и подключение к базам данных.
  • Спецификация портлетов определяет набор API для создания порталов на Java, охватывая такие аспекты, как агрегирование и представление информации, персонализация и обеспечение безопасности (см. статью ).
  • JavaMail - это API, предоставляющий набор абстрактных классов, моделирующих почтовую систему.
  • Java Message Service (JMS) - это API, поддерживающий создание переносимых Java-приложений на основе механизма обмена сообщениями. Он определяет общий набор базовых понятий и стратегий программирования для всех систем обмена сообщениями, совместимых с JMS .
  • JavaServer Faces (JSF) предоставляет программную модель, помогающую создавать Web-приложения путем компоновки страниц из многократно используемых компонентов пользовательского интерфейса, а также связывания этих компонентов с источниками данных, а событий, генерируемых на клиенте - с серверными обработчиками. За более подробной информацией обратитесь к руководству из двух частей и серии статей колонки .
  • JavaServer Pages (JSP) предоставляет Web-разработчикам средства для быстрого создания и простой поддержки динамических, кросс-платформенных Web-страниц, которые разделяют пользовательский интерфейс и генерацию контента, благодаря чему дизайнеры могут изменять разметку, не трогая динамически формируемое содержимое (см. руководство .
  • Стандартная библиотека тегов для JavaServer Pages (JSTL) - это набор специализированных тегов, предоставляющих стандартный формат для выполнения действий, необходимых многим Web-приложениям. Ознакомьтесь со статьей Обновите ваши страницы JSP при помощи JSTL (EN) и серией из четырех частей под названием .
  • Сервлеты Java расширяют функциональность Web-серверов, предоставляя кросс-платформенный, компонентный подход к созданию Web-приложений, свободный от ограничений производительности, характерных для CGI.
  • J2EE Connector Architecture (JCA) предоставляет стандартную архитектуру для подключения приложений J2EE к разнородным корпоративным информационным системам (EIS). Эта архитектура определяет набор масштабируемых и безопасных механизмов на основе транзакций, при помощи которых поставщики EIS могут предоставлять стандартные адаптеры ресурсов для включения в сервер приложений. За более подробной информацией обратитесь к статьям , и руководству .
  • Спецификация J2EE Management (JMX) определяет информационную модель управления для платформы J2EE. Эта модель была специально спроектирована для взаимодействия со многими системами и протоколами управления. Она содержит стандартные средства для сопоставления с общей информационной моделью (Common Information Model - CIM), информационной базой управления SNMP (SNMP Management Information Base - MIB) и объектной моделью Java при помощи резидентного серверного компонента EJB (J2EE Management EJB Component - MEJB).
  • Java Transaction API (JTA) – это высокоуровневая реализация и независимый от протоколов API, предоставляющий программам и серверам приложений средства для доступа к транзакциям. Java Transaction Service (JTS) определяет реализацию менеджера транзакций, который поддерживает JTA и реализует на нижележащем уровне сопоставление с объектным транзакционным сервисом OMG (Object Transaction Service - OTS 1.1). Распространение транзакций в JTS реализуется при помощи протокола Inter-ORB (IIOP). За более подробной информацией обратитесь к статье .

Технологии, входящие в состав J2ME:

  • Mobile Information Device Profile (MIDP) - это одна из двух конфигураций, составляющих среду выполнения Java для мобильных устройств с ограниченными ресурсами. MIDP предоставляет приложениям базовую функциональность, включающую в себя средства для создания интерфейсов пользователя, подключения к сетевым ресурсам, локального хранения данных и управления жизненным циклом.
  • Connected Device Configuration (CDC) – это стандартизированная инфраструктура для создания и развертывания приложений, доступ к которым может осуществляться со стороны многих сетевых и встроенных устройств.
  • Mobile 3D Graphics API для J2ME (M3G) - это легковесный интерактивный API для реализации трехмерной графики, являющийся дополнительным компонентом J2ME. Подробнее о нем можно прочитать в серии из двух частей .

Технологии Java и создание Web-приложений

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

Ознакомьтесь с приведенными ниже материалами, посвященным вопросам Web-разработки на Java.

  • Статьи колонки рассказывают о Grails – современной инфраструктуре для создания Web-приложений, написанных на Groovy. Grails позволяет органично сочетать ранее написанный код на Java с возможностью использования гибкого и динамического скриптового языка. Более подробная информация о Groovy приведена ниже, в разделе Какое отношение имеет Java к динамическим языкам и функциональному программированию?.
  • Ajax – это методология программирования, предусматривающая использование скриптовых языков на стороне клиента для обмена данными с Web-сервером, что позволяет быстро обновлять информацию на страницах без необходимости их полной перезагрузки. Прочитав серии статей и , вы узнаете, чем Ajax может помочь вам как разработчику Java-приложений. За дополнительной информацией вы можете обратитесь к на сайте developerWorks.
  • JavaServer Faces (JSF) предоставляет программную модель, помогающую создавать Web-приложения путем компоновки страниц из многократно используемых компонентов пользовательского интерфейса, а также связывания этих компонентов с источниками данных, а событий, генерируемых на клиенте - с серверными обработчиками. За более подробной информацией обратитесь к руководству из двух частей и серии статей колонки .
  • Платформа Web-инструментария Eclipse (Web Tools Platform – WTP) расширяет популярную среду разработки Eclipse, добавляя в нее средства для создания Web-приложений на основе технологий Java EE (см. руководство ).
  • В на сайте developerWorks можно найти множество других превосходных материалов по этим вопросам.

Технологии Java, SOA и Web-сервисы

Сервис-ориентированная архитектура (SOA) – это компонентная модель, связывающая функциональные модули приложения (известные как сервисы , откуда произошел термин Web-сервисы ) через строго описанные интерфейсы и контракты. Определения интерфейсов не зависят от используемого аппаратного обеспечения, операционной системы и языка программирования, на котором реализован сервис, благодаря чему поддерживается унифицированное взаимодействие между сервисами, являющимися компонентами разных систем. SOA – это пример слабо связанной программной модели, представляющей собой альтернативу классическим сильно связанным объектно-ориентированным моделям.

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

Более подробную информацию можно получить, прочитав следующие материалы:

  • Страницы и на сайте developerWorks помогут вам сориентироваться в этих непростых технологиях.
  • В статьях серии рассказывается об инфраструктурах Web-сервисов на Java, а также о новых функциональных слоях, созданных на базе этих сервисов.
  • В статье приводится введение в элегантный стиль проектирования Web-сервисов под названием Передача репрезентативного состояния (Representational State Transfer - REST) и рассказывается об использовании Java для создания Web-сервисов по принципам REST.
  • Понимание технологии JAX-RPC (RPC на основе API Java для работы с XML) имеет большое значение для создания эффективных Web-сервисов на Java.
  • JAX-WS – это очевидный следующий шаг в развитии JAX-RPC. Практическое введение в этот новый API дано в руководстве .
  • Серия статей представляет собой руководство по компонентной архитектуре сервисов (Service Component Architecture - SCA) - спецификации, описывающей модель разработки приложений и систем по принципам SOA.
  • В статье приводится введение в инфраструктуру Service Data Objects (объекты данных сервисов), которая упрощает модель работы с данными в Java EE при создании SOA-приложений.

Какое отношение имеет Java к динамическим языкам и функциональному программированию?

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

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

  • Скриптовый язык Groovy позволяет Java-разработчикам использовать наиболее привычные языковые конструкции и библиотеки, при этом предоставляя гибкую, динамическую среду разработки, которая не требует компиляции, упрощает синтаксис и поддерживает выполнение скриптов внутри обычных Java-приложений. Детальный обзор возможностей этого языка приводится в статьях серии .
  • Новый API скриптов в Java SE 6, обеспечивающий обратную совместимость с Java SE 5 и содержащий небольшой набор интерфейсов и классов, предоставляет простой способ вызова из Java-кода скриптов, написанных на десятках языков. С его помощью вы можете загружать и вызывать внешние скрипты на этапе выполнения, динамически изменяя поведение приложения. Подробнее об этом API можно прочитать в серии из двух статей под названием .
  • Вы - горячий сторонник функционального программирования? Тогда вам следует обратить внимание на колонку , в которой рассказывается о Scala - языке программирования для JVM, сочетающем функциональный и объектно-ориентированный подход к разработке.
  • VM поддерживают альтернативные языки программирования уже на протяжении длительного времени. В статьях колонки можно прочитать о реализациях для JVM таких языков, как Rexx, Ruby, JavaScript, Python и некоторых других.

Java и создание свободного программного обеспечения

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

  • Организация Apache Software Foundation(EN) объединяет множество открытых проектов, большинство из которых разрабатываются на основе технологий Java. Ниже перечислены некоторые представители этого семейства проектов.
    • Apache Struts(EN) - это инфраструктура для создания Web-приложений, архитектура которых следует принципу "Модель-Представление-Контроллер" (Model-View-Controller).
    • Apache Shale(EN) - еще одна современная инфраструктура для создания Web-приложений, являющаяся наследницей Struts и базирующаяся на технологии JSP (JavaServer Pages). Введение в Shale содержится в статьях серии .
    • Apache Ant является фактическим стандартом для автоматизации процесса сборки Java-приложений.
    • Средство сборки Apache Maven(EN) проектировалось с учетом требований современных проектов по созданию программного обеспечения, для которых характерны динамичное взаимодействие между группами разработчиков и зависимость от множества независимо поддерживаемых компонентов (см. руководство ).
    • Apache Tomcat - это популярный Web-контейнер, поддерживающий сервлеты и серверные страницы Java (JSP).
    • Проект Apache Geronimo(EN) заключается в создании полностью соответствующего спецификации сервера приложений Java EE на основе исключительно свободных технологий. Подробнее о Geronimo можно прочитать в статье , а также в на сайте developerWorks, содержащем множество полезных материалов.
    • Apache Derby(EN) - это сервер реляционных баз данных, полностью реализованный на Java. Введение в Derby приводится в статье .
  • Eclipse(EN) – это открытая и независимая платформа разработки, а также набор базовых инструментов для создания программного обеспечения. Она написана на Java и предоставляет инфраструктуру на основе подключаемых модулей, облегчающую разработку, интеграцию и использование программных средств. IBM является одним из учредителей Eclipse.org и активно участвует в совете управляющих этого проекта, а также его подкомитетах. О некоторых компонентных технологиях платформы Eclipse, направленных на создание Java-приложений, можно прочитать в следующих материалах:
    • AspectJ(EN) - это аспектно-ориентированное расширение языка Java, которое может использоваться для модульной реализации сквозной функциональности, например журналирования или обработки исключений.
    • Standard Widget Toolkit(EN) (SWT) - это инструментарий, позволяющий задействовать возможности операционной системы для создания элементов пользовательских интерфейсов эффективным и переносимым образом.
    • Mylyn(EN) - это мощная система управления заданиями для пользователей Eclipse. Подробное руководство содержится в статьях и, ранее известный как "система безопасности Acegi для Spring" - это мощное и гибкое решение для обеспечения безопасности в корпоративных приложениях, созданных на базе инфраструктуры Spring. Она подробно рассматривается в четырех статьях серии .
  • Компания Sun Microsystems также начала работу по , запустив следующие общественные проекты на сайте java.net(EN) :
    • OpenJDK

Как развивать навыки программирования на Java?

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

  • Руководства и статьи
    • На сайте developerWorks представлена обширная коллекция , которые по степени полезности в процессе изучения Java уступают только самостоятельному написанию кода.
    • Статьи серий и прекрасно подходят для совершенствования вашей техники владения Java.
    • Применение теории проектирования при создании реальных приложений рассматривается в статьях серии .
    • Опытные разработчики Java заранее закладывают в свои приложения средства для их отладки и тестирования. На сайте developerWorks представлены несколько статей серии - это игры реального времени на базе платформы Eclipse, направленные на изучение программирования на Java. Вводная информация о CodeRuler приводится в статье Завоевание средневековых королевств вместе с CodeRuler (EN).
  • Технические обучающие курсы IBM
    • Вашему вниманию предлагается большой выбор онлайновых, очных и мультимедийных курсов по Java, разработанных подразделением IBM Global Services.
  • Сертификация
    • Вы можете сдать несколько экзаменов для получения сертификатов, свидетельствующих о ваших навыках программирования на Java. Материалы, посвященные курсам с последующей сертификацией, находятся на сайте Java Certification(EN) .
    • IBM предоставляет возможность ваших навыков в таких технологиях, имеющих отношения к Java, как создание корпоративных приложений для WebSphere, программное обеспечение Rational, DB2, XML и SOA.
  • Форумы
    • , модерируемые экспертами, за плечами которых многолетний опыт работы с Java-технологиями - это наиболее интерактивный из способов изучения языка Java.

Продукты и технологии IBM для Java-разработчиков

IBM занимает одним из лидеров в практическом применении Java-технологий. Ниже приведены ссылки на некоторые продукты и технологии IBM, предлагаемые разработчикам приложений для платформы Java.

  • Бесплатно загружаемые продукты:
    • (Java Developer Kit) - это набор средств для создания и тестирования апплетов и приложений для Java SE и Java ME на множестве популярных операционных систем, в том числе Windows, Linux и AIX.
    • (IBM Development Package for Eclipse) - это основанный на Eclipse неподдерживаемый инструментарий разработчика, позволяющий создавать и запускать приложения в собственной готовой среде разработки.
    • : Вы можете загрузить пакеты свободного программного обеспечения Eclipse c сайта developerWorks, в том числе параллельно выпускаемые продукты Calisto и Europa.
    • - это виртуальное хранилище перспективных Java-технологий, разрабатываемых в IBM. К ним относятся API, интегрированные среды разработки, комплекты разработчика, эталонные реализации и утилиты. Ниже приведены ссылки на некоторые технологии, представленные в alphaWorks.
    • . Эта утилита помогает анализировать и генерировать пригодные для тестирования Ant-скрипты для сборки проектов, разработанных при помощи Eclipse, Rational и WebSphere IDE для платформ Java EE и SCA.
    • (IBM Pattern Modeling and Analysis Tool for Java Garbage Collector). Данная утилита разбирает подробные трассировочные файлы GC, анализирует использование динамической памяти (кучи) и рекомендует настройки приложения на основе полученных результатов моделирования работы с памятью. (Secure Shell Library for Java) - это легковесная реализация протокола SSH-2, разработанного комитетом IETF (Internet Engineering Task Force). Он предоставляет средства для безопасной аутентификации и другие защищенные сервисы, работающие в условиях незащищенной сети. позволяет консолидировать и преобразовывать данные, тем самым повышая продуктивность, гибкость и производительность вашего бизнеса за счет оперативного доступа к нужной информации.