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

Гугложурнал ПИиКТ и СУИР

Результаты онлайн-курса 1

Внимание студентам СУиР!
Лекции по программированию: 

  • - для групп: R3130, R3137 и R3140 - вместо нечетной недели в четную c 13:30 до 15:00, ауд 466 (вместе с P3111-P3114).
  • - для групп R3135, R3136 - как и по расписанию - в нечетную неделю c 13:30 до 15:00, но вместо 285 - также в ауд. 466 (вместе с P3100-P3110).

 

Студенты, которые не успели пройти онлайн-курс из-за его перевода в архив, могут зарегистрироваться на другой. 

После перехода по ссылке нажать на кнопку "Вступить" или "Join"!


Лабораторные работы

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. Интерфейс Serializable. Объектный граф, сериализация и десериализация полей и методов.
  6. Многопоточные программы. Концепции.
  7. Класс Thread и интерфейс Runnable.
  8. Состояние потока. Синхронизация потока.
  9. Пакет java.util.concurrent. Интерфейс Lock и его реализации.
  10. Атомарные операции.
  11. Java Stream APi. Создание конвейеров. Промежуточные и терминальные операции.

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

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

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

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

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

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

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

  1. Классы для представления даты и времени из пакета java.time. Преобразование темпоральных величин.
  2. Взаимодействие с базами данных. Протокол JDBC.
  3. JavaMail API. Протоколы SMTP, IMAP, POP3.
  4. Шаблоны проектирования. GoF-паттерны.

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

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

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

  1. Интернационализация. Локализация. Хранение локализованных ресурсов.
  2. Форматирование локализованных числовых данных, текста, даты и времени. Классы NumberFormat, DateFormat, MessageFormat, ChoiceFormat.
  3. Классы для представления даты и времени из пакета java.time. Преобразование темпоральных величин.
  4. Взаимодействие с базами данных. Протокол JDBC.
  5. Рефлексия.
  6. Объектно-реляционное отображение (для получения повышенных баллов)