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

1. Цель лабораторной работы

Цель данной лабораторной работы — изучить основы синтаксиса Java с помощью нескольких простых задач программирования, научиться использовать компилятор Java и виртуальную машину Java для запуска программы.

2. Задание на лабораторную работу

1) Paint3d:

Создать класс для представления точек в трехмерном пространтсве.

Создать класс в котором будет происходить запуск методов Paint3d

3. Ход лабораторной работы

3.1 Алгоритм решение заданий

3.1.1 Paint3d

  • создание нового объекта Point3d с тремя значениями с плавающей точкой (double);
  • создание нового объекта Point3d со значениями (0.0, 0.0, 0.0) по умолчанию,
  • возможность получения и изменения всех трех значений по отдельности;
  • метод для сравнения значений двух объектов Point3d.
  • Добавьте новый метод distanceTo, который в качестве параметра принимает другой объект Point3d, вычисляет расстояние между двумя точками с точность двух знаков после запятой и возвращает полученное значение.

3.1.2 Lab1

Создайте другой класс под названием Lab1, который будет содержать статический метод main. Помните, что метод main должен быть общедоступным (public) с возвращаемым значением void, а в качестве аргумента должен принимать строку (String). Этот класс должен иметь следующую функциональность:

  • Ввод координат трех точек, находящихся в трехмерном пространстве. Создание трех объектов типа Point3d на основании полученных данных. (Предполагается, что пользователь вводит корректные данные.)
  • Создайте второй статический метод computeArea, который принимает три объекта типа Point3d и вычисляет площадь треугольника, образованного этими точками. (Вы можете использовать формулу Герона.) Верните получившееся значение площади в формате типа double.
  • На основе полученных данных и с использованием реализованного алгоритма посчитайте площадь и выведите полученное значение пользователю
Читайте также:  Метрика как добавить javascript

Источник

Saved searches

Use saved searches to filter your results more quickly

You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session. You switched accounts on another tab or window. Reload to refresh your session.

Лабораторные работы по дисциплине «ООП. Java»

pyatizbyantsevia/JavaLabs-spbspu

This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.

Name already in use

A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?

Sign In Required

Please sign in to use Codespaces.

Launching GitHub Desktop

If nothing happens, download GitHub Desktop and try again.

Launching GitHub Desktop

If nothing happens, download GitHub Desktop and try again.

Launching Xcode

If nothing happens, download Xcode and try again.

Launching Visual Studio Code

Your codespace will open once ready.

There was a problem preparing your codespace, please try again.

Latest commit

Git stats

Files

Failed to load latest commit information.

README.md

Лабораторные работы по дисциплине «ООП. Java»

1-й семестр 2-го курса СПбПУ ИКНТ ПИ (2021-2022 уч. г.)

В компьютерной игре герой (класс Hero) может перемещаться между двумя точками (метод move) различными способами: идти пешком, ехать на лошади, лететь и т. п. Реализовать классы, позволяющие выбирать и менять в ходе выполнения программы способ перемещения героя, используя паттерн “стратегия” (strategy). Продемонстрировать работу реализованных классов.

Написать консольное приложение, которое:

  1. Считывает из текстового файл размерность матрицы N*N.
  2. Создаёт и заполняет матрицу случайными числами от -N до N.
  3. Последовательно поворачивает матрицу на 90, 180 и 270 градусов против часовой стрелки и делит каждый элемент на сумму соседних.
  4. Каждую из трёх получившихся матриц вывести в общий файл.

Требования к обработке исключительных ситуаций:

  1. Контролировать состояние потоков ввода/вывода (отсутствие записи в файле, недопустимые значения, etc).
  2. Генерировать и обрабатывать исключение при некорректных математических операциях.
  3. Выбрасывать исключение при нехватке памяти.
  4. Реализовать собственные классы исключений для случаев:
    • деление на 0;
    • файл не существует;
    • N > 1_000_000.

Создайте иерархию животного царства на свое усмотрение:

