वैज्ञानिक कंप्यूटिंग में उपयोग किए जाने वाले कई एल्गोरिदम में सॉफ़्टवेयर इंजीनियरिंग के कम गणित-गहन रूपों में सामान्यतः एल्गोरिदम की तुलना में एक अलग अंतर्निहित संरचना है। विशेष रूप से, व्यक्तिगत गणितीय एल्गोरिदम अत्यधिक जटिल होते हैं, जिसमें अक्सर कोड की सैकड़ों या हजारों लाइनें शामिल होती हैं, फिर भी गैर-राज्य इसमें शामिल नहीं होते हैं (अर्थात एक जटिल डेटा संरचना पर कार्य नहीं कर रहे हैं) और अक्सर उबला जा सकता है - प्रोग्रामेटिक के संदर्भ में इंटरफ़ेस - एक सरणी (या दो) पर अभिनय करने वाले एकल फ़ंक्शन के लिए।
इससे पता चलता है कि एक फ़ंक्शन, और एक वर्ग नहीं, वैज्ञानिक कंप्यूटिंग में सामना किए गए अधिकांश एल्गोरिदम के लिए प्राकृतिक इंटरफ़ेस है। फिर भी यह तर्क जटिल, बहु-भाग एल्गोरिदम के कार्यान्वयन के बारे में बहुत कम जानकारी प्रदान करता है।
हालांकि पारंपरिक दृष्टिकोण में केवल एक फ़ंक्शन है जो कई अन्य फ़ंक्शन को कॉल करता है, जिस तरह से प्रासंगिक तर्क पारित करते हैं, ओओपी एक अलग दृष्टिकोण प्रदान करता है, जिसमें एल्गोरिदम को कक्षाओं के रूप में समझाया जा सकता है। स्पष्टता के लिए, एक वर्ग में एक एल्गोरिथ्म को एनकैप्सुलेट करने से मेरा मतलब है कि एक वर्ग बनाना जिसमें एल्गोरिथ्म इनपुट को कक्षा निर्माता में दर्ज किया जाता है, और फिर एक सार्वजनिक विधि को वास्तव में एल्गोरिथ्म को लागू करने के लिए कहा जाता है। C ++ pededocode में मल्टीग्रिड का ऐसा कार्यान्वयन जैसा लग सकता है:
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.]
}
मेरा प्रश्न इस प्रकार है: वर्गों के बिना एक अधिक पारंपरिक दृष्टिकोण की तुलना में इस तरह के अभ्यास के लाभ और कमियां क्या हैं? क्या एक्स्टेंसिबिलिटी या मेंटेनेंस के मुद्दे हैं? स्पष्ट होने के लिए, मैं एकांत राय का इरादा नहीं कर रहा हूं, बल्कि इस तरह के कोडिंग अभ्यास को अपनाने के लिए बहाव प्रभाव (यानी जो एक कोडबेस काफी बड़े होने तक उत्पन्न नहीं हो सकते हैं) को बेहतर ढंग से समझने के लिए।