과학 컴퓨팅에 사용되는 많은 알고리즘은 수학적으로 덜 집중적 인 형태의 소프트웨어 엔지니어링에서 일반적으로 고려되는 알고리즘과는 다른 고유 구조를 가지고 있습니다. 특히, 개별 수학적 알고리즘은 종종 수백 또는 수천 줄의 코드를 포함하는 매우 복잡한 경향이 있지만 그럼에도 불구하고 상태를 포함하지 않으며 (즉, 복잡한 데이터 구조에 영향을 미치지 않음) 프로그래밍 방식의 관점에서 종종 중단 될 수 있습니다. 인터페이스-배열 (또는 2 개)에 작용하는 단일 함수.
이것은 클래스가 아닌 함수가 과학 컴퓨팅에서 발생하는 대부분의 알고리즘에 대한 자연스러운 인터페이스임을 암시합니다. 그러나이 주장은 복잡한 멀티 파트 알고리즘의 구현이 어떻게 처리되어야하는지에 대한 통찰력을 제공하지 못한다.
전통적인 접근 방식은 단순히 여러 다른 함수를 호출하는 하나의 함수를 가지고 관련 인수를 전달하는 반면 OOP는 알고리즘을 클래스로 캡슐화 할 수있는 다른 접근 방식을 제공합니다. 명확성을 위해, 클래스에 알고리즘을 캡슐화함으로써, 알고리즘 입력이 클래스 생성자에 입력 된 클래스를 작성하고 나서 공개 메소드가 호출되어 실제로 알고리즘을 호출합니다. C ++ psuedocode에서 멀티 그리드의 이러한 구현은 다음과 같습니다.
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.]
}
내 질문은 다음과 같습니다 : 수업이없는보다 전통적인 접근법과 비교할 때 이런 종류의 연습의 장점과 단점은 무엇입니까? 확장 성 또는 유지 관리 성 문제가 있습니까? 분명히, 나는 의견을 요구하려는 것이 아니라, 그러한 코딩 방법을 채택하는 다운 스트림 효과 (즉, 코드베이스가 상당히 커질 때까지 발생할 수없는 영향)를 더 잘 이해하고자한다.