Java: руководство для начинающих (ЛП) - Шилдт Герберт 2 стр.


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

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

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

Язык Java был задуман в 1991 году сотрудниками компании Sun Microsystems Джеймсом Гослингом (James Gosling), Патриком Нотоном (Patrick Naughton), Крисом Уортом (Chris Warth), Эдом Фрэнком (Ed Frank) и Майком Шериданом (Mike Sheridan). Сначала этот язык получил имя Oak, но в 1995 году он был переименован в Java. Как ни странно, разработчики языка первоначально не предназначали его для разработки интернет-приложений. Они стремились создать платформенно-независимый язык, на котором можно было бы создавать встраиваемое программное обеспечение для различной бытовой аппаратуры с микропроцессорным управлением, в том числе тостеров, микроволновых печей и пультов дистанционного управления. В таких устройствах применялись контроллеры на микропроцессорах разной архитектуры, а исполняемый код, генерируемый компиляторами большинства существовавших в то время языков программирования, был ориентирован на конкретный процессор. Характерным тому примером может служить язык C++.

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

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

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

Язык Java очень похож на языки С и C++. От С язык Java унаследовал синтаксис,а от C++ — объектную модель. Сходство Java с языками С и C++ очень важно. Во-первых, многие программисты знакомы с синтаксисом С и C++, что упрощает изучениеязыка Java. Те же, кто освоил Java, могут без труда изучить С и C++.

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

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

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

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

Через несколько лет после создания Java корпорация Microsoft разработала язык С#. И это очень важно, поскольку C# тесно связан с Java. В самом деле, у многих языковых средств C# имеются свои аналоги в Java. В Java и C# используется единый общий синтаксис, похожий на C++, поддерживается распределенное программирование и применяется одна и та же объектная модель. Разумеется, у Java и C# имеются отличия, но внешне эти языки очень похожи. Это означает, что, зная С#, вы сможете относительно просто изучить Java, и, наоборот, если вам предстоит изучить С#, знание Java может очень пригодиться.

Учитывая сходство Java и С#, может возникнуть вопрос: “Заменит ли C# язык Java?” Ответ, безусловно, отрицательный. Java и C# оптимизированы для абсолютно разных типов вычислительных сред. Как и вместе с языком C++, Java будет мирно сосуществовать с языком C# еще многие годы.Вклад Java в развитие Интернета

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

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

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

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

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

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

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

Добиться безопасности и переносимости программ по сети позволяет генерируемый компилятором Java код, не являющийся исполняемым. Такой код называется байт-кодом. Это оптимизированный набор команд, предназначенных для выполнения в исполняющей системе Java, называемой виртуальной машиной Java (Java Virtual Machine — JVM). Виртуальная машина Java, по существу, представляет собой интерпретатор байт-кода. Такой подход может показаться не совсем обычным, поскольку для повышения производительности компиляторы большинства современных языков генерируют исполняемый код. Но выполнение программы под управлением виртуальной машины позволяет разрешить многие затруднения, возникающие в работе веб-приложений.

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

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

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

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

Назад Дальше