В чем преимущество используемой в java системы трансляции выполнения программ

Обновлено: 03.07.2024

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

Первую версию Java выпустила в 1995 году компания Sun Microsystems. Язык был назван в честь сорта кофе с одноимённого острова. Этот факт отражен на официальном логотипе.

Изначально язык был создан для программирования бытовых электронных устройств, но очень скоро стало ясно, что его возможности гораздо шире. Язык взяли на вооружение разработчики серверного ПО и клиентских приложений. Так Java начал покорение мира. Очень скоро он вытеснил с рынка очень распространённый в начале 90-х C++.

С 2010 года все права на Java перешли к корпорации Oracle, поглотившей Sun Microsystems. А сам язык вышел на пик своей популярности. И, надо сказать, вполне заслуженно.

Java – универсальный объектно-ориентированный язык со строгой типизацией. В нём реализован принцип WORA (от английского: write once, run anywhere). Это позволяет запускать приложения везде, где есть среда исполнения JRE (от английского: Java Runtime Environment). Механизм работы программ следующий. Исходный материал транслируется в байт-код, который обрабатывается виртуальной машиной Java (JVM). При этом не имеет значения, какая операционная система установлена на устройстве.

Благодаря кроссплатформенности язык получил широкое распространение, регулярно занимает ведущие позиции в Топ-5 авторитетных международных рейтингов.

PYPL (PopularitY of Programming Language) – специализированный рейтинг, основанный на данных Google SE. Взглянем на его первую пятёрку. Java – на почётном втором месте.

Stack Overflow (раздел технологий) – расширенный рейтинг, основан на количестве вопросов, касающихся языков программирования и скриптов. Java – в первой пятёрке.

В международных рейтингах IEEE Spectrum и TIOBE (также как в PYPL) Java занимает вторые места в ТОП-5 (за 2019/2020 год). Это однозначно свидетельствует о лидирующих позициях языка в мировой IT-индустрии.

Java был протестирован программистами в самых разных сферах: от карманных компьютеров до интерактивного телевидения. Сейчас он наиболее востребован в таких направлениях, как

  • веб-разработка (масштабные бизнес-проекты);
  • программы для ПК (десктопный софт);
  • компьютерные игры (например, Minecraft);
  • приложения для мобильных устройств (ОС Android);
  • научные исследования и разработки;
  • промышленный программинг.

Изначально перед создателями Java стояла задача сделать синтаксис более простым и понятным в сравнении с С/С++. В итоге так и получилось. Сходство между этими языками есть, но освоить Java и кодировать на нём гораздо легче.

У Java масса достоинств, благодаря которым многие разработчики выбирают именно его.

Простота – первое техническое достоинство Java. У него чёткие синтаксические правила и понятная семантика. Рациональность и краткость очень полезны для обработки кода машинами с ограниченным объёмом ресурсов. Для встроенных устройств создана специальная платформа Java Micro Edition.

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

Безопасность. Важнейший критерий, учитывая применение языка в сетевых / распределенных средах. Разработчики проделали большую работу по защите платформы Java. И она продолжается. Обойти или взломать механизмы защиты крайне сложно. Пример: использование классов, имеющих цифровую подпись. Полные права предоставляются только при полном доверии автору класса.

Производительность. Изначально она вызывала вопросы. Новые версии динамических компиляторов Java не уступают традиционным из других платформ. Мощный прирост скорости обработки даёт оптимизация тех фрагментов кода, которая исполняется чаще. При необходимости те или иные приёмы оптимизации включаются или отменяются JIT-компилятором.

Надёжность – одно из важнейших преимуществ. Программы на Java стабильно работают в любых условиях. Компилятор способен выявить ошибки ещё до выполнения кода, то есть на ранних стадиях. Контроль выполнения позволяет предотвратить сбои в памяти (например, из-за неточного указателя). Сами указатели можно применять не везде, а только там, где это необходимо (скажем, в работе со связными списками).

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

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

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

