Программирование

1-й семестр (осень)

Лабораторная работа #1

Написать программу на языке Java, выполняющую соответствующие варианту действия. Программа должна соответствовать следующим требованиям:

  1. Она должна быть упакована в исполняемый jar-архив.
  2. Выражение должно вычисляться в соответствии с правилами вычисления математических выражений (должен соблюдаться порядок выполнения действий и т.д.).
  3. Программа должна использовать математические функции из стандартной библиотеки Java.
  4. Результат вычисления выражения должен быть выведен в стандартный поток вывода в заданном формате.

Выполнение программы необходимо продемонстрировать на сервере helios.

Отчёт по лабораторной работе должен содержать:
  1. Текст задания.
  2. Исходный код программы.
  3. Результат работы программы.
  4. Выводы по работе.

Вопросы к защите лабораторной работы:

  1. Язык Java. Особенности языка.
  2. Средства разработки. JDK и JRE.
  3. Примитивные типы данных в Java.
  4. Работа с переменными. Декларация. Инициализация. Присваивание.
  5. Инструкции ветвления и циклов.
  6. Операторы и выражения в Java. Особенности вычисления, приоритеты операций.
  7. Математические функции в составе стандартной библиотеки Java. Классjava.lang.Math.
  8. Форматированный вывод числовых данных.

Лабораторная работа #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

Комментарии

Цель работы: на простом примере разобраться с основными концепциями ООП и научиться использовать их в программах.

Что надо сделать (краткое описание)

  1. Ознакомиться с документацией, обращая особое внимание на классы Pokemon и Move. При дальнейшем выполнении лабораторной работы читать документацию еще несколько раз.
  2. Скачать файл Pokemon.jar. Его необходимо будет использовать как для компиляции, так и для запуска программы. Распаковывать его не надо! Нужно научиться подключать внешние jar-файлы к своей программе.
  3. Написать минимально работающую программу и посмотреть как она работает.
    Battle b = new Battle();
    Pokemon p1 = new Pokemon("Чужой", 1);
    Pokemon p2 = new Pokemon("Хищник", 1);
    b.addAlly(p1);
    b.addFoe(p2);
    b.go();
    
  4. Создать один из классов покемонов для своего варианта. Класс должен наследоваться от базового класса Pokemon. В конструкторе нужно будет задать типы покемона и его базовые характеристики. После этого попробуйте добавить покемона в сражение.
  5. Создать один из классов атак для своего варианта (лучше всего начать с физической или специальной атаки). Класс должен наследоваться от класса PhysicalMove или SpecialMove. В конструкторе нужно будет задать тип атаки, ее силу и точность. После этого добавить атаку покемону и проверить ее действие в сражении. Не забудьте переопределить метод describe, чтобы выводилось нужное сообщение.
  6. Если действие атаки отличается от стандартного, например, покемон не промахивается, либо атакующий покемон также получает повреждение, то в классе атаки нужно дополнительно переопределить соответствующие методы (см. документацию). При реализации атак, которые меняют статус покемона (наследники StatusMove), скорее всего придется разобраться с классом Effect. Он позволяет на один или несколько ходов изменить состояние покемона или модификатор его базовых характеристик.
  7. Доделать все необходимые атаки и всех покемонов, распределить покемонов по командам, запустить сражение.
Чтобы познакомиться со своими покемонами, введите номер варианта.
Отчёт по работе должен содержать:
  1. Текст задания.
  2. Диаграмма классов реализованной объектной модели.
  3. Исходный код программы.
  4. Результат работы программы.
  5. Выводы по работе.

Вопросы к защите лабораторной работы:

  1. Объектно-ориентированное программирование. Основные понятия: объекты, наследование, полиморфизм, инкапсуляция.
  2. Понятие класса. Классы и объекты в Java.
  3. Члены класса. Модификаторы доступа.
  4. Создание и инициализация объектов. Вызов методов.
  5. Области видимости переменных.
  6. Модификаторы final и static.
  7. Пакеты, инструкция import.

Лабораторная работа #3

Чтобы увидеть описание объектной модели, введите свой номер варианта.

Программа должна удовлетворять следующим требованиям:

  1. Доработанная модель должна соответствовать принципам SOLID.
  2. Программа должна содержать как минимум два интерфейса и один абстрактный класс (номенклатура должна быть согласована с преподавателем).
  3. В разработанных классах должны быть переопределены методы equals(), toString() и hashCode().
  4. Программа должна содержать как минимум один перечисляемый тип (enum).

