logo
Разработка автоматизированной обучающей системы с функцией контроля знаний

2.1 Клиентские языки программирования

JavaScript -- объектно-ориентированный скриптовый язык программирования. JavaScript используется в клиентской части веб-приложений клиент-серверных программ, в котором клиентом выступает браузер, а сервером -- веб-сервер, имеющих распределённую между сервером и клиентом логику. Обмен информацией в веб-приложениях происходит по сети. Одним из преимуществ такого подхода является тот факт, что клиенты не зависят от конкретной операционной системы пользователя, поэтому веб-приложения являются кроссплатформенными сервисами. [3]

Название «JavaScript» является зарегистрированным товарным знаком компании Oracle Corporation.

Основные архитектурные черты:

динамическая типизация;

слабая типизация;

автоматическое управление памятью;

прототипное программирование;

функции как объекты первого класса.

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

Растущую популярность JavaScript можно объяснить тем, что в настоящее время прослеживается тенденция перехода от использования прикладных приложений к использованию web-приложений, где это возможно и имеет смысл. Также, лидирующую позицию JavaScript занял в связи с развитием AJAX, поскольку эта технология требует дополнительной прослойки, которая реализуется языком JavaScript.

Возможности языка

JavaScript обладает рядом свойств объектно-ориентированного языка, но реализованное в языке прототипирование обуславливает отличия в работе с объектами по сравнению с традиционными объектно-ориентированными языками. Кроме того, JavaScript имеет ряд свойств, присущих функциональным языкам-- функции как объекты первого класса, объекты как списки, карринг, анонимные функции, замыкания-- что придаёт языку дополнительную гибкость [4].

Несмотря на схожий с Си синтаксис, JavaScript по сравнению с языком Си имеет коренные отличия:

- объекты, с возможностью интроспекции;

- функции как объекты первого класса;

- автоматическое приведение типов;

- автоматическая сборка мусора;

- анонимные функции.

В языке отсутствуют такие полезные вещи, как:

- модульная система: JavaScript не предоставляет возможности управлять зависимостями и изоляцией областей видимости;

- стандартная библиотека: в частности, отсутствует интерфейс программирования приложений по работе с файловой системой, управлению потоками ввода/вывода, базовых типов для бинарных данных;

- стандартные интерфейсы к веб-серверам и базам данных;

- система управления пакетами, которая бы отслеживала зависимости и автоматически устанавливала их.

Семантика и синтаксис

Синтаксис языка JavaScript во многом напоминает синтаксис Си и Java, семантически же язык гораздо ближе к Self, Smalltalk. В JavaScript:

- все идентификаторы регистрозависимы,

- в названиях переменных можно использовать буквы, подчёркивание, символ доллара, арабские цифры,

- названия переменных не могут начинаться с цифры,

- для оформления однострочных комментариев используются //, многострочные и внутристрочные комментарии начинаются с /* и заканчиваются */. [4]

Структура языка

Структурно JavaScript можно представить в виде объединения трёх чётко различимых друг от друга частей:

- ядро;

- объектная модель браузера;

- объектная модель документа.

Если рассматривать JavaScript в отличных от браузера окружениях, то объектная модель браузера и объектная модель документа могут не поддерживаться.

Объектная модель браузера

Объектная модель браузера -- браузеро-специфичная часть языка, являющаяся прослойкой между ядром и объектной моделью документа. Основное предназначение объектной модели браузера -- управление окнами браузера и обеспечение их взаимодействия. Каждое из окон браузера представляется объектом window, центральным объектом BOM (browser object model). Объектная модель браузера на данный момент не стандартизирована, однако спецификация находится в разработке WHATWG (Web Hypertext Application Technology Working Group) и W3C (World Wide Web Consortium).

Помимо управления окнами, в рамках объектной модели браузера, браузерами обычно обеспечивается поддержка следующих сущностей:

- управление фреймами,

- поддержка задержки в исполнении кода и зацикливания с задержкой,

- системные диалоги,

- управление адресом открытой страницы,

