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

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

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

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

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

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

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

Библиотека  классов языка Java

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

Выше уже было упомянуто, что с помощью библиотечных классов Thread и ThreadGroup в Java введены легковесные процессы (трэды). Для синхронизации трэдов в Java используются мониторы Хоара, с помощью которых осуществляется синхронизация очередей (с приоритетами) к совместно используемым данным. Механизм наследования позволяет вводить в управление трэдами новые возможности: можно разработать "свои трэды", наследуясь от класса Thread.

Системная библиотека Java содержит также классы String и StringBuffer, поддерживающие работу со строками. Эти  классы объявлены как final, что означает, что от этих классов нельзя производить подклассы. Класс String содержит основные операции для работы со строками (слияние строк, сравнение строк, поиск и извлечение символов и т.п.). Отметим, что операция (метод) конкатенации (слияния) строк обозначается символом "+", причем это единственный случай в языке Java, когда использована перегрузка знаков операций (в отличие от C++, широко использующем перегрузку операций +, * и др., что приводит к плохо понимаемым текстам программ, в Java запрещена перегрузка знаков операций). Класс StringBuffer является близнецом класса String, но, в отличие от класса String, объекты которого нельзя изменять (новая строка - это новый объект класса String), строки, являющиеся объектами класса StringBuffer, можно изменять.

Как и в системе программирования C/C++, в системную библиотеку Java включен пакет java.io, в котором реализованы потоки ввода-вывода. Возможности ввода-вывода в Java, в основном аналогичны реализации ввода-вывода в системе C/C++.

В системную библиотеку Java входят пакеты java.lang и java.util, которые содержат наборы вспомогательных классов, широко используемых в других встроенных пакетах Java и, естественно в прикладных пакетах и классах, разрабатываемых пользователями окружения Java. В частности, пакет java.lang содержит абстрактный класс Number, представляющий собой интерфейс для работы со всеми скалярными типами, его подклассы Integer, Long, Float и Double, являющиеся классами-оболочками для значений соответствующих типов (каждый объект класса-оболочки содержит одно значение соответствующего типа и имеет методы, обеспечивающие доступ к указанному значению), а также классы-оболочки Character и Boolean. Из других классов этих пакетов можно отметить класс Math, который содержит функции с плавающей точкой, используемые в физических и технических расчетах, а также константы E (приблизительно 2.72) и PI (приблизительно 3.14).

Интеграция системы Java с сетью Internet обеспечивается пакетом java.lang, входящим в системную библиотеку Java. При этом адреса абонентов, принятые в Internet, поддерживаются классом InetAddress, для поддержки дейтаграмм (пакетов протокола UDP) используются классы DatagramPacket и DatagramSocket, класс Socket поддерживает сокеты TCP/IP, для создания серверов Internet используются объекты класса ServerSocket. Наконец, имеется класс URL для связи с WWW (пользователи WWW знают, что URL, или Uniform Resource Locators - наиболее фундаментальный компонент WWW, обеспечивающий доступ к ее содержимому; в списке литературы к данной статье URL использованы для указания источников, доступных по Internet). Сетевые классы Java представляют ясный и простой в использовании интерфейс для работы в Internet, существенно упрощая написание программ для Internet.

В системную библиотеку Java включены также классы, поддерживающие разработку апплетов и упрощающие работу с окнами. Эти классы рассматриваются в следующем разделе.

Библиотека классов Java постоянно расширяется за счет новых  классов и пактов. Эти классы фактически расширяют язык Java, предоставляя программистам новые возможности. В качестве примера такого расширения Java рассмотрим два пакета, реализующие для окружения Java знаменитую библиотеку STL (Standard Template Library), которая имеет большой успех у программистов, использующих C++.

Первый из этих пакетов - SJL (Simple Java Library) представляет собой набор контейнерных классов и алгоритмов, параметризованных по типам (классам) содержащихся в них объектов и разработанных таким образом, чтобы программисты моли использовать их в различных сочетаниях в своих программах. Контейнерные классы определяют контейнерные объекты (или просто - контейнеры), т.е. объекты, которые содержат в себе наборы (множества) других объектов, обеспечивая доступ к этим объектам. Примерами контейнеров является список, массив, очередь и т.п. С каждым контейнером обычно бывает связано один или несколько итераторов - объектов, обеспечивающих доступ к содержимому соответствующего контейнера в некотором порядке. SJL обеспечивает возможности библиотеки STL для пользователей системы Java.

К сожалению, в системе Java в отличие от C++ не предусмотрено препроцессора (авторы Java являются принципиальными противниками препроцессора). Поэтому параметрические (generic) классы, реализованные в языке C++ через шаблоны (templates), обрабатываемые препроцессором, и широко используемые в библиотеке STL (ведь это библиотека шаблонов), в SJL реализованы через вызовы методов соответствующих классов. В результате во время выполнения программы приходится выполнять часть функций, которые в STL выполняются в процессе компиляции (дополнительная интерпретация!), что конечно же резко снижает производительность классов библиотеки SJL по сравнению с аналогичными классами STL.

