Страницы, Java, C#

четверг, 5 апреля 2012 г.

О языке Java. Применение, достоинства, недостатки.

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


С одной стороны, Java — объектно-ориентированный язык программирования, с другой —  технология, разработанная компанией Sun Microsystems. Как язык, так и технология официально существует с 23 мая 1995 года.

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

О платформе Java

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

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

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

О языке Java
Принципы Java.
Всем известно, принципы Java - простота языка, безопасность и переносимость кода. Эти принципы не всегда исполняются. Как например, сложность синтаксиса вложенных классов. Но в целом их влияние на язык выбило Java в первые ряды. Cделало Java достаточно надёжным инструментом, в таких областях как космическая промышленность (марсоход Spirit), для финансовая сфера.


Богатая библиотека

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

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


Многословность и громоздкость

Одна из проблем Java. И причины здесь можно выделить две: жесткая политика Объектно-Ориентированного Подхода (далее ООП), отсутствие функций первого класса (first-class function).

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


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

Как видите на одной чаше весов многословность с громоздкостью, а на другой надежность работы проекта и безопасность.

Ресурсоёмкость и медлительность

Java, несмотря на различные способы оптимизации, всё же довольно ресурсоёмка и медлительна. Причины в следующем:
  • автосборка мусора
  • компиляция "на лету" (Just In Time compilation)
  • отказ от таких опасных механизмов как:арифметика указателей, неявное преобразование типов с потерей точности, функции первого класса
Но это всё делает язык более платформонезависимым и безопасным. Автосборка мусора с одной стороны освобождает программиста от заботы освобождения памяти, с другой стороны известна проблема когда автосборка мусора не срабатывала и происходила серьёзная утечка памяти.

Компиляция на лету пожалуй одно из самых удачных решений по реализации


Сферы применения Java

Согласно утверждениям с сайта http://www.java.com/ru/about/ Java используется в более чем 4,5 миллиардов устройств. Среди них:

  • более 800 млн. персональных компьютеров; 
  • 2,1 миллиарда мобильных телефонов и других портативных устройств (источник: Ovum);
  • 3,5 миллиарда смарт-карт; 
  • телеприставки, принтеры, веб-камеры, игры, автомобильные системы навигации, игровые автоматы, медицинское оборудование, парковочные автоматы и т. д.

И тут особое место занимает Java Enterprise Edition, это реализация Java для создания корпоративного (Enterprise) программного обеспечения, мнгогозвенные распределённые системы, приложения масштаба предприятия: различные банковские системы, системы для предприятий планирования ресурсов (ERP-системы), веб-сервисы и т. д.





Ссылки (источники/интересные статьи)
О достоинствах и недостатках:
Недостатки Java как языка и платформы
Долгосрочный потенциал Java перевешивает его недостатки
Язык JAVA: разработка программного обеспечения в среде Internet
10 причин, по которым нам нужен Java 3
http://coderov.net/java/75-lection-for-student/176-lection1-p1.html


О сферах применения:
Практическое применение платформы Java EE
Java Enterprise Edition
Java: от sim-карты до марсохода
http://www.java.com/ru/about/
http://citforum.ru/internet/javascript/crjp/  - JavaScript!? 0_o


Дополнительно:
Объекты первого класса
Википедия. JIT-компиляция

Комментариев нет:

Отправить комментарий