Программирование
Программирование
- Рубежка // Test
- Конспект лекций (1 семестр)
- Презентации лекций 2 семестра (pdf): 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8
- Видео лекций 2 семестра (2022): 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8
- Задание на первое лабораторное занятие
- Методические указания (2023 -- JDK17)
- Предыдущие методички (2019, 2015, 2010 (Swing))
- Задания к лабораторным работам
- Вопросы к экзамену (2 семестр)
- Гугложурналы:
Дополнительные материалы 2 семестр (2020) - слайды с заметками и скринкасты
- Многопоточность (видео 1, видео 2, видео 3)
- Работа с базами данных (видео 1, видео 2, видео 3)
- Провайдеры служб (видео)
- Безопасное хранение паролей (видео)
- Шаблоны проектирования (видео 1, видео 2, видео 3, видео 4)
- Графический интерфейс (видео 1, видео 2, видео 3, видео 4, видео 5, видео 6)
- Локализация (видео)
- Рефлексия (видео)
- Дата и время (видео)
1-й семестр (осень)
Лабораторная работа #1
Написать программу на языке Java, выполняющую соответствующие варианту действия. Программа должна соответствовать следующим требованиям:
- Она должна быть упакована в исполняемый jar-архив.
- Выражение должно вычисляться в соответствии с правилами вычисления математических выражений (должен соблюдаться порядок выполнения действий и т.д.).
- Программа должна использовать математические функции из стандартной библиотеки Java.
- Результат вычисления выражения должен быть выведен в стандартный поток вывода в заданном формате.
Выполнение программы необходимо продемонстрировать на сервере helios
.
- Текст задания.
- Исходный код программы.
- Результат работы программы.
- Выводы по работе.
Вопросы к защите лабораторной работы:
- Язык Java. Особенности языка.
- Средства разработки. JDK и JRE.
- Примитивные типы данных в Java.
- Работа с переменными. Декларация. Инициализация. Присваивание.
- Инструкции ветвления и циклов.
- Операторы и выражения в Java. Особенности вычисления, приоритеты операций.
- Математические функции в составе стандартной библиотеки Java. Класс
java.lang.Math
. - Форматированный вывод числовых данных.
Лабораторная работа #2
На основе базового класса Pokemon
написать свои классы для заданных видов покемонов. Каждый вид покемона должен иметь один или два типа и стандартные базовые характеристики:
- очки здоровья (HP)
- атака (attack)
- защита (defense)
- специальная атака (special attack)
- специальная защита (special defense)
- скорость (speed)
Классы покемонов должны наследоваться в соответствии с цепочкой эволюции покемонов. На основе базовых классов PhysicalMove
, SpecialMove
и StatusMove
реализовать свои классы для заданных видов атак.
Атака должна иметь стандартные тип, силу (power) и точность (accuracy). Должны быть реализованы стандартные эффекты атаки. Назначить каждому виду покемонов атаки в соответствии с вариантом. Уровень покемона выбирается минимально необходимым для всех реализованных атак.
Используя класс симуляции боя Battle
, создать 2 команды покемонов (каждый покемон должен иметь имя) и запустить бой.
Базовые классы и симулятор сражения находятся в jar-архиве (обновлен 9.10.2018, исправлен баг с добавлением атак и кодировкой). Документация в формате javadoc - здесь.
Информацию о покемонах, цепочках эволюции и атаках можно найти на сайтах http://poke-universe.ru, http://pokemondb.net, http://veekun.com/dex/pokemon
Комментарии
Цель работы: на простом примере разобраться с основными концепциями ООП и научиться использовать их в программах.
Что надо сделать (краткое описание)
- Ознакомиться с документацией, обращая особое внимание на классы
Pokemon
иMove
. При дальнейшем выполнении лабораторной работы читать документацию еще несколько раз. - Скачать файл Pokemon.jar. Его необходимо будет использовать как для компиляции, так и для запуска программы. Распаковывать его не надо! Нужно научиться подключать внешние jar-файлы к своей программе.
- Написать минимально работающую программу и посмотреть как она работает.
Battle b = new Battle(); Pokemon p1 = new Pokemon("Чужой", 1); Pokemon p2 = new Pokemon("Хищник", 1); b.addAlly(p1); b.addFoe(p2); b.go();
- Создать один из классов покемонов для своего варианта. Класс должен наследоваться от базового класса
Pokemon
. В конструкторе нужно будет задать типы покемона и его базовые характеристики. После этого попробуйте добавить покемона в сражение. - Создать один из классов атак для своего варианта (лучше всего начать с физической или специальной атаки). Класс должен наследоваться от класса
PhysicalMove
илиSpecialMove
. В конструкторе нужно будет задать тип атаки, ее силу и точность. После этого добавить атаку покемону и проверить ее действие в сражении. Не забудьте переопределить методdescribe
, чтобы выводилось нужное сообщение. - Если действие атаки отличается от стандартного, например, покемон не промахивается, либо атакующий покемон также получает повреждение, то в классе атаки нужно дополнительно переопределить соответствующие методы (см. документацию). При реализации атак, которые меняют статус покемона (наследники
StatusMove
), скорее всего придется разобраться с классомEffect
. Он позволяет на один или несколько ходов изменить состояние покемона или модификатор его базовых характеристик. - Доделать все необходимые атаки и всех покемонов, распределить покемонов по командам, запустить сражение.
- Текст задания.
- Диаграмма классов реализованной объектной модели.
- Исходный код программы.
- Результат работы программы.
- Выводы по работе.
Вопросы к защите лабораторной работы:
- Объектно-ориентированное программирование. Основные понятия: объекты, наследование, полиморфизм, инкапсуляция.
- Понятие класса. Классы и объекты в Java.
- Члены класса. Модификаторы доступа.
- Создание и инициализация объектов. Вызов методов.
- Области видимости переменных.
- Модификаторы
final
иstatic
. - Пакеты, инструкция
import
.
Программа должна удовлетворять следующим требованиям:
- Доработанная модель должна соответствовать принципам SOLID.
- Программа должна содержать как минимум два интерфейса и один абстрактный класс (номенклатура должна быть согласована с преподавателем).
- В разработанных классах должны быть переопределены методы
equals()
,toString()
иhashCode()
. - Программа должна содержать как минимум один перечисляемый тип (enum).
Порядок выполнения работы:
- Доработать объектную модель приложения.
- Перерисовать диаграмму классов в соответствии с внесёнными в модель изменениями.
- Согласовать с преподавателем изменения, внесённые в модель.
- Модифицировать программу в соответствии с внесёнными в модель изменениями.
Отчёт по работе должен содержать:
- Текст задания.
- Диаграмма классов объектной модели.
- Исходный код программы.
- Результат работы программы.
- Выводы по работе.
Вопросы к защите лабораторной работы:
- Принципы объектно-ориентированного программирования SOLID и STUPID.
- Класс
Object
. Реализация его методов по умолчанию. - Особенности реализации наследования в Java. Простое и множественное наследование.
- Понятие абстрактного класса. Модификатор
abstract
. - Понятие интерфейса. Реализация интерфейсов в Java, методы по умолчанию. Отличия от абстрактных классов.
- Перечисляемый тип данных (enum) в Java. Особенности реализации и использования.
- Методы и поля с модификаторами
static
иfinal
. - Перегрузка и переопределение методов. Коварианты возвращаемых типов данных.
- Элементы функционального программирования в синтаксисе Java. Функциональные интерфейсы, лямбда-выражения. Ссылки на методы.
Лабораторная работа #4
Доработать программу из лабораторной работы #3, обновив реализацию объектной модели в соответствии с новой версией описания предметной области.
Программа должна удовлетворять следующим требованиям:
- В программе должны быть реализованы 2 собственных класса исключений (checked и unchecked), а также обработка исключений этих классов.
- В программу необходимо добавить использование локальных, анонимных и вложенных классов (static и non-static).
Порядок выполнения работы:
- Доработать объектную модель приложения.
- Перерисовать диаграмму классов в соответствии с внесёнными в модель изменениями.
- Согласовать с преподавателем изменения, внесённые в модель.
- Модифицировать программу в соответствии с внесёнными в модель изменениями.
Отчёт по работе должен содержать:
- Текст задания.
- Диаграмма классов объектной модели.
- Исходный код программы.
- Результат работы программы.
- Выводы по работе.
Вопросы к защите лабораторной работы:
- Обработка исключительных ситуаций, три типа исключений.
- Вложенные, локальные и анонимные классы.
- Механизм рефлексии (reflection) в Java. Класс
Class
.
2-й семестр (весна)
Отчёт по работе должен содержать:
- Текст задания.
- Диаграмма классов разработанной программы.
- Исходный код программы.
- Выводы по работе.
Вопросы к защите лабораторной работы:
- Коллекции. Сортировка элементов коллекции. Интерфейсы
java.util.Comparable
иjava.util.Comparator
. - Категории коллекций - списки, множества. Интерфейс
java.util.Map
и его реализации. - Параметризованные типы. Создание параметризуемых классов. Wildcard-параметры.
- Классы-оболочки. Назначение, область применения, преимущества и недостатки. Автоупаковка и автораспаковка.
- Потоки ввода-вывода в Java. Байтовые и символьные потоки. "Цепочки" потоков (Stream Chains).
- Работа с файлами в Java. Класс
java.io.File
. - Пакет
java.nio
- назначение, основные классы и интерфейсы. - Утилита
javadoc
. Особенности автоматического документирования кода в Java.
Отчёт по работе должен содержать:
- Текст задания.
- Диаграмма классов разработанной программы (как клиентского, так и серверного приложения).
- Исходный код программы.
- Выводы по работе.
Вопросы к защите лабораторной работы:
- Сетевое взаимодействие - клиент-серверная архитектура, основные протоколы, их сходства и отличия.
- Протокол TCP. Классы
Socket
иServerSocket
. - Протокол UDP. Классы
DatagramSocket
иDatagramPacket
. - Отличия блокирующего и неблокирующего ввода-вывода, их преимущества и недостатки. Работа с сетевыми каналами.
- Классы
SocketChannel
иDatagramChannel
. - Передача данных по сети. Сериализация объектов.
- Интерфейс
Serializable
. Объектный граф, сериализация и десериализация полей и методов. - Java Stream API. Создание конвейеров. Промежуточные и терминальные операции.
- Шаблоны проектирования: Decorator, Iterator, Factory method, Command, Flyweight, Interpreter, Singleton, Strategy, Adapter, Facade, Proxy.
Порядок выполнения работы:
- В качестве базы данных использовать PostgreSQL.
- Для подключения к БД на кафедральном сервере использовать хост
pg
, имя базы данных -studs
, имя пользователя/пароль совпадают с таковыми для подключения к серверу.
Отчёт по работе должен содержать:
- Текст задания.
- Диаграмма классов разработанной программы.
- Исходный код программы.
- Выводы по работе.
Вопросы к защите лабораторной работы:
- Многопоточность. Класс
Thread
, интерфейсRunnable
. Модификаторsynchronized
. - Методы
wait()
,notify()
классаObject
, интерфейсыLock
иCondition
. - Классы-сихронизаторы из пакета
java.util.concurrent
. - Модификатор
volatile
. Атомарные типы данных и операции. - Коллекции из пакета
java.util.concurrent
. - Интерфейсы
Executor
,ExecutorService
,Callable
,Future
- Пулы потоков
- JDBC. Порядок взаимодействия с базой данных. Класс
DriverManager
. ИнтерфейсConnection
- Интерфейсы
Statement
,PreparedStatement
,ResultSet
,RowSet
- Шаблоны проектирования.
Доработать программу из лабораторной работы №7 следующим образом:
Заменить консольный клиент на клиент с графическим интерфейсом пользователя(GUI).
В функционал клиента должно входить:
- Окно с авторизацией/регистрацией.
- Отображение текущего пользователя.
- Таблица, отображающая все объекты из коллекции
- Каждое поле объекта - отдельная колонка таблицы.
- Строки таблицы можно фильтровать/сортировать по значениям любой из колонок. Сортировку и фильтрацию значений столбцов реализовать с помощью Streams API.
- Поддержка всех команд из предыдущих лабораторных работ.
- Область, визуализирующую объекты коллекции
- Объекты должны быть нарисованы с помощью графических примитивов с использованием Graphics, Canvas или аналогичных средств графической библиотеки.
- При визуализации использовать данные о координатах и размерах объекта.
- Объекты от разных пользователей должны быть нарисованы разными цветами.
- При нажатии на объект должна выводиться информация об этом объекте.
- При добавлении/удалении/изменении объекта, он должен автоматически появиться/исчезнуть/измениться на области как владельца, так и всех других клиентов.
- При отрисовке объекта должна воспроизводиться согласованная с преподавателем анимация.
- Возможность редактирования отдельных полей любого из объектов (принадлежащего пользователю). Переход к редактированию объекта возможен из таблицы с общим списком объектов и из области с визуализацией объекта.
- Возможность удаления выбранного объекта (даже если команды remove ранее не было).
Перед непосредственной разработкой приложения необходимо согласовать прототип интерфейса с преподавателем. Прототип интерфейса должен быть создан с помощью средства для построения прототипов интерфейсов(mockplus, draw.io, etc.)
Вопросы к защите лабораторной работы:
- Компоненты пользовательского интерфейса. Иерархия компонентов.
- Базовые классы
Component
,Container
,JComponent
. - Менеджеры компоновки.
- Модель обработки событий. Класс-слушатель и класс-событие.
- Технология JavaFX. Особенности архитектуры, отличия от AWT / Swing.
- Интернационализация. Локализация. Хранение локализованных ресурсов.
- Форматирование локализованных числовых данных, текста, даты и времени. Классы
NumberFormat
,DateFormat
,MessageFormat
,ChoiceFormat
.