Автор Анна Евкова
Преподаватель который помогает студентам и школьникам в учёбе.

INTRANET и архитектура «клиент-сервер»

Содержание:

Введение

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

Важно представлять, кто или что рассматривается как «клиент». Можно говорить о клиентском компьютере, с которого происходит обращение к другим; о клиентском и серверном программном обеспечении; о людях, которые хотят с помощью программного и аппаратного обеспечения доступа к информации. Клиенты и серверы - программные модули. Чаще они находятся на разных компьютерах, но бывает, когда клиентская и серверная программы физически размещаются на одной машине; в данной ситуации сервер называют локальным. Для того, чтобы работая в Интернете, посмотреть какую-то страницу, на компьютере должно быть установлено соответствующее программное обеспечение. Программы для просмотра веб-страниц – браузеры. Кроме браузеров, к серверам могут обращаться и другие клиенты - автономные программы, котороые предусматривют взаимодействие с человеком, а могут работать в автоматическом режиме.

Цель работы: исследовать разработку «клиент-сервис» архитектуры.

Задачи:

  1. Осуществить обзор и анализ «клиент-сервис» архитектуры, методов и средств ее решения.
  2. Рассмотреть взаимодействие Intranet и архитектура «клиент-сервер».
  3. Описать технологию JAVA в русле работы архитектура «клиент-сервер».

Глава 1. Обзор и анализ проблемы, методов и средств ее решения

1.1. Обзор архитектуры «клиент-сервер»

Подобно системе баз данных архитектура «клиент-сервер» интересна и актуальна тем, что обеспечивает простое и дешевое решение проблемы коллективного доступа к базам данных в локальной сети. Использование архитектуры «клиент-сервер» может заинтересовать, когда отвечаете за разработку программы, которая обращается к данным локальной сети или файлового сервера. К программному обеспечению могут обращаться несколько пользователей, а со временем и другие программы которые будут обрабатывать эти данные. Распространение архитектуры «клиент-сервер» стало возможным благодаря широкому внедрению в практику концепции открытых систем[1].

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

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

Практической опорой системных и прикладных программных средств открытых систем является стандартизованная операционная система. Такой системой является UNIX. Фирмам-поставщикам различных вариантов ОС UNIX в результате работы удалось прийти к соглашению об основных стандартах операционной системы. Сейчас распространенные версии UNIX совместимы по части интерфейсов, предоставляемых прикладным (а в большинстве случаев и системным) программистам. Несмотря на появление системы, претендующей на стандарт, Windows NT, UNIX останется основой открытых систем[5].

Технологии и стандарты открытых систем обеспечивают проверенную практикой возможность производства системных и прикладных программных средств со свойствами мобильности (portability) и интероперабельности (interoperability)[6]. Свойство мобильности означает простоту переноса программной системы в спектре аппаратно-программных средств, соответствующих стандартам. Интероперабельность - упрощение комплексирования новых программных систем на основе использования готовых компонентов со стандартными интерфейсами. Преимущество - они могут заменять компоненты системы на их новые версии, не теряя работоспособности системы. В этом - решение проблемы наращивания вычислительных, информационных мощностей компьютерной системы.

1.1.2 Клиенты и серверы локальных сетей

В основе распространения локальных сетей - идея разделения ресурсов. Высокая пропускная способность локальных сетей обеспечивает доступ из одного узла локальной сети к ресурсам, находящимся в других узлах. Развитие идеи приводит к функциональному выделению компонентов сети: целесообразно иметь не только доступ к ресурсам компьютера, но и получать от компьютера сервис. Так приходим к различению рабочих станций и серверов локальной сети[7].

Рабочая станция предназначена для работы пользователя (категории) пользователей, обладает ресурсами, соответствующими локальным потребностям пользователя. Сервер локальной сети должен иметь ресурсы, соответствующие его функциональному назначению и потребностям сети. В связи с ориентацией на подход открытых систем, мы говорим о логических серверах (набор ресурсов и программных средств, обеспечивающих услуги над ресурсами), которые располагаются не обязательно на разных компьютерах. Особенность логического сервера в открытой системе - если в рассуждениях эффективности сервер целесообразно переместить на отдельный компьютер, то это можно проделать без потребности в какой-либо переработке как его самого, так и его приложений[8].

Примеры серверов:

• сервер телекоммуникаций, обеспечивающий услуги по связи данной локальной сети с внешним миром;

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

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

• файловый сервер, поддерживающий общее хранилище файлов для всех рабочих станций;

• сервер баз данных, фактически обычная СУБД, принимающая запросы по локальной сети и возвращает результаты[9].

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

1.1.3 Системная архитектура «клиент-сервер»

Чтобы прикладная программа, которая выполняется на рабочей станции, могла запросить услугу у некоторого сервера, нужно интерфейсный программный уровень, который поддерживает такого рода взаимодействие (было бы неестественно требовать, чтобы приложение пользовалась примитивами транспортного уровня локальной сети). Из этого и вытекают основные принципы системной архитектуры «клиент-сервер»[10].

Система разбивается на 2 части, они могут реализовывать в разных узлах сети, - серверной и клиентской частях системы. Клиентская - при необходимости обращается по сети к серверной части. В развитых системах сетевое обращение к серверной части может не понадобиться, если система может предугадывать потребности пользователя, в клиентской части содержатся данные, которые способны удовлетворить его следующий запрос[11]. Интерфейс серверной части системы фиксирован и определен, поэтому допустимо создание новых клиентских частей имеющейся системы (интероперабельность на системном уровне)[12].

Проблемой систем, которые образованы на архитектуре «клиент-сервер», является то обстоятельство, что в соответствии с концепцией открытых систем от них требуется мобильность в широком классе аппаратно-программных решений открытых систем. Если ограничиться UNIX-ориентированными локальными сетями, в разных сетях используется различная аппаратура и протоколы связи. Попытки создания систем, которые поддерживают возможные протоколы, приводит их к перегрузке и функциональному ущербу.