Учитывая вышеизложенное, можно смело утверждать: Java – хороший язык программирования. Отличным его делает востребованность специалистов и высокая зарплата. По числу вакансий в России он уступает, разве что, Javascript. Ведущая рекрутинговая компания России HeadHunter предлагает более 5000 вариантов занятости. Это не считая фриланса.

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

Java достаточно прост в изучении, снисходителен к новичкам. Для начала надо изучить базовую часть. Затем уже осваиваются требуемые навыки по выбранному направлению. Специалистом начального уровня реально стать за 6-12 месяцев. Практика и знание английского языка будут способствовать скорейшему достижению успеха. Доступный и быстрый старт – ещё одно неоспоримое достоинство.

Сегодня Java представляет собой мощную, универсальную платформу для создания прикладного программного обеспечения:

  • серверной логики;
  • распределённых систем;
  • веб-приложений;
  • десктопных программ;
  • мобильных приложений.

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

В обозримом будущем востребованность Java и его экосистемы вопросов не вызывает. Наоборот, спрос на специалистов по языку растёт. А вместе с ним предлагаются всё более выгодные условия. Есть возможность устроиться на работу как в России, так и за рубежом.

Конечно, недостатки у Java тоже есть. Например, платное коммерческое использование. Но на фоне столь внушительных достоинств минусы выглядят лишь придирками. А плюсы делают язык незаменимым и перспективным.

Java

Что такое Java-программирование: история и вклад

Java — это язык программирования общего назначения, который следует парадигме объектно-ориентированного программирования и подходу «Написать один раз и использовать везде» . Java используется для настольных, сетевых, мобильных и корпоративных приложений. Подробная информация:

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

  • Java Development Kit (JDK) — комплект разработчика Java. С помощью JDK и стандартного блокнота можно писать и запускать/ компилировать код на Java;
  • Java Runtime Environment (JRE) — исполняющая система Java. Механизм распространения программного обеспечения, состоит из автономной виртуальной машины Java, стандартной библиотеки Java (Java Class Library) и инструментов настройки.
  • Integrated Development Environment (IDE) — интегрированная среда разработки. Инструменты, которые помогают запускать, редактировать и компилировать код. Самые популярные из них — IntelliJ IDEA, Eclipse и NetBeans.

Java можно найти везде. Это основной язык разработки для Android. Он используется в веб-приложениях, правительственных веб-сайтах и ​​технологиях обработки больших данных, таких как Hadoop и Apache Storm. Java подходит и для научных проектов, особенно в области обработки естественного языка. Язык Java преобладал и в программировании для мобильных устройств, задолго до появления смартфонов — первые мобильные игры в начале 2000-х годов были написаны на Java. Java, благодаря своей долгой истории, заработал свое место в Зале славы программирования. Индекс TIOBE, один из самых авторитетных индексов популярности программ в мире, при составлении рейтинга использует результаты поисковой выдачи. Несмотря на растущую популярность Go и Python, Java остается на вершине списка уже более десятилетия.


Индекс TIOBE, Август 2018 года

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


Как Java изменила мир программирования:

Гибкость. Java доказала, что C — процедурный, управляемый вручную и зависящий от платформы код — это не предел совершенства . Благодаря Java, все больше людей начали применять объектно-ориентированное программирование, которое сейчас используется повсеместно.

Апплеты. Еще до появления JavaScript, в Java добавили апплеты — небольшие веб-программы, которые предоставляют интерактивные элементы для визуализации и обучения. Они не используются ни для чего, кроме простой анимации, однако апплеты привлекли внимание многих программистов и подтолкнули их к разработке HTML5, Flash и JavaScript.

Разработка через тестирование. Java TDD — уже давно не экспериментальная практика, а стандартный способ разработки программного обеспечения. Введение JUnit в 2000 году считается одним из самых больших достижений Java.

Плюсы программирования на Java

Java — уже не единственный официально поддерживаемый язык для разработки на Android. Java далеко не единственный выбор в веб-программировании. Тем не менее, Java идет в ногу со временем. Давайте рассмотрим, какие преимущества предлагает Java.

