एक सॉफ्टवेयर ढांचा क्या है? [बन्द है]


193

क्या कोई मुझे बता सकता है कि एक सॉफ्टवेयर ढांचा क्या है? हमें एक रूपरेखा की आवश्यकता क्यों है? प्रोग्रामिंग को आसान बनाने के लिए एक रूपरेखा क्या करती है?

जवाबों:


422

मुझे इसका उत्तर देने में बहुत देर हो चुकी है। लेकिन, मैं एक उदाहरण साझा करना चाहूंगा, जिसके बारे में मैंने आज ही सोचा था। यदि मैंने आपको 5 मी 5 आयामों के साथ कागज के एक टुकड़े को काटने के लिए कहा, तो निश्चित रूप से आप ऐसा करेंगे। लेकिन मान लीजिए कि मैं आपसे एक ही आयाम के कागज के 1000 टुकड़े करने के लिए कहता हूं। इस मामले में, आप 1000 बार माप नहीं करेंगे; स्पष्ट रूप से, आप 5 मी 5 मी का एक फ्रेम बनाते हैं, और फिर इसकी मदद से आप कम समय में 1000 टुकड़ों के कागज को काटने में सक्षम होंगे। इसलिए, आपने जो किया वह एक ऐसा ढांचा था जो एक विशिष्ट प्रकार का कार्य करेगा। एक ही प्रकार के अनुप्रयोगों के लिए बार-बार एक ही प्रकार का कार्य करने के बजाय, आप एक अच्छी पैकेट में उन सभी सुविधाओं को एक साथ मिलकर एक रूपरेखा बनाते हैं, इसलिए आपके आवेदन के लिए अमूर्तता प्रदान करते हैं और अधिक महत्वपूर्ण रूप से कई अनुप्रयोग।


27
मैं जवाब देने के लिए नीचे मतदान का कारण जानना चाहूंगा। यह मुझे इसे बेहतर बनाने में मदद करेगा।
नेहा चौधरी

4
समझने में बहुत आसान है ........... बहुत
प्रेमकुमार

25
@ न्हीचौधरी, मैं नहीं, लेकिन वह -1 क्योंकि आप जिस बारे में बात कर रहे हैं, वह एक पुस्तकालय है, न कि एक फ्रेम के बाद से वह आईओसी है।
पचेरियर

11
मैंने आपकी पोस्ट पढ़ी है, लेकिन आप जो पोस्ट करते हैं, वह ऐसा लगता है जैसे लाइब्रेरी क्या कर सकती है। फ्रेमवर्क और लाइब्रेरी के बीच अंतर को कैसे समझा जाए?
आरोन लियू

2
मुझे समझ नहीं आ रहा है। क्या आपने समझाया कि पुस्तकालय की तरह अधिक सही होगा?
राउटर

92

तकनीकी रूप से, आपको एक रूपरेखा की आवश्यकता नहीं है । यदि आप वास्तव में बहुत ही सरल साइट बना रहे हैं (1992 में वेब पर वापस जाएं), तो आप इसे केवल हार्ड-कोडेड HTML और कुछ CSS के साथ कर सकते हैं।

और अगर आप एक आधुनिक वेबप बनाना चाहते हैं, तो आपको वास्तव में उसके लिए एक फ्रेमवर्क का उपयोग करने की आवश्यकता नहीं है ।

इसके बजाय आप हर बार अपने आप को ज़रूरत के सभी तर्क लिखना चुन सकते हैं। आप अपनी खुद की डेटा-दृढ़ता / भंडारण परत लिख सकते हैं, या - यदि आप बहुत व्यस्त हैं - बस हर एक डेटाबेस एक्सेस के लिए कस्टम SQL लिखें। आप अपनी खुद की प्रमाणीकरण और सत्र हैंडलिंग परतें लिख सकते हैं। और अपने स्वयं के टेम्पलेट तर्क तर्क। और आपके अपने अपवाद-हैंडलिंग तर्क। और आपके अपने सुरक्षा कार्य। और यह सुनिश्चित करने के लिए कि आपकी सभी इकाई परीक्षण रूपरेखा ठीक है। और आपका अपना ... [काफी लंबे समय तक चलता है]

फिर से, यदि आप एक फ्रेमवर्क का उपयोग करते हैं , तो आप अच्छे, आमतौर पर सहकर्मी की समीक्षा और दर्जनों के बहुत अच्छी तरह से परीक्षण किए गए कार्यों से लाभ उठा पाएंगे यदि सैकड़ों अन्य डेवलपर्स नहीं हैं, जो आपके लिए बेहतर हो सकते हैं। आपको निर्माण करना होगा जो आप तेजी से चाहते हैं, बिना समय बिताने के लिए या ऊपर सूचीबद्ध बुनियादी सुविधाओं के बारे में चिंता किए बिना।

