Автор: Пользователь скрыл имя, 20 Октября 2012 в 17:46, лекция
Передача данных стала фундаментальной частью вычислений. Сети, разбросанные по всему миру, собирают данные о таких разных предметах, как атмосферные условия, производство продуктов и воздушных перевозках. Группы создают электронные справочные списки, которые позволяют им получать информацию, интересную всем. Любители обмениваются программами для их домашних компьютеров. В научном мире сети данных стали необходимы, так как они позволяют ученым посылать программы и данные на удаленные суперкомпьютеры для обработки, получать результаты и обмениваться научной информацией с коллегами.
Для отладки программных компонент, разрабатываемых в окружении JDK (в частности, апплетов) используется отладчик JavaDebugger (JDB). Этот отладчик поддерживает простой и удобный интерфейс с пользователем JavaDebuggerAPI, его можно использовать для отладки удаленных программ совместно с браузером HotJava, а также для отладки программ, написанных на подмножестве Java для разработки скриптов - языке JavaScript.
Проблема эффективности Java-программ. Оптимизирующие компиляторы языка Java
Здесь под эффективностью имеется в виду скорость выполнения Java-программ. Поскольку Java-программы интерпретируются на JavaVM, они, естественно, выполняются медленнее, чем программы, разработанные с помощью оптимизирующих компиляторов C/C++. Измерения на бенч-марках показали, что Java-программы выполняются примерно в 30 раз медленнее C-программ на однопроцессорных компьютерах (в частности, на персональных компьютерах). На параллельных компьютерных системах разрыв достигает 50 раз. Поэтому, конечно, существует проблема повышения эффективности Java-программ. В меньшей степени эта проблема актуальна для апплетов, ведь это небольшие интерактивные программы, и скорость их выполнения в большинстве случаев удовлетворяет их пользователей.
В тех редких случаях, когда возникает потребность увеличить скорость выполнения апплета, можно воспользоваться динамическим компилятором Java (just-in-time compiler), который работает параллельно с интерпретацией апплета (см. рис. 1) и переводит байткод в объектный код компьютера, на котором выполняется апплет. Этот объектный код оформляется как обычная подпрограмма и (после загрузки) вызывается из JavaVM (при программировании на Java разрешается использовать подпрограммы, выполняемые в объектном коде компьютера, на котором работает JavaVM (native subroutines); эти подпрограммы считаются подпрограммами самой JavaVM). Как показали измерения на бенч-марках, при этом выполнение апплета ускоряется примерно в 10 раз.
Но в окружении Java разрабатываются не только апплеты. Java - универсальный язык программирования, и его удобно использовать для написания клиентских программ, библиотек, поддерживающих пользовательские интерфейсы (особенно в тех случаях, когда они должны функционировать в неоднородной сети), прикладных пакетов и т.п. Всеобщее увлечение апплетами несколько отодвинуло на второй план эту сторону Java, но это - временное явление. Уже сейчас публикуется много работ по применениям Java, не связанным с разработкой апплетов, и число таких работ будет увеличиваться хотя бы потому, что проблема программирования и распространения апплетов во многом исчерпала себя (это должно быть видно и из данной публикации). При использовании Java для разработки более сложного программного обеспечения, чем апплеты, проблемы надежности и эффективности (производительности) Java-программ, а также проблемы, связанные с необходимостью защиты глобальной сети от вирусов, должны быть поставлены по новому.
Рассмотрим проблему производительности сравнительно крупных прикладных Java-программ. Если для большинства апплетов проблемы производительности вообще не стояло, так как для пользователей они выполнялись "мгновенно", то замедление произвольных прикладных программ почти на два порядка неизбежно приведет к отказу от их использования. Разработчики системы Java и Java-приложений хорошо понимали это с самого начала, но, как свидетельствуют их ранние публикации, они надеялись, что JavaVM настолько хороший интерпретатор, что замедление от интерпретации будет несущественным. Кроме того, они рекомендовали повышать быстродействие Java-программ путем использования высокоэффективных библиотечных подпрограмм, разработанных на C/C++ (native methods). К сожалению, как показали измерения (см. выше), их надежды оправдались лишь для небольших апплетов, которые, по существу, являются CGI-скриптами и для разработки которых достаточно примитивного подмножества Java - языка JavaScript. Когда это было осознано, стали предприниматься усилия по повышению быстродействия Java-программ.
Первым шагом в этом направлении была аппаратная разработка JavaVM, предпринятая компанией Sun, но Java-процессор не оправдал возлагавшихся на него ожиданий по резкому увеличению быстродействия Java-программ. Кроме того, если для нормального выполнения Java-программ требуется специальный процессор, то это существенно меняет статус языка Java, как универсального языка для Web, так как очевидно, что далеко не во всех узлах Web имеются Java-процессоры.
Поэтому были предприняты
попытки увеличить
Поэтому был предпринят еще один шаг: реализованы первые оптимизирующие компиляторы Java в объектный код различных компьютеров. При этом даже не всегда используется байткод в качестве внутреннего представления исходной Java-программы. Более того, уже предпринимаются первые попытки разработки компиляторов Java для мощных многопроцессорных компьютерных систем. Реализация таких компиляторов сделает Java вполне универсальным мощным языком программирования. Правда это поставит перед разработчиками и пользователями Java новые сложные проблемы.
Использование рефлексии при разработке Java-программ
Рефлексией называется
возможность менять свойства окружения,
в котором выполняется
Java с самого начала
разрабатывался как
Дополнительные возможности по реализации рефлексивных Java-программ обеспечиваются пакетом JRI (Java Reflection Interface), в котором определены способы определения рефлексивной информации для классов и методов системы Java. Рефлексивная информация, связанная с некоторым классом, включает в себя описание его привилегий доступа к различным классам, их полям и методам, их суперклассам, к интерфейсам, присоединенным к этим классам, а также информацию о свойствах его полей и методов.
Проблема разработки
рефлексивных возможностей для объектно-ориентированных
языков программирования связана с
проблемой реализации возможности
взаимодействия различных объектно-
Отсутствие языковой поддержки управления транзакциями и их журнализацией.
Перечисленные недостатки мешают применению Java для разработки серьезных распределенных систем в рамках стандарта CORBA. В настоящее время ведутся интенсивные исследования по преодолению указанных недостатков.
Тема 8 Языки сценариев.
Назначение и применение JavaScript, общие сведения
Гипертекстовая информационная система состоит из множества информационных узлов, множества гипертекстовых связей, определенных на этих узлах, и инструмента манипулирования узлами и связями. Технология World Wide Web — это технология ведения гипертекстовых распределенных систем в Internet, и, следовательно, она должна соответствовать общему определению таких систем. Это означает, что все перечисленные выше компоненты гипертекстовой системы должны быть и в Web.
Web, как гипертекстовую систему, можно рассматривать с двух точек зрения. Во-первых, как совокупность отображаемых страниц, связанных гипертекстовыми переходами (ссылками — контейнер ANCHOR). Во-вторых, как множество элементарных информационных объектов, составляющих отображаемые страницы (текст, графика, мобильный код и т.п.). В последнем случае множество гипертекстовых переходов страницы — это такой же информационный фрагмент, как и встроенная в текст картинка.
При втором подходе гипертекстовая сеть определяется на множестве элементарных информационных объектов самими HTML-страницами, которые и играют роль гипертекстовых связей. Этот подход более продуктивен с точки зрения построения отображаемых страниц "на лету" из готовых компонентов.
При генерации страниц в Web возникает дилемма, связанная с архитектурой "клиент-сервер". Страницы можно генерировать как на стороне клиента, так и на стороне сервера. В 1995 году специалисты компании Netscape создали механизм управления страницами на клиентской стороне, разработав язык программирования JavaScript.
Таким образом, JavaScript — это язык управления сценариями просмотра гипертекстовых страниц Web на стороне клиента. Если быть более точным, то JavaScript — это не только язык программирования на стороне клиента. Liveware, прародитель JavaScript, является средством подстановок на стороне сервера Netscape. Однако наибольшую популярность JavaScript обеспечило программирование на стороне клиента.
Основная идея JavaScript состоит
в возможности изменения
На практике это выражается в том, что можно, например, изменить цвет фона страницы или интегрированную в документ картинку, открыть новое окно или выдать предупреждение.
Название "JavaScript" является собственностью Netscape. Реализация языка, осуществленная разработчиками Microsoft, официально называется Jscript. Версии JScript совместимы (если быть совсем точным, то не до конца) с соответствующими версиями JavaScript, т.е. JavaScript является подмножеством языка JScript.
JavaScript стандартизован ECMA
(European Computer Manufacturers Association – Ассоциация
европейских производителей
Понятие объектной модели применительно к JavaScript
Для создания механизма управления страницами на клиентской стороне было предложено использовать объектную модель документа. Суть модели в том, что каждый HTML-контейнер — это объект, который характеризуется тройкой:
Объектную модель можно представить как способ связи между страницами и браузером. Объектная модель — это представление объектов, методов, свойств и событий, которые присутствуют и происходят в программном обеспечении браузера, в виде, удобном для работы с ними кода HTML и исходного текста сценария на странице. Мы можем с ее помощью сообщать наши пожелания браузеру и далее — посетителю страницы. Браузер выполнит наши команды и соответственно изменит страницу на экране.
Объекты с одинаковым набором свойств, методов и событий объединяются в классы однотипных объектов. Классы — это описания возможных объектов. Сами объекты появляются только после загрузки документа браузером или как результат работы программы. Об этом нужно всегда помнить, чтобы не обратиться к объекту, которого нет.