Порядок выполнения работы:

  1. Доработать объектную модель приложения.
  2. Перерисовать диаграмму классов в соответствии с внесёнными в модель изменениями.
  3. Согласовать с преподавателем изменения, внесённые в модель.
  4. Модифицировать программу в соответствии с внесёнными в модель изменениями.

Отчёт по работе должен содержать:

  1. Текст задания.
  2. Диаграмма классов объектной модели.
  3. Исходный код программы.
  4. Результат работы программы.
  5. Выводы по работе.

Вопросы к защите лабораторной работы:

  1. Принципы объектно-ориентированного программирования SOLID и STUPID.
  2. Класс Object. Реализация его методов по умолчанию.
  3. Особенности реализации наследования в Java. Простое и множественное наследование.
  4. Понятие абстрактного класса. Модификатор abstract.
  5. Понятие интерфейса. Реализация интерфейсов в Java, методы по умолчанию. Отличия от абстрактных классов.
  6. Перечисляемый тип данных (enum) в Java. Особенности реализации и использования.
  7. Методы и поля с модификаторами static и final.
  8. Перегрузка и переопределение методов. Коварианты возвращаемых типов данных.
  9. Элементы функционального программирования в синтаксисе Java. Функциональные интерфейсы, лямбда-выражения. Ссылки на методы.

Лабораторная работа #4

Доработать программу из лабораторной работы #3, обновив реализацию объектной модели в соответствии с новой версией описания предметной области.

Чтобы увидеть описание объектной модели, введите свой номер варианта.

Программа должна удовлетворять следующим требованиям:

  1. В программе должны быть реализованы 2 собственных класса исключений (checked и unchecked), а также обработка исключений этих классов.
  2. В программу необходимо добавить использование локальных, анонимных и вложенных классов (static и non-static).

Порядок выполнения работы:

  1. Доработать объектную модель приложения.
  2. Перерисовать диаграмму классов в соответствии с внесёнными в модель изменениями.
  3. Согласовать с преподавателем изменения, внесённые в модель.
  4. Модифицировать программу в соответствии с внесёнными в модель изменениями.

Отчёт по работе должен содержать:

  1. Текст задания.
  2. Диаграмма классов объектной модели.
  3. Исходный код программы.
  4. Результат работы программы.
  5. Выводы по работе.

Вопросы к защите лабораторной работы:

  1. Обработка исключительных ситуаций, три типа исключений.
  2. Вложенные, локальные и анонимные классы.
  3. Механизм рефлексии (reflection) в Java. Класс Class.

2-й семестр (весна)

Лабораторная работа #5

Чтобы узнать задание, введите свой номер варианта.

Отчёт по работе должен содержать:

  1. Текст задания.
  2. Диаграмма классов разработанной программы.
  3. Исходный код программы.
  4. Выводы по работе.

Вопросы к защите лабораторной работы:

  1. Коллекции. Сортировка элементов коллекции. Интерфейсы java.util.Comparable и java.util.Comparator.
  2. Категории коллекций - списки, множества. Интерфейс java.util.Map и его реализации.
  3. Параметризованные типы. Создание параметризуемых классов. Wildcard-параметры.
  4. Классы-оболочки. Назначение, область применения, преимущества и недостатки. Автоупаковка и автораспаковка.
  5. Потоки ввода-вывода в Java. Байтовые и символьные потоки. "Цепочки" потоков (Stream Chains).
  6. Работа с файлами в Java. Класс java.io.File.
  7. Пакет java.nio - назначение, основные классы и интерфейсы.
  8. Утилита javadoc. Особенности автоматического документирования кода в Java.

Лабораторная работа #6

Чтобы узнать задание, введите свой номер варианта.

Отчёт по работе должен содержать:

  1. Текст задания.
  2. Диаграмма классов разработанной программы (как клиентского, так и серверного приложения).
  3. Исходный код программы.
  4. Выводы по работе.