आप कम समय में अधिक काम कर सकते हैं, और यह जान सकते हैं कि आप जिस फ्रेमवर्क कोड का उपयोग कर रहे हैं या कर रहे हैं, वह आपके द्वारा स्वयं किए जाने से बेहतर होने की संभावना है।

और इस की लागत? कुछ समय के लिए ढांचा सीखना। लेकिन - जैसा कि वस्तुतः हर वेब देवता वहाँ उपस्थित होगा - यह निश्चित रूप से सीखने लायक समय है कि आप जो भी फ्रेमवर्क चुनते हैं उससे बड़े पैमाने पर (वास्तव में, बड़े पैमाने पर) लाभ मिलता है।


17
उस ऊर्जा को एक खुले स्रोत के ढांचे में योगदान करने के लिए क्यों नहीं, बल्कि अपने स्वयं के सामान को ऊपर उठाने में डाल दिया जाए? 'अकेले, हम चट्टानों को हिला सकते हैं; एक साथ हम पहाड़ों को स्थानांतरित कर सकते हैं 'और वह सब
स्टीव जालिम

7
@ जेफ्री "फिर आप कैसे सीखेंगे? आप एक प्रोग्रामर के रूप में कैसे बड़े होंगे?" हालाँकि आप चाहते हैं कि जानें, लेकिन यदि आप एक वास्तविक ग्राहक के लिए काम करना चाहते हैं, तो आपको कम से कम समय में सबसे अच्छा संभव समाधान प्रदान करना चाहिए। आपका "शायद छोटी गाड़ी" कोड इसके लिए स्वीकार्य नहीं है।
कमोरल्स

6
@Cmorales, यदि आप एक प्रोग्रामिंग भाषा या किसी भी डोमेन विशिष्ट समस्या आप निश्चित रूप से किसी भी "असली" ग्राहक (और आप संभवतः अपने हाथ में बहुत समय होगा) के लिए नहीं जा रहे हैं सीखना चाहते हैं और है कि क्यों मैं newbies का सुझाव है चौखटे से शुरू करने के लिए नहीं।
जूता

3
@ जेफेफ्रे आपने अपनी टिप्पणी में न्यूबाय के बारे में कुछ नहीं कहा, यह सामान्य था। मैं इस बात से सहमत हूं कि आपको पहले स्वयं सीखना चाहिए, लेकिन आपकी टिप्पणी ने यह निर्दिष्ट नहीं किया और वास्तविक (कार्य) जीवन में आप केवल सीखने के लिए छोटी गाड़ी कोड का उपयोग नहीं कर सकते। मैं कुछ लोगों को जानता हूं जो फ्रेमवर्क का उपयोग नहीं करते हैं क्योंकि उन्हें लगता है कि वे बेहतर जानते हैं ... और प्रत्येक प्रोजेक्ट के लिए दो बार खर्च करते हैं।
कॉमरेल्स

1
@Cororales मैं कुछ ऐसे लोगों को भी जानता हूं जो फ्रेमवर्क का उपयोग करते हैं, लेकिन प्रत्येक प्रोजेक्ट के लिए दो बार समय भी लेते हैं। प्रोग्रामिंग गति हमेशा उपयोग किए जा रहे उपकरणों से संबंधित नहीं है।
साइपर

53

विकिपीडिया पर सारांश (सॉफ्टवेयर फ्रेमवर्क) (पहले गूगल हिट btw) इसे काफी अच्छी तरह से समझाता है:

