GRASP (वस्तु-उन्मुख डिज़ाइन): Difference between revisions

From Vigyanwiki
No edit summary
No edit summary
Line 1: Line 1:
{{short description|Guidelines in object-oriented design}}सामान्य उत्तरदायित्व असाइनमेंट सॉफ़्टवेयर पैटर्न (या सिद्धांत), संक्षिप्त रूप से जीआरएएसपी, [[वस्तु-उन्मुख डिज़ाइन|"ऑब्जेक्ट-अभिविन्यस्त डिज़ाइन]] और उत्तरदायित्व असाइनमेंट में नौ मूलभूत सिद्धांतों" का एक समूह है<ref name="Larman2001"/>{{rp|6}} जिसमे पहली बार [[क्रेग लर्मन]] ने अपनी 1997 की पुस्तक एप्लाइंग यूएमएल एंड पैटर्न्स में प्रकाशित किया था।
{{short description|Guidelines in object-oriented design}}सामान्य उत्तरदायित्व असाइनमेंट सॉफ़्टवेयर पैटर्न (या सिद्धांत), संक्षिप्त रूप से जीआरएएसपी, [[वस्तु-उन्मुख डिज़ाइन|"ऑब्जेक्ट-अभिविन्यस्त डिज़ाइन]] और उत्तरदायित्व असाइनमेंट में नौ मूलभूत सिद्धांतों" का समूह है<ref name="Larman2001"/>{{rp|6}} जिसमे पहली बार [[क्रेग लर्मन]] ने अपनी 1997 की पुस्तक एप्लाइंग यूएमएल एंड पैटर्न्स में प्रकाशित किया था।


जीआरएएसपी में उपयोग किए जाने वाले विभिन्न पैटर्न और सिद्धांत नियंत्रक, निर्माता, अप्रत्यक्ष, सूचना विशेषज्ञ, कम [[युग्मन (कंप्यूटर विज्ञान)]], उच्च [[सामंजस्य (कंप्यूटर विज्ञान)]], [[बहुरूपता (वस्तु-उन्मुख प्रोग्रामिंग)|बहुरूपता (ऑब्जेक्ट-अभिविन्यस्त प्रोग्रामिंग)]], संरक्षित विविधताएं और शुद्ध निर्माण हैं।<ref name="Umair2018"/>ये सभी पैटर्न कई सॉफ्टवेयर विकास परियोजनाओं में आम तौर पर होने वाली कुछ सॉफ्टवेयर समस्याओं को हल करते हैं। इन तकनीकों का आविष्कार काम करने के नए तरीके बनाने के लिए नहीं किया गया है, बल्कि ऑब्जेक्ट-ओरिएंटेड डिज़ाइन में पुराने, आज़माए और परीक्षण किए गए [[कंप्यूटर प्रोग्रामिंग]] सिद्धांतों को बेहतर दस्तावेज़ और मानकीकृत करने के लिए किया गया है।
जीआरएएसपी में उपयोग किए जाने वाले विभिन्न पैटर्न और सिद्धांत नियंत्रक, निर्माता, अप्रत्यक्ष, सूचना विशेषज्ञ, कम [[युग्मन (कंप्यूटर विज्ञान)]], उच्च [[सामंजस्य (कंप्यूटर विज्ञान)]], [[बहुरूपता (वस्तु-उन्मुख प्रोग्रामिंग)|बहुरूपता (ऑब्जेक्ट-अभिविन्यस्त प्रोग्रामन)]], संरक्षित विविधताएं और शुद्ध निर्माण हैं।<ref name="Umair2018"/> ये सभी पैटर्न कई सॉफ्टवेयर विकास परियोजनाओं में सामान्यतः होने वाली कुछ सॉफ्टवेयर समस्याओं को हल करते हैं। इन तकनीकों का आविष्कार कार्य करने के नवीन विधि बनाने के लिए नहीं किया गया है, बल्कि ऑब्जेक्ट-ओरिएंटेड डिज़ाइन में प्राचीन, जाँचे गए और परीक्षण किए गए [[कंप्यूटर प्रोग्रामिंग|कंप्यूटर प्रोग्रामन]] सिद्धांतों को ठीक डॉक्यूमेंट और मानकीकृत करने के लिए किया गया है।


क्रेग लार्मन का कहना है कि [[सॉफ़्टवेयर]] विकास के लिए महत्वपूर्ण डिज़ाइन टूल डिज़ाइन सिद्धांतों में अच्छी तरह से शिक्षित दिमाग है। यह [[एकीकृत मॉडलिंग भाषा]] या कोई अन्य तकनीक नहीं है।<ref name="Larman2004"/>{{rp|272}} इस प्रकार, जीआरएएसपी सिद्धांत वास्तव में एक मानसिक टूलसमूह हैं, जो ऑब्जेक्ट-ओरिएंटेड सॉफ़्टवेयर के डिज़ाइन में मदद करने के लिए एक शिक्षण सहायता है।
क्रेग लार्मन का कहना है कि [[सॉफ़्टवेयर]] विकास के लिए महत्वपूर्ण डिज़ाइन टूल डिज़ाइन सिद्धांतों में ठीक रूप से शिक्षित मस्तिष्क है। यह [[एकीकृत मॉडलिंग भाषा]] या कोई अन्य तकनीक नहीं है।<ref name="Larman2004"/>{{rp|272}} इस प्रकार, जीआरएएसपी सिद्धांत वस्तुतः मानसिक टूलसमूह हैं, जो ऑब्जेक्ट-ओरिएंटेड सॉफ़्टवेयर के डिज़ाइन में सहायता करने के लिए शिक्षण सहायता है।


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


===सूचना विशेषज्ञ===
===सूचना विशेषज्ञ===
{{see also|Information hiding}}
{{see also|सूचना प्रच्छादन}}


समस्या: एक बुनियादी सिद्धांत क्या है जिसके द्वारा ऑब्जेक्ट को जिम्मेदारियाँ सौंपी जाती हैं?<br>
समस्या: मूलभूत सिद्धांत क्या है जिसके द्वारा ऑब्जेक्ट को उत्तरदायित्व दिया जाता हैं?<br>हल: उस वर्ग को उत्तरदायित्व दें जिसके निकट इसे पूरा करने के लिए आवश्यक सूचना है।
समाधान: उस वर्ग को जिम्मेदारी सौंपें जिसके पास इसे पूरा करने के लिए आवश्यक जानकारी है।


सूचना विशेषज्ञ (विशेषज्ञ या विशेषज्ञ सिद्धांत भी) एक सिद्धांत है जिसका उपयोग यह निर्धारित करने के लिए किया जाता है कि विधियों, गणना किए गए क्षेत्रों आदि जैसी जिम्मेदारियों को कहां सौंपा जाए।
'''सूचना विशेषज्ञ''' ('''विशेषज्ञ''' या '''विशेषज्ञ सिद्धांत''' भी) सिद्धांत है जिसका उपयोग यह निर्धारित करने के लिए किया जाता है कि विधियों, गणना किए गए क्षेत्रों आदि जैसी उत्तरदायित्वों को कहां दिया जाए।


सूचना विशेषज्ञ के सिद्धांत का उपयोग करते हुए, ज़िम्मेदारियाँ सौंपने का एक सामान्य दृष्टिकोण किसी दी गई ज़िम्मेदारी को देखना, उसे पूरा करने के लिए आवश्यक जानकारी का निर्धारण करना और फिर यह निर्धारित करना है कि वह जानकारी कहाँ संग्रहीत है।
सूचना विशेषज्ञ के सिद्धांत का उपयोग करते हुए, उत्तरदायित्व देने का सामान्य दृष्टिकोण किसी दी गई उत्तरदायित्व को देखना, उसे पूरा करने के लिए आवश्यक सूचना का निर्धारण करना और फिर यह निर्धारित करना है कि वह सूचना कहाँ संग्रहीत है।


इससे कक्षा पर यह जिम्मेदारी डाली जाएगी कि उसे पूरा करने के लिए सबसे अधिक जानकारी की आवश्यकता होगी।<ref name="Larman2004"/>{{rp|17:11}}
इससे कक्षा पर यह उत्तरदायित्व डाला जाएगा कि उसे पूरा करने के लिए सबसे अधिक सूचना की आवश्यकता होगी।<ref name="Larman2004"/>{{rp|17:11}}


संबंधित पैटर्न या सिद्धांत: कम युग्मन, उच्च सामंजस्य
संबंधित पैटर्न या सिद्धांत: कम युग्मन, उच्च सामंजस्य


===निर्माता===
===निर्माता===
{{see also|Factory pattern}}
{{see also|फ़ैक्टरी पैटर्न}}
ऑब्जेक्ट का निर्माण किसी ऑब्जेक्ट-अभिविन्यस्त प्रणाली में सबसे आम गतिविधियों में से एक है। ऑब्जेक्ट के निर्माण के लिए कौन सा वर्ग जिम्मेदार है, यह विशेष वर्गों की ऑब्जेक्ट के बीच संबंध की एक मौलिक संपत्ति है।


समस्या: ऑब्जेक्ट कौन बनाता है <code>A</code>?<br>
ऑब्जेक्ट का निर्माण किसी ऑब्जेक्ट-अभिविन्यस्त प्रणाली में सबसे सामान्य गतिविधियों में से है। ऑब्जेक्ट के निर्माण के लिए कौन सा वर्ग उत्तरदायी है, यह विशेष वर्गों की ऑब्जेक्ट के बीच संबंध का मौलिक गुण है।
समाधान: सामान्य तौर पर, कक्षा निर्दिष्ट करें <code>B</code> ऑब्जेक्ट बनाने की जिम्मेदारी <code>A</code> यदि निम्नलिखित में से एक, या अधिमानतः अधिक, लागू हो:
 
* के उदाहरण <code>B</code> के उदाहरणों को शामिल करना या समग्र रूप से एकत्रित करना <code>A</code>
समस्या: ऑब्जेक्ट <code>A</code> कौन बनाता है ?<br>हल: सामान्यतः, कक्षा <code>B</code> को ऑब्जेक्ट <code>A</code> बनाने का उत्तरदायित्व दें यदि निम्नलिखित में से एक, या अधिमानतः अधिक, लागू हो:
* के उदाहरण <code>B</code> के उदाहरण रिकॉर्ड करें <code>A</code>
* <code>B</code> के उदाहरणों में <code>A</code> के उदाहरण शामिल हैं या समग्र रूप से एकत्रित हैं
* के उदाहरण <code>B</code> के उदाहरणों का बारीकी से उपयोग करें <code>A</code>
* <code>B</code> के उदाहरण <code>A</code> के उदाहरण अभिलेखित करते हैं
* के उदाहरण <code>B</code> के उदाहरणों के लिए प्रारंभिक जानकारी है <code>A</code> और इसे सृजन को सौंपें।<ref name="Larman2004"/>{{rp|16:16.7}}
* <code>B</code> के उदाहरण <code>A</code> के उदाहरणों का स्पष्टता से उपयोग करते हैं
* <code>B</code> के उदाहरण में <code>A</code> के उदाहरणों के लिए प्रारंभिक सूचना होती है और इसे निर्माण पर पास किया जाता है।<ref name="Larman2004"/>{{rp|16:16.7}}


संबंधित पैटर्न या सिद्धांत: कम युग्मन, [[फ़ैक्टरी पैटर्न]]
संबंधित पैटर्न या सिद्धांत: कम युग्मन, [[फ़ैक्टरी पैटर्न]]
Line 37: Line 36:
===नियंत्रक ===
===नियंत्रक ===


नियंत्रक पैटर्न सिस्टम घटनाओं से निपटने की ज़िम्मेदारी एक गैर-उपयोगकर्ता इंटरफ़ेस वर्ग को सौंपता है जो समग्र सिस्टम या उपयोग केस परिदृश्य का प्रतिनिधित्व करता है। कंट्रोलर ऑब्जेक्ट एक [[प्रयोक्ता इंटरफ़ेस]] ऑब्जेक्ट है जो सिस्टम इवेंट को प्राप्त करने या संभालने के लिए जिम्मेदार है।
नियंत्रक पैटर्न प्रणाली घटनाओं से निपटने का उत्तरदायित्व गैर-उपयोगकर्ता इंटरफ़ेस वर्ग को देता है जो समग्र प्रणाली या उपयोग स्थिति परिदृष्टि का प्रतिनिधित्व करता है। नियंत्रक ऑब्जेक्ट [[प्रयोक्ता इंटरफ़ेस]] ऑब्जेक्ट है जो प्रणाली इवेंट को प्राप्त करने या संभालने के लिए उत्तरदायी है।
 
समस्या: इनपुट सिस्टम इवेंट को संभालने के लिए कौन जिम्मेदार होना चाहिए?<br>
समाधान: एक ''उपयोग मामले नियंत्रक'' का उपयोग किसी उपयोग मामले की ''सभी'' सिस्टम घटनाओं से निपटने के लिए किया जाना चाहिए, और इसका उपयोग एक से अधिक उपयोग मामलों के लिए किया जा सकता है। [[उदाहरण]] के लिए, ''उपयोगकर्ता बनाएं'' और ''उपयोगकर्ता हटाएं'' उपयोग मामलों के लिए, दो अलग-अलग उपयोग मामले नियंत्रकों के बजाय, ''उपयोगकर्ता नियंत्रक'' नामक एक एकल वर्ग हो सकता है। वैकल्पिक रूप से एक ''मुखौटा नियंत्रक'' का उपयोग किया जाएगा; यह तब लागू होता है जब घटना को संभालने की जिम्मेदारी वाली ऑब्जेक्ट समग्र प्रणाली या मूल ऑब्जेक्ट का प्रतिनिधित्व करती है।
 


समस्या: इनपुट प्रणाली इवेंट को संभालने के लिए कौन उत्तरदायी होना चाहिए?<br>हल: ''उपयोग स्थिति नियंत्रक'' का उपयोग किसी उपयोग स्थिति की ''सभी'' प्रणाली घटनाओं से निपटने के लिए किया जाना चाहिए, और इसके उपयोग से अधिक उपयोग स्थितियों के लिए किया जा सकता है। [[उदाहरण]] के लिए, ''उपयोगकर्ता बनाएं'' और ''उपयोगकर्ता हटाएं'' उपयोग स्थितियों के लिए, दो अलग-अलग उपयोग स्थिति नियंत्रकों के अतिरिक्त, ''उपयोगकर्ता नियंत्रक'' नामक एकल वर्ग हो सकता है। वैकल्पिक रूप से ''आच्छादक नियंत्रक'' का उपयोग किया जाएगा; यह तब लागू होता है जब घटना को संभालने की उत्तरदायित्व वाली ऑब्जेक्ट समग्र प्रणाली या मूल ऑब्जेक्ट का प्रतिनिधित्व करती है।


नियंत्रक को यूआई परत से परे पहली ऑब्जेक्ट के रूप में परिभाषित किया गया है जो सिस्टम ऑपरेशन को प्राप्त करता है और समन्वयित (नियंत्रित) करता है। नियंत्रक को उस कार्य को अन्य ऑब्जेक्ट को सौंपना चाहिए जिसे करने की आवश्यकता है; यह गतिविधि का समन्वय या नियंत्रण करता है। इसे खुद ज्यादा काम नहीं करना चाहिए. जीआरएएसपी नियंत्रक को एप्लिकेशन/सेवा परत का एक हिस्सा माना जा सकता है<ref name="Yahoo"/>(यह मानते हुए कि एप्लिकेशन ने एक सूचना प्रणाली तार्किक वास्तुकला में सामान्य परतों के साथ ऑब्जेक्ट-ओरिएंटेड सिस्टम में एप्लिकेशन/सेवा परत और [[डोमेन परत]] के बीच एक स्पष्ट अंतर बनाया है)
नियंत्रक को यूआई परत के अतिरिक्त प्रथम ऑब्जेक्ट के रूप में परिभाषित किया गया है जो प्रणाली संक्रिया को प्राप्त करता है और समन्वयित (नियंत्रित) करता है। नियंत्रक को उस कार्य को अन्य ऑब्जेक्ट को देना चाहिए जिसे करने की आवश्यकता है; यह गतिविधि का समन्वय या नियंत्रण करता है। इसे स्वयं अधिक कार्य नहीं करना चाहिए। जीआरएएसपी नियंत्रक को सूचना प्रणाली तार्किक वास्तुकला में सामान्य परतों के साथ ऑब्जेक्ट-ओरिएंटेड प्रणाली में एप्लिकेशन/सेवा परत<ref name="Yahoo" /> (यह मानते हुए कि एप्लिकेशन ने एप्लिकेशन/सेवा परत और [[डोमेन परत]] के बीच स्पष्ट अंतर किया है) का एक भाग माना जा सकता है।


संबंधित पैटर्न या सिद्धांत: कमांड_पैटर्न, फेकाडे_पैटर्न, लेयर_(ऑब्जेक्ट-ओरिएंटेड_डिज़ाइन), शुद्ध निर्माण
'''संबंधित पैटर्न या सिद्धांत''': कमांड पैटर्न, फेकाडे पैटर्न, लेयर (ऑब्जेक्ट-ओरिएंटेड डिज़ाइन), शुद्ध निर्माण


===निर्देश===
===निर्देश===
अप्रत्यक्ष पैटर्न कम युग्मन का समर्थन करता है और दो तत्वों के बीच मध्यस्थता की जिम्मेदारी एक मध्यवर्ती ऑब्जेक्ट को सौंपकर उनके बीच क्षमता का पुन: उपयोग करता है। इसका एक उदाहरण मॉडल-व्यू-नियंत्रक पैटर्न में डेटा (मॉडल) और उसके प्रतिनिधित्व (दृश्य) के बीच मध्यस्थता के लिए एक नियंत्रक घटक की शुरूआत है। यह सुनिश्चित करता है कि उनके बीच युग्मन कम रहे।
अप्रत्यक्ष पैटर्न कम युग्मन का समर्थन करता है और दो अवयवों के बीच मध्यस्थता की उत्तरदायित्व मध्यवर्ती ऑब्जेक्ट को देकर उनके बीच क्षमता का पुन: उपयोग करता है। इसका उदाहरण मॉडल-दृष्टि-नियंत्रक पैटर्न में डेटा (मॉडल) और उसके प्रतिनिधित्व (दृष्टि) के बीच मध्यस्थता के लिए नियंत्रक घटक का प्रारंभ है। यह सुनिश्चित करता है कि उनके बीच युग्मन कम रहे।


समस्या: दो (या अधिक) चीजों के बीच सीधे जुड़ाव से बचने के लिए जिम्मेदारी कहां सौंपी जाए? ऑब्जेक्ट को कैसे अलग करें ताकि कम युग्मन समर्थित हो और पुन: उपयोग की क्षमता अधिक बनी रहे? <br>
समस्या: दो (या अधिक) चीजों के बीच प्रत्यक्ष संयोजन से बचने के लिए उत्तरदायित्व कहां दिया जाए? ऑब्जेक्ट को कैसे अलग करें ताकि कम युग्मन समर्थित हो और पुन: उपयोग की क्षमता अधिक बनी रहे? <br>


समाधान: अन्य घटकों या सेवाओं के बीच मध्यस्थता करने के लिए एक मध्यवर्ती ऑब्जेक्ट को जिम्मेदारी सौंपें ताकि वे सीधे युग्मित न हों। <br>
हल: अन्य घटकों या सेवाओं के बीच मध्यस्थता करने के लिए मध्यवर्ती ऑब्जेक्ट को उत्तरदायित्व दे ताकि वे प्रत्यक्षतः युग्मित न हों। <br>मध्यस्थ अन्य घटकों के बीच अप्रत्यक्ष संबंध बनाता है।
मध्यस्थ अन्य घटकों के बीच एक अप्रत्यक्ष संबंध बनाता है।


===कम युग्मन===
===कम युग्मन===
{{main|Loose coupling}}
{{main|अल्प युग्मन}}
युग्मन इस बात का माप है कि एक तत्व कितनी मजबूती से जुड़ा हुआ है, उसे अन्य तत्वों का ज्ञान है या वह उस पर निर्भर है। कम युग्मन एक मूल्यांकनात्मक पैटर्न है जो निम्नलिखित लाभों के लिए ज़िम्मेदारियाँ सौंपने का निर्देश देता है:
 
युग्मन इस बात का माप है कि अवयव कितनी मजबूती से जुड़ा हुआ है, उसे अन्य अवयवों का ज्ञान है या वह उस पर निर्भर है। कम युग्मन मूल्यांकनात्मक पैटर्न है जो निम्नलिखित लाभों के लिए उत्तरदायित्व देने का निर्देश देता है:
* वर्गों के बीच कम निर्भरता,
* वर्गों के बीच कम निर्भरता,
* एक वर्ग में परिवर्तन से दूसरे वर्गों पर कम प्रभाव पड़ता है,
* एक वर्ग में परिवर्तन से दूसरे वर्गों पर कम प्रभाव पड़ता है,
Line 65: Line 61:
===उच्च सामंजस्य===
===उच्च सामंजस्य===
{{main|Cohesion (computer science)}}
{{main|Cohesion (computer science)}}
उच्च सामंजस्य एक मूल्यांकन पैटर्न है जो ऑब्जेक्ट को उचित रूप से केंद्रित, प्रबंधनीय और समझने योग्य रखने का प्रयास करता है। उच्च सामंजस्य का उपयोग आम तौर पर कम युग्मन के समर्थन में किया जाता है। उच्च सामंजस्य का अर्थ है कि तत्वों के दिए गए समूह की जिम्मेदारियाँ दृढ़ता से संबंधित हैं और एक विशिष्ट विषय पर अत्यधिक केंद्रित हैं। प्रोग्रामों को वर्गों और उपप्रणालियों में तोड़ना, यदि सही ढंग से किया जाए, उन गतिविधियों का एक उदाहरण है जो नामित वर्गों और उपप्रणालियों के एकजुट गुणों को बढ़ाते हैं। वैकल्पिक रूप से, कम सामंजस्य एक ऐसी स्थिति है जिसमें तत्वों के एक समूह, उदाहरण के लिए, एक उपप्रणाली, पर बहुत अधिक असंबंधित जिम्मेदारियां होती हैं। अपने घटक तत्वों के बीच कम सामंजस्य वाले उपप्रणालियों को अक्सर समग्र रूप से समझने, पुन: उपयोग करने, बनाए रखने और बदलने में कठिनाई होती है।<ref name="Larman2004"/>{{rp|314–315}}
उच्च सामंजस्य मूल्यांकन पैटर्न है जो ऑब्जेक्ट को उचित रूप से केंद्रित, प्रबंधनीय और समझने योग्य रखने का प्रयास करता है। उच्च सामंजस्य का उपयोग सामान्यतः कम युग्मन के समर्थन में किया जाता है। उच्च सामंजस्य का अर्थ है कि अवयवों के दिए गए समूह की उत्तरदायित्व दृढ़ता से संबंधित हैं और विशिष्ट विषय पर अत्यधिक केंद्रित हैं। प्रोग्रामों को वर्गों और उपप्रणालियों में तोड़ना, यदि सही ढंग से किया जाए, उन गतिविधियों का उदाहरण है जो नामित वर्गों और उपप्रणालियों के एकजुट गुणों को बढ़ाते हैं। वैकल्पिक रूप से, कम सामंजस्य ऐसी स्थिति है जिसमें अवयवों के समूह, उदाहरण के लिए, उपप्रणाली, पर बहुत अधिक असंबंधित उत्तरदायीियां होती हैं। अपने घटक अवयवों के बीच कम सामंजस्य वाले उपप्रणालियों को अक्सर समग्र रूप से समझने, पुन: उपयोग करने, बनाए रखने और बदलने में कठिनाई होती है।<ref name="Larman2004"/>{{rp|314–315}}


===बहुरूपता===
===बहुरूपता===
{{main|Polymorphism in object-oriented programming}}
{{main|Polymorphism in object-oriented programming}}
बहुरूपता सिद्धांत के अनुसार, प्रकार के आधार पर व्यवहारों की भिन्नता को परिभाषित करने की जिम्मेदारी उस प्रकार को सौंपी जाती है जिसके लिए यह भिन्नता होती है। यह [[बहुरूपता (कंप्यूटर विज्ञान)]] संचालन का उपयोग करके हासिल किया जाता है। प्रकार के उपयोगकर्ता को प्रकार के आधार पर स्पष्ट शाखाकरण के बजाय बहुरूपी संचालन का उपयोग करना चाहिए।
बहुरूपता सिद्धांत के अनुसार, प्रकार के आधार पर व्यवहारों की भिन्नता को परिभाषित करने की उत्तरदायित्व उस प्रकार को सौंपी जाती है जिसके लिए यह भिन्नता होती है। यह [[बहुरूपता (कंप्यूटर विज्ञान)]] संचालन का उपयोग करके हासिल किया जाता है। प्रकार के उपयोगकर्ता को प्रकार के आधार पर स्पष्ट शाखाकरण के बजाय बहुरूपी संचालन का उपयोग करना चाहिए।


समस्या: प्रकार के आधार पर विकल्पों को कैसे संभालें? प्लग करने योग्य सॉफ़्टवेयर घटक कैसे बनाएं?<br>
समस्या: प्रकार के आधार पर विकल्पों को कैसे संभालें? प्लग करने योग्य सॉफ़्टवेयर घटक कैसे बनाएं?<br>
समाधान: जब संबंधित विकल्प या व्यवहार प्रकार (वर्ग) के अनुसार भिन्न होते हैं, तो व्यवहार के लिए जिम्मेदारी सौंपें - बहुरूपी संचालन का उपयोग करके - उन प्रकारों को जिनके लिए व्यवहार भिन्न होता है। (बहुरूपता के कई संबंधित अर्थ हैं। इस संदर्भ में, इसका अर्थ है विभिन्न ऑब्जेक्ट में सेवाओं को एक ही नाम देना।)
हल: जब संबंधित विकल्प या व्यवहार प्रकार (वर्ग) के अनुसार भिन्न होते हैं, तो व्यवहार के लिए उत्तरदायित्व सौंपें - बहुरूपी संचालन का उपयोग करके - उन प्रकारों को जिनके लिए व्यवहार भिन्न होता है। (बहुरूपता के कई संबंधित अर्थ हैं। इस संदर्भ में, इसका अर्थ है विभिन्न ऑब्जेक्ट में सेवाओं को ही नाम देना।)


===संरक्षित विविधताएं===
===संरक्षित विविधताएं===
{{see also|Open/closed principle}}
{{see also|Open/closed principle}}
संरक्षित विविधता पैटर्न एक [[इंटरफ़ेस (कंप्यूटर विज्ञान)]] के साथ अस्थिरता के फोकस को लपेटकर और इस इंटरफ़ेस के विभिन्न कार्यान्वयन बनाने के लिए बहुरूपता (कंप्यूटर विज्ञान) का उपयोग करके तत्वों को अन्य तत्वों (ऑब्जेक्ट्स, सिस्टम, सबसिस्टम) पर भिन्नता से बचाता है।
संरक्षित विविधता पैटर्न [[इंटरफ़ेस (कंप्यूटर विज्ञान)]] के साथ अस्थिरता के फोकस को लपेटकर और इस इंटरफ़ेस के विभिन्न कार्यान्वयन बनाने के लिए बहुरूपता (कंप्यूटर विज्ञान) का उपयोग करके अवयवों को अन्य अवयवों (ऑब्जेक्ट्स, प्रणाली, सबप्रणाली) पर भिन्नता से बचाता है।


समस्या: ऑब्जेक्ट, उपप्रणालियों और प्रणालियों को कैसे डिज़ाइन किया जाए ताकि इन तत्वों में भिन्नता या अस्थिरता का अन्य तत्वों पर अवांछनीय प्रभाव न पड़े?<br>
समस्या: ऑब्जेक्ट, उपप्रणालियों और प्रणालियों को कैसे डिज़ाइन किया जाए ताकि इन अवयवों में भिन्नता या अस्थिरता का अन्य अवयवों पर अवांछनीय प्रभाव न पड़े?<br>
समाधान: अनुमानित भिन्नता या अस्थिरता के बिंदुओं की पहचान करें; उनके चारों ओर एक स्थिर इंटरफ़ेस बनाने के लिए जिम्मेदारियाँ सौंपें।
हल: अनुमानित भिन्नता या अस्थिरता के बिंदुओं की पहचान करें; उनके चारों ओर स्थिर इंटरफ़ेस बनाने के लिए उत्तरदायित्व सौंपें।


===शुद्ध निर्माण===
===शुद्ध निर्माण===
{{see also|Service (systems architecture)}}
{{see also|Service (systems architecture)}}
शुद्ध निर्माण एक ऐसा वर्ग है जो समस्या क्षेत्र में एक अवधारणा का प्रतिनिधित्व नहीं करता है, जो विशेष रूप से कम युग्मन, उच्च सामंजस्य और उससे प्राप्त पुन: उपयोग की क्षमता को प्राप्त करने के लिए बनाया गया है (जब ''सूचना विशेषज्ञ'' पैटर्न द्वारा प्रस्तुत समाधान नहीं होता है) ). इस प्रकार की कक्षा को [[डोमेन-संचालित डिज़ाइन]] में सेवा कहा जाता है।
शुद्ध निर्माण ऐसा वर्ग है जो समस्या क्षेत्र में अवधारणा का प्रतिनिधित्व नहीं करता है, जो विशेष रूप से कम युग्मन, उच्च सामंजस्य और उससे प्राप्त पुन: उपयोग की क्षमता को प्राप्त करने के लिए बनाया गया है (जब ''सूचना विशेषज्ञ'' पैटर्न द्वारा प्रस्तुत हल नहीं होता है) ). इस प्रकार की कक्षा को [[डोमेन-संचालित डिज़ाइन]] में सेवा कहा जाता है।


संबंधित पैटर्न और सिद्धांत
संबंधित पैटर्न और सिद्धांत

Revision as of 10:37, 4 July 2023

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

जीआरएएसपी में उपयोग किए जाने वाले विभिन्न पैटर्न और सिद्धांत नियंत्रक, निर्माता, अप्रत्यक्ष, सूचना विशेषज्ञ, कम युग्मन (कंप्यूटर विज्ञान), उच्च सामंजस्य (कंप्यूटर विज्ञान), बहुरूपता (ऑब्जेक्ट-अभिविन्यस्त प्रोग्रामन), संरक्षित विविधताएं और शुद्ध निर्माण हैं।[2] ये सभी पैटर्न कई सॉफ्टवेयर विकास परियोजनाओं में सामान्यतः होने वाली कुछ सॉफ्टवेयर समस्याओं को हल करते हैं। इन तकनीकों का आविष्कार कार्य करने के नवीन विधि बनाने के लिए नहीं किया गया है, बल्कि ऑब्जेक्ट-ओरिएंटेड डिज़ाइन में प्राचीन, जाँचे गए और परीक्षण किए गए कंप्यूटर प्रोग्रामन सिद्धांतों को ठीक डॉक्यूमेंट और मानकीकृत करने के लिए किया गया है।

क्रेग लार्मन का कहना है कि सॉफ़्टवेयर विकास के लिए महत्वपूर्ण डिज़ाइन टूल डिज़ाइन सिद्धांतों में ठीक रूप से शिक्षित मस्तिष्क है। यह एकीकृत मॉडलिंग भाषा या कोई अन्य तकनीक नहीं है।[3]: 272  इस प्रकार, जीआरएएसपी सिद्धांत वस्तुतः मानसिक टूलसमूह हैं, जो ऑब्जेक्ट-ओरिएंटेड सॉफ़्टवेयर के डिज़ाइन में सहायता करने के लिए शिक्षण सहायता है।

पैटर्न

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

सूचना विशेषज्ञ

समस्या: मूलभूत सिद्धांत क्या है जिसके द्वारा ऑब्जेक्ट को उत्तरदायित्व दिया जाता हैं?
हल: उस वर्ग को उत्तरदायित्व दें जिसके निकट इसे पूरा करने के लिए आवश्यक सूचना है।

सूचना विशेषज्ञ (विशेषज्ञ या विशेषज्ञ सिद्धांत भी) सिद्धांत है जिसका उपयोग यह निर्धारित करने के लिए किया जाता है कि विधियों, गणना किए गए क्षेत्रों आदि जैसी उत्तरदायित्वों को कहां दिया जाए।

सूचना विशेषज्ञ के सिद्धांत का उपयोग करते हुए, उत्तरदायित्व देने का सामान्य दृष्टिकोण किसी दी गई उत्तरदायित्व को देखना, उसे पूरा करने के लिए आवश्यक सूचना का निर्धारण करना और फिर यह निर्धारित करना है कि वह सूचना कहाँ संग्रहीत है।

इससे कक्षा पर यह उत्तरदायित्व डाला जाएगा कि उसे पूरा करने के लिए सबसे अधिक सूचना की आवश्यकता होगी।[3]: 17:11 

संबंधित पैटर्न या सिद्धांत: कम युग्मन, उच्च सामंजस्य

निर्माता

ऑब्जेक्ट का निर्माण किसी ऑब्जेक्ट-अभिविन्यस्त प्रणाली में सबसे सामान्य गतिविधियों में से है। ऑब्जेक्ट के निर्माण के लिए कौन सा वर्ग उत्तरदायी है, यह विशेष वर्गों की ऑब्जेक्ट के बीच संबंध का मौलिक गुण है।

समस्या: ऑब्जेक्ट A कौन बनाता है ?
हल: सामान्यतः, कक्षा B को ऑब्जेक्ट A बनाने का उत्तरदायित्व दें यदि निम्नलिखित में से एक, या अधिमानतः अधिक, लागू हो:

  • B के उदाहरणों में A के उदाहरण शामिल हैं या समग्र रूप से एकत्रित हैं
  • B के उदाहरण A के उदाहरण अभिलेखित करते हैं
  • B के उदाहरण A के उदाहरणों का स्पष्टता से उपयोग करते हैं
  • B के उदाहरण में A के उदाहरणों के लिए प्रारंभिक सूचना होती है और इसे निर्माण पर पास किया जाता है।[3]: 16:16.7 

संबंधित पैटर्न या सिद्धांत: कम युग्मन, फ़ैक्टरी पैटर्न

नियंत्रक

नियंत्रक पैटर्न प्रणाली घटनाओं से निपटने का उत्तरदायित्व गैर-उपयोगकर्ता इंटरफ़ेस वर्ग को देता है जो समग्र प्रणाली या उपयोग स्थिति परिदृष्टि का प्रतिनिधित्व करता है। नियंत्रक ऑब्जेक्ट प्रयोक्ता इंटरफ़ेस ऑब्जेक्ट है जो प्रणाली इवेंट को प्राप्त करने या संभालने के लिए उत्तरदायी है।

समस्या: इनपुट प्रणाली इवेंट को संभालने के लिए कौन उत्तरदायी होना चाहिए?
हल: उपयोग स्थिति नियंत्रक का उपयोग किसी उपयोग स्थिति की सभी प्रणाली घटनाओं से निपटने के लिए किया जाना चाहिए, और इसके उपयोग से अधिक उपयोग स्थितियों के लिए किया जा सकता है। उदाहरण के लिए, उपयोगकर्ता बनाएं और उपयोगकर्ता हटाएं उपयोग स्थितियों के लिए, दो अलग-अलग उपयोग स्थिति नियंत्रकों के अतिरिक्त, उपयोगकर्ता नियंत्रक नामक एकल वर्ग हो सकता है। वैकल्पिक रूप से आच्छादक नियंत्रक का उपयोग किया जाएगा; यह तब लागू होता है जब घटना को संभालने की उत्तरदायित्व वाली ऑब्जेक्ट समग्र प्रणाली या मूल ऑब्जेक्ट का प्रतिनिधित्व करती है।

नियंत्रक को यूआई परत के अतिरिक्त प्रथम ऑब्जेक्ट के रूप में परिभाषित किया गया है जो प्रणाली संक्रिया को प्राप्त करता है और समन्वयित (नियंत्रित) करता है। नियंत्रक को उस कार्य को अन्य ऑब्जेक्ट को देना चाहिए जिसे करने की आवश्यकता है; यह गतिविधि का समन्वय या नियंत्रण करता है। इसे स्वयं अधिक कार्य नहीं करना चाहिए। जीआरएएसपी नियंत्रक को सूचना प्रणाली तार्किक वास्तुकला में सामान्य परतों के साथ ऑब्जेक्ट-ओरिएंटेड प्रणाली में एप्लिकेशन/सेवा परत[4] (यह मानते हुए कि एप्लिकेशन ने एप्लिकेशन/सेवा परत और डोमेन परत के बीच स्पष्ट अंतर किया है) का एक भाग माना जा सकता है।

संबंधित पैटर्न या सिद्धांत: कमांड पैटर्न, फेकाडे पैटर्न, लेयर (ऑब्जेक्ट-ओरिएंटेड डिज़ाइन), शुद्ध निर्माण

निर्देश

अप्रत्यक्ष पैटर्न कम युग्मन का समर्थन करता है और दो अवयवों के बीच मध्यस्थता की उत्तरदायित्व मध्यवर्ती ऑब्जेक्ट को देकर उनके बीच क्षमता का पुन: उपयोग करता है। इसका उदाहरण मॉडल-दृष्टि-नियंत्रक पैटर्न में डेटा (मॉडल) और उसके प्रतिनिधित्व (दृष्टि) के बीच मध्यस्थता के लिए नियंत्रक घटक का प्रारंभ है। यह सुनिश्चित करता है कि उनके बीच युग्मन कम रहे।

समस्या: दो (या अधिक) चीजों के बीच प्रत्यक्ष संयोजन से बचने के लिए उत्तरदायित्व कहां दिया जाए? ऑब्जेक्ट को कैसे अलग करें ताकि कम युग्मन समर्थित हो और पुन: उपयोग की क्षमता अधिक बनी रहे?

हल: अन्य घटकों या सेवाओं के बीच मध्यस्थता करने के लिए मध्यवर्ती ऑब्जेक्ट को उत्तरदायित्व दे ताकि वे प्रत्यक्षतः युग्मित न हों।
मध्यस्थ अन्य घटकों के बीच अप्रत्यक्ष संबंध बनाता है।

कम युग्मन

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

  • वर्गों के बीच कम निर्भरता,
  • एक वर्ग में परिवर्तन से दूसरे वर्गों पर कम प्रभाव पड़ता है,
  • उच्च पुन: उपयोग क्षमता।

उच्च सामंजस्य

उच्च सामंजस्य मूल्यांकन पैटर्न है जो ऑब्जेक्ट को उचित रूप से केंद्रित, प्रबंधनीय और समझने योग्य रखने का प्रयास करता है। उच्च सामंजस्य का उपयोग सामान्यतः कम युग्मन के समर्थन में किया जाता है। उच्च सामंजस्य का अर्थ है कि अवयवों के दिए गए समूह की उत्तरदायित्व दृढ़ता से संबंधित हैं और विशिष्ट विषय पर अत्यधिक केंद्रित हैं। प्रोग्रामों को वर्गों और उपप्रणालियों में तोड़ना, यदि सही ढंग से किया जाए, उन गतिविधियों का उदाहरण है जो नामित वर्गों और उपप्रणालियों के एकजुट गुणों को बढ़ाते हैं। वैकल्पिक रूप से, कम सामंजस्य ऐसी स्थिति है जिसमें अवयवों के समूह, उदाहरण के लिए, उपप्रणाली, पर बहुत अधिक असंबंधित उत्तरदायीियां होती हैं। अपने घटक अवयवों के बीच कम सामंजस्य वाले उपप्रणालियों को अक्सर समग्र रूप से समझने, पुन: उपयोग करने, बनाए रखने और बदलने में कठिनाई होती है।[3]: 314–315 

बहुरूपता

बहुरूपता सिद्धांत के अनुसार, प्रकार के आधार पर व्यवहारों की भिन्नता को परिभाषित करने की उत्तरदायित्व उस प्रकार को सौंपी जाती है जिसके लिए यह भिन्नता होती है। यह बहुरूपता (कंप्यूटर विज्ञान) संचालन का उपयोग करके हासिल किया जाता है। प्रकार के उपयोगकर्ता को प्रकार के आधार पर स्पष्ट शाखाकरण के बजाय बहुरूपी संचालन का उपयोग करना चाहिए।

समस्या: प्रकार के आधार पर विकल्पों को कैसे संभालें? प्लग करने योग्य सॉफ़्टवेयर घटक कैसे बनाएं?
हल: जब संबंधित विकल्प या व्यवहार प्रकार (वर्ग) के अनुसार भिन्न होते हैं, तो व्यवहार के लिए उत्तरदायित्व सौंपें - बहुरूपी संचालन का उपयोग करके - उन प्रकारों को जिनके लिए व्यवहार भिन्न होता है। (बहुरूपता के कई संबंधित अर्थ हैं। इस संदर्भ में, इसका अर्थ है विभिन्न ऑब्जेक्ट में सेवाओं को ही नाम देना।)

संरक्षित विविधताएं

संरक्षित विविधता पैटर्न इंटरफ़ेस (कंप्यूटर विज्ञान) के साथ अस्थिरता के फोकस को लपेटकर और इस इंटरफ़ेस के विभिन्न कार्यान्वयन बनाने के लिए बहुरूपता (कंप्यूटर विज्ञान) का उपयोग करके अवयवों को अन्य अवयवों (ऑब्जेक्ट्स, प्रणाली, सबप्रणाली) पर भिन्नता से बचाता है।

समस्या: ऑब्जेक्ट, उपप्रणालियों और प्रणालियों को कैसे डिज़ाइन किया जाए ताकि इन अवयवों में भिन्नता या अस्थिरता का अन्य अवयवों पर अवांछनीय प्रभाव न पड़े?
हल: अनुमानित भिन्नता या अस्थिरता के बिंदुओं की पहचान करें; उनके चारों ओर स्थिर इंटरफ़ेस बनाने के लिए उत्तरदायित्व सौंपें।

शुद्ध निर्माण

शुद्ध निर्माण ऐसा वर्ग है जो समस्या क्षेत्र में अवधारणा का प्रतिनिधित्व नहीं करता है, जो विशेष रूप से कम युग्मन, उच्च सामंजस्य और उससे प्राप्त पुन: उपयोग की क्षमता को प्राप्त करने के लिए बनाया गया है (जब सूचना विशेषज्ञ पैटर्न द्वारा प्रस्तुत हल नहीं होता है) ). इस प्रकार की कक्षा को डोमेन-संचालित डिज़ाइन में सेवा कहा जाता है।

संबंधित पैटर्न और सिद्धांत • कम युग्मन. • उच्च सामंजस्य।

यह भी देखें

संदर्भ

  1. Craig Larman (2001). Applying UML and Patterns: An Introduction to Object-Oriented Analysis and Design and the Unified Process (PDF) (2nd ed.). Prentice Hall. ISBN 0-13-092569-1.
  2. Muhammad Umair (2018-02-26). "SOLID, GRASP, and Other Basic Principles of Object-Oriented Design". DZone.
  3. 3.0 3.1 3.2 3.3 Craig Larman (2004). Applying UML and Patterns: An Introduction to Object-Oriented Analysis and Design and Iterative Development (3rd ed.). Pearson. ISBN 978-0131489066.
  4. "Application Layer like business facade?". Yahoo! Groups (domaindrivendesign). Archived from the original on 2020-08-07. Retrieved 2010-07-15.