Core Java 2 Том I Глава 1 |
Введение в язык Java
- В этой главе...
- Программная платформа Java
- Характерные особенности языка Java
- Java и Internet
- История языка Java
- Распространенные заблуждения относительно языка Java
На появление первой версии Java в 1996 году откликнулись не только специализированные компьютерные газеты и журналы, но даже такие издания, как The New York Times, The Washington Post и Business Week. Java — единственный язык программирования, удостоившийся десятиминутного репортажа на National Public Radio. Это было удивительное время. Тем дням и последующей истории языка Java посвящена данная глава.
Программная платформа Java
- В первой редакции этой книги говорилось следующее.
"Как язык программирования Java перевыполнил рекламные обещания. Несомненно, это один из лучших языков, доступных серьезным программистам. Потенциально Java имел все предпосылки, чтобы стать великим языком программирования, однако, вероятно, сейчас время для этого уже упущено. Когда появляется новый язык, немедленно возникает проблема его совместимости с программным обеспечением, созданным ранее".
По поводу этого абзаца наш редактор долго спорил с одним из руководителей компании Sun. Но и сейчас, по прошествии долгого времени, такая оценка кажется нам правильной. Действительно, Java обладает целым рядом преимуществ, о которых мы поговорим чуть позже. Однако более поздние дополнения далеко не так элегантны, как исходный вариант языка, и виной тому пресловутые требования совместимости.
Как уже говорилось в первой редакции, Java — не только язык. Хорошие языки — не редкость; появление некоторых из них вызвало в своё время сенсацию в компьютерном мире. В отличие от них, Java — это программная платформа, включающая мощную библиотеку, большой объем кода, вполне пригодного для повторного использования, и среду для выполнения программ, которая обеспечивает безопасность, независимость от операционной системы и автоматическую "сборку мусора".
Программистам нужны языки с четкими синтаксическими правилами и понятной семантикой. Такому требованию, помимо Java, отвечают десятки языков. Некоторые из них даже обеспечивают переносимость и "сборку мусора", однако их библиотеки оставляют желать лучшего. В результате программисты вынуждены самостоятельно реализовывать графические операции, действия с базой данных и другие часто встречающиеся процедуры. Java объединяет в себе прекрасный язык, высококачественную среду выполнения программ и обширную библиотеку. В результате многие программисты остановили свой выбор именно на Java.
Характерные особенности языка Java
Авторы Java написали руководство, в котором объяснялись цели и достоинства нового языка. В этом документе приведено одиннадцать характерных особенностей Java. Этот язык:
- простой;
- переносимый;
- объектно-ориентированный;
- интерпретируемый;
- распределенный;
- высокопроизводительный;
- надежный;
- многопотоковый;
- безопасный;
- динамичный,
- не зависит от архитектуры компьютера;
В данном разделе мы
- приведем цитаты из руководства по языку Java, раскрывающие особенности языка;
- поделимся с читателями соображениями по поводу отдельных свойств языка, основываясь на собственном опыте работы с его последней версией.
Руководство, о котором идет речь, можно найти по адресу https://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# в данной книге рассматриваться не будут.
Java и 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-страницах, однако аплеты делают это возможным. (Этот аплет можно найти по адресу https://jmol.sourceforge.net .)
Рис. 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.0 | Реализация языка |
1.1 | Внутренние классы |
1.2 | Отсутствуют |
1.3 | Отсутствуют |
1.4 | Директивы |
5.0 | Универсальные классы, цикл "for each", представление простых типов в виде объектов, метаданные, нумерация, статическое импортирование |
Таблица 1.2. Рост объема библиотеки АРІ для Java Standart Edition
Версия | Количество классов и интерфейсов |
---|---|
1.0 | 211 |
1.1 | 477 |
1.2 | 1524 |
1.3 | 1840 |
1.4 | 2723 |
5.0 | 3270 |
Распространенные заблуждения относительно языка 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 можно найти в документе по адресу https://docs.oracle.com/javase/tutorial/index.html
Реклама
------------------------
ТРИО теплый пол отзыв
Заработок на сокращении ссылок
Earnings on reducing links
Код PHP на HTML сайты
Категория: Книги по Java
Комментарии |