Вопросы к защите лабораторной работы:

  1. Сетевое взаимодействие - клиент-серверная архитектура, основные протоколы, их сходства и отличия.
  2. Протокол TCP. Классы Socket и ServerSocket.
  3. Протокол UDP. Классы DatagramSocket и DatagramPacket.
  4. Отличия блокирующего и неблокирующего ввода-вывода, их преимущества и недостатки. Работа с сетевыми каналами.
  5. Классы SocketChannel и DatagramChannel.
  6. Передача данных по сети. Сериализация объектов.
  7. Интерфейс Serializable. Объектный граф, сериализация и десериализация полей и методов.
  8. Java Stream API. Создание конвейеров. Промежуточные и терминальные операции.
  9. Шаблоны проектирования: Decorator, Iterator, Factory method, Command, Flyweight, Interpreter, Singleton, Strategy, Adapter, Facade, Proxy.

Лабораторная работа #7

Чтобы узнать задание, введите свой номер варианта.

Порядок выполнения работы:

  1. В качестве базы данных использовать PostgreSQL.
  2. Для подключения к БД на кафедральном сервере использовать хост pg, имя базы данных - studs, имя пользователя/пароль совпадают с таковыми для подключения к серверу.

Отчёт по работе должен содержать:

  1. Текст задания.
  2. Диаграмма классов разработанной программы.
  3. Исходный код программы.
  4. Выводы по работе.

Вопросы к защите лабораторной работы:

  1. Многопоточность. Класс Thread, интерфейс Runnable. Модификатор synchronized.
  2. Методы wait(), notify() класса Object, интерфейсы Lock и Condition.
  3. Классы-сихронизаторы из пакета java.util.concurrent.
  4. Модификатор volatile. Атомарные типы данных и операции.
  5. Коллекции из пакета java.util.concurrent.
  6. Интерфейсы Executor, ExecutorService, Callable, Future
  7. Пулы потоков
  8. JDBC. Порядок взаимодействия с базой данных. Класс DriverManager. Интерфейс Connection
  9. Интерфейсы Statement, PreparedStatement, ResultSet, RowSet
  10. Шаблоны проектирования.

Лабораторная работа #8

Доработать программу из лабораторной работы №7 следующим образом:

Заменить консольный клиент на клиент с графическим интерфейсом пользователя(GUI). 
В функционал клиента должно входить:

  1. Окно с авторизацией/регистрацией.
  2. Отображение текущего пользователя.
  3. Таблица, отображающая все объекты из коллекции
    1. Каждое поле объекта - отдельная колонка таблицы.
    2. Строки таблицы можно фильтровать/сортировать по значениям любой из колонок. Сортировку и фильтрацию значений столбцов реализовать с помощью Streams API.
  4. Поддержка всех команд из предыдущих лабораторных работ.
  5. Область, визуализирующую объекты коллекции
    1. Объекты должны быть нарисованы с помощью графических примитивов с использованием Graphics, Canvas или аналогичных средств графической библиотеки.
    2. При визуализации использовать данные о координатах и размерах объекта.
    3. Объекты от разных пользователей должны быть нарисованы разными цветами.
    4. При нажатии на объект должна выводиться информация об этом объекте.
    5. При добавлении/удалении/изменении объекта, он должен автоматически появиться/исчезнуть/измениться  на области как владельца, так и всех других клиентов. 
    6. При отрисовке объекта должна воспроизводиться согласованная с преподавателем анимация.
  6. Возможность редактирования отдельных полей любого из объектов (принадлежащего пользователю). Переход к редактированию объекта возможен из таблицы с общим списком объектов и из области с визуализацией объекта.
  7. Возможность удаления выбранного объекта (даже если команды remove ранее не было).

Перед непосредственной разработкой приложения необходимо согласовать прототип интерфейса с преподавателем. Прототип интерфейса должен быть создан с помощью средства для построения прототипов интерфейсов(mockplus, draw.io, etc.)

Чтобы узнать задание, введите свой номер варианта.

Вопросы к защите лабораторной работы:

  1. Компоненты пользовательского интерфейса. Иерархия компонентов.
  2. Базовые классы ComponentContainerJComponent.
  3. Менеджеры компоновки.
  4. Модель обработки событий. Класс-слушатель и класс-событие.
  5. Технология JavaFX. Особенности архитектуры, отличия от AWT / Swing.
  6. Интернационализация. Локализация. Хранение локализованных ресурсов.
  7. Форматирование локализованных числовых данных, текста, даты и времени. Классы NumberFormatDateFormatMessageFormatChoiceFormat.