कंप्यूटर प्रोग्रामिंग में एक सॉफ्टवेयर फ्रेमवर्क, एक अमूर्तता है जिसमें सामान्य कोड प्रदान करने वाला सामान्य कोड विशिष्ट कार्यक्षमता प्रदान करने वाले उपयोगकर्ता कोड द्वारा चुनिंदा ओवरराइड या विशेष किया जा सकता है। फ्रेमवर्क सॉफ्टवेयर पुस्तकालयों का एक विशेष मामला है जिसमें वे एक अच्छी तरह से परिभाषित एप्लिकेशन प्रोग्रामिंग इंटरफ़ेस (एपीआई) में लिपटे हुए कोड के पुन: प्रयोज्य सार हैं, फिर भी उनमें कुछ महत्वपूर्ण विशिष्ट विशेषताएं हैं जो उन्हें सामान्य पुस्तकालयों से अलग करती हैं।

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

  1. नियंत्रण का उलटा - एक ढांचे में, पुस्तकालयों या सामान्य उपयोगकर्ता अनुप्रयोगों के विपरीत, समग्र कार्यक्रम के नियंत्रण का प्रवाह कॉलर द्वारा निर्धारित नहीं किया जाता है, लेकिन फ्रेमवर्क द्वारा।
  2. डिफ़ॉल्ट व्यवहार - एक रूपरेखा में एक डिफ़ॉल्ट व्यवहार होता है। यह डिफ़ॉल्ट व्यवहार वास्तव में कुछ उपयोगी व्यवहार होना चाहिए, न कि ऑप्स की एक श्रृंखला।
  3. एक्स्टेंसिबिलिटी - उपयोगकर्ता द्वारा आमतौर पर चयनात्मक ओवरराइडिंग द्वारा या विशिष्ट कार्यक्षमता प्रदान करने वाले उपयोगकर्ता कोड द्वारा एक फ्रेमवर्क बढ़ाया जा सकता है।
  4. गैर-परिवर्तनीय फ्रेमवर्क कोड - सामान्य रूप से फ्रेमवर्क कोड को संशोधित करने की अनुमति नहीं है। उपयोगकर्ता रूपरेखा का विस्तार कर सकते हैं, लेकिन इसके कोड को संशोधित नहीं कर सकते।

आपको इसे "आवश्यकता" हो सकती है क्योंकि यह आपको अनुप्रयोगों को विकसित करते समय एक शानदार शॉर्टकट प्रदान कर सकता है, क्योंकि इसमें पहले से ही बहुत कुछ लिखा और परीक्षण किया गया कार्यक्षमता शामिल है। कारण काफी हद तक हम सॉफ्टवेयर पुस्तकालयों का उपयोग करने के कारण के समान है।


13
आपके उत्तर का सफेद भाग ग्रे भाग की तुलना में अधिक बेहतर था, प्रश्न के प्रकार के अनुसार ...
OlimilOops

मुझे पूरा यकीन है कि सवाल पूछने वाला व्यक्ति विकिपीडिया प्रविष्टि भी पाया ... उसने / उसने शायद अधिक व्यापक उत्तर की तलाश की।
स्टॉफ़फेस

31

पहले से ही बहुत सारे अच्छे जवाब हैं, लेकिन मुझे देखने दें कि क्या मैं आपको एक और दृष्टिकोण दे सकता हूं।

चीजों को काफी सरल करके, आप एक रूपरेखा को एक अनुप्रयोग के रूप में देख सकते हैं जो वास्तविक कार्यक्षमता को छोड़कर पूरा हो गया है। आप कार्यक्षमता और PRESTO में प्लग करते हैं! आपके पास एक आवेदन है।

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

वेब ऐप्स के लिए, सर्वर-साइड ऐप्स आदि के लिए समान प्रकार के फ्रेमवर्क हैं। प्रत्येक मामले में फ्रेमवर्क आपको वास्तविक समस्या डोमेन कार्यक्षमता प्रदान करते समय थकाऊ, दोहराव कोड (उम्मीद) के थोक प्रदान करता है। (यह आदर्श है। वास्तव में, फ्रेमवर्क की सफलता अत्यधिक परिवर्तनशील है।)

मैं फिर से जोर देता हूं कि यह एक रूपरेखा क्या है का सरलीकृत दृष्टिकोण है। मैं डरावने शब्दों का उपयोग नहीं कर रहा हूं जैसे "नियंत्रण का उलटा" और जैसे कि अधिकांश रूपरेखाओं में ऐसी डरावनी अवधारणाएं अंतर्निहित हैं। जब से आप एक शुरुआत कर रहे हैं, मैंने सोचा कि मैं आपको शब्दजाल छोड़ दूंगा और एक आसान उपमा के साथ जाऊंगा।


14

मुझे यकीन नहीं है कि "फ्रेमवर्क" की स्पष्ट-कट परिभाषा है। कभी-कभी पुस्तकालयों के एक बड़े सेट को एक ढांचा कहा जाता है, लेकिन मुझे लगता है कि शब्द का सामान्य उपयोग लाया गया परिभाषा के करीब है।

यह बहुत अच्छा लेख सिर्फ पुस्तकालयों के एक सेट और एक रूपरेखा के बीच अंतर को बताता है:

एक रूपरेखा को पुस्तकालयों के एक सेट के रूप में परिभाषित किया जा सकता है जो कहते हैं कि "हमें फोन न करें, हम आपको कॉल करेंगे।"

