Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Программа спецкурсов кафедры ФТИ.doc
Скачиваний:
8
Добавлен:
06.06.2015
Размер:
593.92 Кб
Скачать

Программа практических занятий(32 ч.)

Ассистент Антон Валентинович Адаманский

  1. Введение.

  • Console IO

  • java.lang.String (split, concat, endsWith)

  • Primitive types & wrapper types (parseInt)

  • Массивы

  1. Наследование.

  • Наследование и объектная модель Java

  1. Исключения.

  • Исключения

  • IO

  1. Графика.

  • Вложенные (inner) классы

  • AWT

  • Swing

  • Applet

  1. Коллекции.

  • Generic

  • List, Map, Set

  • Методы класса java.lang.Object (equals, hashcode)

  • Коллекции, Итератор, Collections

  1. Многопоточность.

  • Thread

  • wait/notify

  • synchronized

  • Timer

  1. Reflection.

  • Классы Class и Method

  • ClassLoader

  • Ресурсы, java.uril.Properties

  1. Расширения языка в JSDK 1.5, JavaDoc.

  • Enum

  • Annotations

  • import static

  • Inboxing/outboxing

  • Использование JavaDoc

  1. Архитектура программ с UI.

  • MVC

  • Beans & controllers

  1. Сетевые технологии, XML.

  • Пакет java.net

  • XML JAXP

  1. Утилитные классы.

  • java.lang.System, вызов внешней программы

  • Random, Math

  • StringTokenizer, StringBuffer

  • MessageFormat, DateFormat, NumberFormat

  • Date, Calendar, TimeZone

  • java.util.concurrent.locks.Lock

  • java.util.concurrent.ThreadPoolExecutor

  1. Java Security.

  • Проверка permissions через SecurityManager & AccessController

  • Policy file

  1. RMI.

Дополнительные темы:

  • Basic and Troubleshooting Tools

  • Monitoring and Management Tools, JMX

  • JNDI

  • Logging (standard & Log4j)

  • JDBC

  • Reference Objects

  • NIO

  • Cryptography

Курсовые работы

Задание № 1: Игра «Сапер»

Постановка задачи

Написать аналог игры «Сапер» (“Minesweeper”) из состава стандартных программ для Windows OS.

Архитектура программы должна быть основана на паттерне MVC (Mode-View-Controller) или EBC (Entity-Boundary-Controller).

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

Структура программы

/ru/nsu/ccfit/ФАМИЛИЯ/minesweeper – основные классы программы.

/ru/nsu/ccfit/ФАМИЛИЯ/minesweeper/text – классы текстового интерфейса пользователя.

/ru/nsu/ccfit/ФАМИЛИЯ/minesweeper/gui – классы графического интерфейса.

/ru/nsu/ccfit/ФАМИЛИЯ/minesweeper/resources – картинки и другие ресурсы.

Требования к программе

  1. Размер поля и количество мин можно изменить. По умолчанию поле размером 9x9 и количество мин 10.

  2. Игра должна поддерживать таблицу рекордов.

  3. Пользователю должны быть доступны команды: Exit, About, New, High Scores.

  4. Отчет времени должен быть реализован отдельным потоком. Можно использовать стандартный таймер java.util.Timer.

Реализация текстового UI

  1. Команды пользователя вводятся с консоли, ячейки нумеруются от ноля.

  2. После каждого хода игрока все игровое поле распечатывается на экран целиком.

Реализация графического UI

  1. Использовать библиотеку SWING (пакеты javax.swing.*) из комплекта разработчика JSDK.

  2. Мины и флажки отображать с помощью картинок.

  3. Для определения типа нажатой клавиши мыши использовать методы класса javax.swing.SwingUtilities.

  4. При формировании окна игры использовать класс LayoutManager.Для расположения элементов на игровой панели рекомендуется использовать класс GridBagLayout. Для расположения ячеек поля рекомендуется использовать классGridLayout.

  5. Для отображения диалоговых окон рекомендуется использовать класс JOptionPane.

Пример

Пример приложения с паттерном EBC:

http://ccfit.nsu.ru/~den/NotebookExample.zip

