JavaDay Kyiv student programming contest

September 29th, 2015 Leave a comment Go to comments
  • конкурс рассчитан на студентов (с 1 по 6 курс)
  • победители (2-3 человека) получат бесплатные билеты на конференцию JavaDay Kyiv, которая будет проходить 6-7 ноября
  • для участия в конкурсе Вам необходимо реализовать задание описанное ниже, загрузить его на Ваш репозиторий (GitHub, BitBucket, etc) и заполнить следующую форму
  • чей код больше всего понравится жури, те и будут победителями (если ничей код не понравится – победителей не будет ;)
Конкурс открыт до 18-го октября

 

Задание: Разработка системы, которая моделирует работу Ski-pass
Реализовать набор классов, которые моделирует работу системы Ski-pass.
Турникет контролирует вход лыжников на подъемник по ski-pass. Ski-pass бывают следующих видов:
  1. На рабочие дни:
    1. Без учета количества подъемов: на полдня (с 9 до 13 или с 13 до 17), на день, два дня, 5 дней.
    2. По количеству подъемов: на 10 подъемов, на 20 подъемов, на 50 подъемов, на 100 подъемов.
  2. На выходные и праздничные дни:
    1. Без учета количества подъемов: на полдня (с 9 до 13 или с 13 до 17), на день, два дня.
    2. По количеству подъемов: на 10 подъемов, на 20 подъемов, на 50 подъемов, на 100 подъемов.
  3. Абонемент на сезон.
Турникет должен быть связан с системой, в который ведется реестр выданных ski-pass. В этой системе возможно:
  1. выпустить ski-pass одного из видов;
  2. заблокировать ski-pass из-за нарушения правил подъема.
Данные по карточки хранятся на самой карте, а именно: уникальный идентификатор, тип карты, срок действия, количество поездок и т.д.
Турникет считывает данные с карты и выполняет ее проверку. Если данные не удалось считать, или карточка просрочена, или заблокирована, или на ней не осталось кредитов для поездок, то проход запрещен. Иначе с карточки снимается одна поездка (если для карты предполагается учет подъемов) и проход разрешается.
По ski-pass на выходные и праздничные дни можно так же ездить и в будние дни.
Система так же осуществляет учет разрешений и отказов прохода. И умеет выдавать по запросу
1) суммарные данные за период и
2) данные разбиты по типам ski-pass за период.

 

Требования к выполнению задания
  1. Не используйте БД
  2. Применяйте SOLID-принципы объектно-ориентированного программирования
You should be able to extend the behavior of a system without having to modify that system.
If the behaviors of all the modules in your system could be extended, without modifying them, then you could add new features to that system without modifying any old code. The features would be added solely by writing new code.
  1. Используйте Java 8 Lambdas & Streams и Date and Time там где это необходимо
  2. Архитектура системы должна предусамтривать гибкое изменение/добавление Ski-pass (к-во подъемов, временные рамки, …). К примеру – хотим добавить Night Ski-pass работающий в вечернее время. Чем в большее число мест кода нужно вносить изменений, тем архитектура хуже.
    • Не создавайте т.н. “универсального” Ski-pass со всеми возможными полями
    • Турникет ничего не должен знать про типы пассов
    • Пользователь Вашего API не должен иметь возможность создавать пасс через new <Тип пасса>
    • При создании пасса его характеристика (к-во дней, поездок) не должна передаваться как переменные типа int
    • Крайне желательно чтобы добавление нового типа пасса не приводило к необходимости модификации исходного кода системы отвечающей за выпуск и учет Ski-pass
  3. Реализовать тесты с использованием библиотек JUnit и Mockito
    • если ваш класс зависит и вызывает методы внешнего/другого класса, то внешний класс должен быть заменен на mock-объект (используйте Mockito и не забудьте включить зависимость от данной библиотеки в pom.xml)
    • кроме тестирования состояния (state verification) обязательно должны быть тесты на тестирование поведения (behavior verification).
  4. Код должен представлять из себя Maven-проект и должен быть вместе с тестами загружен на Ваш репозиторий (GitHub, BitBucket, etc)
  1. Ivasoft
    September 29th, 2015 at 13:25 | #1

    Требуется разрешение
    Форма доступна только в корпоративном домене владельца.
    Если вы считаете, что произошла ошибка, свяжитесь с владельцем документа. Подробнее…

  2. Alex
    October 22nd, 2015 at 12:13 | #3

    Когда будет обьявление результатов?

    • October 22nd, 2015 at 17:39 | #4

      После этих выходных (25-го октября)

*