+ Объектно-ориентированное программирование

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

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


Сравнение процедурного и объектно-ориентированного программирования

В чем плюсы ООП?

  • При ООП можно повторно использовать объекты в других программах
  • ООП предотвращает ошибки, поскольку объекты скрывают информацию, к которой не должно быть доступа
  • ООП более эффективно организует структуру программ, в том числе больших
  • ООП упрощает обслуживание и модернизацию старого кода

+ Java — язык высокого уровня с простым синтаксисом и плавной кривой обучения

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


Hello World

Синтаксис Java основан на C ++, поэтому Java похожа на C. Тем не менее, синтаксис Java проще, что позволяет новичкам быстрее учиться и эффективнее использовать код для достижения конкретных результатов.

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

+ Стандарт для корпоративных вычислительных систем

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

+ Безопасность

Существует мнение, что Java — безопасный язык, однако это не совсем так. Сам язык не защищает вас от уязвимостей, но некоторые его функции устраняют распространенные уязвимости. Во-первых, в отличие от C, в Java нет указателей. Указатель — это объект, который сохраняет адрес ячейки памяти другого значения, что может вызвать несанкционированный доступ к памяти. Во-вторых, в Java есть Security Manager, созданная для каждого приложения политика безопасности, в которой можно указать правила доступа. Это позволяет запускать приложения Java в «песочнице» и устранять таким образом уязвимости.

+ Независимость от платформы («Написать один раз и использовать везде»)

«Написать один раз и использовать везде» (WORA) — популярная в IT-сфере фраза, с помощью которой Sun Microsystems описывает кросс-платформенные возможности Java. Можно создать Java-приложение на Windows, скомпилировать его в байт-код и запустить его на любой другой платформе, поддерживающей виртуальную машину Java (JVM). Таким образом, JVM служит уровнем абстракции между кодом и оборудованием.


Как работает WORA на Java

Все основные операционные системы, включая Windows, Mac OS и Linux, поддерживают JVM. Если ваша программа не опирается на специфичные для платформы функции и пользовательский интерфейс, ее можно с легкостью перенести: по крайней мере, большую ее часть.

+ Язык для распределенного программирования и комфортной удаленной совместной работы

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


Сравнение распределенного и параллельного программирования

В других языках нужно использовать внешний API для дистрибуции. В Java эта технология встроена. Специфическая для Java методология распределенных вычислений называется Remote Method Invocation (RMI). RMI позволяет использовать все преимущества Java: безопасность, независимость от платформы и объектно-ориентированное программирование для распределенных вычислений. Кроме того, Java также поддерживает программирование сокетов и методологию распределения CORBA для обмена объектами между программами, написанными на разных языках.

+ Автоматическое управление памятью

Разработчикам Java не нужно вручную писать код для управления памятью благодаря автоматическому управлению памятью (AMM). AMM также используется в языке программирования Swift и при очистке памяти приложениями, которые автоматически обрабатывают распределение и освобождение памяти. Что именно это означает?

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

+ Многопоточность

Поток — наименьшая единица обработки в программировании. Чтобы максимально эффективно использовать время процессора, Java позволяет запускать потоки одновременно, что называется многопоточностью.

Потоки используют одну и ту же область памяти, поэтому между ними можно быстро переключаться. Потоки независимы друг от друга: один поток не влияет на работу других потоков. Это особенно полезно в играх и программах с большим объемом анимации.


Пример многопоточного выполнения

+ Стабильность и сообщество

Уже много лет развитию Java способствуют сообщество, поддержка Oracle и изобилие приложений и языков на JVM. Кроме того, постоянно выпускаются новые версии Java с новыми интересными функциями.

Сообщество разработчиков Java не имеет себе равных. Около 45% респондентов опроса StackOverflow 2018 используют Java. У Java чрезвычайно большая экосистема хорошо протестированных библиотек и фреймворков для любых задач. Начинающий разработчик, скорее всего, выберет Java: на тему Java-программирования существует более 1000 курсов на Udemy и более 300 на Coursera.

