Основные понятия Интернет

Автор: Пользователь скрыл имя, 20 Октября 2012 в 17:46, лекция

Описание работы

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

Работа содержит 1 файл

Опорный конспект лекций.doc

— 648.00 Кб (Скачать)

Для отладки программных  компонент, разрабатываемых в окружении 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-программу в оптимизированный объектный код компьютера, на котором она будет выполняться. Компания JavaSoft (дочерняя компания фирмы Sun по производству программного обеспечения, связанного с Java) разработала первый динамический оптимизирующий компилятор Java (just-in-time-compiler). Этот компилятор вызывается по прагме интерпретатором Java-байткода (JavaVM) и выполняется параллельно JavaVM (на однопроцессорном компьютере - в режиме разделения времени), компилируя из переданного ему байткода оптимизированный объектный код. Параллельно с компиляцией байткода JavaVM продолжает интерпретировать его. Когда компиляция завершается, динамический загрузчик загружает полученный объектный код как подпрограмму интерпретируемого байткода, а JavaVM вызывает эту подпрограмму, как она вызвала бы любую другую объектную (native) подпрограмму интерпретируемой Java-программы, и тем самым фактически прекращает интерпретацию байткода (схематически это показано на рис. 1). Динамические компиляторы Java реализованы и другими компаниями, занимающимися разработкой программного обеспечения Java. Но, как уже упоминалось, применение динамического компилятора повышает быстродействие Java-программы лишь на порядок, так что проигрыш остается весьма ощутимым.

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

Использование рефлексии при разработке Java-программ

Рефлексией называется возможность менять свойства окружения, в котором выполняется программа, и за счет этого изменить поведение  самой программы. Многие объектно-ориентированные  языки и их системы программирования (например, CLOS, Smalltalk и др.) являются рефлексивными, т.е. содержат языковые и системные средства, с помощью которых можно менять параметры окружения. Рефлексия очень удобна при разработке программных систем, так как сообщает им дополнительную гибкость, способность настраиваться на различные окружения, возможность взаимодействовать с программами, которые выполняются в других системах программирования.

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

Дополнительные возможности  по реализации рефлексивных Java-программ обеспечиваются пакетом JRI (Java Reflection Interface), в котором определены способы  определения рефлексивной информации для классов и методов системы Java. Рефлексивная информация, связанная с некоторым классом, включает в себя описание его привилегий доступа к различным классам, их полям и методам, их суперклассам, к интерфейсам, присоединенным к этим классам, а также информацию о свойствах его полей и методов.

Проблема разработки рефлексивных возможностей для объектно-ориентированных  языков программирования связана с  проблемой реализации возможности  взаимодействия различных объектно-ориентированных  окружений, т.е. с проблемой разработки ORB (Object Request Broker). Сейчас уже разработано несколько коммерческих ORB для Java. Изучение этих ORB показывает, что язык Java гораздо лучше, чем, например C++, приспособлен к рефлексивному программированию и реализации ORB. Развитие рефлексивного программирования на Java будет способствовать еще более широкому распространению системы Java. Вместе с тем Java в ее текущем состоянии имеет ряд недостатков, препятствующих ее использованию для реализации распределенных прикладных систем. В отмечены следующие недостатки Java в этом плане:

  1. Отсутствие поддержки парадигмы вызова методов клиент/сервер; окружение Java, связанное с апплетами, стремится поместить сервер (апплет) на сторону клиента, что недопустимо при работе с серьезными (не игрушечными) северами.
  2. Отсутствие распределенных служб, так как Java не является системой распределенного программирования; например, Java поддерживает верификацию апплетов на каждом отдельном компьютере сети, чтобы обеспечить безопасность в пределах этого компьютера; но такой подход имеет мало общего с глобальной службой безопасности современных распределенных систем.
  3. Отсутствие хранимых (persistent) объектов и связи с СУБД.

Отсутствие языковой поддержки управления транзакциями и их журнализацией.

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

 

Тема 8 Языки  сценариев.

 

Назначение и применение JavaScript, общие сведения

Гипертекстовая информационная система состоит из множества информационных узлов, множества гипертекстовых связей, определенных на этих узлах, и инструмента манипулирования узлами и связями. Технология World Wide Web — это технология ведения гипертекстовых распределенных систем в Internet, и, следовательно, она должна соответствовать общему определению таких систем. Это означает, что все перечисленные выше компоненты гипертекстовой системы должны быть и в Web.

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

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

При генерации страниц  в Web возникает дилемма, связанная  с архитектурой "клиент-сервер". Страницы можно генерировать как на стороне клиента, так и на стороне сервера. В 1995 году специалисты компании Netscape создали механизм управления страницами на клиентской стороне, разработав язык программирования JavaScript.

Таким образом, JavaScript — это язык управления сценариями просмотра гипертекстовых страниц Web на стороне клиента. Если быть более точным, то JavaScript — это не только язык программирования на стороне клиента. Liveware, прародитель JavaScript, является средством подстановок на стороне сервера Netscape. Однако наибольшую популярность JavaScript обеспечило программирование на стороне клиента.

Основная идея JavaScript состоит  в возможности изменения значений атрибутов HTML-контейнеров и свойств среды отображения в процессе просмотра HTML-страницы пользователем. При этом перезагрузки страницы не происходит.

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

Название "JavaScript" является собственностью Netscape. Реализация языка, осуществленная разработчиками Microsoft, официально называется Jscript. Версии JScript совместимы (если быть совсем точным, то не до конца) с соответствующими версиями JavaScript, т.е. JavaScript является подмножеством языка JScript.

JavaScript стандартизован ECMA (European Computer Manufacturers Association – Ассоциация  европейских производителей компьютеров). Соответствующие стандарты носят  названия ECMA-262 и ISO-16262. Этими стандартами определяется язык ECMAScript, который примерно эквивалентен JavaScript 1.1. Отметим, что не все реализации JavaScript на сегодня полностью соответствуют стандарту ECMA. В рамках данного курса мы во всех случаях будем использовать название JavaScript.

Понятие объектной модели применительно  к JavaScript

Для создания механизма  управления страницами на клиентской стороне было предложено использовать объектную модель документа. Суть модели в том, что каждый HTML-контейнер  — это объект, который характеризуется тройкой:

  • свойства;
  • методы;
  • события

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

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

Информация о работе Основные понятия Интернет