- управление информацией о браузере,

- управление информацией о параметрах монитора,

- ограниченное управление историей просмотра страниц,

- поддержка работы с HTTP cookie.

Объектная модель документа

Объектная модель документа-- интерфейс программирования приложений для HTML и XML-документов. Согласно DOM (document object model) документу можно поставить в соответствие дерево объектов, обладающих рядом свойств, которые позволяют производить с ним различные манипуляции:

- получение узлов,

- изменение узлов,

- изменение связей между узлами,

- удаление узлов.

Расположение внутри тега

Спецификация HTML описывает набор атрибутов, используемых для задания обработчиков событий. Пример использования:

<ahref="delete.php"onclick="returnconfirm(Вы

уверены?);">Удалить</a>

Отделение от разметки

В приведённом выше примере при нажатии на ссылку функция вызывает модальное окно с надписью «Вы уверены?» и блокирует переход по ссылке. Этот код будет работать, если в браузере есть и включена поддержка JavaScript, иначе переход по ссылке произойдёт без предупреждения.

Использование кода JavaScript внутри HTML тегов является отрицательной чертой. Зачастую гораздо удобнее и правильнее снабдить ссылку идентификатором, и реализовывать тот же функционал отдельно от разметки:

window.onload=function(){

var linkWithAlert = document.getElementById("alertLink");

linkWithAlert.onclick=function(){

returnconfirm(Выуверены?);

};

};

Безопасность

Так как JavaScript позволяет выполнять потенциально опасный код на любом компьютере сети, существуют два принципиальных ограничения на возможности данного языка программирования:

- JavaScript-программы выполняются в среде браузера, в которой они могут выполнять только ограниченный круг действий, а не задачи общего назначения (например, создание файлов, работа с сокетами),

- для JavaScript-кода применяется политика общего происхождения, в соответствии с которой скрипт, встроенный в страницу, не может получить доступ к ряду свойств объектов другой страницы (в частности, к большинству свойств объекта document) при отличии в протоколе, хосте и номере порта этих страниц.

Java -- объектно-ориентированный язык программирования, разработанный компанией Sun Microsystems. Приложения Java обычно компилируются в специальный байт-код, поэтому они могут работать на любой виртуальной Java-машине (JVM) независимо от компьютерной архитектуры. Дата официального выпуска -- 23 мая1995 года.

Основные особенности языка

Программы на Java транслируются в байт-код, выполняемый виртуальной машиной Java (JVM) -- программой, обрабатывающей байтовый код и передающей инструкции оборудованию как интерпретатор.

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

Часто к недостаткам концепции виртуальной машины относят то, что исполнение байт-кода виртуальной машиной может снижать производительность программ и алгоритмов, реализованных на языке Java. Данное утверждение было справедливо для первых версий виртуальной машины Java, однако в последнее время оно практически потеряло актуальность. Этому способствовал ряд усовершенствований:

применение технологии трансляции байт-кода в машинный код непосредственно во время работы программы (JIT-технология) с возможностью сохранения версий класса в машинном коде,

широкое использование платформенно-ориентированного кода (native-код) в стандартных библиотеках,

аппаратные средства, обеспечивающие ускоренную обработку байт-кода (например, технология Jazelle, поддерживаемая некоторыми процессорами фирмы ARM).

По данным сайта shootout.alioth.debian.org, для семи разных задач время выполнения на Java составляет в среднем в полтора-два раза больше, чем для C/C++, в некоторых случаях Java быстрее, а в отдельных случаях в 7 раз медленнее. С другой стороны, для большинства из них потребление памяти Java-машиной было в 10-30 раз больше, чем программой на C/C++.

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

Основные возможности

автоматическое управление памятью;

расширенные возможности обработки исключительных ситуаций;

богатый набор средств фильтрации ввода/вывода;

набор стандартных коллекций, таких как массив, список и стек;

наличие простых средств создания сетевых приложений;

наличие классов, позволяющих выполнять HTTP-запросы и обрабатывать ответы;

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

