Muitos algoritmos usados na computação científica têm uma estrutura inerente diferente dos algoritmos comumente considerados em formas menos intensivas em matemática de engenharia de software. Em particular, algoritmos matemáticos individuais tendem a ser altamente complexos, geralmente envolvendo centenas ou milhares de linhas de código, e, no entanto, não envolvem estado (ou seja, não estão agindo sobre uma estrutura de dados complexa) e podem ser resumidos - em termos de programação programática. interface - para uma única função que atua em uma matriz (ou duas).
Isso sugere que uma função, e não uma classe, é a interface natural para a maioria dos algoritmos encontrados na computação científica. No entanto, esse argumento oferece poucas informações sobre como a implementação de algoritmos complexos de múltiplas partes deve ser tratada.
Embora a abordagem tradicional tenha sido simplesmente ter uma função que chama várias outras funções, passando os argumentos relevantes ao longo do caminho, o OOP oferece uma abordagem diferente, na qual os algoritmos podem ser encapsulados como classes. Para maior clareza, ao encapsular um algoritmo em uma classe, quero dizer criar uma classe em que as entradas do algoritmo são inseridas no construtor da classe e, em seguida, um método público é chamado para realmente chamar o algoritmo. Essa implementação de multigrid no psuedocode C ++ pode parecer com:
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.]
}
Minha pergunta é a seguinte: quais são os benefícios e as desvantagens desse tipo de prática em comparação com uma abordagem mais tradicional sem classes? Existem problemas de extensibilidade ou manutenção? Para esclarecer, não pretendo solicitar opinião, mas entender melhor os efeitos posteriores (ou seja, aqueles que podem não surgir até que uma base de código se torne bastante grande) de adotar essa prática de codificação.