Более сложный аспект данной проблемы связан с потенциалом применения разных представлений данных в различных узлах неоднородной локальной сети. В разных компьютерах может быть разная адресация, кодировка символов, представление чисел и пр. Что важно для серверов высокого уровня: вычислительных, телекоммуникационных, баз данных[13]. Решением проблемы мобильности систем, основанных на архитектуре «клиент-сервер» может быть опора на программные пакеты, которые реализуют протоколы удаленного вызова процедур (RPC - Remote Procedure Call). При использовании этих средств обращения к сервису в удаленном узле предстает как обычный вызов процедуры. Средства RPC, где содержится информация о специфике аппаратуры локальной сети и сетевых протоколов, переводит вызов в последовательность сетевых взаимодействий. Специфика сетевой среды и протоколов скрыта от прикладного программиста[14]. При вызове удаленной процедуры программы RPC делают преобразование форматов данных клиента в промежуточные машинно-независимые форматы и потом преобразование в форматы данных сервера. При передаче надлежащих параметров совершаются аналогичные преобразования. Если система осуществлена на основе стандартного пакета RPC, она может быть перенесена в любую открытую среду[15].

Технология «клиент-сервер» применимая к СУБД сводится к разделению системы на 2 части - приложение-клиент (front-end) и сервер базы данных (back-end). Эта архитектура объединяет черты обработки данных на мэйнфреймах и технологии «файл-сервер». От мэйнфреймов «клиент-сервер» технология заимствовала следующие черты: администрирование, централизованное, надежность, безопасность. От «файл-сервер» технологии наследованы возможность распределенной обработки данных, низкая стоимость, применяя ресурсы компьютеров-клиентов.

Графический интерфейс пользователя - стандарт для систем «клиент-сервер». Архитектура «клиент-сервер» ускоряет и упрощает разработку приложений за счет того, что правила проверки целостности данных находятся на сервере. Если клиентское приложение работает неправильно, то это может привести к потере или искажению данных. Эти возможности были присущие ранее сложной и дорогой системам, сейчас они доступны и небольшим организациям. Стоимость оборудования такого программного обслуживания и обеспечения для персональных компьютеров в 10 раз ниже, чем для мэйнфреймов. Особенности обработки данных в различных архитектурах представлены на Рис.1.

Локальный компьютер

Локальное приложение

СУБД

Данные

Архитектура «файл-сервер»

Клиент

Файл-сервер

сетевое приложение

Данные

СУБД

Клиент

сетевое приложение

Передача данных

СУБД

Рис.1. Обработка данных в различных архитектурах

Сервер БД

Клиентское приложение

Данные

Клиентское приложение

пересылки запросов

и результатов

Рис.2.Архитектура «клиент-сервер»

1.1.4 Серверы баз данных

«Сервер баз данных» - этот термин используют для обозначения СУБД, которая основана на «клиент-сервер» архитектуре, включая в т.ч., клиентскую и серверную части. Данные системы предназначены для хранения и обеспечения доступа к базам данных[16]. Обычно одна база данных вся хранится в одном узле сети и ее поддерживает один сервер, серверы баз данных - дешевое приближение к распределенным базам данных, т.к. общая база данных доступна для всех пользователей локальной сети.

1.1.5 Принципы взаимодействия между клиентскими и серверными частями

Доступ к базе данных от пользователя или приложения созидается путем обращения к клиентской части системы. Как основной интерфейс между серверной и клиентской частями выдвигается речь баз данных SQL. Это язык - текущий стандарт интерфейса СУБД в открытых системах. Наименование SQL-сервер относится к серверам баз данных, которые основаны на SQL[17].

Серверы баз данных, интерфейс которых основан на языке SQL, имеют преимущества и недостатки. Преимущество - стандартность интерфейса. Клиентские части любой SQL-ориентированной СУБД могли бы функционировать с любым SQL-сервером самостоятельно от производителя последнего.

При таком уровне интерфейса между серверной и клиентской частями системы на стороне клиента функционирует мало программ СУБД. Это обычно, если на стороне клиента применяется маломощная рабочая станция. Если клиентский компьютер располагает высокой мощностью, возникает желание возложить на него больше функций управления базами данных, разгрузив сервер, который является узким местом системы[18]. Одним из перспективных направлений СУБД гибкое конфигурирование системы, разделение функций между клиентской и пользовательской частями СУБД обусловливается при установке системы.

1.1.6.Преимущества протоколов удаленного вызова процедур

Протоколы удаленного вызова процедур важны в системах управления базами данных, которые основаны на «клиент-сервер» архитектуре[19].

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

2. Механизм удаленного вызова скрывает различия между взаимодействующими компьютерами. Физически неоднородная локальная сеть компьютеров приводится к логически однородной сети взаимодействующих программных компонентов. В итоге, пользователи не обязаны заботиться о разовой закупке совместимых серверов и рабочих станций.

1.1.7 Типовое разделение функций между клиентами и серверами

Обычно на стороне клиента СУБД работает такое программное обеспечение, которое не имеет непосредственного доступа к базам данных, а обращается для этого к серверу с использованием языка SQL. Иногда хочется включить в состав клиентской части системы некоторые функции для работы с «локальным кэшем» базы данных, т.е. с той ее частью, с которой активно используется клиентской прикладной программой[20]. Это можно выполнить путем формального создания на стороне клиента локальной копии сервера базы данных и рассмотрения всей системы как набора взаимодействующих серверов. С другой стороны, можно перенести большую часть прикладной системы на сторону сервера, но если разница в мощности клиентских рабочих станций и сервера велика. При использовании RPC это нетрудно сделать. Нужно, чтобы базовое программное обеспечение сервера это разрешало. При использовании ОС UNIX проблем нет.

1.1.8 Архитектуры процессора базы данных

Основная часть любой системы «клиент-сервер» - это сервер БД. Со времен возникновения «клиент-сервер» архитектуры появились варианты архитектуры процессора БД, т.к. он во многом определяет успех всей системы[21]. Основное требование к серверу БД - обеспечение минимального времени выполнения запросов при возможном максимальном числе пользователей. Существуют 2 основные архитектуры для построения процессора БД: многопоточная архитектура и архитектура с несколькими процессами.

1.2. Архитектура с несколькими процессами

