Главная страница

Работа. Напишите программу для сборки космических кораблей


Скачать 14.85 Kb.
НазваниеНапишите программу для сборки космических кораблей
АнкорРабота
Дата09.03.2023
Размер14.85 Kb.
Формат файлаdocx
Имя файлаjava_1.docx
ТипДокументы
#977081



Напишите программу для сборки космических кораблей.

Сборщик собирает корабль из 3 частей: корпус, двигатель, топливный бак. Всё остальное оборудование нас не интересует, считаем, что оно уже установлено в корпусе.
У корпуса есть собственный вес, предельный вес корабля, размеры отсеков под двигатель и топливный бак, стоимость (всё - просто целые числа... и пусть будет ещё цвет (реализуйте с помощью enum)

У двигателя есть размер (равен весу; условность задачи), тяговое усилие на старте, поддерживаемая скорость, дальность гиперпрыжка, стоимость, характеристика прочности (всё - целые числа)

У топливного бака есть размер (равен весу; условность задачи), вместимость (не обязательно меньше "размера"; условность задачи), стоимость, характеристика прочности (всё - целые числа) + количество топлива внутри.
На двигатель и на бак можно установить сколь угодно много дополнительных модулей. Каждый дополнительный модуль увеличивает вес и стоимость и изменяет остальные характеристики. Порядок модулей важен.
У всех частей (базовые и модули) есть метка "производитель". Это ещё один enum.
Задание:

1) Написать абстрактного сборщика кораблей и как минимум две его конкретных реализации. Использовать паттерн "Строитель".

Все конкретные сборщики должны уметь собирать корабль из комплекта деталей. Как минимум один сборщик, кроме того, должен уметь выдавать будущие "лётные данные" корабля (или говорить, что "летать не будет"), и как минимум один - стоимость работ.

Начните решать задачу именно с написания сборщика.

*Самый умный сборщик умеет копировать всё, что у него есть сам и строить сколь угодно много кораблей из правильного набора деталей.
2) Написать производство групп деталей (стандартный двигатель, стандартный бак, несколько дополнительных модулей - 2 для бака, не менее 2 для двигателя) как минимум двух типов - по одному на каждый тип сборщика. Производство реализуется с использованием паттерна "Фабрика", а сами дополнительные модули - с использованием паттерна "Декоратор".
Взаимоотношения объектов "сборщик кораблей" и "производство деталей" остаётся на ваше усмотрение. Можно его вообще не делать.
Комментарии:

0. Нужен toString для всего.
1. Есть реализации строителя с предварительным созданием объекта. Я хочу реализацию строителя с копированием полей и созданием объекта уже в методе getSpaceship()
2.0 Корабль совсем нельзя создать, если

-двигатель или бак не подходят по размеру (больше; меньше - можно)

-корпус в целом оказывается перегружен

-не хватает частей (очевидно)

2.1 Корабль можно создать, если "тяговое усилие двигателя" меньше "веса" корабля - в этом случае он не сможет взлететь. Можете запретить этот вариант совсем, или разрешить его одному из сборщиков и обработать дальнейшие возможные ошибки.
3. Методы. Любому сборщику можно дать любую готовую деталь.

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

Бака: заправить полный, использовать количество топлива.

Корабля: заправить бак, взлететь, сесть, совершить гиперпрыжок на расстояние n (тратится n топлива). Ещё, как ни странно, можно перекрасить.

*копирование для всех деталей корабля.
4. Модули одного назначения (например "Ускоритель"), но разного производства пересчитывают параметры внутренней части по разным формулам.
5. Все некорректные ситуации нужно так или иначе обрабатывать. Часть из них перечислена выше, остальные могут быть связаны с тем, что некоторые характеристики деталей стали неположительными. Если вы вынуждены выбросить исключение, используйте конструкцию try-catch.
6. Вариант имён сущностей, если вы не знакомы с игрой на картинке: humanSomething и allienSomething. Чтобы долго не думать над именами.


написать администратору сайта