सॉफ्टवेयर इंजीनियरिंग जैसा कि आज पढ़ाया जाता है, पूरी तरह से ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग और दुनिया के 'प्राकृतिक' ऑब्जेक्ट-ओरिएंटेड व्यू पर केंद्रित है। एक विस्तृत कार्यप्रणाली है जो बताती है कि डोमेन मॉडल को क्लास मॉडल में कई चरणों और बहुत सारे (यूएमएल) कलाकृतियों का उपयोग-केस-डायग्राम या क्लास-डायग्राम के रूप में कैसे बदलना है। कई प्रोग्रामर्स ने इस दृष्टिकोण को आंतरिक रूप दिया है और खरोंच से ऑब्जेक्ट-ओरिएंटेड एप्लिकेशन को डिज़ाइन करने के तरीके के बारे में एक अच्छा विचार है।
नया प्रचार कार्यात्मक प्रोग्रामिंग है, जिसे कई पुस्तकों और ट्यूटोरियल में पढ़ाया जाता है। लेकिन कार्यात्मक सॉफ्टवेयर इंजीनियरिंग के बारे में क्या? लिस्प और क्लोजर के बारे में पढ़ते हुए, मैं दो दिलचस्प बयानों के बारे में आया:
कार्यात्मक कार्यक्रमों को अक्सर ऊपर नीचे ('लिस्प', पॉल ग्राहम) के बजाय नीचे विकसित किया जाता है
कार्यात्मक प्रोग्रामर उन मानचित्रों का उपयोग करते हैं जहां ओओ-प्रोग्रामर ऑब्जेक्ट्स / कक्षाएं ('जावा प्रोग्रामर्स के लिए क्लोजर', रिच हिकले द्वारा बात करते हैं) का उपयोग करते हैं।
तो एक कार्यात्मक अनुप्रयोग का एक व्यवस्थित (मॉडल आधारित) डिजाइन के लिए कार्यप्रणाली क्या है, यानी लिस्प या क्लोजर में? सामान्य कदम क्या हैं, मैं किन कलाकृतियों का उपयोग करता हूं, मैं उन्हें समस्या स्थान से समाधान स्थान तक कैसे मैप करूं?