Минусы программирования на Java

Рассмотрим недостатки Java-программирования.

— Платное коммерческое использование

Недавно Oracle объявила, что с 2019 года компания начнет взимать плату за использование Java Standard Edition 8 в «коммерческих целях». За все новые обновления и исправления ошибок придется заплатить. Плата зависит от количества пользователей или компьютеров.

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

— Низкая производительность

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

— Отсутствие нативного дизайна

Для создания графического интерфейса пользователя (GUI) разработчики используют различные инструменты, ориентированные для конкретного языка. Для Android-приложений есть Android Studio, которая помогает создавать приложения с нативным дизайном. Однако, когда дело доходит до пользовательского интерфейса на ПК, Java-инструмента для создания нативного дизайна нет.

Есть несколько инструментов для разработки GUI для Java: самые популярные из них — Swing, SWT, JavaFX, JSF. Библиотека Swing — это старый, но надежный кросс-платформенный инструмент, интегрированный в различные Java-IDE, в том числе Eclipse и NetBeans. Однако, если вы не используете шаблоны, вы заметите несоответствия интерфейса. SWT использует собственные компоненты, но не подходит для сложного интерфейса. JavaFX — лаконичный и современный, но слишком новый. В целом, перед созданием GUI на Java нужно подробнее изучить инструменты.

— Многословный и сложный код

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

Сравним Java и Python и увидим, в чем преимущество лаконичного кода Python. В Python не используются точка с запятой, круглые и фигурные скобки. Вместо «и», «или» и «нет» в качестве операторов используются «&&», «||» и «!».


Сравнение Java и Python

В заключение: где используется Java?

Большинство организаций так или иначе используют Java. Широкий спектр вариантов использования Java делает ее практически незаметной в использовании: поэтому часто возникает вопрос «где используется Java?». Давайте посмотрим, в каких сферах используется Java:

Приложения для Android. Несмотря на активный рост Kotlin, Java по-прежнему остается де-факто основным языком Android-приложений. Таким образом, все разработчики Java очень легко могут стать Android-программистами. Хотя Android использует Android SDK вместо JDK, тем не менее, код написан на Java.

Программные продукты. Помимо уже упомянутых Hadoop и Apache Storm, Java использовалась для создания Eclipse, OpenOffice, Gmail, Atlassian и других.

Финансовые программы. Java — один из самых востребованных языков в финансовой отрасли. Он используется для создания надежных, быстрых и простых веб-сайтов как на стороне сервера, так и на стороне клиента. Java также используется для моделирования данных.

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

Торговые системы. На Java написана Murex, популярная программа управления банками для фронтальной и обратной связи.

Программы для работы с большими данными. Hadoop написан на Java. Scala, Kafka и Spark используют JVM. Кроме того, Java предоставляет доступ к множеству проверенных библиотек, инструментов отладки и мониторинга.

Достоинства и особенности Java

На появление первой версии Java в 1996 году откликнулись не только специализирующиеся на вычислительной технике газеты и журналы, но даже такие солидные издания, как The New York Times, The Washington Post и Business Week. Java — единственный язык программирования, удостоившийся десятиминутного репортажа на Национальном общественном радио в США. Для разработки и сопровождения программных продуктов только на этом языке программирования был учрежден венчурный фонд в 100 млн. долларов. Это было удивительное время. Тем временам и последующей истории развития языка Java посвящена эта статья.

Программная платформа Java

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

По поводу этого абзаца наш редактор долго спорил с одним из руководителей компании Sun Microsystems. Но и сейчас, по прошествии длительного времени, такая оценка кажется нам правильной. Действительно, Java обладает целым рядом преи­муществ, о которых мы поговорим чуть позже. Но более поздние дополнения далеко не так изящны, как исходный вариант этого языка программирования, и виной тому пресловутые требования совместимости.

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

