
2к4с Объектно-ориентированное программирование - КР / ООП / 1605083330_МУ к ПР ООП
.pdf7.Приведите пример SQL-запроса на чтение данных в БД.
8.Приведите пример SQL-запроса на добавление данных в БД.
9.Приведите пример SQL-запроса на изменение данных в БД.
Время, отведенное на выполнение работы
Работа должна быть выполнена за четыре занятия – 8 часов.
Отчет сдается на последнем занятии.
21
Практическая работа №5. Разработка клиент-серверного приложения на языке Java.
Введение
Цель работы: знакомство с клиент-серверной архитектурой прило-
жений и разработка собственного приложения для обмена сообщениями.
Основные понятия
В библиотеке классов Java есть очень удобное средство, с помощью которых можно организовать взаимодействие между приложениями Java и
апплетами, работающими как на одном и том же, так и на разных узлах се-
ти TCP/IP. Это средство, родившееся в мире операционной системы UNIX,
- так называемые сокеты (sockets).
Вы можете представить себе сокеты в виде двух розеток, в которые включен кабель, предназначенный для передачи данных через сеть. Пере-
ходя к компьютерной терминологии, скажем, что сокеты - это программ-
ный интерфейс, предназначенный для передачи данных между приложе-
ниями.
Прежде чем приложение сможет выполнять передачу или прием данных, оно должно создать сокет, указав при этом адрес узла IP, номер порта, через который будут передаваться данные, и тип сокета.
С адресом узла IP вы уже сталкивались. Номер порта служит для идентификации приложения. Заметим, что существуют так называемые
"хорошо известные" (well known) номера портов, зарезервированные для различных приложений. Например, порт с номером 80 зарезервирован для использования серверами Web при обмене данными через протокол HTTP.
Что же касается типов сокетов, то их два - потоковые и датаграмм-
ные.
22
С помощью потоковых сокетов вы можете создавать каналы переда-
чи данных между двумя приложениями Java в виде потоков, которые мы уже рассматривали во второй главе. Потоки могут быть входными или вы-
ходными, обычными или форматированными, с использованием или без использования буферизации. Скоро вы убедитесь, что организовать обмен данными между приложениями Java с использованием потоковых сокетов не труднее, чем работать через потоки с обычными файлами.
Заметим, что потоковые сокеты позволяют передавать данные только между двумя приложениями, так как они предполагают создание канала между этими приложениями. Однако иногда нужно обеспечить взаимодей-
ствие нескольких клиентских приложений с одним серверным или не-
скольких клиентских приложений с несколькими серверными приложени-
ями. В этом случае вы можете либо создавать в серверном приложении от-
дельные задачи и отдельные каналы для каждого клиентского приложения,
либо воспользоваться датаграммными сокетами. Последние позволяют пе-
редавать данные сразу всем узлам сети, хотя такая возможность редко ис-
пользуется и часто блокируется администраторами сети.
Для передачи данных через датаграммные сокеты вам не нужно со-
здавать канал - данные посылаются непосредственно тому приложению,
для которого они предназначены с использованием адреса этого приложе-
ния в виде сокета и номера порта. При этом одно клиентское приложение может обмениваться данными с несколькими серверными приложениями или наоборот, одно серверное приложение - с несколькими клиентскими.
К сожалению, датаграммные сокеты не гарантируют доставку пере-
даваемых пакетов данных. Даже если пакеты данных, передаваемые через такие сокеты, дошли до адресата, не гарантируется, что они будут получе-
ны в той же самой последовательности, в которой были переданы. Потоко-
вые сокеты, напротив, гарантируют доставку пакетов данных, причем в правильной последовательности.
23
Причина отсутствия гарантии доставки данных при использовании датаграммных сокетов заключается в использовании такими сокетами про-
токола UDP, который, в свою очередь, основан на протоколе с негаранти-
рованной доставкой IP. Потоковые сокеты работают через протокол гаран-
тированной доставки TCP.
Технология выполнения работы
1.Изучить клиент-серверную архитектуру приложений.
2.Рассмотреть работу с программным интерфейсом для обеспече-
ния обмена данными между процессами (socket).
3.Организовать чтение данных из потока и буферизацию символов.
4.Создать приложение, реализующее передачу сообщений от кли-
ента к серверу.
Вопросы для самоконтроля
1.Что такое порт?
2.Что такое сокет?
3.Опишите работу протокола TCP/IP.
4.Дайте понятие клиент-серверной архитектуре приложений.
5.Как организовывается прослушка порта на сервере в Java?
6.Для чего передаваемые по сети сообщения переводятся в байты?
7.Как организовывается чтение данных из потока и буферизация символов?
8.Какие параметры необходимо установить для экземпляра класса
Socket?
9.Чем отличается Socket от ServerSocket?
10.Опишите принцип работы эхо-сервера.
Время, отведенное на выполнение работы
24
Работа должна быть выполнена за три занятия – 6 часов.
Отчет сдается на последнем занятии.
25
Практическая работа №6.
Создание многопоточных приложений на языке Java.
Введение
Цель работы: изучение понятий многопоточности и синхронизации,
разработка многопоточного приложения средствами Java.
Основные понятия
Все современные операционные системы способны работать в мно-
гопоточном режиме, повышая общую производительность системы за счет эффективного распараллеливания выполняемых потоков. Пока один поток находится в состоянии ожидания, например, завершения операции обмена данными с медленным периферийным устройством, другой может про-
должать выполнять свою работу.
Пользователи уже давно привыкли запускать параллельно несколько приложений для того чтобы делать несколько дел сразу. Пока одно из них занимается, например, печатью документа на принтере или приемом элек-
тронной почты из сети Internet, другое может пересчитывать электронную таблицу или выполнять другую полезную работу. При этом сами по себе запускаемые приложения могут работать в рамках одного потока - опера-
ционная система сама заботится о распределении времени между всеми запущенными приложениями.
Создавая приложения для операционной системы Windows на языках программирования С или С++, вы могли решать многие задачи, такие как анимация или работа в сети, и без использования многопоточности.
Например, для анимации можно было обрабатывать сообщения соответ-
ствующим образом настроенного таймера.
Приложениям Java такая методика недоступна, так как в этой среде не предусмотрено способов периодического вызова каких-либо процедур.
26
Поэтому для решения многих задач вам просто не обойтись без многопо-
точности.
Обычно в любой многопоточной операционной системе выделяют такие объекты, как процессы и потоки. Между ними существует большая разница, которую следует четко себе представлять.
Процесс (process) - это объект, который создается операционной си-
стемой, когда пользователь запускает приложение. Процессу выделяется отдельное адресное пространство, причем это пространство физически не-
доступно для других процессов. Процесс может работать с файлами или с каналами связи локальной или глобальной сети. Когда вы запускаете тек-
стовый процессор или программу калькулятора, вы создаете новый про-
цесс.
Для каждого процесса операционная система создает один главный поток (thread), который является потоком выполняющихся по очереди ко-
манд центрального процессора. При необходимости главный поток может создавать другие потоки, пользуясь для этого программным интерфейсом операционной системы.
Все потоки, созданные процессом, выполняются в адресном про-
странстве этого процесса и имеют доступ к ресурсам процесса. Однако по-
ток одного процесса не имеет никакого доступа к ресурсам потока другого процесса, так как они работают в разных адресных пространствах. При необходимости организации взаимодействия между процессами или пото-
ками, принадлежащими разным процессам, следует пользоваться систем-
ными средствами, специально предназначенными для этого.
Если процесс создал несколько потоков, то все они выполняются па-
раллельно, причем время центрального процессора (или нескольких цен-
тральных процессоров в мультипроцессорных системах) распределяется между этими потоками.
27
Распределением времени центрального процессора занимается спе-
циальный модуль операционной системы - планировщик. Планировщик по очереди передает управление отдельным потокам, так что даже в однопро-
цессорной системе создается полная иллюзия параллельной работы запу-
щенных потоков.
Распределение времени выполняется по прерываниям системного таймера. Поэтому каждому потоку дается определенный интервал време-
ни, в течение которого он находится в активном состоянии.
Заметим, что распределение времени выполняется для потоков, а не для процессов. Потоки, созданные разными процессами, конкурируют между собой за получение процессорного времени.
Приложения Java могут указывать три значения для приоритетов по-
токов. Это NORM_PRIORITY, MAX_PRIORITY и MIN_PRIORITY.
По умолчанию вновь созданный поток имеет нормальный приоритет
NORM_PRIORITY. Если остальные потоки в системе имеют тот же самый приоритет, то все потоки пользуются процессорным времени на равных правах.
При необходимости вы можете повысить или понизить приоритет отдельных потоков, определив для них значение приоритета, соответ-
ственно, MAX_PRIORITY или MIN_PRIORITY. Потоки с повышенным приоритетом выполняются в первую очередь, а с пониженным - только при отсутствии готовых к выполнению потоков, имеющих нормальный или повышенный приоритет.
Технология выполнения работы
1. Рассмотреть методы, необходимые для создания потоков, управ-
ления их состоянием и синхронизации.
2.Рассмотреть настройку приоритета выполнения потоков.
3.Рассмотреть запуск daemon-потоков в фоновом режиме.
28
4. Рассмотреть задержку потока на заданное время, запуск и оста-
новку.
5. Создать приложение, реализующее независимое движение не-
скольких графических объектов в потоковом режиме.
Вопросы для самоконтроля
1.Что такое принцип многопоточности?
2.Что такое поток?
3.Что такое класс Thread?
4.Что такое интерфейс Runnablе?
5.Что такое метод или блок кода с ключевым словом synchronized?
6.Что такое обоюдная блокировка?
7.Как можно приостанавливать выполнение потока?
8.Какие существуют основные методы для работы с потоками?
9.Что такое daemon-поток?
10.Какие приоритеты выполнения задаются для потоков?
Время, отведенное на выполнение работы
Работа должна быть выполнена за три занятия – 6 часов.
Отчет сдается на последнем занятии.
Содержание и оформление отчета
Предъявить преподавателю: отчет по практической работе на листах формата А4, который должен содержать: титульный лист с названием ра-
боты, цель работы, задание, результаты выполнения работы (снимки и ис-
ходный код приложения), вывод по работе. Отчет по практической работе может быть представлен в электронной форме.
Требования безопасности труда
29
При выполнении практической работы необходимо соблюдать об-
щие правила техники безопасности:
использовать ПК только в соответствии с их назначением;
не размещать на корпусе ПК посторонние предметы (тетради, кни-
ги, карандаши и т.п.);
оберегать ПК от толчков, ударов, сотрясений;
немедленно поставить в известность оператора ИВЦ об обнаруже-
нии задымления, возгорания, пожара;
немедленно сообщить оператору ИВЦ обо всех неисправностях в работе ПК.
Литература
1. Васильев А.Н. Java. Объектно-ориентированное программирова-
ние. Учебное пособие. Стандарт третьего поколения [Электронный ресурс] / А.Н. Васильев – СПб.: Питер, 2011. – 401 с. (Электронно-библиотечная система ibooks.ru).
2. Одинцов И.О. Профессиональное программирование. Системный подход, 2 изд. [Электронный ресурс] / И.О. Одинцов – СПб.: БХВ-
Петербург, 2014. – 624 с. (Электронно-библиотечная система ibooks.ru).
3. Хеффельфингер Д. Разработка приложений Java EE 6 в NetBeans 7 [Электронный ресурс] / Д. Хеффельфингер – М.: ДМК Пресс, 2013. – 330
с. (Электронно-библиотечная система Znanium.com).
4. Основы объектно-ориентированного программирования. Учеб-
ный курс НОУ ИНТУИТ [Электронный ресурс] – http://www.intuit.ru/studies/courses/71/71/info.
5. Программирование на Java. Учебный курс НОУ ИНТУИТ [Элек-
тронный ресурс] – http://www.intuit.ru/studies/courses/16/16/info.
30