унифицированный доступ к базам данных:

на уровне отдельных SQL-запросов -- на основе JDBC, SQLJ;

на уровне концепции объектов, обладающих способностью к хранению в базе данных -- на основе Java Data Objects и Java Persistence API;

поддержка шаблонов (начиная с версии 1.5);

параллельное выполнение программ.

Преобразования при математических операциях

В языке Java действуют следующие правила:

Если один операнд имеет тип double, другой тоже преобразуется к типу double.

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

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

Иначе оба операнда преобразуются к типу int.

Данный способ неявного преобразования встроенных типов полностью совпадает с преобразованием типов в C++. [30]

Сборка мусора

В языке Java невозможно явное удаление объекта из памяти -- вместо этого реализована сборка мусора. Традиционным приёмом, дающим сборщику мусора «намёк» на освобождение памяти, является присваивание переменной пустого значения null. Это, однако, не значит, что объект, заменённый значением null, будет непременно и немедленно удалён. Данный приём всего лишь устраняет ссылку на объект, то есть отвязывает указатель от объекта в памяти. При этом следует учитывать, что объект не будет удален сборщиком мусора, пока на него указывает хотя бы одна ссылка из используемых переменных или объектов. Существуют также методы для инициации принудительной сборки мусора, но не гарантируется, что они будут вызваны исполняющей средой, и их не рекомендуется использовать для обычной работы.

Результатом разработки приложения на языке Java является Java-апплет.

Java-апплет -- прикладная программа на Java в форме байт-кода. Java-апплеты выполняются в веб-браузере с использованием виртуальной Java машины (JVM) - автономном инструменте для тестирования апплетов. Java-апплеты были внедрены в первой версии языка Java в 1995.

Апплеты используются для предоставления интерактивных возможностей веб-приложений, которые не могут быть предоставлены HTML. Так как байт-код Java платформо-независим, то Java-апплеты могут выполняться с помощью плагинов браузерами многих платформ, включая Microsoft Windows, UNIX, Apple Mac OS и GNU/Linux.

Техническая информация

Java-апплеты в большинстве браузеров выполняются в «песочнице», предотвращая их доступ к локальным данным. Код апплета загружается с веб-сервера, и браузер либо вставляет апплет в веб-страницу, либо открывает новое окно с собственным пользовательским интерфейсом апплета. Апплет может быть отображен на веб-странице путем использования устаревшего HTML элемента applet, или рекомендуемого элемента object. Этим определяется месторасположение и источник апплета.

Преимущества апплетов

1. Кроссплатформенность. Апплет может работать на «всех» установленных к этому времени версиях Java, а не только с последней версией; однако, если апплет требует последнюю версию JRE, то клиент будет вынужден ждать более длительной загрузки;

2. апплет поддерживается большинством браузеров;

3. он кэшируется в большинстве браузеров, а потому будет быстро загружаться при возвращении на веб-страницу; но апплет может сохраняться в кэше и создавать проблемы после выхода новых версий;

4. он может иметь полный доступ к машине, на которой выполняется, если пользователь согласен на это;

5. апплет может улучшить использование: после первого запуска апплета, когда JVM уже выполняется и быстро запускается, преимущественно у постоянных пользователей Java, однако JVM придется перезапускать каждый раз, когда запускается новый браузер.

6. он может запуститься с сопоставимой (но обычно медленнее) скоростью на других компилируемых языках, таких как C++, но во много раз быстрее, чем Java Script

7. он может перенести работу с сервера к клиенту, делая Интернет-решение с, большим числом пользователей / клиентов.

Недостатки апплетов

1. он требует установки Java-расширения (plug-in), которое не во всех браузерах доступно по умолчанию;

2. он не может запуститься до тех пор, пока не запустится виртуальная Java-машина, и это может занять значительное время при первом запуске;

3. создание и дизайн хорошего пользовательского интерфейса с использованием апплетов считается более сложной задачей, чем с помощью технологии, основанной на HTML;

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

5. апплеты могут потребовать использования определенного JRE.