Рассмотрим прямоугольник со сторонами X и Y и площадь Z такие, что Z = X * Y.Как создать класс прямоугольника?
Прямоугольник должен быть смоделирован в чистейшей ООД, который будет поставлять следующие две услуги:
- данной стороны X и Y стороны, рассчитать площадь Z.
- Учитывая сторона Х и Z площадь, рассчитать сторона Y.
Одним из возможных конструкций я думал на это:
класса Rectangle, который имеет частный инвариант X и Y, метод общедоступного экземпляра Z = ки lcArea(), работающий на X и Y, и метод публичных экземпляров Y = calcSide (Z), работающий на X и по аргументу Z.
Хорошая практика OOD сообщает нам, что Rectangle должен иметь конструктор, который инициализирует X и Y, с некоторыми действительными значениями, оба сразу.
Однако это решение подразумевает, что для вычисления Y, заданного X и Z, необходимо инициализировать конструктор класса с нулевым значением для Y. Инициализация инварианта с Null является грязным программированием.
Есть ли какой-либо чистый, один класс, решение OOD?
Спасибо всем вам за полезные и проницательные ответы! Это не домашнее задание. На самом деле, это упрощенное представление, предназначенное для демонстрации финансовых проблем реального мира, с которыми я имею дело.
Например, Black & Модель оценки опционов Sholts выводит цену из указанных 5 финансовых параметров. Одна из этих 5 - волатильность. Бывают случаи, когда вы знаете цену и хотите извлечь подразумеваемую волатильность с использованием того же вычислительного ядра. Кроме того, я нашел необходимость в обратном вычислении с использованием того же вычислительного ядра, что и повторяющийся полезный шаблон. Например, вы можете извлечь цену облигации, зная процентную ставку, но иногда вам нужно извлечь подразумеваемую процентную ставку, зная цену облигации. Часто эти модели работают внутри цикла итераций. Настаивание на использовании функции экземпляра, а не статической функции, имеет достоинство производительности - минимизируя аргументы функции, приложение имеет меньше предварительных условий для проверок.
Могу ли я подвергнуть сомнению помещение? Зачем предлагать вариант 2? Это гипотетично? –
Это звучит очень много, как домашнее задание. – Charles