Программистам нужны языки с четкими синтаксическими правилами и по­нятной семантикой (т.е. определенно не C++). Такому требованию, помимо Java, отвечают десятки языков. Некоторые из них даже обеспечивают переносимость и "сборку мусора", но их библиотеки оставляют желать много лучшего. В итоге программисты вынуждены самостоятельно реализовывать графические операции, доступ к сети и базе данных и другие часто встречающиеся процедуры. Java объе­диняет в себе прекрасный язык, высококачественную среду выполнения программ и обширную библиотеку. В результате многие программисты остановили свой вы­бор именно на Java.

Характерные особенности и достоинства Java

Создатели Java написали руководство, в котором объяснялись цели и достоинства нового языка. В этом документе приведено одиннадцать характерных особенностей Java. Этот язык:

  • простой;
  • объектно-ориентированный;
  • распределенный;
  • надежный;
  • безопасный;
  • не зависящий от архитектуры компьютера;
  • переносимый;
  • интерпретируемый;
  • высокопроизводительный;
  • многопоточный;
  • динамичный.

В данном разделе блога мы:

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

НА ЗАМЕТКУ! Руководство по Java

Простота

"Мы хотели создать систему; которая позволяла бы легко писать программы, не тре­бовала дополнительного обучения и учитывала сложившуюся практику и стандарты программирования. Мы считали C++ не совсем подходящим для этих целей, но чтобы сделать систему более доступной, язык Java был разработан как можно более похожим на C++. А исключили мы лишь редко используемые; малопонятные и невразумитель­ные средства C++, которые, по нашему мнению, приносят больше вреда, чем пользы".

Если вы привыкли к визуальной среде программирования (например, Visual Basic), язык Java может показаться вам сложным. Его синтаксис некоторые считают стран­ным, хотя понять его не составляет большого труда. Но важнее другое: пользуясь Java, приходится больше программировать. Начинающие программисты нередко предпо­читают язык Visual Basic, поскольку его визуальная среда программирования позволя­ет почти автоматически создавать инфраструктуру приложения. Чтобы достичь того же результата средствами Java, придется вручную написать довольно большой объем кода. Существуют, однако, интегрированные среды разработки (ИСР) от независи­мых производителей, которые позволяют программировать в стиле перетаскивания.

"Другой аспект простоты — краткость. Одна из целей языка Java — обеспечить разработку независимых программ, способных выполняться на машинах с ограни­ченным объемом ресурсов. Размер основного интерпретатора и средств поддержки классов составляет около 40 Кбайт; стандартные библиотеки и средства поддержки потоков, в том числе автономное микроядро, занимают еще 175 Кбайт".

На то время это было впечатляющим достижением. Разумеется, с тех пор библио­теки разрослись до гигантских размеров. Но теперь существует отдельная платформа Java Micro Edition с компактными библиотеками, более подходящая для встроенных устройств.

Объектно-ориентированный характер

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

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

Поддержка распределенных вычислений в сети

"Язык Java предоставляет разработчику обширную библиотеку программ для пере­дачи данных по протоколу TCP/IP, HTTP и FTP. Приложения на Java способны от­крывать объекты и получать к ним доступ по сети с такой же легкостью, как и в локальной файловой системе, используя URL для адресации".

Язык Java предоставляет эффективные и удобные средства для работы в сети. Всякий, когда-либо пытавшийся писать программы на других языках для работы в Интернете, будет приятно удивлен тем, насколько просто на Java решаются самые трудные задачи, например установление сокетных соединений. (Работа в сети будет подробно обсуждаться во втором томе данной книги.) Связь между распределенны­ми объектами в Java обеспечивается механизмом вызова удаленных методов (эта тема также рассматривается во втором томе).

Плюсы и специфика Java

Надежность

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

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

Если вам приходилось раньше программировать на Visual Basic или другом язы­ке, где указатели явным образом не применяются, то у вас может возникнуть не­доумение, почему этот вопрос настолько важен. Программирующим на С нужны указатели для доступа к символьным строкам, массивам, объектам и даже файлам.

