Muchos algoritmos utilizados en computación científica tienen una estructura inherente diferente a los algoritmos comúnmente considerados en formas menos intensivas en matemáticas de ingeniería de software. En particular, los algoritmos matemáticos individuales tienden a ser muy complejos, a menudo involucran cientos o miles de líneas de código, sin embargo, no involucran ningún estado (es decir, no actúan sobre una estructura de datos compleja) y a menudo pueden reducirse, en términos de programación. interfaz: a una sola función que actúa sobre una matriz (o dos).
Esto sugiere que una función, y no una clase, es la interfaz natural para la mayoría de los algoritmos encontrados en la informática científica. Sin embargo, este argumento ofrece poca información sobre cómo debe manejarse la implementación de algoritmos complejos de múltiples partes.
Si bien el enfoque tradicional ha sido simplemente tener una función que llame a varias otras funciones, pasando los argumentos relevantes en el camino, OOP ofrece un enfoque diferente, en el que los algoritmos se pueden encapsular como clases. Para mayor claridad, al encapsular un algoritmo en una clase, me refiero a crear una clase en la que las entradas del algoritmo se ingresen en el constructor de la clase, y luego se llama a un método público para invocar el algoritmo. Tal implementación de multigrid en psuedocode C ++ podría verse así:
class multigrid {
private:
x_, b_
[grid structure]
restrict(...)
interpolate(...)
relax(...)
public:
multigrid(x,b) : x_(x), b_(b) { }
run()
}
multigrid::run() {
[call restrict, interpolate, relax, etc.]
}
Mi pregunta es la siguiente: ¿cuáles son los beneficios y los inconvenientes de este tipo de práctica en comparación con un enfoque más tradicional sin clases? ¿Hay problemas de extensibilidad o mantenibilidad? Para ser claros, no tengo la intención de solicitar una opinión, sino más bien de comprender mejor los efectos posteriores (es decir, los que podrían no surgir hasta que una base de código se vuelva bastante grande) de adoptar una práctica de codificación de este tipo.