Это приложение разбито на 4 класса:

  1. NotebookRecord.java —простой класс для транспортировки данных. Обратите внимание, что в нем нет ничего лишнего. Только set/get методы. Но этот класс очень важен, т.к. определяет структуру данных, которая используется для представления записи в записной книжке.

  2. NotebookManager.java —класс, инкапсулирующий логику работы с записной книжкой. Обратите внимание, что он не зависит от пользовательского интерфейса. Это позволяет его использовать отдельно, например в каком-нибудь приложении «Календарь» для отображения заметок, привязанных к определенному дню.

  3. NotebookGUI.java —класс, управляющим GUI для работы с записной книжкой.

  4. NotebookConsoleUI.java —пример класса, который использует не графический пользовательский интерфейс. Т.к. у нас логика (NotebookManager) выделена в отдельный класс, то очень легко привязать сколько угодно интерфейсов для работы с записной книжкой.

Задание № 2. Чат

Напишите программу для общения через Internet. Программа должна состоять из двух частей: сервер и клиент. Сервер стартует в качестве отдельного приложения на определенном порту (задано в конфигурации). Клиент в виде приложения на Swing подсоединяется к серверу по имени сервера и номеру порта.

Минимальные возможности чата:

  • Каждый участник чата имеет собственный ник, который указывается при присоединению к серверу.

  • Можно посмотреть список участников чата.

  • Можно послать сообщение в чат (всем участникам).

  • Клиент показывает все сообщения, которые отправили в чат с момента подключения; список сообщений обновляется в онлайне.

  • Клиент отображает такие события как: подключение нового человека в чат и уход человека из чата. Сервер должен корректно понимать ситуацию отключения клиента от чата (по таймауту).

  • Сервер должен логгировать все события, которые происходят на его стороне (включается/отключается в конфигурационном файле).

  • Чат работает через TCP/IP протокол.

Необходимо создать 2 версии клиента/сервера. Первый вариант использует XML сообщения. Второй вариант использует сериализацию / десериализацию Java-объектов для посылки/приема сообщений.

Клиент и сервер должны поддерживать стандартный протокол для XML варианта. Это необходимо для возможности общение между клиентами, созданными разными учениками. Протокол описан ниже. Расширения протокола приветствуются, например можно добавить, чтобы пользователь мог выбрать цвет сообщений.

Вначале XML сообщения идут 4 байта (Java int) с его длиной. То есть сначала читаются первые 4 байта и узнается длина оставшегося сообщения (в байтах). Затем считывается само сообщение и далее обрабатывается как XML документ.

Рекомендуется использовать следующие техники:

  • Сервер слушает порт с помощью класса java.net.ServerSocket.

  • Клиент подсоединяется к серверу с помощью класса java.net.Socket.

  • XML сообщение читать с помощью DOM parser:

DocumentBuilderFactory.newInstance().newDocumentBuilder().parse().

  • Сериализация/десериализация объекта выполняется через классы ObjectInputStream и ObjectOutputStream.

Минимальный протокол взаимодействия для XML сообщений (расширения приветствуются):

  1. Регистрация.

    1. Client message

<command name=”login”>

<name>USER_NAME</name>

<type>CHAT_CLIENT_NAME</type>

</command>

    1. Server error answer

<error>

<message>REASON</message>

</error>

    1. Server success answer

<success>

<session>UNIQUE_SESSION_ID</session>

</success>

  1. Запрос списка пользователей чата.

    1. Client message

<command name=”list”>

<session>UNIQUE_SESSION_ID</session>

</command>

    1. Server error answer

<error>

<message>REASON</message>

</error>

    1. Server success answer

<success>

<listusers>

<user>

<name>USER_1</name>

<type>CHAT_CLIENT_1</type>

</user>

<user>

<name>USER_N</name>

<type>CHAT_CLIENT_N</type>

</user>

</listusers>

</success>

  1. Сообщение от клиента серверу.

    1. Client message

<command name=”message”>

<message>MESSAGE</message>

<session>UNIQUE_SESSION_ID</session>

</command>

    1. Server error answer

<error>

<message>REASON</message>

</error>

    1. Server success answer

<success>

</success>

  1. Сообщение от сервера клиенту.

    1. Server message

<event name="message">

<message>MESSAGE</message>

<name>CHAT_NAME_FROM</name>

</event>

  1. Отключение.

    1. Client message

<command name=”logout”>

<session>UNIQUE_SESSION_ID</session>

</command>

    1. Server error answer

<error>

<message>REASON</message>

</error>

    1. Server success answer

<success>

</success>

  1. Новый клиент.

    1. Server message

<event name=”userlogin”>

<name>USER_NAME</name>

</event >

  1. Клиент отключился.

    1. Server message

<event name=”userlogout”>

<name>USER_NAME</name>

</event >