При программировании на Visual Basic ничего подобного не требуется, и разработ­чик может не беспокоиться о распределении памяти для хранения объектов. С дру­гой стороны, многие структуры данных в языке, не имеющем указателей, реализо­вать очень трудно. В Java выбрана золотая середина. Для простых конструкций, вроде символьных строк и массивов, указатели не нужны. Но в то же время указателями можно в полной мере воспользоваться там, где без них нельзя обойтись, например, при составлении связных списков. Программирующий на Java полностью защищен, поскольку он никогда не обратится к неправильному указателю, не допустит ошибок выделения памяти, и ему не придется искать причины утечек памяти.

Безопасность

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

В первом издании мы предостерегали: "Никогда не говорите никогда", и оказа­лись правы. Вскоре после выхода первой версии Java Development Kit группа экспер­тов по вопросам безопасности из Принстонского университета обнаружила первые ошибки в системе защиты Java 1.0. Компания Sun Microsystems развернула иссле­дования в области безопасности программ на Java. В частности, она обнародовала спецификацию и код виртуальной машины и библиотек, ответственных за защиту. Это ускорило выявление и устранение ошибок. Так или иначе, создатели Java силь­но затруднили задачу обхода ее механизмов безопасности. Обнаруженные с тех пор ошибки носили лишь технический характер и были совсем не многочисленны.

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

  • Намеренное переполнение стека выполняемой программы — один из распро­страненных способов нарушения защиты, используемых вирусами и "червями".
  • Повреждение данных на участках памяти, находящихся за пределами простран­ства, выделенного процессу.
  • Несанкционированное чтение файлов и их модификация.

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

НА ЗАМЕТКУ!

Независимость от архитектуры компьютера

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

Эта идея не нова. Более тридцати лет назад она была предложена Никлаусом Виртом (Niclaus Wirth) для языка Pascal. Эта же технология была реализована в си­стеме UCSD Pascal.

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

Переносимость

"В отличие от С и C++, ни один из аспектов спецификации Java не зависит от реа­лизации. Разрядность примитивных типов данных и арифметические операции над ними строго определены".

Например, тип int в Java всегда означает 32-разрядное целое число. А в С и C++ тип int может означать как 16-, так и 32-разрядное целое число. Единственное огра­ничение состоит в том, что разрядность типа int не может быть меньше разрядности типа short int и больше разрядности типа long int. Фиксированная разрядность числовых типов данных позволяет избежать многих неприятностей, связанных с вы­полнением программ на разных компьютерах. Двоичные данные хранятся и пере­даются в неизменном формате, что также позволяет избежать недоразумений, свя­занных с разным порядком следования байтов на различных платформах. Строки сохраняются в стандартном формате Unicode.

"Библиотеки, являющиеся частью системы, предоставляют переносимые интер­фейсы. Например, в Java предусмотрен абстрактный класс Window и его реализации для операционных систем Unix, Windows и Macintosh".

Всякий, когда-либо пытавшийся написать программу, которая одинаково хорошо работала бы под управлением операционных систем Windows, Macintosh и десятка разновидностей ОС Unix, знает, что это очень трудная задача. Разработчики версии Java 1.0 предприняли героическую попытку решить эту задачу, предоставив простой набор инструментальных средств, приспосабливающий обычные элементы пользо­вательского интерфейса к различным платформам. К сожалению, библиотека, на которую было затрачено немало труда, не позволила достичь приемлемых результа­тов в разных системах. (В реализациях графических программ на разных платформах нередко проявлялись характерные ошибки.) Но это было лишь началом. Во многих приложениях машинная независимость оказалась намного важнее изысканности гра­фического пользовательского интерфейса. Именно эти приложения выиграли от по­явления версии Java 1.0. А ныне инструментальный набор для создания графического пользовательского интерфейса (ГПИ) полностью переработан и больше не зависит от интерфейсных средств, используемых на конкретном компьютере. Теперь он выгля­дит вполне согласованным и, по нашему мнению, намного более привлекательным для пользователя, чем в прежних версиях.

