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

Lab tasks

First Semester (autumn)

Lab Work #1

Write a mathematical expression processing program using Java programming language (expressions are different for different task variants). Program should satisfy these requirements:

  1. It should be packaged into executable jar archive.
  2. Expression should be processed in coordination with mathematical equation rules (operations order etc.).
  3. Program must use math functions from Java standard library (java.lang.math package).
  4. Program should use standard output to display expression processing result.

Program demonstration should be performed using helios server.

Report should include these sections:

  1. Lab work task.
  2. Program source code.
  3. Program output.
  4. Conclusions.

Control questions:

  1. Java programming language. Key features of Java programming language.
  2. Development kit. JDK & JRE.
  3. Math expressions in Java programming language. Key equation principles, operations priority.
  4. Math functions provided by Java standard library, java.lang.math package.
  5. Standard output in Java programs. Formatted output.

Lab Work #2

Write your own pokemon classes based on Pokemon class for all given pokemons. Each pokemon kind should hae one or two types and standard base stats: HP, attack, defense,
special attack, special defense and speed.

Pokemon classes should be inherited according to pokemon evolution chains.

Write your own Move classes based on PhysicalMove, SpecialMove and StatusMove classes for all give moves. Each move should have standard type, power and accuracy and implement standard move effects. Assign moves to pokemons according to given task. Pokemon level should be set to minimal one required to learn all given moves.

Use the simulation class Battle to create two pokemon teams (each pokemon should have a name) and start the battle.

Base classes, battle simulator and utility classes are packed in jar archive. Documentation in javadoc format is in the zip file.

All information about pokemon and move stats, evolution chains and so on you can find on http://pokemondb.net, http://veekun.com/dex/pokemon
 

ru.ifmo.cs.pb.lab1.default
Report document must include:
  1. Laboratory work task descriprion.
  2. UML class diagram for program.
  3. Program source code.
  4. Program output during different use cases.
  5. Conclusions.

Questions to laboratory work:

  1. Object-oriented programming. Basic terms: objects, imheritance, polymorphism, encapsulation.
  2. Class definition. Classes and objects in Java language.
  3. Class members. Access modifiers.
  4. Object creation and initialization. Method calls.
  5. Scope of variables.
  6. final and static modifiers.
  7. Packages. import statement

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

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

ru.ifmo.cs.pb.lab3.default

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

  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, обновив реализацию объектной модели в соответствии с новой версией описания предметной области.

ru.ifmo.cs.pb.lab4.default

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

  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

ru.ifmo.cs.pb.lab5.default

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

  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

ru.ifmo.cs.pb.lab6.default

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

  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

ru.ifmo.cs.pb.lab7.default

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

  1. Нарисовать прототипы интерфейсов приложения в инструменте прототипирования (выбирается по согласованию с преподавателем).
  2. Утвердить у преподавателя нарисованные прототипы интерфейса.
  3. Реализовать согласованные интерфейсы в коде.

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

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

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

  1. Компоненты пользовательского интерфейса. Иерархия компонент.
  2. Базовые классы Component и Container.
  3. Менеджеры компоновки.
  4. Модель обработки событий. Класс-слушатель и класс-событие.
  5. События AWT.
  6. Технология JavaFX. Особенности архитектуры, отличия от AWT / Swing.
  7. Компоненты JavaFX. Особенности реализации обработки событий.
  8. Способы задания разметки интерфейса в JavaFX. SceneBuilder.
  9. Технология SWT. Сходства и отличия в сравнении с Swing и JavaFX.
  10. Шаблоны проектирования. GoF-паттерны.
  11. Взаимодействие с базами данных. Протокол JDBC.

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

ru.ifmo.cs.pb.lab8.default

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

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