О
Java
в общем и
раскрыто
История появления
Java
Рождению языка Java
предшествовала довольно интересная история. В 1990 году разработчик ПО
компании Sun Microsystems Патрик Нотон (Patrick Naughton) понял, что ему
надоело поддерживать сотни различных интерфейсов программ, используемых в
компании, и сообщил исполнительному директору Sun Microsystems и своему
другу Скотту МакНили (Scott McNealy) о своем намерении перейти работать в
компанию NeXT. МакНили, в свою очередь, попросил Нотона составить список
причин своего недовольства и выдвинуть такое решение проблем, как если бы
он был Богом и мог исполнить все, что угодно.
Нотон, хотя и не
рассчитывал на то, что кто-то обратит внимание на его письмо, все же
изложил свои претензии, беспощадно раскритиковав недостатки Sun
Microsystems, в частности, разрабатываемую в тот момент архитектуру ПО
NeWS. К удивлению Нотона, его письмо возымело успех: оно было разослано
всем ведущим инженерам Sun Microsystems, которые не замедлили откликнуться
и высказать горячую поддержку своему коллеге и одобрение его взглядов на
ситуацию в Sun Microsystems. Обращение вызвало одобрение и у высшего
руководства компании, а именно, у Билла Джоя (Bill Joy), основателя Sun
Microsystems, и Джеймса Гослинга (James Gosling), начальника Нотона.
В тот день, когда Нотон должен был уйти из компании, было принято
решение о создании команды ведущих разработчиков с тем, чтобы они делали
что угодно, но создали нечто необыкновенное.
Команда из шести
человек, с кодовым названием Green, ушла в самовольное изгнание,
погрузившись в исследования бытовых устройств, таких как Nintendo Game
Boys, устройств дистанционного управления. Команда Green пыталась найти
средство, с помощью которого можно было бы установить взаимодействие между
этими устройствами. Вскоре стало ясно, что такие электроприборы, как
видеомагнитофоны, проигрыватели лазерных дисков, стереосистемы - все они
были реализованы на разных процессорах. Это означало, что если
производитель захочет добавить телевизору или видеомагнитофону
дополнительные функции или характеристики, он будет зажат в рамках
средств, зашитых в аппаратное обеспечение. Эта проблема, в сочетании с
ограниченностью памяти микросхем этих устройств, выдвинула новый подход к
программированию ПО, который должен был стать ведущим на рынке бытовой
электроники.
Команда приступила к разработке нового
объектно-ориентированного языка программирования, который был назван Oak
(дуб), в честь дерева, росшего под окном Гослинга.
Вскоре компания
Sun Microsystems преобразовала команду Green в компанию First Person.
Новая компания обладала интереснейшей концепцией, но не могла найти ей
подходящего применения. После ряда неудач неожиданно ситуация для компании
резко изменилась: был анонсирован Mosaic - так родился World Wide Web, с
которого началось бурное развитие Internet.
Нотон предложил
использовать Oak в создании Internet- приложений. Так Oak стал
самостоятельным продуктом, вскоре был написан Oak-компилятор и Oak-браузер
"WebRunner". В 1995 году компания Sun Microsystems приняла решение
объявить о новом продукте, переименовав его в Java (единственное разумное
объяснение названию - любовь программистов к кофе). Когда Java оказалась в
руках Internet, стало необходимым запускать Java-аплеты - небольшие
программы, загружаемые через Internet. WebRunner был переименован в
HotJava и компания Netscape встала на поддержку Java-продуктов.
Немного о
Java
На сегодняшний день создание
программного обеспечения представляет собой чрезвычайно тяжелое занятие.
Трудности связаны с разнообразием архитектур машин, операционных систем,
графических оболочек и т.д.. Кроме того, ваши приложения должны работать в
распределенных системах. Стремительный рост технологий, связанных с
Интернетом, WWW и "электронной коммерцией", дополнительно усложняют эту
задачу. Модный ныне объектно-ориентированный подход сам по себе не решает
этих проблем, более того, часто привносит новые.
Предлагаемый фирмой
Sun Microsystems подход, а именно система программирования на основе языка
Java(TM) обладает следующими характеристиками:
-
язык программирования
объектно-ориентирован, в то же время довольно прост для освоения
-
цикл разработки приложений
сокращен за счет того, что система построена на основе интерпретатора
-
приложение получается
автоматически переносимым между множеством платформ и операционных
систем
-
за счет встроенной системы
сборки мусора программист освобождается от необходимости явного
управления памятью
-
в интерактивном
графическом приложении удается достичь высокой производительности
(быстрого отклика на ввод пользователя) за счет встроенной в систему
многопотоковости
-
приложение легко
сопровождается и модифицируется, т.к. модули могут быть загружены с сети
-
в приложения встроена
система безопасности, не допускающая незаконного доступа и проникновения
вирусов
Свойства
Java
Java проста, объектно
ориентированна и знакома
Система Java создана на основе *простого*
языка программирования, техника использования которого близка к
общепринятой и обучение которому не требует значительных усилий.
Java
как язык программирования является объектно ориентированной с момента
основания. Кроме того программист с самого начала обеспечивается набором
*стандартных* библиотек, обеспечивающих функциональность от стандартного
ввода/вывода и сетевых протоколов до графических пользовательских
интерфейсов. Эти библиотеки легко могут быть расширены.
Несмотря на то,
что язык С++ был отвергнут, синтаксис языка Java максимально приближен к
синтаксису С++. Это делает язык знакомым широкому кругу программистов. В
то же время из языка были удалены многие свойства, которые делают С++
излишне сложным для пользования, не являясь абсолютно необходимыми. В
результате язык Java получился более простым и органичным, чем
С++.
Надежность и безопасность
Java существенно облегчает создание
надежного программного обеспечения. Кроме исчерпывающей проверки на этапе
компиляции, система предусматривается анализ на этапе выполнения. Сам язык
спроектирован так, чтобы вырабатывать у программиста привычку писать
"правильно". Модель работы с памятью, в которой исключено использование
указателей, делает невозможными целый класс ошибок, характерных для С и
С++.
В силу того, что Java предназначена для работы в распределенной
среде, безопасность становится чрезвычайно важной проблемой. Требования
безопасности определяют многие черты как языка, так и реализации всей
системы.
Независимость от архитектуры и переносимость.
Компилятор
Java производит байт-коды, т.е. модули приложения имеют
архитектурно-независимый формат, который может быть проинтерпретирован на
множестве разнообразных платформ. Это уже не исходные тексты, но еще не
платформно-зависимые машинные коды.
Следующий шаг -- "замораживание"
стандарта на формат основных встроенных типов данных. Программа, созданная
на одной платформе, работает на всех остальных.
Этот стандарт
фиксирован в документе, описывающем Java Virtual Machine. Стандарт может
быть реализован на любой аппаратно-программной платформе, поддерживающей
многопотоковость.
Производительность
Схема работы системы и набор
байт-кодов виртуальной машины Java таковы, что позволяют достичь высокой
производительности на этапе выполнения программы:
-
анализ кодов на соблюдение
правил безопасности производится один раз до запуска кодов на
выполнение, в момент выполнения таких проверок уже не нужно, и коды
выполняются максимально эффективно
-
работа с базовыми типами
максимально эффективна, для операций с ними зарезервированы специальные
байт-коды
-
методы в классах не
обязательно связываются динамически
-
автоматический сборщик
мусора работает отдельным фоновым потоком, не замедляя основную работу
программы, но в то же время обеспечивая своевременный возврат свободной
памяти в систему
-
стандарт предусматривает
возможность написания критических по производительности участков
программы в машинных кодах
Интерпретируемый,
многопотоковый и динамический
Интерпретируемая природа языка позволяет
сделать фазу линкования простой, инкрементальной и, следовательно,
быстрой. Это резко сокращает цикл разработки и тестирования программных
фрагментов.
Многопотоковость позволяет выполнять в рамках одного
приложения несколько задач одновременно. Это становится особенно актуально
в современных распределенных приложениях, когда процессы сетевого обмена
могут идти одновременно и асинхронно. При этом программа продолжает
реагировать на ввод информации пользователем без неприятных
задержек.
Многопотоковость поддерживается на уровне языка -- часть
примитивов синхронизации встроена в систему реального времени, а
библиотека содержит базовый класс Thread. К тому же системные библиотеки
написаны thread-safe, т.е. все они могут быть использованы в
многопотоковых приложениях.
Система обеспечивает динамическую сборку
программы. Классы подгружаются по мере необходимости, причем загружены они
могут быть с любой точки сети, что позволяет сделать внесение изменений в
приложения прозрачным для пользователя. Пользователь может быть уверен,
что всегда работает со свежей версией приложения.
Другие статьи есть
в нашем
клубе
.
|