Интепретируемость

"Интерпретатор Java может выполнять байт-код непосредственно на любой ма­шине, на которую перенесен интерпретатор. А поскольку процесс компоновки но­сит в большей степени пошаговый и относительно простой характер, то процесс разработки программ может быть заметно ускорен, став более творческим ".

Пошаговая компоновка имеет свои преимущества, но ее выгоды для процесса разработки, очевидно, переоцениваются. Первоначально инструментальные средства разработки на Java были довольно медленными. А ныне байт-код транслируется в машинный код динамическим компилятором.

Производительность

"Обычно интерпретируемый байт-код имеет достаточную производительность, но бывают ситуации, когда требуется еще более высокая производительность. Байт-код можно транслировать во время выполнения программы в машинный код для того процессора, на котором выполняется данное приложение".

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

Многопоточность

"К преимуществам многопоточности относится более высокая интерактивная реакция и поведение программ в реальном масштабе времени".

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

Динамичность

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

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

Язык программирования Java – это высокоуровневый объектно-ориентированный язык, разработанный в компании Sun Microsystems.

С момента появления языка Java его возможности и сферы использования значительно увеличились.

В настоящее время принято говорить о Java не как об отдельном языке программирования, а как о целом семействе технологий.

История создания
языка Java

1991 год

Начало работы над проектом “Green” (Патрик Ноутон, Билл Джой, Джеймс Гослинг).

Целью проекта являлась разработка и практическая реализация компьютерной аппаратно-программной платформы нового поколения, предназначенной для персонального пользования, удобной и понятно в обращении (компьютер для обычных людей).

Основные идеи проекта:

  • дружественный интерфейс;
  • надежность функционирования.

Во время работы над проектом “Green” возникла необходимость разработать новый язык программирования, минимально ориентированный под конкретные платформы.

Новый язык программирования получил название “Oak” (“дуб”).

1992–1993 годы

Неудачные попытки внедрить разработанную технологию в различные сферы: интерактивное телевидение, игровые приставки и т.п.

1994 год

Создание браузера “WebRunner”, позволявшего исполнять небольшие интерактивные программы (апплеты), внедренные в гипертекстовые страницы

  • возможность запуска на разнообразных платформах;
  • отсутствие необходимости установки приложений;
  • компактный код (для сокращения времени загрузки);
  • встроенная поддержка безопасности приложений

1995 год

переименование “Oak” в “Java”, “WebRunner” в “HotJava”

23 мая 1995 года

Официальное представление технологии Java

Реализация поддержки технологии Java в браузере Netscape Navigator 2.0 (самый популярный браузер того времени)

1996 год

реализация поддержки технологии Java в браузере Microsoft Internet Explorer 3.0

1997 год

Выход существенно обновленной версии – Java 2.

Выделение отдельных платформ: J2SE, J2EE, J2ME.

Платформа включает в себя:

  • язык программирования;
  • набор служебных программ (JVM, JRE, JDK и т.п.);
  • набор библиотек;

Java 2 Platform, Standard Edition (J2SE)

предназначается для использования на рабочих станциях и персональных компьютерах.

Является основой всех других Java-технологий.

Java 2 Platform, Micro Edition (J2ME)

является усеченным вариантом J2SE, для того, чтобы соответствовать ограниченным аппаратным возможностям мобильных устройств, таких как, например, сотовые телефоны.

Java Virtual Machine (JVM)

представляет собой программу, имитирующую работу некоторой гипотетической Java-машины.

Java Runtime Environment (JRE)

представляет собой минимальный набор средств, необходимых для запуска Java-программ.

Основу JRE составляют виртуальная машина Java и набор стандартных библиотек.

Java Software Development Kit (SDK)
Java Development Kit (JDK)

представляет собой набор средств, используемых в процессе разработки Java-программ: компилятор, отладчик, средства для автоматической генерации документации, комплект примеров и т.п.