В другой, более популярной, реализации библиотеки STL для окружения Java - пакете JGL (Java Generic Library), разработанном под руководством самого автора STL А. Степанова, показано как в этом окружении можно интерпретировать параметрические (generic) классы. Для этого авторы JGL разработали наборы интерфейсов, по одному для каждого из одиннадцати видов контейнеров (Array, Deque, Dlist, Slist, HashSet, OrderedSet, Stack, Queue, PriorityQueue, HashMap, OrderedMap), и контейнерные классы, реализующие эти наборы интерфейсов. Каждый интерфейс контейнера соответствует одному из классов объектов, содержащихся в этом контейнере, так что как только появляется новый класс объектов, включаемых в контейнер, соответствующий набор интерфейсов должен быть пополнен еще одним интерфейсом. Обращение к контейнеру всегда производится через один из его интерфейсов. Конечно, по сравнению с шаблонами такой способ параметризации классов по типам содержащихся в них объектов выглядит несколько неуклюжим. Другим недостатком пакета JGL является возможность включать в его контейнеры только объекты, так что элементами контейнера "массив целых значений" будут не поля типа int, а соответствующие объекты класса Int из пакета java.lang.

Из описания двух способов реализации библиотеки STL для окружения Java (SJL и JGL) видно, что язык Java нуждается  в более удобных средствах  параметрического (generic) программирования. Предложения по расширению Java в этом направлении встречаются в публикациях (см., например, [12]). Однако пока эти предложения не встречают должного понимания у авторов Java.

Программирование  и использование апплетов

Общие сведения об апплетах

Апплеты это маленькие  прикладные программы на языке Java, которые  размещаются на серверах Internet, транспортируются клиенту по сети, автоматически устанавливаются и запускаются на месте как часть документа WWW. Апплеты позволяют вставлять в документ, распространяемый по сети, поля, содержание которых меняется во времени (например, текущая дата, текущий курс валюты и т.п.), организовывать в нем "бегущие строки",

Рис. 1. Выполнение Java-апплета

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

Обеспечение безопасности при распространении апплетов

Каждый апплет выбирается на компьютер его пользователя из Web с помощью браузера (авторы системы Java изготовили для этого свой браузер HotJava, однако большинство пользователей предпочитает Netscape). После этого он загружается, верифицируется и запускается на JavaVM на компьютере пользователя, имея доступ только к JavaVM и к памяти, которую он сам занимает (рис. 1). Ни к каким другим ресурсам компьютера пользователя апплет доступа не имеет, что обеспечивает защиту данных и других программ пользователя от порчи и предохраняет компьютер пользователя от заражения вирусами. Защита ресурсов компьютера, на котором выполняются апплеты, загружаемые из сети, является предметом особых забот разработчиков системы Java. Поэтому в системе поддерживается четыре уровня безопасности Java-программ (в частности, апплетов).

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

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

  • байткод не выдает ссылок (указателей) на объекты, расположенные вне JavaVM;
  • байткод не нарушает ограничений по доступу к ресурсам компьютера пользователя апплета;
  • доступ к любым объектам апплета осуществляется в соответствии с их типом (строгая типизация);
  • все параметры инструкций JavaVM имеют правильные типы;
  • доступ к полям объектов апплета согласован с их определением как public, private, или protected.

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

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

Наконец, четвертый уровень защиты связан с такой организацией интерфейсов с сетевыми протоколами (HTTP, FTP и др.), которые обеспечивают доступ не ко всей сети, а только к тем серверам, с которых загружаются классы, используемые интерпретируемым апплетом. Кроме того, имеется возможность организовать барьер, предотвращающий доступ к ресурсам компьютера пользователя апплета со стороны сети.

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

Как показали недавние всесторонние исследования по безопасности Java-апплетов, вышеописанных мер безопасности пока оказалось достаточно, чтобы обеспечить безопасное распространение и выполнение апплетов. Во всяком случае пока не известно примеров распространения вирусов через апплеты Java.

Однако с вирусами все обстоит не так просто. Недавно  компания Symantec объявила о возможности  распространения двух типов вирусов с апплетами Java:

В связи с этим разработано  расширение системы Norton AntiVirus (NAV) для  сканирования классов (апплетов) Java на предмет обнаружения в них  вирусов. Это расширение содержит сканер файлов, содержащих Java-классы, который позволит NAV обеспечить антивирусную защиту Java-кода в режиме реального времени, и монитор антивирусной службы для Java, работающий внутри Netscape или любого другого браузера для Web, поддерживаемого системой Java. Текущая версия антивирусной службы NAV сканирует апплеты, рассылаемые по Internet в файлах .CLASS, и может обнаруживать вирусы типа Java Type I, которые могут размножаться, модифицируя страницы HTML. В следующей версии предполагается реализовать новый сканер, который сможет обнаруживать более сложные вирусы, относящиеся к типу Java Type II, которые могут заражать файлы .CLASS.

Следует отметить, что  требования к обеспечению безопасности апплетов автоматически выполняются  для апплетов, разрабатываемых в  инструментальном окружении JDK.

Инструментальное окружение JDK

Инструментальное окружение Java Developer's Kit (JDK) предназначено для  разработки, отладки и модификации Java-программ (в первую очередь, апплетов). В его состав входит несколько  инструментальных пакетов, в частности, пакеты java.applett и java.AWT.

Поскольку большая часть  апплетов являются составными частями ("активными полями") документов, распространяемых по сети, при их программировании часто возникает необходимость  обмена данными с оконными системами (графический ввод/вывод в окна). В JDK программирование работы с окнами поддерживается инструментальным средством Abstract Window Toolkit (AWT), обеспечивающим возможность писать апплеты, которые можно выполнять как с оконными редакторами ОС UNIX, так и с оконными редакторами других ОС.

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