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

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

Большая задача: Меню ресторана на 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)
Это всё! Красоту можешь наводить самостоятельно.