- •Оглавление
- •Программа спецкурсов кафедры фти. Бакалавриат
- •Программа спецкурсов кафедры фти. Магистратура
- •Архитектура и эволюция эвм(2-й курс, 3-й сем., 36 ч., экзамен) Программа курса лекций (36 ч.)
- •Литература
- •Обьектно‑ориентированное программирование(2-й курс, 3-й сем., 72 ч., диф. Зачёт) Программа курса лекций(36 ч.)
- •Программа практических занятий(36 ч.)
- •Курсовые работы
- •Литература
- •Обьектно‑ориентированное программирование(2-й курс, 4-й сем., 64 ч., диф. Зачёт) Программа курса лекций(32 ч.)
- •Программа практических занятий(32 ч.)
- •Курсовые работы
- •Литература
- •Операционные системы(2-й курс, 4-й сем., 32 ч., экзамен) Программа курса лекций(32 ч.)
- •Литература
- •Операционные системыUnix (3-й курс, 5-й сем., 108 ч., диф. Зачёт) Программа курса лекций(36 ч.)
- •Раздел 1
- •Раздел 2
- •Программа практических занятий(72 ч.)
- •Задания практикума Раздел 1
- •Раздел 2
- •Литература
- •Эвм в планировании и обработке физического эксперимента(3-й курс, 5-й сем., 72 ч., диф. Зачёт) Программа курса лекций(36 ч.)
- •Программа практических занятий(36 ч.)
- •Литература
- •Введение в системы автоматического проектирования радиоэлектронных устройств(3-й курс, 5-й сем., 72 ч., диф. Зачет) Программа практических занятий(72 ч.)
- •Аналоговая электроника(3-й курс, 5-й сем., 36 ч., экзамен) Программа курса лекций (36 ч.)
- •Литература
- •Цифровые интегральные схемы(3-й курс, 5-й сем., 36 ч., экзамен) Программа курса лекций (36 ч.)
- •Литература
- •Объектно–ориентированный анализ и дизайн(3-й курс, 6-й сем., 64 ч., диф. Зачет) Программа курса лекций (32 ч.)
- •Примерная тематика курсовых проектов
- •Литература
- •Введение в субд(3-й курс, 6-й сем., 96 ч., зачет, экзамен) Программа курса лекций (32 ч.)
- •Программа практических занятий (64 ч.)
- •Примеры тем курсовых работ
- •Литература
- •Архитектура и проектирование микроконтроллеров(3-й курс, 6-й сем., 64 ч., диф. Зачет) Программа практических занятий(64 ч.)
- •Задания
- •Электроника детекторных систем(3-й курс, 6-й сем., 32 ч., экзамен) Программа курса лекций (32 ч.)
- •Литература
- •Микропроцессоры и микропроцессорные системы(3-й курс, 6-й сем., 32 ч., экзамен) Программа курса лекций (32 ч.)
- •Литература
- •Информационные сети и системы(4-й курс, 7-й сем., 108 ч., диф. Зачет) Программа курса лекций(36 ч.)
- •Программа практических занятий (72 ч.)
- •Литература
- •Машинная графика(4-й курс, 7-й сем., 72 ч., диф. Зачет) Программа курса лекций(36 ч.)
- •Программа практических занятий (36 ч.)
- •Задания
- •Литература
- •Динамическая 3d-графика (4-й курс, 8-й сем., 64 ч., диф. Зачет) Программа курса лекций(32 ч.)
- •Программа практических занятий(32 ч.)
- •Задания
- •Литература
- •Методы анализа экспериментальных данных(4-й курс, 8-й семестр, 64 ч., экзамен) Программа курса лекций(32 ч.)
- •Программа практических занятий(32 ч.)
- •Литература
- •Программируемые логические устройства(1-й курс магистратуры, 9-й сем., 36 ч., экзамен) Программа практических занятий (36 ч.)
- •Практические и контрольные задания
- •Варианты курсового проекта
- •Литература
- •Новые информационные технологии(1-й курс магистратуры, 10-й сем., 64 ч., экзамен) Программа курса лекций(64 ч.)
- •Литература
- •Проблемы безопасности в информационных технологиях(1-й курс магистратуры, 10-й сем., 64 ч., экзамен) Программа курса лекций (64 ч.)
- •Литература
- •Менеджмент программных продуктов(1-й курс магистратуры, 10-й сем., 32 ч., экзамен) Программа курса лекций(32 ч.)
- •Практические задания
- •Разработка распределенных систем(2-й курс магистратуры, 11-й семестр, 72 ч., диф. Зачет) Программа курса лекций(36 ч.)
- •Программа практических занятий(36 ч.)
- •630090, Новосибирск, ул. Пирогова, 2
Программа практических занятий(32 ч.)
Ассистент Антон Валентинович Адаманский
Введение.
Console IO
java.lang.String (split, concat, endsWith)
Primitive types & wrapper types (parseInt)
Массивы
Наследование.
Наследование и объектная модель Java
Исключения.
Исключения
IO
Графика.
Вложенные (inner) классы
AWT
Swing
Applet
Коллекции.
Generic
List, Map, Set
Методы класса java.lang.Object (equals, hashcode)
Коллекции, Итератор, Collections
Многопоточность.
Thread
wait/notify
synchronized
Timer
Reflection.
Классы Class и Method
ClassLoader
Ресурсы, java.uril.Properties
Расширения языка в JSDK 1.5, JavaDoc.
Enum
Annotations
import static
Inboxing/outboxing
Использование JavaDoc
Архитектура программ с UI.
MVC
Beans & controllers
Сетевые технологии, XML.
Пакет java.net
XML JAXP
Утилитные классы.
java.lang.System, вызов внешней программы
Random, Math
StringTokenizer, StringBuffer
MessageFormat, DateFormat, NumberFormat
Date, Calendar, TimeZone
java.util.concurrent.locks.Lock
java.util.concurrent.ThreadPoolExecutor
Java Security.
Проверка permissions через SecurityManager & AccessController
Policy file
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 – картинки и другие ресурсы.
Требования к программе
Размер поля и количество мин можно изменить. По умолчанию поле размером 9x9 и количество мин 10.
Игра должна поддерживать таблицу рекордов.
Пользователю должны быть доступны команды: Exit, About, New, High Scores.
Отчет времени должен быть реализован отдельным потоком. Можно использовать стандартный таймер java.util.Timer.
Реализация текстового UI
Команды пользователя вводятся с консоли, ячейки нумеруются от ноля.
После каждого хода игрока все игровое поле распечатывается на экран целиком.
Реализация графического UI
Использовать библиотеку SWING (пакеты javax.swing.*) из комплекта разработчика JSDK.
Мины и флажки отображать с помощью картинок.
Для определения типа нажатой клавиши мыши использовать методы класса javax.swing.SwingUtilities.
При формировании окна игры использовать класс LayoutManager.Для расположения элементов на игровой панели рекомендуется использовать класс GridBagLayout. Для расположения ячеек поля рекомендуется использовать классGridLayout.
Для отображения диалоговых окон рекомендуется использовать класс JOptionPane.
Пример
Пример приложения с паттерном EBC:
http://ccfit.nsu.ru/~den/NotebookExample.zip
Это приложение разбито на 4 класса:
NotebookRecord.java —простой класс для транспортировки данных. Обратите внимание, что в нем нет ничего лишнего. Только set/get методы. Но этот класс очень важен, т.к. определяет структуру данных, которая используется для представления записи в записной книжке.
NotebookManager.java —класс, инкапсулирующий логику работы с записной книжкой. Обратите внимание, что он не зависит от пользовательского интерфейса. Это позволяет его использовать отдельно, например в каком-нибудь приложении «Календарь» для отображения заметок, привязанных к определенному дню.
NotebookGUI.java —класс, управляющим GUI для работы с записной книжкой.
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 сообщений (расширения приветствуются):
Регистрация.
Client message
<command name=”login”>
<name>USER_NAME</name>
<type>CHAT_CLIENT_NAME</type>
</command>
Server error answer
<error>
<message>REASON</message>
</error>
Server success answer
<success>
<session>UNIQUE_SESSION_ID</session>
</success>
Запрос списка пользователей чата.
Client message
<command name=”list”>
<session>UNIQUE_SESSION_ID</session>
</command>
Server error answer
<error>
<message>REASON</message>
</error>
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>
Сообщение от клиента серверу.
Client message
<command name=”message”>
<message>MESSAGE</message>
<session>UNIQUE_SESSION_ID</session>
</command>
Server error answer
<error>
<message>REASON</message>
</error>
Server success answer
<success>
</success>
Сообщение от сервера клиенту.
Server message
<event name="message">
<message>MESSAGE</message>
<name>CHAT_NAME_FROM</name>
</event>
Отключение.
Client message
<command name=”logout”>
<session>UNIQUE_SESSION_ID</session>
</command>
Server error answer
<error>
<message>REASON</message>
</error>
Server success answer
<success>
</success>
Новый клиент.
Server message
<event name=”userlogin”>
<name>USER_NAME</name>
</event >
Клиент отключился.
Server message
<event name=”userlogout”>
<name>USER_NAME</name>
</event >