Выбрать главу

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

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

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

Несмотря на то что Java был задуман как интерпретируемый язык, ничто не мешает преобразовать байт-код по ходу компиляции в собственный для повышения производительности. С этой целью сразу же после первой реализации JVM компания Sun Microsystems начала работу над технологией HotSpot, в рамках которой был разработан динамический компилятор байт-кода. Если в состав виртуальной машины входит динамический компилятор, байт-код по частям преобразуется в собственный исполняемый код. Преобразовывать сразу всю программу на Java в исполняемый код нецелесообразно из-за разнообразных проверок, которые могут производиться только на этапе выполнения программы. Поэтому динамический компилятор выполняет преобразования кода частями по мере необходимости (отсюда и его другое название — JIT-компилятор, т.е. компилятор, вступающий в действие лишь в нужный момент времени). Более того, компиляции подвергаются не все фрагменты байт-кода, а лишь те, скорость выполнения которых можно повысить благодаря компиляции, а остальной код интерпретируется. Несмотря на все ограничения, присущие динамической компиляции, она, тем не менее, позволяет существенно повысить производительность программ. И невзирая на динамическое преобразование байт-кода в исполняемый код, переносимость и защита сохраняются, поскольку JVM по-прежнему участвует в процессе выполнения программ. Основные свойства Java

Даже самый краткий обзор языка Java будет неполным без упоминания его основных свойств. И хотя главной причиной, побудившей к разработке Java, послужила потребность в языке, позволяющем создавать переносимые и защищенные программы, заметное влияние на оформление Java в окончательном виде оказали и другие факторы. Ниже вкратце перечислены основные свойств этого языка программирования. Простота Java обладает лаконичными, тесно связанными друг с другом и легко усваи¬ваемыми языковыми средствами Безопасность Предоставляет безопасные средства для создания интернет-приложений Переносимость Программы на Java могут выполняться в любой среде, для которой имеетсяисполняющая система Java Объектно-ориентированный характер Воплощает современную концепцию объектно-ориентированного програм¬мирования Надежность Стимулирует безошибочное программирование благодаря строгому кон¬тролю типов и проверкам во время выполнения программ Многопоточность Обеспечивает встроенную поддержку многопоточного программирования Архитектурная независимость Не привязан к конкретному типу вычислительной машины или архитектуре операционной системы Интерпретируемость Предоставляет байт-код, обеспечивающий независимость от платформы Высокая производительность Байт-код Java сильно оптимизирован на повышение скорости выполнения Распределенность Разработан для применения в распределенной среде Интернета Динамичность Программы на Java содержат значительную долю информации, используе¬мой во время выполнения для проверки и разрешения доступа к объектам Объектно-ориентированное программирование

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

Объектно-ориентированный подход к программированию позволяет разрабатывать достаточно сложные программы. С момента появления первого компьютера методология программирования претерпела ряд существенных изменений, связанных с возрастанием сложности программ. На заре вычислительной техники процесс программирования представлял собой ввод машинных команд в двоичной форме с пульта управления ЭВМ. В то время размеры программ не превышали нескольких сотен команд, и поэтому такой подход считался вполне приемлемым. Затем появился язык ассемблера. Символьное представление машинных команд и процедура компиляции позволили перейти к созданию более сложных программ. В связи с дальнейшим увеличением объема программного кода появились языки высокого уровня. Они стали теми инструментами, которые позволили программистам справиться с постепенным усложнением программ. Первым из широко распространенных языков высокого уровня стал FORTRAN. Разработка FORTRAN стала важным этапом в развитии языков программирования, но этот язык не вполне подходил для создания удобочитаемых программ.

В 1960-е годы начало зарождаться структурное программирование. Впоследствии для поддержки данного подхода был созданы такие языки, как С и Pascal. Благодаря структурированным языкам программирования появилась возможность очень просто создавать программы средней сложности. Главными свойствами структурированных языков стали поддержка независимых подпрограмм, локальных переменных, наличие расширенного набора управляющих конструкций и отсутствие оператора GOTO. Но, несмотря на то что структурированные языки стали мощными инструментами программирования, с увеличением объема и сложности проектов их возможности были быстро исчерпаны.

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

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