Спецификация
Разработка любого программного обеспечения или отдельного компонента начинается с постановки задачи, анализа требований и проработки спецификации.
Спецификация вовсе необязательно является большим документом, который детально и всеобъемлюще описывает каждую мелочь. Зачастую для простых компонентов достаточно короткого описания, резюмирующего ключевые моменты.
Составим короткую спецификацию для нашей задачи.
Базовые определения
Класс
Fraction
представляет собой обыкновенную дробь, заданную двумя целыми числами — числителем и знаменателем.$$\frac{n}{d}$$
Знаменатель не должен быть равен нулю.
$$d \neq 0$$
- Класс
Fraction
должен быть неизменяемым (подробнее о концепции неизменяемости Вы узнаете в разделе Принципы проектирования классов). - Знак дроби определяется по знаку числителя; знаменатель всегда берется по модулю.
- Обыкновенная дробь имеет десятичное представление.
Дробь, обратная заданной, получается перестановкой числителя и знаменателя.
$$\left(\frac{n}{d}\right)^{-1} = \frac{d}{n}$$
Модуль обыкновенной дроби — это дробь, числитель и знаменатель которой берутся по модулю.
$$\left|\frac{n}{d}\right| = \frac{|n|}{|d|}$$
Сократимость
- Обыкновенную дробь называют несократимой, если ее числитель и знаменатель являются взаимнопростыми.
- Класс должен поддерживать вычисление несократимой дроби, равной заданной.
Неправильные дроби
У неправильной дроби модуль числителя больше или равен модулю знаменателя.
$$\left|n\right| \ge \left|d\right|$$
- Класс должен поддерживать вычисление целой части и остатка неправильной дроби.
Арифметические операции и сравнение
- Арифметические операции
+
,-
,*
и/
выполняются по правилам алгебры и возвращают результат в виде несократимой дроби. - Между дробями должны быть определены операции алгебраического сравнения, подобные операциям сравнения чисел:
==
,!=
,<
,<=
,>
и>=
.
Способы представления
Стандартное представление дроби — числитель отделяется от знаменателя косой чертой.
- Алгебраическая запись неправильной дроби в виде суммы или разности целой части и остатка.