JDK работает с уже готовыми текстами программ и не содержит какого-либо редактора.

Интегрированные среды разработки (Eclipse, Netbeans, JBuilder и т.п.) для компиляции программ используют внешний JDK

Сферы применения
Java-технологий

В настоящее время Java-технологии находят широкое применение в различных сферах.

Это, в первую очередь, вызвано особенностями создания и запуска Java-приложений.

1. Разработка приложений (application)

Язык Java используется для разработки обычных прикладных программ, которые запускаются пользователем и имеют доступ ко всем ресурсам компьютера наравне с любыми другими программами.

Для запуска Java-приложений в операционной системе должна быть установлена среда исполнения Java (JRE).

2. Разработка мидлетов (midlet)

Язык Java используется для разработки специализированных программ, предназначенных для использования на мобильных устройствах.

Структура и возможности мидлетов обусловлены техническими особенностями мобильных устройств.

Для запуска мидлетов мобильное устройство должно поддерживать соответствующую возможность.

3. Разработка апплетов (applet)

Язык Java используется для разработки специализированных программ, обычно небольшого размера, запускаемых браузером внутри web-документа для вывода динамического содержимого и/или интерактивного взаимодействия с пользователем.

Для запуска апплетов браузер должен содержать соответствующий модуль (plug-in).

4. Разработка JSP-страниц (Java Server Pages)

JSP-страницы представляют собой HTML-документы со вставками на языке Java, которые используются для анализа пользовательских запросов и динамического формирования web-документов на основе результатов обработки этих запросов.

Для обработки JSP-страниц Web-сервер должен содержать соответствующий модуль.

5. Разработка сервлетов (servlet)

На языке Java разрабатываются специализированные программы-сервлеты, функционирующие в рамках Web-сервера и имеющие доступ к его ресурсам: файлам, базам данных и т.п.

Для запуска сервлетов используется Web-сервер со специальным модулем (контейнером сервлетов) или специальный сервер приложений.

Достоинства и недостатки
Java-технологий

Java-технологии имеют много особенностей, отличающие их от других технологий разработки программного обеспечения.

1. Переносимость

Программы, написанные на языке Java, после однократной трансляции в байт-код могут быть исполнены на любой платформе, для которой реализована виртуальная Java-машина.

Наиболее эффективно возможности реального компьютера может использовать только программа, написанная с использованием «родного» машинного кода.

2. Безопасность

Функционирование программы полностью определяется (и ограничивается) виртуальной Java-машиной.

Отсутствуют указатели и другие механизмы для непосредственной работы с физической памятью и прочим аппаратным обеспечением компьютера.

Дополнительные ограничения снижают возможность написания эффективно работающих Java-программ.

3. Надежность

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

Присутствует строгий контроль типов, обязательный контроль исключительных ситуаций.

Многие логические ошибки обнаруживаются на этапе компиляции.

Наличие дополнительных проверок снижает эффективность выполнения Java-программ.

4. Сборщик мусора

Освобождение памяти при работе программы осуществляется автоматически с помощью «сборщика мусора», поэтому программировать с использованием динамически распределяемой памяти проще и надежнее.

При интенсивной работе с динамически распределяемой памятью возможны ошибки из-за того, что «сборщик мусора» не успел освободить неиспользуемые области памяти.

5. Стандартные библиотеки

Многие задачи, встречающиеся при разработке программного обеспечения, уже решены в рамках стандартных библиотек. Использование объектно-ориентированного подхода позволяет легко использовать готовые объекты в своих программах.

Для запуска приложения необходима установка JRE, содержащего полный набор библиотек, даже если все они не используются в приложении. Отсутствие библиотеки необходимой версии может воспрепятствовать запуску приложения.

6. Самодокументируемый код

Имеется механизм автоматического генерирования документации на основе комментариев, размещенных в тексте программ.

7. Многообразие типов приложений

На языке Java возможно реализовать абсолютно разные по способу функционированию и сфере использования программы.

Читайте также: