2017-01-30 13 views
0

Итак, предположим, что я работаю в мире дискретной математики, и у меня есть некоторая функцияКакие объекты принадлежат методу? Перевод с дискретной математики

f: A x B x C -> D.

С помощью этой функции я могу выполнять вычисления, такие как f(a,b,c) = d. (Я расплывчатый здесь специально).

Теперь предположим, что я хочу реализовать это вычисление явно на каком-то современном языке программирования OO. Поэтому я инициализирую переменную под названием a класса ClassA и т. Д. С b и c. И что? Какой объект должен собственный расчет? Или это может быть инициализатор. Может быть, это статическая функция?

я мог бы:

  • d = a.f_1(b,c),
  • d = b.f_2(a,c),
  • d = c.f_3(a,b),
  • d = new ObjD(a,b,c),
  • d = ZStatic.f_4(a,b,c)

все как правдоподобные варианты, не так ли?

Учитывая, требуется ли требование симметрии, я реализую все эти параметры?

Я бы предпочел полностью отказаться от конструкторского подхода, но помимо этого я не знаю, какой прогресс можно было бы сделать, кроме предположения о сугубо произвольной информации.

Итак, какой объект должен иметь функцию $ f $, если таковая имеется?

ответ

2

Чтобы дать лучший ответ, важно знать, какие переменные вы используете.

Очень важным показателем в oop является достижение высокая степень сцепления. Сплоченность - это степень, в которой элементы модуля принадлежат друг другу. Если ваши переменные a, b и c принадлежат друг другу в определенном контексте, то это должно быть наилучшим решением для размещения их в одном классе. И если они находятся в одном классе, вы не должны беспокоиться о том, какой класс должен владеть вычислением (ваше четвертое решение).

Возможно и последнее предложение использовать статическую функцию. Этот подход часто используется в математических библиотеках на разных языках (например, Java: Math class)