Характеризуется тем, что несколько экземпляров исполняемого файла, работающих одновременно. Системы отличаются хорошей масштабируемостью, хотя и требуют значительных затрат памяти, т.к. память каждому экземпляру приложения отдельно выделяется. Архитектура подразумевает наличие эффективного механизма взаимодействия процессов и полагается на операционную систему при разделении процессорного времени между отдельными экземплярами приложения. Пример сервера, построенного по этой архитектуре, - Oracle Server. Когда пользователь подключается к БД Oracle, он запускает отдельный экземпляр исполняемого файла БД.

Многопоточная архитектура

Эта архитектура использует лишь один исполняемый файл с несколькими потоками выполнения. Преимущество - скромные к внедрению требования, чем для архитектуры с несколькими процессами. Сервер берет на себя разделение времени между отдельными потоками, иногда отдавая преимущество некоторым задачам над другими. Отпадает необходимость в сложном механизме взаимодействия процессов. Так, по данной архитектуре построены MS SQL Server и Sybase SQL Server.

Трехуровневая архитектура «клиент-сервер»

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

• презентационная логика (Presentation Layer - PL) предназначена для работы с данными пользователя;

• бизнес-логика (Business Layer - BL) предназначена для проверки правильности данных, поддержки и т.д.;

• логика доступа к ресурсам (Access Layer - AL), предназначена для хранения данных.

Сервер БД Пользовательский интерфейс

Данные Бизнес-логика

Пользовательский интерфейс

Бизнес-логика

Рисунок 3. «Толстый» клиент. (fat client)

Вариант реализации архитектуры клиент-сервер во внедренных системах. Данная модель подразумевает объединение в клиентском приложении как PL, так и BL, так как обеспечивается децентрализация управления бизнес-логикой. При необходимости выполнения изменений в клиентском приложении надо менять исходный код. Серверная часть при данном подходе представляет сервер БД, который реализует AL. К описанной модели часто применяют аббревиатуру RDA - Remote Data Access.

Бизнес-логика Пользовательский интерфейс

Данные

Пользовательский интерфейс

Рисунок 4. «Тонкий» клиент. (thin client)

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

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

Промежуточный сервер

Пользовательский интерфейс

Бизнес-логика

другого уровня

Сервер БД Пользовательский интерфейс

Бизнес-логика

Данные

Рисунок 5. Сервер бизнес-логики. (Трехуровневая архитектура)

Из модели с физически выделенным в отдельное приложение блоком BL получаем трехуровневую архитектуру «клиент-сервер». На сервере БД может функционировать «универсальная» часть бизнес-логики. Данная схема позволяет поддерживать клиентов на пользовательских компьютерах и разгрузить сервер БД от загрузки при сохранении гибкой системы работы с бизнес-правилами. Так промежуточный сервер может использоваться другой SQL-сервер, но рационально можно задействовать персональную СУБД, она менее требовательна к аппаратным ресурсам и может обеспечить удобные средства построения и поддержки бизнес-логики.

1.2.1 Персональные СУБД

Для разработки клиентских приложений вместо универсальных средств разработки удобнее использовать персональные СУБД. Использование персональных СУБД позволяет организовывать работу с бизнес-правилами и поддерживать независимую работу клиентского приложения за счет собственных форматов хранения данных. Краткая характеристика некоторых персональных СУБД - в таблице.

Краткая характеристика некоторых персональных СУБД

Наименование

Краткая характеристика

Lotus Approach 97

Позволяет выполнять виды обработки данных. Простой интерфейс. СУБД интегрирована с базами данных Notes и электронными таблицами Lotus 1-2-3. Поддерживает технологию электронного обмена сообщениями MAPI.

MS Access 97

Полноценная СУБД, обладает набором визуальных средств, многочисленными мастерами и мощной языке программирования Visual Basic for Applications. Имеет гибкую систему подготовки отчетов. Поддерживаются технологии ODBC и OLE 2.0. СУБД интегрирована со всеми приложениями MS Office.

MS Visual FoxPro 5

Одна из самых быстрых персональных СУБД, сочетающая технологию xBase и объектно-ориентировано язык программирования. Имеет богатый набор визуальных средств разработки и мастеров для быстрого построения приложений и отчетов. Поддерживаются технологии Active, ODBC и OLE 2.0. Позволяет создавать OLE-сервера и имеет средства для разработки и поддержки приложений «клиент-сервер».

Paradox 7

Поддерживает виды работы с данными. Для визуального выполнения стандартных задач - специальное средство Experts. Наделен сложным языком ObjectPAL. Поддерживает технологии OLE 2.0, Active, MAPI, ODBC.

Глава 2 Intranet и архитектура «клиент-сервер»

2.1. Двухуровневая архитектура «клиент-сервер»

Web-браузер Источник данных

Web-сервер

NOS (Network Operation System)

Рисунок 6. Двухуровневая архитектура «клиент-сервер»

Разграничение функций между Web-браузером и Web-сервером является четким. Web-сервер предоставляет HTML-страницы, браузер отображает страницы путем интерпретации тегов HTML.

2.2 Трехуровневая архитектура «клиент-сервер»

Web-браузер Источник данных

Третий уровень

Программа расширения

сервера

HTML

Web-сервер

NOS

Рисунок 7. Трехуровневая архитектура «клиент-сервер»

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

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

2.3. Программы расширения серверной части

Одной из главных причин использования программ-расширений серверной части на промежуточном уровне является возможность использовать стандарты, которые существуют для двух крайних уровней, путем осуществления трансляции между ними. Другие применения расширений серверной части состоят в поддержании соединений между БД с целью уменьшить в сети трафик и в поддержке резерва соединений между БД для уменьшения затрат ресурсов на открытие / закрытие БД. Расширение серверной части также поддерживают взаимозаменяемость в своих стандартных интерфейсах. Поэтому Web-серверы и серверы БД сравнительно легко наращивать или заменять. Существует 3 категории расширений серверной части: с обычным CGI, с гибридным CGI и с API.

Глава 3. Технология JAVA

3.1 Технологический цикл обработки JAVA-программ

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

public static void main (String args[]);

Метод должен быть определен в том public-классе, который находится в файле, выполняется виртуальной Java-машиной. В параметр args передается массив строк - параметров командной строки. Так, программа, печатает аргументы:

public class myTop {

public static void main (String args[]) {

int argc = args.length;

for (int i = 0; i < argc; i++)

System.out.println (argc[i]);

}

}

Апплет выполняется в контексте браузера и его жизненный цикл определяется следующими методами класса Applet:

• public void init () - вызывается браузером при загрузке апплета;

• public void start () - вызывается браузером при показе страницы;

• public void stop () - вызывается браузером, когда тот идет с Web-страницы;

• public void destroy () - метод предназначен для освобождения ресурсов; аналог деструктора, но не вызывается автоматически; всегда вызывает stop () и вызывается при выходе из браузера и при перезагрузке апплета.

Пример: апплета

1. import java.awt.Graphics;

2. import java.applet.Applet;

3. class SimpleApplet extends Applet {

4. public void paint (Graphics g) {

5. g.drawString (10, 10, «Hello world!»);

6. }

7. }

Апплет выглядит так.

Метод paint (строки 4-6) определяет, как апплет перерисовывает себя, когда оконный менеджер посылает браузеру запрос на перерисовку.

Включение апплета в WWW-страницу производится так: В языке HTML 2.0 предусмотрены специальные конструкции <applet> и <PARAM>. Первая задает имя класса, загружает и размеры области в окне броузера, выделенного апплета. Конструкция <PARAM> служит для передачи информации с WWW-страницы в ту среду, в которой будет выполняться апплет.

<applet code=SimpleApplet.class width=200 height=100>

<PARAM NAME=font VALUE=«TimesRoman»>

<PARAM NAME=size VALUE=«12»>

<h3>Если вы видите этот текст,

то ваш новигатор не поддерживает Java </h3>

</applet>

Данный фрагмент содержит пример включения апплета в WWW-странице. Браузеры игнорируют неизвестные конструкции, в навигаторе не поддерживает Java, то будет текст «Если вы видите этот текст, то ваш навигатор не поддерживает Java».

Получить значения, передаваемые с помощью конструкции <PARAM>, можно так:

public void init () {

String fontname = getParameter («name»);

String fontSizestring = getParameter («size»);

int theSize = Int.parseInt (fontSizeString);

. . .

}

3.2 JAVA-машина

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

Идея языковых процессоров не нова. Известны попытки внедрить так называемый P-код в качестве стандарта на результат работы Паскаль-компиляторов; в свое время много писали о языке и машину Форт; была выполнена аппаратная реализация РЕФАЛ-машины и пр.

В контексте проекта Java спецификация виртуальной машины - часть комплекса мер, которые направлены на стандартизацию Java-среды на обеспечение ее независимости от аппаратно-программной платформы. Учтем при этом специфическую среду, в которой должны готовиться и работать Java-приложения. Если Web-страница содержит Java-аплеты, эти аплеты будут передаваться по сети. Получается, нужно, чтобы Java-код был более компактным; в противном случае время загрузки страницы рискует стать большим. Архитектура и система команд Java-машины проектировались так, чтобы способствовать компактности кода. С другой стороны, формат команд Java-машины прост (команды не имеют операндов и занимают один байт), поэтому возможно ее эффективная эмуляция. По этой причине программы, которые подготовлены для выполнения на Java-машине, часто называют байтами-кодами.

3.3 Типы данных, которые поддерживает JAVA-машина

Java-машина поддерживает следующие стандартные типы данных:

• byte - однобайтовые целые числа;

• short - двухбайтовые целые числа;

• int - четырехбайтовые целые числа;

• long - восьмибайтовые целые числа;

• float - четырехбайтовые действительные числа в формате IEEE-754;

• double – восьмибайтовые действительные числа;

• char - двухбайтовые беззнаковые символы в кодировке Unicode.

Поскольку Java-компилятор в состоянии проверить типы данных во время трансляции, при выполнении нет нужды ассоциировать дополнительную информацию со значениями стандартных типов. Вместо этого генерируются команды, рассчитанные на обработку данных определенных типов. Так, для добавления целых чисел будет сгенерирована команда iadd, а для добавления действительных чисел двойной точности - команда dadd.

Значение типа boolean представляются однобайтных целыми числами и обрабатываются с помощью соответствующих команд.

Есть еще 2 стандартных типа данных:

• object - четырехбайтовые ссылки на объект (массивы трактуются как объекты)

• returnAddress - четырехбайтовое адресов возврата из метода.

Спецификации Java-машины не описывают внутренней структуры объектов. В реализации Sun Microsystems значение типа object указывает на указатель, что сохраняет две ссылки - на таблицу методов и на данные объекта. Возможны и другие представления. Java-машина является 32-битной. Более длинные значения (long, double) представляются как пары четырехбайтовое величин. Не оговаривается, в каком порядке располагаются элементы пары; более того, верификатор байт-кодов обязан выявлять и отвергать программы, пытающиеся «вручную» установить длинные значения.

3.4 Регистры

В Java-машине должны поддерживаться следующие регистры:

• pc - счетчик команд указывает на код операции для команды, которая будет выполняться следующей.

• vars - базовый регистр для доступа к локальным переменным текущего метода.

• optop - указатель на вершину стека операндов. Java-машина является стеков, поэтому основная часть команд берет операнды из стека и туда помещает результат.

• frame - указатель на структуру, содержащую окружение времени выполнения.

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

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

3.5 Указатели

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

Если нужно передать ссылку на переменную базового типа, такого, например, как int или long, то ничего не получится - переменные базовых типов передаются по значению, а не по ссылке. Поэтому нельзя прямо создать на языке Java эквивалент следующей программы, составленной на языке С:

// Некоторая переменная

int nSomeValue;

// Функция, которая меняет значение переменной,

// заданной своим адресом

void StoreValue(int *pVar, int nNewValue)

{

pVar->nNewValue;

}

. . .

StoreValue(&nSomeValue, 10);

Язык Java позволяет использовать вместо указателей ссылки на объекты. Пользуясь этими ссылками, можно адресовать объекты по имени, вызывая методы и изменяя значение данных объектов. Что касается данных базовых типов, если надо передавать на них ссылки, но надо заменить базовые типы на соответствующие классы. ТАк, вместо типа int использовать класс Integer, вместо типа long - класс Long и т.д.

Инициализация объектов должна выполняться с помощью конструктора:

Integer nSomeValue;

nSomeValue = new Integer(10);

Первая строка создает неинициализированную ссылку nSomeValue и типом Integer. При попытке использования ссылки возникнет исключение. Вторую строчку создает объект класса Integer, вызывая конструктор. Конструктор определяет начальное значение. После выполнения оператора присваивания ссылки nSomeValue будет ссылаться на реальный объект класса Integer и ее можно использовать. Имя объекта nSomeValue типа Integer можно передавать функциям в качестве параметра, причем это будет ссылкой на объект.

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

3.6 «Сбор мусора»

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

Создавая объекты в Java, можно руководствоваться принципом «создай и забудь», т.к. система сбора мусора заботится об удалении объектов. Объект удален из памяти, как только на него не останется ни одной ссылки от других объектов.

Приоритет процесса сборки мусора низкий, поэтому «сбор» среды выполнения приложений Java не отнимает ресурсы в приложениях. Для создания объектов во время выполнения выделяется область динамической памяти. Язык Java рассчитан на то, что эту область обслуживает сборщик мусора, т.к. в языке нет средств для освобождения памяти.

3.7 Система команд JAVA-машины

Команда Java-машины состоит из однобайтового кода операции, за которым следуют операнды (если таковые имеются). Выделим группы команд:

• команды загрузки констант и переменных в стек операндов. Для каждого типа данных - свои команды загрузки. Так, команда с кодом операции dload и операндом, что задает смещение, загружает в стек из локальной переменной вещественное число двойной точности, а команда aload делает то же для ссылки на объект.

• команды запоминания данных из стека в локальные переменные.

• команды управления массивами. Так, команда newarray с операндом, что задает тип элементов, извлекает из стека необходимый размер массива, создает его и помещает в стек ссылку на массив. Для создания массивов с элементами-объектами есть другая команда, anewarray. За счет подобной специализации достигается эффективность интерпретации Java-программ.

• команды работы со стеком. К этой группе относятся команды, которые удаляют, дублируют, меняют местами верхние элементы стека операндов, также выполняют другие, более сложные манипуляции со стеком.

• арифметические команды. Операнды извлекаются из стека; туда же помещают результат.

• логические команды (смещение, и/ или, исключающее или).

• команды преобразования к другому типу.

• команды передачи управления.

Так, в команде jsr (переход на подпрограмму) операндом служит относительный адрес перехода; адрес команды, следующей за jsr, содержится на вершину стека операндов. Команды для реализации переключателей:

• команды возврата из функции. Для возврата результатов разных типов используются команды с разными кодами операции. Команда breakpoint, она останавливает нормальный ход выполнения и передает управление обработчику этого события.

• команды манипулирования с полями объектов (установить / прочитать обычное / статическое поле).

• команды вызова методов. Их 4: Команда invokevirtual вызывает (виртуальный) метод на основе анализа информации времени выполнения. Команда invokenonvirtual осуществляет вызов на основании информации времени компиляции - пример, вызов метода родительского класса. Команда invokestatic вызывает статический метод класса. Команда invokeinterface вызывает метод, представленный интерфейсом. Выполнение всех команд связано не только с передачей управления, и с анализом разного рода таблиц.

• команда нарушения исключительной ситуации - athrow.

• другие объектные операции (создать объект, проверить тип объекта).

• команды синхронизации (войти в критический интервал, выйти из него).

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

3.2.1. Взаимодействие с серверами баз данных - JDBC

JDBC (Java DataBase Connectivity) - набор классов и методов, они используются в языке программирования Java для работы с базами данных. JDBC обеспечивает простые, универсальные и хорошо адатуеми средства взаимодействия с различными СУБД.

Интерфейсы JDBC, разработанные корпорацией Sun, обеспечивающих выполнение стандартных операций с базами данных SQL, а разработчики PostgreSQL предоставляют конкретную реализацию этих интерфейсов. Реализация делает взаимодействие с базой данных: подключение, регистрацию, вызов хранимых процедур и т.д. Интерфейсы спроектированы так, что программа, использующая JDBC, может подключиться к любой JDBC-совместимой базы данных без модификации кода. Надо учитывать обстоятельства:

1. JDBC не выполняет лексического анализа или проверки синтаксиса SQL на стороне клиента. Команды передаются базе данных независимо от их правильности. Если код SQL работает в одной СУБД, но не подходит для другой, реализация не будет знать об этом до фактического установления соединения и пересылки кода SQL. Sim пытается решить эту проблему. Возможно, соответствующие изменения будут внесены в следующие версии JDBC или с переходом на другой стандарт.

2. В реализацию включаются дополнительные классы, специфичные для конкретного продукта. Пример, в PostgreSQL является расширение для геометрических типов данных. Они существуют в PostgreSQL и не поддерживаются другими фирмами. Если использовать эти специализированные классы, программа не будет работать в других JDBC-совместимых базах данных.

Преимущество драйвера JDBC для PostgreSQL заключается в том, что он является драйвером «четвертого типа». Он написан на «чистом» языке Java, позволяет перенести его куда угодно, использовать на любой платформе с поддержкой TCP / IP, т.к. драйвер подключается через TCP / IP.

3.2.2 Использование JDBC

Классы JDBC представляют основные компоненты взаимодействия программы с SQL. Во всех основных классах JDBC - Connection, Statement, ResultSet, Blob и Clob - прямые аналоги в SQL. Кроме того, в JDBC включены вспомогательные классы - например, классы ResultsSetMetaData и DatabaseMetaData предназначены для работы с метаданными. В частности, они используются для получения информации о возможностях базы данных, для проверки типа результата запросов, в процессе отладки и просто в ситуациях, когда у вас нет информации о данных, с которыми работаете.

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

3.2.3 Принципы использования JDBC

Для создания физического подключения к базе данных используется объект Connection, представляющий физическое подключение к базе данных. Объект Connection требуется для создания объектов Statement, с помощью которых в JDBC базе данных передаются команды SQL.

Существует 3 разновидности объектов Statement: базовый класс Statement, классы PreparedStatement и CallableStatement.

Statement s = c.createStatement ():

Здесь создается объект класса Statement с именем s для объекта Connection с именем с. Далее созданный объект Statement может использоваться для выполнения запросов к базе данных.

