Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Лаб_8 Головков И.Е. 12002108 Фасад

.docx
Скачиваний:
5
Добавлен:
26.06.2024
Размер:
218.13 Кб
Скачать

БЕЛГОРОДСКИЙ ГОСУДАРСТВЕННЫЙ НАЦИОНАЛЬНЫЙ

ИССЛЕДОВАТЕЛЬСКИЙ УНИВЕРСИТЕТ»

(НИУ «БелГУ»)

ИНСТИТУТ ИНЖЕНЕРНЫХ И ЦИФРОВЫХ ТЕХНОЛОГИЙ

Кафедра информационных и робототехнических систем

Отчет по лабораторной работе № 8 по дисциплине «Методы и средства проектирования информационных систем и технологий»

Вариант № 3

Тема работы «Фасад»

студента очного отделения

3 курса 12002108 группы

Головкова Игоря Евгеньевича

Проверил:

асс. Пузырев Никита Сергеевич

БЕЛГОРОД, 2024

Вариант 3:

Создать класс реактивного двигателя. Класс содержит поля силы которую создает двигатель и расход топлива в секунду. Данные поля инициализируются в конструкторе. У класса есть метод включения двигателя на определенное количество секунд который возвращает количество сожжённого топлива.

Создать класс бака с топливом. Бак имеет поля объема бака и оставшегося топлива. Поля инициализируются в конструкторе. Существует метод уменьшения топлива в баке в который передается количество использованного топлива.

Создать класс-фасад ракеты. Ракета состоит из двух двигателей(левый и правый) и бака. В данном классе есть поля массы ракеты и скорости ракеты, оно инициализируется в конструкторе. Создать методы разгона ракеты по прямой с помощью двигателей до определённой скорости. Ускорение, создаваемое двигателями считать по формуле a = F/m. При этом топливо в баке должно уменьшаться. Производить проверки на колличество топлива.

Разработать UML диаграмму классов. Продемонстрировать работу класса ракеты.

Диаграмма классов для программы представлена на рисунке 1.

Рисунок 1 – Диаграмма классов

Результат работы программы, использующей паттерн фасад, представлена на рисунке 2.

Рисунок 2 – Результат работы программы, использующей паттерн фасад

// Интерфейс FuelTank @Getter public class FuelTank { private final int volume; private int currentFuelVolume; public FuelTank(int volume, int currentFuelVolume) { if (currentFuelVolume > volume || currentFuelVolume < 0) { throw new IllegalArgumentException("Невозможное значение текущего объёма топлива"); } this.volume = volume; this.currentFuelVolume = currentFuelVolume; } public void consumeFuelForSecond(int consumedFuelVolume) { currentFuelVolume -= consumedFuelVolume; } }

// Класс ReactiveEngine

@AllArgsConstructor @Getter public class ReactiveEngine { private int force, fuelConsumption; public int useEngine(int seconds) { return seconds * fuelConsumption; } }

// Класс Rocket public class Rocket { private final ReactiveEngine leftReactiveEngine = new ReactiveEngine(100_000, 100), rightReactiveEngine = new ReactiveEngine(100_000, 100); private final FuelTank fuelTank = new FuelTank(100_000, 100_000); private final double weight; private double speed = 0; public Rocket(int weight) { this.weight = weight; } public void accelerateForSecond() { // a = f/m double acceleration = (float) (leftReactiveEngine.getForce() + rightReactiveEngine.getForce()) / (weight + fuelTank.getCurrentFuelVolume()); fuelTank.consumeFuelForSecond(leftReactiveEngine.getFuelConsumption() + rightReactiveEngine.getFuelConsumption()); speed += acceleration; System.out.println(STR.""" Ускорение ракеты:\{acceleration} Скорость ракеты:\{speed}, Топлива в баках:\{fuelTank.getCurrentFuelVolume()} """); } }

// Класс Main public class Main { public static void main(String[] args) { Rocket rocket = new Rocket(10_000); for (int i = 0; i < 5; i++) { rocket.accelerateForSecond(); } } }