Прикладной программист. RxJava, реализация аналогичной RxJava-библиотеки (Дистанционная работа)
(проект не опубликован)

Бюджет не указан

Задание: Прикладной программист. RxJava, реализация аналогичной RxJava-библиотеки (Дистанционная работа)

Основные требования Вам необходимо реализовать собственную версию библиотеки RxJava, используя основные концепции реактивного программирования. Проект должен включать базовые компоненты реактивного потока, поддерживать асинхронное выполнение, обработку ошибок и предоставлять операторы преобразования данных. Цель работы — создать систему реактивных потоков с возможностью управления потоками выполнения (Schedulers) и обработки событий с использованием паттерна «Наблюдатель» (Observer pattern). Блоки заданий 1. Реализация базовых компонентов Что нужно сделать: Реализовать интерфейс Observer с методами: onNext(T item) — получает элементы потока. onError(Throwable t) — обрабатывает ошибки. onComplete() — вызывается при завершении потока. Реализовать класс Observable с поддержкой подписки (subscribe). Реализовать статический метод create(), позволяющий создавать объекты Observable. Ключевые моменты: Соответствие реализации требованиям. Работоспособность базовых компонентов. Читаемость и структурированность кода. 2. Операторы преобразования данных Что нужно сделать: Реализовать оператор map(Function mapper), который преобразует поток данных. Реализовать оператор filter(Predicate predicate), который отфильтровывает ненужные элементы. Ключевые моменты: Корректная работа операторов. Наличие тестов и демонстрация функционала. Читаемость кода. 3. Управление потоками выполнения Что нужно сделать: Реализовать интерфейс Scheduler с методом execute(Runnable task). Создать три варианта Scheduler: IOThreadScheduler (аналог Schedulers.io(), использующий CachedThreadPool). ComputationScheduler (аналог Schedulers.computation(), использующий FixedThreadPool). SingleThreadScheduler (аналог Schedulers.single(), использующий один поток). Реализовать методы subscribeOn(Scheduler scheduler), чтобы подписка выполнялась в заданном потоке, и observeOn(Scheduler scheduler), чтобы обработка элементов происходила в нужном потоке. Ключевые моменты: Корректная реализация и работа интерфейса Scheduler. Правильное функционирование методов subscribeOn() и observeOn(). Читаемость кода. 4. Дополнительные операторы и управление подписками Что нужно сделать: Реализовать оператор flatMap(Function> mapper), который преобразует элементы в новый Observable. Реализовать интерфейс Disposable, позволяющий отменять подписку. Добавить обработку ошибок с возможностью передачи их в метод onError(). Ключевые моменты: Работоспособность оператора flatMap(). Реализация механизма отмены подписки через Disposable. Корректность обработки ошибок. 5. Тестирование Что нужно сделать: Написать юнит-тесты для всех ключевых компонентов системы. Проверить корректность обработки ошибок. Проверить работу Schedulers в многопоточной среде. Проверить работу операторов map, filter, flatMap. Ключевые моменты: Полное покрытие тестами основных сценариев. Читаемость и структурированность тестов. 6. Отчет Что нужно сделать: Подробно описать архитектуру реализованной системы. Разъяснить принципы работы Schedulers, их различия и области применения. Описать процесс тестирования и основные сценарии. Привести примеры использования реализованной библиотеки. Ключевые моменты: Четкое объяснение принципов работы Schedulers и их применения. Полное описание архитектуры системы и реализованных операторов. Обзор процесса тестирования. Формат сдачи работы В результате у вас должны получиться: код реализации RxJava в соответствии с заданием; отчет; файл с Unit-тестами.