JavaRush /Курсы /Java Multithreading /Большая задача: Меню ресторана на Java

Большая задача: Меню ресторана на Java

Java Multithreading
9 уровень , 15 лекция
Открыта

— Привет, Амиго!

Сегодня ты начинаешь работу над супер современной и полезной программой! Это – электронное меню. Вот:

Большая задача: Меню ресторана на Java - 1

— Круто! А для чего это?

— Что-то ты много вопросов задаешь! Вот сделаешь, потом поговорим. Иди к секретному агенту, он даст тебе все необходимые инструкции.

— Товарищ Капитан, я не умею так красиво рисовать!

— Запомни, тебе нужно реализовать необходимую бизнес логику, а картинки будет рисовать дизайнер. Иди к секретному агенту, по ходу дела разберешься.

— Есть разбираться!

16
Задача
Java Multithreading, 9 уровень, 15 лекция
Недоступна
Ресторан(1)
Давай напишем программу для автоматизации работы в ресторане. Пусть задание сформулировано так - директор ресторана хочет, чтобы: 1) на каждом столике лежал планшет, через который можно было бы сделать заказ; 2) пока заказ готовится, на планшете показывалась реклама; 3) в конце рабочего дня была во
32
Задача
Java Multithreading, 9 уровень, 15 лекция
Недоступна
Ресторан(2)
1. Мы много работаем с консолью. Пора создать единую точку взаимодействия. Создай класс ConsoleHelper с единственным BufferedReader, через который будем работать с консолью. Запомни, этот класс не хранит никаких данных и состояний, поэтому все методы будут статическими. Создай в нем три метода:
32
Задача
Java Multithreading, 9 уровень, 15 лекция
Недоступна
Ресторан(3)
Сейчас мы можем создавать заказы. Давай сделаем так, чтобы они автоматически поступали к повару. Есть много различных способов реализации данной функциональности. Почитай про паттерн Observer - http://en.wikipedia.org/wiki/Observer_pattern Он уже реализован в java, и мы его будем использовать.
16
Задача
Java Multithreading, 9 уровень, 15 лекция
Недоступна
Ресторан(4)
Что мы имеем? Повар приготовил блюда, пора их уносить, а официант не знает об этом. Нужно уведомить официанта, что пора забирать заказ с кухни. Ситуация аналогична предыдущему заданию, поэтому снова будем использовать паттерн Observer.
16
Задача
Java Multithreading, 9 уровень, 15 лекция
Недоступна
Ресторан(5)
Сейчас повар готовит блюда моментально. На самом деле приготовление занимает какое-то время. Нам нужно вычислить время приготовления всего заказа, чтобы потом подбирать рекламные ролики для этого времени.
16
Задача
Java Multithreading, 9 уровень, 15 лекция
Недоступна
Ресторан(6)
Заказ создается, потом готовится поваром, а после этого относится посетителю. К тому же считается время выполнения заказа. Будем считать, что первая часть задания выполнена. Перейдем ко второй - пока заказ готовится, на планшете должна показываться реклама. Определим, что такое реклама. Реклама - э
16
Задача
Java Multithreading, 9 уровень, 15 лекция
Недоступна
Ресторан(7)
При выборе, с какого класса начать, старайся найти тот, который используют другие, и который сам ничего не использует. В нашем случае - это хранилище рекламных роликов (AdvertisementStorage). Мы решили, что оно будет единственным в ресторане и сделали его синглтоном. Опишем его.
16
Задача
Java Multithreading, 9 уровень, 15 лекция
Недоступна
Ресторан(8)
Пришло время описать функционал класса AdvertisementManager. Но для начала нам понадобятся некоторые методы в классе Advertisement. 1. В классе Advertisement создай поле long amountPerOneDisplaying. Оно должно равняться стоимости одного показа рекламного объявления в копейках (initialAmount/hits).
16
Задача
Java Multithreading, 9 уровень, 15 лекция
Недоступна
Ресторан(9)
Нам понадобится исключение, которое поможет обработать ситуацию, если у нас не будет получаться подобрать рекламные ролики. 1. Создадим unchecked исключение NoVideoAvailableException в пакете ad. 2. Разберем подробно метод void processVideos() в AdvertisementManager.
32
Задача
Java Multithreading, 9 уровень, 15 лекция
Недоступна
Ресторан(10)
Рекурсию используют тогда, когда алгоритм решения задачи совпадает с алгоритмом решения подзадачи (части). У нас как раз такой случай. Нам нужно сделать полный перебор всех вариантов и выбрать из них лучший. Напомню, рекурсия пишется по следующему принципу: а) условие выхода/окончания рекурсии б) у
16
Задача
Java Multithreading, 9 уровень, 15 лекция
Недоступна
Ресторан(11)
Мы реализовали первые две фичи из трех. Напомню, первой была автоматизация приготовления заказа, второй - подбор рекламных роликов, а третья - статистика для директора. Собственно, к ней мы и добрались. Нам нужно будет реализовать следующую функциональность: 1) подсчет статистики 2) отображение ста
9
Задача
Java Multithreading, 9 уровень, 15 лекция
Недоступна
Ресторан(12)
У нас выделяются несколько событий: *повар приготовил заказ *выбрали набор видео-роликов для заказа *нет ни одного видео-ролика, который можно показать во время приготовления заказа Это постоянные данные, поэтому для их хранения подходит энам.
16
Задача
Java Multithreading, 9 уровень, 15 лекция
Недоступна
Ресторан(13)
Вернемся к методу register в классе StatisticManager. Он должен регистрировать события в хранилище. Создадим хранилище : ) Хранилище связано 1 к 1 с менеджером, т.е. один менеджер и одно хранилище на приложение. К хранилищу может доступиться только StatisticManager. Поэтому... Из вышеперечисленного
32
Задача
Java Multithreading, 9 уровень, 15 лекция
Недоступна
Ресторан(14)
1. Внутри StatisticStorage создай метод void put(EventDataRow data). 2. Чтобы методом put(EventDataRow data) добавить объект data в данные карты, нужен тип события - EventType. Будет правильно, если событие будет хранить в себе свой тип. Поэтому: 2.1. В интерфейс EventDataRow добавь метод EventType
32
Задача
Java Multithreading, 9 уровень, 15 лекция
Недоступна
Ресторан(15)
Давай подумаем что нужно сделать, чтобы директор мог посмотреть: 1) какую сумму заработали на рекламе, сгруппировать по дням; 2) загрузка (рабочее время) повара, сгруппировать по дням; 3) список активных роликов и оставшееся количество показов по каждому; 4) список неактивных роликов (с оставшемся к
32
Задача
Java Multithreading, 9 уровень, 15 лекция
Недоступна
Ресторан(16)
Реализуем первый пункт статистики - какую сумму заработали на рекламе, сгруппировать по дням. 1. В классе VideoSelectedEventDataRow создай геттер для поля amount. В классе CookedOrderEventDataRow создай геттер для поля cookName. 2. В StatisticManager создай метод (придумать самостоятельно), которы
32
Задача
Java Multithreading, 9 уровень, 15 лекция
Недоступна
Ресторан(17)
Реализуем третий и четвертый пункт статистики - список активных и неактивных роликов. Для этого проще использовать доступ к хранилищу рекламных роликов - класс AdvertisementStorage. 1. В пакете ad создай StatisticAdvertisementManager, который будет предоставлять информацию из AdvertisementStorage в н
32
Задача
Java Multithreading, 9 уровень, 15 лекция
Недоступна
Ресторан(18)
Сейчас у нас один планшет и 1 повар. Давай создадим несколько планшетов, которые будут рандомно генерировать заказы, и сделаем два повара. 1. В классе Restaurant создай ПРИВАТНУЮ статическую константу int ORDER_CREATING_INTERVAL = 100. 2. В отдельном классе создай таск(Runnable) RandomOrderGenerat
32
Задача
Java Multithreading, 9 уровень, 15 лекция
Недоступна
Ресторан(19)
Нам осталось доделать метод main. Сперва давай сравним параметры конструктора RandomOrderGeneratorTask. Пожалуйста, сделай сигнатуру такой же, как у меня: public RandomOrderGeneratorTask(List<Tablet> tablets, int interval) В методе main: 1. Удали создание хардкоженного планшета и вызова его метода
16
Задача
Java Multithreading, 9 уровень, 15 лекция
Недоступна
Ресторан(20)
Фикс бага - планшет направляет свой заказ всем известным ему поварам. Ожидаемое поведение: планшет направляет свой заказ в очередь, свободный повар берет заказы из очереди. Есть два варианта реализации такого функционала: 1) Каждый планшет хранит ссылку на очередь и толкает в нее новый свой заказ.
32
Задача
Java Multithreading, 9 уровень, 15 лекция
Недоступна
Ресторан(21)
Продолжаем фиксить баг. Сейчас все заказы поступают в очередь, но не доходят до поваров. Сделаем так, чтобы OrderManager находил любого свободного повара и отдавал ему заказ. Для реализации данной логики нам понадобится демон-трэд. Он будет проверять наличие заказа в очереди, брать свободного повар
32
Задача
Java Multithreading, 9 уровень, 15 лекция
Недоступна
Ресторан(22)
К сожалению, заказы все еще не готовятся параллельно. Вот как работает наш трэд из предыдущего задания. Он находит повара, потом находит заказ, отдает заказ повару методом startCookingOrder, потом ждет окончания приготовления, и только после этого переходит к следующему заказу. Так происходит потому
9
Задача
Java Multithreading, 9 уровень, 15 лекция
Недоступна
Ресторан(23)
Это всё! Красоту можешь наводить самостоятельно.
Комментарии (314)
ЧТОБЫ ПОСМОТРЕТЬ ВСЕ КОММЕНТАРИИ ИЛИ ОСТАВИТЬ КОММЕНТАРИЙ,
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ
Алексей Уровень 2
7 мая 2025
Ну, здравствуй, капитан Бобров!(
1 мая 2025
1 мая 2025
1 мая 2025
1 мая 2025
лайкос за мемос.
Андрей Уровень 46
6 марта 2025
Самая неинтересная и бестолковая задача
Валихан Уровень 33 Expert
12 февраля 2025
Неужели эта задача кончилась. Ура!
Duxa552 Уровень 51
24 октября 2024
заметил одну вещь, даже если валидатор принимает решение, то в последующих задачах может не принимать даже верно работающие условие, если предыдущее решение отличается от базового
safelogj Уровень 51
8 сентября 2024
с этой задачи я начал разбивать вычисления на отдельные методы, прощайте мои любимые простыни IFов. сами программа интересная, закрепил компараторы. на сколько я понял код из правильного решения, с 14 задания стал противоречить условию, конкретно в 14ой, во время заказа, сначала делается запись о подборе видео рекламы, а потом кидается исключение если видео не подобралось, а записи о том что видео не подобрано вообще не делается, возможно это надо будет исправить далее, но валик меня дальше 16 задания не пустил.
Енот Уровень 51 Expert
27 августа 2024
на 10 задаче я поплыл....
SomeBody098 Уровень 51
22 августа 2024
1 мая 2025
хаха!
Long_byte Уровень 23
12 июля 2024
те кто прошли данную задачу какие классы больше всего используется чтобы еще раз закрепить знания прежде чем приступить к задачам
Denis Odesskiy Уровень 46
14 июля 2024
мапы, листы, коллекции, компораторы, очереди... Немножко будет многопоточности (примитивной, на уровне Thread-Runnable) и немножко рандомности... Да еще можете Enum повторить, с ним придется работать из других классов в задаче. А ну и конечно паттерн "Наблюдатель", и паттерн "Поставщик-Потребитель". В задаче используется встроенная в ЯП реализация паттерна "Наблюдатель", но я советую изучить его, и написать свой ручками для понимания работы. Вообще задача хорошая, достаточно сложная. В начале будет легко, а вот с середины и ближе к концу, придётся попотеть. Там достаточно заковыристая логика решения.
Мирослав Уровень 33 Expert
24 июня 2024
Самый никчемный проект! С условием пшикнутым на стене туалета! И применить его негде! deprecated методы и без Ю.И. Все пред идущие очень приятно было освоить! Это единственный который разочаровал, другие все приятно мотивировали! Я бы его ЗАМЕНИЛ \ ИЗМЕНИЛ ... Просто чтоб не терять студентов!!! Придает сильное ощущение неведения! Де-мотивирует!!!!