Bilimsel hesaplamada kullanılan algoritmaların çoğu, daha az matematik ağırlıklı yazılım mühendisliği formlarında ele alınan algoritmalardan farklı bir doğal yapıya sahiptir. Özellikle, bireysel matematiksel algoritmalar oldukça karmaşık olma eğilimindedir, genellikle yüzlerce veya binlerce satırlık satır içerir, ancak yine de hiçbir durum içermez (yani karmaşık bir veri yapısına etki etmez) ve genellikle programlı olarak kaynatılabilir arayüz - bir dizi (veya iki) üzerinde çalışan tek bir işleve.
Bu, bir sınıfın değil, bir fonksiyonun bilimsel hesaplamada karşılaşılan çoğu algoritmanın doğal arayüzü olduğunu göstermektedir. Ancak bu argüman, karmaşık, çok parçalı algoritmaların uygulanmasının nasıl ele alınması gerektiğine dair çok az fikir vermektedir.
Geleneksel yaklaşım, bir dizi başka işlevi çağıran ve ilgili argümanları yol boyunca geçiren bir işleve sahip olmak olsa da, OOP farklı bir yaklaşım sunar, burada algoritmalar sınıf olarak kapsüllenebilir. Açıklık için, bir algoritmayı bir sınıfa kapsüllemek suretiyle, algoritma girişlerinin sınıf yapıcısına girildiği ve daha sonra algoritmayı gerçekten çağırmak için genel bir yöntem çağrıldığı bir sınıf yaratmak anlamına gelir. C ++ psuedocode içinde multigrid'in böyle bir uygulaması aşağıdaki gibi görünebilir:
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.]
}
O zaman sorum şu: sınıfsız daha geleneksel bir yaklaşımla karşılaştırıldığında bu tür uygulamanın faydaları ve dezavantajları nelerdir? Genişletilebilirlik veya sürdürülebilirlik sorunları var mı? Açık olmak gerekirse, görüş almak istemiyorum, daha ziyade böyle bir kodlama uygulamasını benimsemenin aşağı yönlü etkilerini (yani bir kod tabanı oldukça büyük hale gelene kadar ortaya çıkamayan) daha iyi anlamak istiyorum.