एक फ्रेमवर्क कैसे आपकी मदद करता है? क्योंकि खरोंच से कुछ लिखने के बजाय, आप मूल रूप से किसी दिए गए, काम करने वाले एप्लिकेशन का विस्तार करते हैं। आप इस तरह से बहुत अधिक उत्पादकता प्राप्त करते हैं - कभी-कभी परिणामी आवेदन आपके द्वारा एक ही समय सीमा में किए गए कार्य से कहीं अधिक विस्तृत हो सकता है - लेकिन आप आमतौर पर बहुत अधिक लचीलेपन में व्यापार करते हैं।


8

एक सरल व्याख्या है: एक ढांचा एक पाड़ है कि आप चारों ओर अनुप्रयोगों का निर्माण कर सकते हैं।

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

शायद सबसे अच्छा शब्द नहीं है, लेकिन मुझे आशा है कि यह मदद करता है


1
दरअसल, यह चारों ओर की तुलना में मचान में अनुप्रयोगों के निर्माण की तरह है।
जोर्ग डब्ल्यू मित्तग

4

सबसे निचले स्तर पर, एक ढांचा एक वातावरण है, जहां आपको काम करने के लिए उपकरणों का एक सेट दिया जाता है

यह उपकरण पुस्तकालयों, विन्यास फाइलों आदि के रूप में आते हैं।

यह तथाकथित "पर्यावरण" आपको मूल सेटअप (त्रुटि रिपोर्टिंग, लॉग फ़ाइलें, भाषा सेटिंग्स, आदि) प्रदान करता है ... जिसे संशोधित, विस्तारित और निर्मित किया जा सकता है।

लोगों को वास्तव में फ्रेमवर्क की आवश्यकता नहीं है, यह सिर्फ समय बचाने की इच्छा है, और अन्य सिर्फ व्यक्तिगत वरीयताओं का मामला है।

लोग यही कहेंगे कि एक रूपरेखा के साथ, आपको खरोंच से कोड करने की आवश्यकता नहीं है। लेकिन वे सिर्फ ढांचे के साथ पुस्तकालयों को भ्रमित करने वाले लोग हैं।

मैं यहाँ पक्षपाती नहीं हूँ, मैं वास्तव में अभी एक रूपरेखा का उपयोग कर रहा हूँ।


4

सामान्य तौर पर, ए फ्रेम वर्क वास्तविक या वैचारिक संरचना है जिसका उद्देश्य किसी ऐसी चीज के निर्माण के लिए समर्थन या मार्गदर्शिका के रूप में सेवा करना है जो संरचना को किसी उपयोगी चीज में विस्तारित करती है ...


2

एक फ्रेमवर्क विशेष समस्या क्षेत्र को कार्यक्षमता / समाधान प्रदान करता है। विकि
से परिभाषा :

कंप्यूटर प्रोग्रामिंग में एक सॉफ्टवेयर फ्रेमवर्क, एक अमूर्तता है जिसमें सामान्य कोड प्रदान करने वाला सामान्य कोड विशिष्ट कार्यक्षमता प्रदान करने वाले उपयोगकर्ता कोड द्वारा चुनिंदा ओवरराइड या विशेष किया जा सकता है। फ्रेमवर्क सॉफ्टवेयर पुस्तकालयों का एक विशेष मामला है जिसमें वे एक अच्छी तरह से परिभाषित एप्लिकेशन प्रोग्रामिंग इंटरफ़ेस (एपीआई) में लिपटे हुए कोड के पुन: प्रयोज्य सार हैं, फिर भी उनमें कुछ महत्वपूर्ण विशिष्ट विशेषताएं हैं जो उन्हें सामान्य पुस्तकालयों से अलग करती हैं।


पहले वाक्य में एक शब्द है "अमूर्त"। उससे तुम्हारा क्या मतलब है ? हम अमूर्त का उपयोग कहाँ करते हैं?
कुमारसन पेरुमल

2

एक ढांचा हमें "पहले से निर्मित" का उपयोग करने में मदद करता है, एक रूपक की तरह हो सकता है,

लगता है कि पृथ्वी सामग्री प्रोग्रामिंग भाषा है,

और उदाहरण के लिए "एक कैमरा" कार्यक्रम है, और आपने एक नोटबुक बनाने का फैसला किया। आपको हर बार कैमरे को फिर से बनाने की आवश्यकता नहीं है, आप सिर्फ पृथ्वी के ढांचे का उपयोग करें (उदाहरण के लिए एक प्रौद्योगिकी स्टोर के लिए) कैमरा ले जाएं और इसे अपनी नोटबुक में एकीकृत करें।