В классе Statement важны 2 метода. 1- executeQuery, получает один аргумент (код выполняемой команды SQL) и возвращает объект класса ResultSet. Метод executeQuery предназначен для выполнения команд, возвращают наборы данных, например запросов SELECT. 2 Объект возвращает, ResultSet представляет данные, полученные в ходе запроса.

Пример выборки данных из БД:

Statement s = nul 1: try {

s = c.createStatement;

} catch (SQLException se) {

System.out.printlnC'We got an exception while creating a statement:» +

«that probably means we're no longer connected.»):

se.printStackTrace();

System, exit(l);

}

ResultSet rs = null:

Try {

rs = s.executeQuery(«SELECT * FROM books»);

} catch (SQLException se) {

System.out.printlnC'We got an exception while executing our query:» +

«that probably means our SQL is invalid»):

se.pnntStackTrace():

System.exit(l):

}

int index = 0:

try {

while (rs.next) {

System.out.printlnC'Here's the result of row « + index++ + «:»):

System.out.pri ntln(rs.getStri ng(1)):

}

} catch (SQLException se) {

System.out.pnntlnC'We got an exception while getting a result:this « +

«shouldn't happen: we've done something really bad.»);

se.pnntStackTrace();

System.exit(l):

}

Сначала создаем объект Statement, затем используем метод executeQuery этого объекта для выполнения запроса SELECT * FROM books. Возвращенный к запросу объект ResultSet используется для вывода полученной информации. Объект ResultSet предоставляет основной интерфейс выборки из базы данных. Он обладает 2-мя основными возможностями: возможностью последовательного перебора полученных записей и возможностью возвращения значения заданного поля текущей записи. Принцип перебора такой же, как и в стандартных перечислениях Java: начинаем перебор в позиции перед первым элементом и последовательно переходим к следующему элементу методом next.

Метод next возвращает true, если объект ResultSet успешно перешел к следующей записи (т.е. в итоговом наборе остались необработанные записи). Цикл while выводит значение первого поля каждой из записей, возвращают. Если итоговый набор не содержит записи, первые вызовы next вернет fal se и программа ничего не выведет.

Класс ResultSet может возвращать значение различных типов. В примере, первое поле интерпретируется как строка (Stri ng). К счастью, все стандартные типы данных SQL могут быть представлены в срочном виде, поэтому независимо от типа данных всегда можно получить значение первого поля и вывести его. Класс ResultSet содержит множество других методов, включая методы выборки для всех типов данных SQL и преобразования их к типам Java.

Метод executeUpdate вызывается с аргументом - выполняемой командой SQL. executeQuery и executeUpdate отличаются тем, что метод executeUpdate предназначен для выполнения команд, изменяющих состояние данных в базе. Так, при вызове executeUpdate для команды CREATE, INSERT или UPDATE возвращается число типа int, определяющее количество модифицированных записей.

Statement s - null: try {

s = c.createStatement():

} catch (SQLException se) {

System.out.printlnC'We got an exception while creating a statement:» +

«that probably means we're no longer connected.»):

se.printStackTrace();

System.exlt(1):

}

int m = 0;

try {

m = s.executeUpdate1 INSERT INTO books VALUES « +

«(41472. 'Practical PostgreSGl'. 1212. 4)»): >

} catch (SQLException se) {

System.out.println(«We got an exception while executing our query:» +

«that probably means our SQL is invalid»): >

se.printStackTrace():

System.exit(l):

}

System.out.println(«Successfully modified « + m + « rows.\n»):

3.2.4.Нетривиальные возможности JDBC

Кроме базового объекта Statement в JDBC существует 2 других типа объектов для представления команд: PreparedStatement и Cal lableStatement.

В данном разделе -анализ объектов ResultsSetMetaData и DatabaseMetaData. С их помощью можно пригласить в JDBC описание результатов запроса или базы данных. Возможность получения такой информации на стадии выполнения программы позволяет динамически выполнять команды SQL - такие, параметры которые были неизвестны на момент написания программы.

Объект CallableStatement позволяет выполнять хранимые процедуры в JDBC-co-вместительных базах данных. Лучшим источником информации по этому вопросу является сайт Sun Javasoft (http://java.sun.com/products/jdbc/), т.к. стандарт вызываемых команд (callable statements) изменяется и развивается, его практические применения зависят от версии Java и JDBC.

Объект PreparedStatement представляет подготовленные (prepared) команды SQL, многократно выполняемые с разными исходными данными - так, если нужно вставить в таблицу несколько записей, одну за другой. Главное преимущество PreparedStatement в том, что команда проходит предварительную компиляцию, что избавляет от затрат на повторную обработку команд SQL при каждом выполнении.

PreparedStatement ps = null;

try {

ps = c.prepareStatementC'INSERT INTO authors VALUES (?. ?. ?)»);

ps.setlntd. 495);

ps.setString(2. «Light-Williams»);

ps.setString. «Corwin»);

} catch (SQLException se) {

System.out.println»We got an exception while preparing a statement:» +

«Probably bad SQL.»);

se.printStackTrace();

System.exit(l);

}

try {

ps.executeUpdate();

} catch (SQLException se) {

System.out.printlnC'We got an exception while executing an update:» +

«possibly bad SQL. or check the connection.»);

se.pnntStackTrace();

System.exit(l);

}

Как видно из листинга, подготовленная команда выглядит обычно, разве что все переменные величины заменяются в ней знаками (?). Присваивания выполняется методами класса PreparedStatement (setlnt, setString и т.д.). Выбор метода для каждого поля зависит от типа данных поля.

Объекты PreparedStatement удобны тем, что они обеспечивают автоматическое преобразование типов данных Java в типы SQL. Так, при переходе к типу text не надо беспокоиться об экранировании символов или кавычек.

Первый аргумент метода set идентифицирует номер позиции переменной (знака), который присваивается значение. Единица означает первый знак, двойка - второй и т.д. Другая сильная сторона PreparedStatement связана с тем, что объект можно снова использовать с новыми данными, не создавая нового объекта Statement для каждого набора параметров. Такой подход более эффективен, т.к. он ограничивается созданием одного объекта, а новые значения переменных задаются методами set.

В JDBC можно пригласить подробную информацию об итоговом наборе запроса. Класс ResultsSetMetaData возвращает описание объекта ResultSet, полученного при вызове executeQuery. В нем содержится информация о количестве полей, типе данных, именах полей и т.д.

Из всех методов класса ResultSetMetaData чаще используют методы getColumnName и getColumnTypeName. Они возвращают имя поля и имя его типа данных в виде значения типа String.

3.2.5 Использование JDBC 363

Механизм PreparedStatement гораздо надежнее подготовки нескольких команд в объектах Statement.

ResultSetMetaData rsmd = null;

try {

rsmd = rs.getMetaData();

} catch (SQLException se) {

System.out.printlnC'We got an exception while getting the metadata:» +

«check the connection.»);

se.printStackTrace();

System.exit(l);

}

String columnName = nul;.

columnType = null;

try {

columnName = rsmd.getColumnName(1);

columnType - rsmd.getColumnTypeName(l);

} catch (SQLException se) {

System.out.printlnC'We got an exception while getting the column name:»

+ «check the connection.»);

se.printStackTrace();

System.exit(l);

}

System.out.print(«'The name of the first column is: '«);

System.out.print(columnName);

System.out.prin(«The data type of the first column is: «);

System.out.println(columnType);

  • Класс ResultSetMetaData содержит много других полезных методов. Описания приведены в документации JDK API.
  • Класс DatabaseMetaData предназначен для получения информации о базе данных, с которой работаете. Он позволяет получить ответ на вопросы.
  • • Какие каталоги присутствуют в базе данных?
  • • С каким типом базы я работаю?
  • • Под каким именем пользователя я работаю с базой данных?

DatabaseMetaData dbmd = null;

try {

dbmd = c.getMetaData();

} catch (SQLException se) {

System.out.printlnC'We got an exception while getting the metadata:» +

« check the connection.»);

se.printStackTrace();

System.exit(l);

}

String username = null;

Try {

username = dbmd.getUserName();

} catch (SQLException se) {

System.out.printlnC'We got an exception while getting the username:» +

«check the connection.»); se.printStackTrace;

System.exit(l);

}

String url = null;

Try {

url = dbmd.getURL();

} catch (SQLException se) {

System.out.printlnC'We got an exception while getting the URL:» + «check the connection.»);

se.printStackTrace();

System.exit(l);

}

System.out.printlnC('«You are connected to '« + url +

'« with user name '« + username + .....);

Лучшим источником информации о других методах DatabaseMetaData является документация JDK API.

3.2.6 Работа с запросами в MS Access

Программное обеспечение для работы с базами данных используется на персональных компьютерах давно. База данных - это набор записей и файлов, организованных специальным образом. В компьютере можно хранить фамилии и адреса друзей или клиентов, свои письма, и они сгруппированы по адресатам, или набор файлов с данными по финансовым делам: полученные или выставленные счета, расходы по чековой книжке или балансам. Один из типов баз данных - это документы, которые набраны с помощью текстовых редакторов и сгруппированные по темам. Второй тип - файлы электронных таблиц, которые объединены в группы по характеру их использования. Чтобы управлять данными, которые разбросаны по сотням таблиц и файлов используются системы управления базами данных (СУБД). Microsoft Access 97 как раз является такой системой. Почти все современные системы построены на реляционной модели управления базами данных. Название «реляционная» связано с тем, что каждая запись в такой базе данных содержит информацию, которая относится только к одному конкретному объекту. В реляционной СУБД все данные представлены в виде таблиц. Информация об объектах определенного вида представляется в табличном виде - в столбиках таблицы содержатся различные характеристики объектов - атрибуты (адреса клиентов), а строки предназначены для описания величин всех атрибутов отдельного объекта (данные о конкретном клиенте).

Когда используются функции СУБД для выбора информации из одной или нескольких таблиц, результат представляется в виде таблицы. Можно выполнить запрос с использованием результатов другого запроса. Можно объединить информацию из нескольких таблиц или запросов. Система управления базами данных дает возможность контролировать структуру и описание данных, работу с ними и организацию коллективного пользования информацией. СУБД существенно увеличивает возможности и облегчает каталогизацию и ведение больших объемов информации, хранящейся в многочисленных таблицах. СУБД включает в себя 3 основных типа функций: определение данных, их обработка и управления данными. Все эти функциональные возможности в полной мере реализованы в Microsoft Access.

В базе данных Access основные объекты - таблицы, запросы, формы, отчеты, макросы и модули. Таблица - объект, который используется для хранения данных. Таблица состоит из полей (колонок), в которых хранятся различные данные, и записей (строк). В записи собрана вся информация о некотором объекте. Запрос - объект, который позволяет пользователю получить нужные данные из одной / нескольких таблиц. Для создания запроса можно использовать бланк QBE (запрос по образцу) или инструкцию SQL. Можно создавать запросы на выборку, обновления, удаления / добавления данных. С помощью запросов можно создавать новые таблицы, используя данные из одной или нескольких таблиц. Форма - объект, предназначенный для ввода данных, отображения их на экране или управления работой приложения. Отчет - объект, предназначенный для создания документа, который в дальнейшем может быть распечатан / включен в документ другого приложения.

Заключение

В процессе выполнения сделана следующая работа:

-исследована архитектура «клиент-сервер»;

-проанализированы основные подходы к разработке программ данной архитектуры.

В работе проведен значительный аналитический обзор литературных источников, исследованы основные подходы, существующие на сегодня в областях разработки программного обеспечения с архитектурой «клиент-сервер».

Проблемой систем, которые образованы на архитектуре «клиент-сервер», является то, что в соответствии с концепцией открытых систем от них требуется мобильность в широком классе аппаратно-программных решений открытых систем. Если ограничиться UNIX-ориентированными локальными сетями, в разных сетях используется различная аппаратура и протоколы связи. Попытки создания систем, которые поддерживают возможные протоколы, приводит их к перегрузке и функциональному ущербу.

