Язык программирования Java

Java в настоящее время является самым новым из популярных языков программирования и самым популярным из новых. В чем же прелесть новизны, которую так часто упоминают апологеты Java? Прежде всего, Java НЕ является наследником C/C++, при всем внешнем сходстве исходного кода в Java учтены многие недостатки прежних языков программирования. "Зеленый проект", породивший технологию Java, был составлен из лучших умов компании Sun Microsystems, которые провели в монашеском заточении полтора года в 1991-1992, выбирая оптимальную структуру языка.

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

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

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

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

 

Радует сердце структурщика и отказ от оператора безусловного перехода goto, запутывающего структуру программы. Для управления циклами Java предлагает воспользоваться операторами break и continue с меткой. Также в Java наконец навели порядок в базовых типах Си, подсократив их число и раз и навсегда договорившись о числе битов в каждом из них. В Си основной тип int соответствует разрядности машинного слова, что вызывает проблемы при переносе программ на другие платформы. В Java int строго 32-битный, а вокруг него расположены byte, short и long.

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

Вообще, разбиение программы на модули в Java организовано идеально: если в C++ оттранслированный код хранится в машинно-зависимой библиотеке, а интерфейс к нему - в отдельном файле заголовков, что приводит к головной боли при отслеживании заголовков действительно навороченного проекта и дает возможность нерадивому программисту менять права доступа к переменным класса (а необходимость создания для программы еще и файла проекта и вовсе доводит до катарсиса), то в Java каждый класс отвечает только сам за себя, одному классу соответствует ровно один исходный файл, а несколько классов могут собираться в пакет, при этом пакеты образуют систему каталогов, на нижнем уровне которой лежат файлы .java и .class.

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

Java создавался как строгий и простой язык высокого уровня, приоритетными при его разработке были надежность, переносимость и скорость разработки - черты, критичные для Internet. Нет смысла использовать Java для создания программ трехмерного моделирования или системных утилит, эта область останется доменом C++ и Ассемблера до тех пор, пока ключевые алгоритмы не будут инкапсулированы в стандартные классы Java. А там, кто знает - вдруг компьютеры будут не Windows-, а Java-совместимые?

Дмитрий БОРОДАЕНКО

Версия для печатиВерсия для печати

Номер: 

41 за 1997 год

Рубрика: 

Технологии программирования
Заметили ошибку? Выделите ее мышкой и нажмите Ctrl+Enter!