2

एक रूपरेखा के कुछ कार्य हैं जिनकी आपको आवश्यकता हो सकती है। आपको शायद कुछ प्रकार के सरणियों की आवश्यकता है जिसमें इनबिल्ट छँटाई तंत्र हो। या हो सकता है कि आपको एक ऐसी खिड़की की आवश्यकता है जहाँ आप कुछ नियंत्रण रखना चाहते हैं, जो आप एक रूपरेखा में पा सकते हैं। यह एक प्रकार का कार्य है जो आपके स्वयं के काम के आसपास एक फ्रेम का विस्तार करता है।

संपादित करें: ठीक है, मैं उन लोगों को खोदने के बारे में हूं जो आप लोग मुझे बताने की कोशिश कर रहे थे;) शायद आपने पंक्तियों के बीच की जानकारी "काम करना जो कि एक फ्रेम के चारों ओर फैली हुई है ..." के बीच जानकारी देखी, इससे पहले कि यह गहरी एन गहरी हो रही है। मैं उम्मीद कर रहा हूं कि आप इसे एक मंजिल देने की कोशिश कर रहे हैं:
सवाल का एक अच्छा स्पष्टीकरण "एक पुस्तकालय और एक फ्रेमवर्क के बीच अंतर" मुझे यहां मिला
http://ifacethoughts.net/2007/06/04/difference-between- एक-पुस्तकालय और एक-ढांचा /


पूरी तरह से नीचे के वोटों को नहीं समझते हैं ... मैं इसके बारे में पूरी तरह से स्तब्ध हूं। सवाल शुरुआती बुनियादी सवाल की तरह है और मेरा जवाब उस हिसाब से काफी अच्छा था ...
ओलिमिलोप्स

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

1
उत्तर के लिए धन्यवाद, लेकिन ... यह मेरे प्रश्न का उत्तर नहीं है। ओपी के उद्धरण के अनुसार, "मानक पुस्तकालय" और "फ्रेमवर्क" के बीच का द्वंद्व यहां गलत जगह है। उदाहरण के लिए, नेट-फ्रेमवर्क में, आप फ्रेमप्ले के एक हिस्से में नामस्थान संग्रह पा सकते हैं, मैंने कभी किसी को यह कहते हुए नहीं सुना कि नेमस्पेस कोलनेट्सन .netframework का हिस्सा नहीं है। तो मेरे सवाल का आपका जवाब गलत है
OlimilOops

1
यह एक पुस्तकालय की परिभाषा है । यह लाइब्रेरी के विपरीत एक रूपरेखा के विशिष्ट गुण को याद करता है: नियंत्रण का उलटा
जोर्ग डब्ल्यू मित्तग

2

परिभाषाओं से परे, जो कभी-कभी ही समझ में आता है यदि आप पहले से ही समझते हैं, तो एक उदाहरण ने मेरी मदद की।

मुझे लगता है कि मुझे .Net में एक सूची को छांटने पर समझ की झलक मिलती है; एक कार्यक्षमता प्रदान करने वाले ढांचे का एक उदाहरण जो विशिष्ट कार्यक्षमता प्रदान करने वाले उपयोगकर्ता कोड द्वारा अनुरूप है। List.Sort (IComparer) लें। सॉर्ट एल्गोरिथ्म, जो क्रमबद्ध विधि में .Net ढांचे में रहता है, को तुलना की एक श्रृंखला करने की आवश्यकता है; ऑब्जेक्ट A, B से पहले या बाद में आता है? लेकिन क्रमबद्ध करें खुद की तुलना करने के लिए कोई सुराग नहीं है; केवल छांटे जाने वाले प्रकार को जानता है। आप एक तुलना सॉर्ट एल्गोरिथ्म नहीं लिख सकते हैं जो कई उपयोगकर्ताओं द्वारा पुन: उपयोग किया जा सकता है और उन सभी विभिन्न प्रकारों का अनुमान लगा सकता है जिन्हें आपको सॉर्ट करने के लिए कहा जाएगा। आप उपयोगकर्ता के लिए काम के उस बिट को छोड़ने के लिए मिल गया है। तो यहाँ, सॉर्ट करें, उर्फ ​​फ्रेमवर्क, उपयोगकर्ता कोड में एक विधि को कॉल करता है, जिस प्रकार को सॉर्ट किया जा रहा है ताकि वह तुलना कर सके। (या एक प्रतिनिधि का उपयोग किया जा सकता है;

क्या मुझे यह अधिकार मिला?

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.