Технология «клиент-сервер» применимая к СУБД сводится к разделению системы на 2 части - приложение-клиент (front-end) и сервер базы данных (back-end). Эта архитектура объединяет черты обработки данных на мэйнфреймах и технологии «файл-сервер». От мэйнфреймов «клиент-сервер» технология заимствовала следующие черты: администрирование, централизованное, надежность, безопасность. От «файл-сервер» технологии наследованы возможность распределенной обработки данных, низкая стоимость, применяя ресурсы компьютеров-клиентов.

Список использованной литературы

  1. Байдачный С.С. Net Framework 2.0. Секреты создания Windows приложений — М.: СОЛОН-Пресс, 2016 – 520с
  2. Бершадская Е.Г. Анализ технологий поддержки научных исследований / XXI век: итоги прошлого и проблемы настоящего плюс. 2015. №3(25) -С.11-17.
  3. Десницкий В. А., Чалый Д. Ю. Клиент-серверный подход к защите программного обеспечения систем интернета вещей // Технические науки - от теории к практике: сб. ст. по матер. LXIV междунар. науч.-практ. конф. № 11(59). – Новосибирск: СибАК, 2016. – С. 6-13.
  4. Десницкий В.А., Котенко И.В. Формирование экспертных знаний для разработки защищенных систем со встроенными устройствами // Проблемы информационной безопасности. Компьютерные системы. - №4. - 2015. - С.35–41.
  5. Макдональд М., Феррара А. Программирование Web-сервисов для .NET — Спб: Питер, 2013 – 432с
  6. Миков А.И., Замятина Е.Б. Распределенные системы и алгоритмы. М.: Интуит.ру, 2012. -370 с.
  7. Радченко, Г.И. Распределенные вычислительные системы / Г.И. Радченко. –Челябинск:: Фотохудожник, 2012. – 184 с.
  8. Таненбаум Э., Ван-Стеен М. Распределенные системы. Принципы и парадигмы. - СПб.: Питер, 2013. - 877 с.
  9. Федоров А., Мартынов Д. Windows Azure. Облачная платформа Microsoft. Microsoft, 2010. - 96 с.
  10. Черняк Л. Web-сервисы, grid-сервисы и другие // Открытые системы. СУБД. №12. 2014. -С. 20-27.
  11. The home of graceful software // Official website of Gracebyte Software URL: http://www.gracebyte.com (Дата обращения: 11.12.2016)
  12. Imagination Cubed. URL: http://www.imaginationcubed.com/LaunchPage (Дата обращения: 04.12.2016)
  13. Microsoft Corporation // Official web site of Microsoft Corporation URL: http://www.microsoft.com (Дата обращения: 10.12.2016)
  14. Understanding SOAP // MSDN Articles URL: http://msdn.microsoft.com/library/default.asp?url=/library/enus/dnsoap/%20html/understandsoap.asp (Дата обращения: 10.12.2016)
  15. Wintab 1.1 specification // Wacom PC Software Development Support URL: http://www.wacomeng.com/devsupport/downloads/pc/wt1pt1.zip (Дата обращения: 15.12.2016)
  1. Черняк Л. Web-сервисы, grid-сервисы и другие // Открытые системы. СУБД. №12. 2014. -С. 20-27.

  2. Десницкий В. А., Чалый Д. Ю. Клиент-серверный подход к защите программного обеспечения систем интернета вещей // Технические науки - от теории к практике: сб. ст. по матер. LXIV междунар. науч.-практ. конф. № 11(59). – Новосибирск, 2016. – С. 6-13.

  3. Макдональд М., Феррара А. Программирование Web-сервисов для .NET — Спб, 2013

  4. Десницкий В. А., Чалый Д. Ю. Клиент-серверный подход к защите программного обеспечения систем интернета вещей // Технические науки - от теории к практике: сб. ст. по матер. LXIV междунар. науч.-практ. конф. № 11(59). – Новосибирск, 2016. – С. 6-13.

  5. Федоров А., Мартынов Д. Windows Azure. Облачная платформа Microsoft. Microsoft, 2010. - 96 с.

  6. Десницкий В. А., Чалый Д. Ю. Клиент-серверный подход к защите программного обеспечения систем интернета вещей. С. 6-13.

  7. Миков А.И., Замятина Е.Б. Распределенные системы и алгоритмы. М., 2012.

  8. Радченко Г.И. Распределенные вычислительные системы / Г.И. Радченко. –Челябинск, 2012

  9. Десницкий В. А., Чалый Д. Ю. Клиент-серверный подход к защите программного обеспечения систем интернета вещей. С. 13.

  10. Таненбаум Э., Ван-Стеен М. Распределенные системы. Принципы и парадигмы. - СПб., 2013.

  11. Миков А.И., Замятина Е.Б. Распределенные системы и алгоритмы. М., 2012. -370 с.

  12. Макдональд М., Феррара А. Программирование Web-сервисов для .NET — СПб, 2013

  13. Федоров А., Мартынов Д. Windows Azure. Облачная платформа Microsoft. Microsoft, 2010.

  14. Радченко Г.И. Распределенные вычислительные системы / Г.И. Радченко. –Челябинск:, 2012.

  15. Десницкий В. А., Чалый Д. Ю. Клиент-серверный подход к защите программного обеспечения систем интернета вещей // Технические науки - от теории к практике: сб. ст. по матер. LXIV междунар. науч.-практ. конф. № 11(59). – Новосибирск, 2016. – С. 6-13

  16. Imagination Cubed. URL: http://www.imaginationcubed.com/LaunchPage (Дата обращения: 04.12.2016)

  17. The home of graceful software // Official website of Gracebyte Software URL: http://www.gracebyte.com (Дата обращения: 11.12.2016)

  18. Understanding SOAP // MSDN Articles URL: http://msdn.microsoft.com/library/default.asp?url=/library/enus/dnsoap/%20html/understandsoap.asp

  19. Wintab 1.1 specification // Wacom PC Software Development Support URL: http://www.wacomeng.com/devsupport/downloads/pc/wt1pt1.zip (Дата обращения: 15.12.2016)

  20. The home of graceful software // Official website of Gracebyte Software URL: http://www.gracebyte.com (Дата обращения: 11.12.2016)

  21. Microsoft Corporation // Official web site of Microsoft Corporation URL: http://www.microsoft.com (Дата обращения: 10.12.2016)