русс | укр

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

ПаскальСиАссемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование

Все о программировании


Linux Unix Алгоритмические языки Аналоговые и гибридные вычислительные устройства Архитектура микроконтроллеров Введение в разработку распределенных информационных систем Введение в численные методы Дискретная математика Информационное обслуживание пользователей Информация и моделирование в управлении производством Компьютерная графика Математическое и компьютерное моделирование Моделирование Нейрокомпьютеры Проектирование программ диагностики компьютерных систем и сетей Проектирование системных программ Системы счисления Теория статистики Теория оптимизации Уроки AutoCAD 3D Уроки базы данных Access Уроки Orcad Цифровые автоматы Шпаргалки по компьютеру Шпаргалки по программированию Экспертные системы Элементы теории информации

Платформа Java


Дата добавления: 2015-06-12; просмотров: 757; Нарушение авторских прав


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

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

Наличие виртуальной машины определяет многие свойства Java, однако сейчас остановимся на следующем вопросе — является Java языком компили­руемым или интерпретируемым? На самом деле, используются оба подхода.

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

Результат работы компилятора сохраняется в бинарных файлах с расширением .class. Java-приложение, состоящее из таких файлов, подается на вход виртуальной машине, которая начинает их исполнять, или интерпретировать, так как сама является программой. Многие разработчики поначалу жестко критиковали смелый лозунг Sun "Write once, run everywhere", обнаруживая все больше и больше несоот­ветствий и нестыковок на различных платформах. Однако надо признать, что они просто были слишком нетерпеливы. Java только появилась на свет, а первые версии спецификаций были недостаточно исчерпывающими.



Очень скоро специалисты Sun пришли к выводу, что просто сво­бодно публиковать спецификации (что уже делалось задолго до Java) не­достаточно. Необходимо еще и создавать специальные процедуры про­верки новых продуктов на соответствие стандартам. Первый такой тест для JVM содержал всего около 600 проверок, через год их число вырос­ло до десяти тысяч и с тех пор все время увеличивается (именно его в свое время не смог пройти MS IE 4.0). Безусловно, авторы виртуальных машин все время совершенствовали их, устраняя ошибки и оптимизи­руя работу все-таки любая, даже очень хорошо задуманная, технология требует времени для создания высококачественной реализации. Анало­гичный путь развития сейчас проходит Java 2 MicroEdition (J2ME), но об этом позже.

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

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

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

В Java существует всего 8 типов данных, которые не являются объек­тами. Они были определены с самой первой версии и никогда не меня­лись. Это пять целочисленных типов: byte,short, int, long, a также к ним относят символьный char. Затем два дробных типа float и double и, нако­нец, булевский тип boolean. Такие типы называются простыми, или при­митивными (от английского primitive), и они подробно рассматриваются в лекции, посвященной типам данных. Все остальные типы - объектные или ссылочные (англ. reference).

Синтаксис Java почему-то многих ввел в заблуждение. Он действи­тельно создан на основе синтаксиса языков C/C++, так что если посмот­реть на исходный код программ, написанных на этих языках и на Java, то не сразу удается понять, какая из них на каком языке написана. Это по­чему-то дало многим повод думать, что Java — это упрощенный C++ с до­полнительными возможностями, такими как garbage collector. Автомати­ческий сборщик мусора (garbage collector) мы рассмотрим чуть ниже, но считать, что Java такой же язык, как и C++,- большое заблуждение.

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

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

Что же касается объектной модели, то она скорее была построена по образцу таких языков, как Smalltalk от IBM, или разработанный еще в 60-е годы в Норвежском Вычислительном Центре язык Simula, на который ссылается сам создатель Java Джеймс Гослинг.

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

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

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

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

Кроме того, особый упор делался на легкость освоения новой техно-|11огии. Как уже было сказано, ожидалось (и эти ожидания оправдались, в подтверждение правильности выбранного пути!), что Java должна получить максимально широкое применение, даже в тех компаниях, где ни­когда до этого не занимались программированием на таком уровне (бывая техника типа тостеров и кофеварок, создание их и других приложе­ний для сотовых телефонов и т.д.). Был и целый ряд других соображений. Продукты для обычных пользователей, а не профессиональных програм­мистов, должны быть особенно надежными. Internet стал Всемирной Сетью, поскольку появились непрофессиональные пользователи, а возмож­ность создавать апплеты для них не менее привлекательна. Им требовал­ся простой инструмент для создания надежных приложений.

Наконец, Internet-бум 90-х годов набирал обороты и выдвигал новые, более жесткие требования к срокам разработки. Многолетние проекты.

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

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

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

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

Во-вторых, наличие виртуальной машины-интерпретатора значи­тельно облегчает отсечение опасного кода на каждом этапе работы. Снача­ла байт-код загружается в систему, как правило, в виде class-файлов. JVM тщательно проверяет, все ли они подчиняются общим правилам безопас­ности Java и не созданы ли злоумышленниками с помощью каких-то дру­гих средств (и не искажены ли при передаче). Затем во время исполнения программы интерпретатор легко может проверить каждое действие на до­пустимость. Возможности классов, которые были загружены с локального диска или по сети, существенно различаются (пользователь легко может назначать или отменять конкретные права). Например, апплет по умолча­нию никогда не получит доступ к локальной файловой системе. Такие встроенные ограничения есть во всех стандартных библиотеках Java.

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

Совокупность описанных свойств Java позволяет утверждать, что язык весьма приспособлен для разработки Internet- и интернет (внутрен­ние сети корпораций)-приложений.

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

Итак, подведем итоги. Java-платформа обладает следующими пре­имуществами:

• переносимость, или кросс-платформенность;

• объектная ориентированность, создана эффективная объектная модель;

• привычный синтаксис C/C++;

• встроенная и прозрачная модель безопасности;

• ориентация на Internet-задачи, сетевые распределенные приложения;

• динамичность, легкость развития и добавления новых возможностей;

• простота освоения.

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



<== предыдущая лекция | следующая лекция ==>
Сетевые компьютеры | Основные версии и продукты Java


Карта сайта Карта сайта укр


Уроки php mysql Программирование

Онлайн система счисления Калькулятор онлайн обычный Инженерный калькулятор онлайн Замена русских букв на английские для вебмастеров Замена русских букв на английские

Аппаратное и программное обеспечение Графика и компьютерная сфера Интегрированная геоинформационная система Интернет Компьютер Комплектующие компьютера Лекции Методы и средства измерений неэлектрических величин Обслуживание компьютерных и периферийных устройств Операционные системы Параллельное программирование Проектирование электронных средств Периферийные устройства Полезные ресурсы для программистов Программы для программистов Статьи для программистов Cтруктура и организация данных


 


Не нашли то, что искали? Google вам в помощь!

 
 

© life-prog.ru При использовании материалов прямая ссылка на сайт обязательна.

Генерация страницы за: 0.325 сек.