У 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, по существу, представляет собой интерпретатор байт-кода. Такой подход может показаться не совсем обычным, поскольку для повышения производительности компиляторы большинства современных языков генерируют исполняемый код. Но выполнение программы под управлением виртуальной машины позволяет разрешить многие затруднения, возникающие в работе веб-приложений.