выбираем один тип (простейшие/губки/хордовые и т.д.), а далее наследуйте классы, отряды, семейства, роды и виды) — должна получиться иерархия в 6 уровней, выбор животных на ваш вкус, особо много создавать не нужно.

Затем, для получившейся иерархии, выполняем следующее:

  1. Создаем обобщенный класс Queue, представляющий из себя очередь фиксированного размера со стандартными методами очереди — add и get.
  2. Создаем методы produce и consume:
    • Produce должен возвращать upper bound generic очередь (например, наследники позвоночных) из n животных, которая будет генерироваться на ваше усмотрение и подаваться во второй метод.
    • Consume будет их распределять в 2 или более lower bound очереди — например, родители кошек и родители змей, выбор типов также остаётся за вами.
  3. Демонстрируем работу всех методов на конкретных собственных кейсах.

Написать аннотацию с целочисленным параметром.

  1. Создать класс, содержащий только приватные методы (3–4 шт.).
  2. Аннотировать любые из них.
  3. Вызвать из другого класса все аннотированные методы столько раз, сколько указано в параметре аннотации.

С использованием StreamAPI реализовать следующие методы:

  1. Метод, возвращающий среднее значение списка целых чисел.
  2. Метод, приводящий все строки в списке в верхний регистр и добавляющий к ним префикс «new».
  3. Метод, возвращающий список квадратов всех встречающихся только один раз элементов списка.
  4. Метод, принимающий на вход коллекцию строк и возвращающий все строки, начинающиеся с заданной буквы, отсортированные по алфавиту.
  5. Метод, принимающий на вход коллекцию и возвращающий её последний элемент или кидающий исключение, если коллекция пуста.
  6. Метод, принимающий на вход массив целых чисел, возвращающий сумму чётных чисел или 0, если чётных чисел нет.
  7. Метод, преобразовывающий все строки в списке в Map, где первый символ – ключ, оставшиеся – значение.
  • Создать супервизор (управляющую программу), которая контролирует исполнение абстрактной программы.
  • Абстрактная программа работает в отдельном потоке и является классом с полем перечисляемого типа, который отражает ее состояние (UNKNOWN, STOPPING, RUNNING, FATAL ERROR) и имеет потокдемон случайного состояния, который в заданном интервале меняет её состояние на случайное.
  • У супервизора должны быть методы остановки и запуска абстрактной программы, которые меняют ее состояние.
  • Супервизор является потоком, который циклически опрашивает абстрактную программу, и если ее состояние UNKNOWN или STOPPING, то перезапускает ее.
  • Если состояние FATAL ERROR, то работа абстрактной программы завершается супервизором.
  • Все изменения состояний должны сопровождаться соответствующими сообщениями в консоли.
  • Использовать конструкции с wait/notify.
  • Создать очередь сообщений, в которую пишут N потоков (количество потоков задается через args), и читают N потоков, использовать только пакет java.util.concurrent.
  • Имена потоков должны быть осмыслены.
  • Использовать конструкции с wait/notify запрещено.

Разработайте набор классов для текстовой разметки:

  1. Класс Paragraph может содержать произвольное число других элементов разметки и текстовых элементов.
  2. Класс Text – текстовый элемент.
  3. Классы разметки Emphasis, Strong, Strikeout – выделение, сильное выделение и зачеркивание.

Элементы разметки могут содержать произвольное число других элементов разметки и текстовых элементов.

Все классы должны реализовывать метод toMarkdown(StringBuilder), который должен генерировать Markdown-разметку по следующим правилам:

  • текстовые элементы выводятся как есть;
  • выделенный текст окружается символами ‘*’;
  • сильно выделенный текст окружается символами ‘__’;
  • зачеркнутый текст окружается символами ‘~’.

Следующий код должен успешно компилироваться:

Paragraph paragraph = new Paragraph(List.of( new Strong(List.of( new Text("1"), new Strikeout(List.of( new Text("2"), new Emphasis(List.of( new Text("3"), new Text("4") )), new Text("5") )), new Text("6") )) )); 

Вызов paragraph.toMarkdown(new StringBuilder()) должен заполнять переданный StringBuilder следующим содержимым:

Источник

Оцените статью