सॉफ्टवेयर रूपरेखा

**सॉफ़्टवेयर रूपरेखा** कंप्यूटर प्रोग्रामिंग में एक अमूर्तता है जिसमें सॉफ़्टवेयर, सामान्य कार्यक्षमता प्रदान करता है, अतिरिक्त उपयोगकर्ता-लिखित कोड द्वारा चुनिंदा रूप से बदला जा सकता है, इस प्रकार एप्लिकेशन-विशिष्ट सॉफ़्टवेयर प्रदान करता है। यह एप्लिकेशन बनाने और तैनात करने का एक मानक तरीका प्रदान करता है और एक सार्वभौमिक, पुन: प्रयोज्य सॉफ़्टवेयर वातावरण है जो सॉफ़्टवेयर एप्लिकेशन, उत्पादों और समाधानों के विकास को सुविधाजनक बनाने के लिए एक बड़े सॉफ़्टवेयर प्लेटफ़ॉर्म के हिस्से के रूप में विशेष कार्यक्षमता प्रदान करता है। 

सॉफ्टवेयर फ्रेमवर्क में सपोर्ट प्रोग्राम, कंपाइलर, कोड लाइब्रेरी, टूलसेट और एप्लिकेशन प्रोग्रामिंग इंटरफेस (एपीआई) शामिल हो सकते हैं जो किसी प्रोजेक्ट या सिस्टम के विकास को सक्षम करने के लिए सभी विभिन्न घटकों को एक साथ लाते हैं।

फ्रेमवर्क में प्रमुख विशिष्ट विशेषताएं होती हैं जो उन्हें सामान्य पुस्तकालयों से अलग करती हैं:

* *नियंत्रण का उलटा* : एक ढांचे में, पुस्तकालयों या मानक उपयोगकर्ता अनुप्रयोगों के विपरीत, समग्र कार्यक्रम का नियंत्रण प्रवाह कॉलर द्वारा नहीं, बल्कि ढांचे द्वारा निर्धारित होता है।  यह आमतौर पर टेम्पलेट विधि पैटर्न के साथ हासिल किया जाता है।
* *डिफ़ॉल्ट व्यवहार* : इसे एक अमूर्त वर्ग में टेम्प्लेट विधि पैटर्न के अपरिवर्तनीय तरीकों के साथ प्रदान किया जा सकता है जो फ्रेमवर्क द्वारा प्रदान किया जाता है।
* *एक्स्टेंसिबिलिटी* : एक उपयोगकर्ता फ्रेमवर्क का विस्तार कर सकता है - आमतौर पर चयनात्मक ओवरराइडिंग द्वारा - या प्रोग्रामर विशिष्ट कार्यक्षमता प्रदान करने के लिए विशेष उपयोगकर्ता कोड जोड़ सकते हैं। यह आमतौर पर उपवर्ग में हुक विधि द्वारा प्राप्त किया जाता है जो सुपरक्लास में टेम्पलेट विधि को ओवरराइड करता है।
* *गैर-संशोधनीय फ्रेमवर्क कोड* : सामान्य तौर पर, उपयोगकर्ता द्वारा कार्यान्वित एक्सटेंशन को स्वीकार करते समय फ्रेमवर्क कोड को संशोधित नहीं किया जाना चाहिए। दूसरे शब्दों में, उपयोगकर्ता फ़्रेमवर्क का विस्तार कर सकते हैं, लेकिन उसके कोड को संशोधित नहीं कर सकते।

## उदाहरण
उपयोगकर्ता अनुप्रयोगों को बूटस्ट्रैप करने में मदद करने के लिए सॉफ्टवेयर फ्रेमवर्क में आमतौर पर काफी हाउसकीपिंग और उपयोगिता कोड होते हैं, लेकिन आम तौर पर विशिष्ट समस्या डोमेन पर ध्यान केंद्रित किया जाता है, जैसे:

* कलात्मक चित्र, संगीत रचना, और यांत्रिक सीएडी  
* वित्तीय मॉडलिंग अनुप्रयोग 
* पृथ्वी प्रणाली मॉडलिंग अनुप्रयोग 
* निर्णय समर्थन प्रणालियाँ 
* मीडिया प्लेबैक और संलेखन
* वेब रूपरेखा
* मध्यस्थ
* कैक्टस रूपरेखा - उच्च प्रदर्शन वैज्ञानिक कंप्यूटिंग।
* ऐप्लिकेशन रूपरेखा  - सामान्य जीयूआई अनुप्रयोग।
* एंटरप्राइज आर्किटेक्चर रूपरेखा
* ओरेकल एप्लिकेशन डेवलपमेंट रूपरेखा
* लारवेल (PHP रूपरेखा)
* मैलवेयर, उदाहरण के लिए पाइपड्रीम
* Php4डेल्फ़ी

## संरचना

प्री के अनुसार,  सॉफ्टवेयर फ्रेमवर्क में *फ्रोज़न स्पॉट* और *हॉट स्पॉट* शामिल होते हैं। *फ्रोजन स्पॉट* एक सॉफ्टवेयर सिस्टम की समग्र वास्तुकला को परिभाषित करते हैं, यानी इसके बुनियादी घटकों और उनके बीच संबंधों को परिभाषित करते हैं। ये अनुप्रयोग ढाँचे की किसी भी तात्कालिकता में अपरिवर्तित (जमे हुए; फ़ॉज़ेन) रहते हैं। *हॉट स्पॉट* उन हिस्सों का प्रतिनिधित्व करते हैं जहां फ्रेमवर्क का उपयोग करने वाले प्रोग्रामर अपने स्वयं के प्रोजेक्ट के लिए विशिष्ट कार्यक्षमता जोड़ने के लिए अपना कोड जोड़ते हैं।

वस्तु-उन्मुख वातावरण में, एक रूपरेखा में अमूर्त और ठोस वर्ग होते हैं। इस तरह के ढांचे के इंस्टेंटेशन में मौजूदा वर्गों की रचना और उपवर्गीकरण शामिल है। 

आवश्यक कार्यक्षमता को टेम्प्लेट विधि पैटर्न का उपयोग करके कार्यान्वित किया जा सकता है जिसमें *जमे हुए स्थानों को* अपरिवर्तनीय विधियों के रूप में जाना जाता है और *हॉट स्पॉट को* वेरिएंट या हुक विधियों के रूप में जाना जाता है। सुपरक्लास में अपरिवर्तनीय विधियाँ डिफ़ॉल्ट व्यवहार प्रदान करती हैं जबकि प्रत्येक उपवर्ग में हुक विधियाँ कस्टम व्यवहार प्रदान करती हैं।

सॉफ़्टवेयर ढांचे के साथ एक ठोस सॉफ़्टवेयर सिस्टम विकसित करते समय, डेवलपर्स सिस्टम की विशिष्ट आवश्यकताओं और आवश्यकताओं के अनुसार हॉट स्पॉट का उपयोग करते हैं। सॉफ़्टवेयर फ़्रेमवर्क हॉलीवुड सिद्धांत पर निर्भर करते हैं: "हमें कॉल न करें, हम आपको कॉल करेंगे।"   इसका मतलब यह है कि उपयोगकर्ता-परिभाषित कक्षाएं (उदाहरण के लिए, नए उपवर्ग) पूर्वनिर्धारित फ्रेमवर्क कक्षाओं से संदेश प्राप्त करते हैं। डेवलपर्स आमतौर पर सुपरक्लास अमूर्त तरीकों को लागू करके इसे संभालते हैं।

## सन्दर्भ

## बाहरी संबंध
* 
*