ФУНКЦИОНАЛЬНЫЕ ТРЕБОВАНИЯ (рабочая версия и варианты решений)
Назначение этой страницы -- постепенное закрепление решений по функциональному составу библиотеки, а также манере (способам, стилю, тактике) реализации функциональных возможностей библиотеки.
- 1 Базовый тип
- 1.1 Нужна ли параметризация типа "Интервал" типом концов интервала?
- 1.2 Должен ли пользователь "видеть" типы концов интервала?
- 1.3 Какие режимы округления должна поддерживать библиотека?
- 2 Алгебра.
- 2.1 Постановка:
- 2.2 Варианты решения:
- 2.3 Решения
- 2.4 end.
- 2.5 Постановка:
- 2.6 Варианты решения:
- 2.7 Решения
- 2.8 end.
- 2.9 Постановка:
- 2.10 Варианты решения:
- 2.11 Решения
- 2.12 end.
- 2.13 Постановка:
- 2.14 Варианты решения:
- 2.15 Решения
- 2.16 end.
- 2.1 Не избыточность.
- 2.1.1 Постановка:
- 2.1.2 Варианты решения:
- 2.1.3 Решения
- 2.1.4 end.
- 2.1.5 Постановка:
- 2.1.6 Варианты решения:
- 2.1.7 Решения
- 2.1.8 end.
- 2.2 Важно
Базовый тип
Нужна ли параметризация типа "Интервал" типом концов интервала?
Комментарий. Насколько востребованной окажется эта возможность, если библиотека будет предлагать возможность выбирать базовый тип концов из некоторого разумно богатого набора типов (double, Rational, BigBinary и т.п.)?
Варианты
- Да, чтобы пользователь мог в качестве базового использовать собственный тип (например, MyAdvancedRational).
- Нет, сделать интервалы с фиксированным набором базовых типов.
Мнения
- Тепикин Егор - 1 (но еще сделать реализацию интервала просто на даблах для быстрых вычислений (без универсального типа))
- Жилин Сергей - 2. Излишняя гибкость ни к чему.
- Надежин Дима - 1 (универсальный возвращается пользователю методами RealInterval.getExaclLowerBound/getExactUpperBound. RealInterval реализуется подклассом с универсальными границами для интервалов большой точности, и подклассом с double границами, оба подкласса скрыты).
Должен ли пользователь "видеть" типы концов интервала?
Комментарий.
Варианты
- Да, чтобы жестко регулировать фактическую точность и скорость вычислений.
- Нет, пользователю незачем видеть типы - достаточно задавать точность и направление округления.
Мнения
- Тепикин Егор - 2 (если тип округления будет глобальным)
- Жилин Сергей - ? Термин "видеть" неоднозначен. Не понимаю, о чем именно речь.
- Надежин Дима - 2
Какие режимы округления должна поддерживать библиотека?
Комментарий.
Варианты
- Три режима: отсутствие округления, строгое направленное округление, нестрогое округление
- Два режима: отсутствие округления, строгое направленное округление
- Один режим: строгое направленное округление
- Иное
Мнения
- Тепикин Егор - 3 (но помним что я хочу еще одну реализацию интервала на даблах без округления)
- Жилин Сергей - 1 или 2
- Надежин Дима - 3
Алгебра.
Постановка:
Как для пользователя удобнее пользоваться алгеброй над интервалами.
Варианты решения:
- Algebra.peration(Interval,Interval);
- Interval.Algebra.operation(Interval);
- Interval.Operation(Interval);
Решения
- Тепикин Егор - 3 (то есть вообще скрыть алгебру от пользователя и сделать её глобальной переменной)
- Жилин Сергей - 3 (зашить алгебру внутрь интервала - жестко прописать все функции (ХАРТКОД) )
- Дронов Кирилл - 3
- Данилов Максим - 3
- Надежин Дима - 3 (скрыть алгебру от пользователя и сделать её переменной нити)
end.
Постановка:
Нужна ли возможность менять алгебру "на лету"
Варианты решения:
- Да - посчитали в классической - перешли в Каухера посчитали - вернулись обратно к классической.
- Нет если считаешь в классике то в ней и считай - нужна другая алгебра создавай новый экземпляр.
Решения
- Тепикин Егор - 2
- Жилин Сергей - 2
- Дронов Кирилл - 2
- Данилов Максим - 2
- Надежин Дима - 2
end.
Постановка:
Нужна ли модальность и операции объединения и пересечения
Варианты решения:
- Да и они должны содержаться в алгебре как параметр.
- Да и они должны быть отдельным классом.
- Нет.
Решения
- Тепикин Егор - 1
- Жилин Сергей - 1
- Дронов Кирилл - 2
- Данилов Максим - 1
- Надежин Дима - не понял про модальность, 1 - операции пересечения и объединения часть сигнатуры Interval
end.
Постановка:
Нужно ли наследование алгебр друг от друга.
Варианты решения:
- Наследовать стоит чтобы избежать повторения одинакового кода
- Наследовать не стоит поскольку алгебры по сути являются различными (просто сделать общий интерфейс)
Решения
- Тепикин Егор - 2
- Надежин Дима - 2
end.
Не избыточность.
Постановка:
Будем ли мы использовать сторонние библиотеки (например JSсience Javolution)
Варианты решения:
- Нет мы пишем библиотеку без зависимостей от сторонних проектов.
- Да - будем использовать, т.к. это сократит время разработки и увеличит производительность
Решения
- Тепикин Егор - 1 (но мы можем брать чужие куски кода)
- Жилин Сергей - 1
- Дронов Кирилл - 1
- Данилов Максим - 1
- Надежин Дима - 1 (но лицензия нашей библиотеки должна позволять создавать от нее клоны и включать в другие библиотеки (JScience, Apache Commnons Math) и другие JVM языки (scala, fortress))
end.
Постановка:
Нужна ли многозадачность?
Варианты решения:
- Да
- Нет.
Решения
- Тепикин Егор - 2 (с начало реализуем линейные алгоритмы, а совершенствовать потом)
- Надежин Дима - 2 (библиотеке распараллеливать алгоритмы пока не стоит, но API должно быть сразу ThreadSafe, чтобы пользователи могли распараллеливать алгоритмы сами. Изменение контекста в одном потоке не должно влиять на контекст в других потоках)
end.
Важно
статья находится в разработке часть ответов считать неверными тем более они могут поменяться в процессе дальнейшего обсуждения





