कहेसिओन (कंप्यूटर विज्ञान): Difference between revisions

From Vigyanwiki
(Created page with "{{short description|Degree to which elements within a module belong together}} कंप्यूटर प्रोग्रामिंग में, संसंजन...")
 
No edit summary
 
(7 intermediate revisions by 5 users not shown)
Line 1: Line 1:
{{short description|Degree to which elements within a module belong together}}
[[कंप्यूटर प्रोग्रामिंग]] में, '''कहेसिओन''' उस 'डिग्री' को संदर्भित करता है जिस तक [[मॉड्यूल (प्रोग्रामिंग)]] के अंदर के तत्व एक साथ होते हैं।<ref name="Yourdon_1979"/> दूसरे अर्थ में, यह [[विधि (कंप्यूटर प्रोग्रामिंग)|विधि]] और कक्षा (कंप्यूटर प्रोग्रामिंग) के डेटा और उस वर्ग द्वारा प्रदान किए गए कुछ एकीकृत उद्देश्य या अवधारणा के बीच संबंधों की शक्ति का उपाय है। दूसरे अर्थ में, यह वर्ग के विधियों और स्वयं डेटा के बीच संबंध की शक्ति का उपाय है।
[[कंप्यूटर प्रोग्रामिंग]] में, संसंजन उस 'डिग्री' को संदर्भित करता है जिस तक एक [[मॉड्यूल (प्रोग्रामिंग)]] के अंदर के तत्व एक साथ होते हैं।<ref name="Yourdon_1979"/>एक अर्थ में, यह [[विधि (कंप्यूटर प्रोग्रामिंग)]] और कक्षा (कंप्यूटर प्रोग्रामिंग) के डेटा और उस वर्ग द्वारा प्रदान किए गए कुछ एकीकृत उद्देश्य या अवधारणा के बीच संबंधों की ताकत का एक उपाय है। दूसरे अर्थ में, यह वर्ग के तरीकों और स्वयं डेटा के बीच संबंध की ताकत का एक उपाय है।


संसंजन माप का एक स्तर है#सामान्य_पैमाने का माप प्रकार और इसे आमतौर पर "उच्च संसंजन" या "निम्न संसंजन" के रूप में वर्णित किया जाता है। उच्च सामंजस्य वाले मॉड्यूल बेहतर होते हैं, क्योंकि उच्च सामंजस्य सॉफ्टवेयर के कई वांछनीय लक्षणों से जुड़ा होता है, जिसमें रोबस्टनेस (कंप्यूटर विज्ञान), विश्वसनीयता, पुन: प्रयोज्यता और समझ शामिल है। इसके विपरीत, कम सामंजस्य अवांछनीय लक्षणों से जुड़ा हुआ है जैसे कि बनाए रखना, परीक्षण करना, पुन: उपयोग करना या यहां तक ​​कि समझना मुश्किल है।
सामंजस्य क्रमिक प्रकार का माप है और इसे सामान्यतः "उच्च कहेसिओन" या "निम्न कहेसिओन" के रूप में वर्णित किया जाता है। उच्च सामंजस्य वाले मॉड्यूल उत्तम होते हैं, क्योंकि उच्च सामंजस्य सॉफ्टवेयर के कई वांछनीय लक्षणों से जुड़ा होता है, जिसमें रोबस्टनेस, विश्वसनीयता, पुन: प्रयोज्यता और समझ सम्मिलित है। इसके विपरीत, कम सामंजस्य अवांछनीय लक्षणों से जुड़ा हुआ है जैसे कि बनाए रखना, परीक्षण करना, पुन: उपयोग करना या यहां तक ​​कि समझना जटिल है।


सामंजस्य को अक्सर [[युग्मन (कंप्यूटर विज्ञान)]], एक अलग अवधारणा के विपरीत माना जाता है। उच्च सामंजस्य अक्सर ढीले युग्मन से संबंधित होता है, और इसके विपरीत।<ref name="Ingeno_2018"/>1960 के दशक के उत्तरार्ध में [[लैरी कॉन्स्टेंटाइन]] द्वारा युग्मन और सामंजस्य के [[सॉफ्टवेयर मीट्रिक]]्स का आविष्कार स्ट्रक्चर्ड डिज़ाइन के हिस्से के रूप में किया गया था, जो रखरखाव और संशोधन लागत को कम करने वाली "अच्छी" प्रोग्रामिंग प्रथाओं की विशेषताओं पर आधारित था। [[संरचित डिजाइन]], सामंजस्य और युग्मन लेख स्टीवंस, मायर्स एंड कॉन्सटेंटाइन (1974) में प्रकाशित किए गए थे।<ref name="Stevens_1974"/>और योरडॉन एंड कॉन्सटेंटाइन (1979) पुस्तक;<ref name="Yourdon_1979"/>बाद के दो बाद में [[सॉफ्टवेयर इंजीनियरिंग]] में मानक शब्द बन गए।
सामंजस्य को अधिकांशतः [[युग्मन (कंप्यूटर विज्ञान)|युग्मन]], अलग अवधारणा के विपरीत माना जाता है। उच्च सामंजस्य अधिकांशतः ढीले युग्मन और इसके विपरीतता से संबंधित होता है।<ref name="Ingeno_2018"/> 1960 के दशक के उत्तरार्ध में [[लैरी कॉन्स्टेंटाइन]] द्वारा युग्मन और सामंजस्य के [[सॉफ्टवेयर मीट्रिक]] का आविष्कार संरचित डिज़ाइन के हिस्से के रूप में किया गया था, जो देखभाल और संशोधन व्यय को कम करने वाली "अच्छी" प्रोग्रामिंग प्रथाओं की विशेषताओं पर आधारित था। [[संरचित डिजाइन]], सामंजस्य और युग्मन लेख स्टीवंस, मायर्स और कॉन्सटेंटाइन<ref name="Yourdon_1979" /> (1974), योरडॉन और कॉन्सटेंटाइन पुस्तक<ref name="Stevens_1974"/> (1979) में प्रकाशित किए गए थे। बाद के दो, बाद में [[सॉफ्टवेयर इंजीनियरिंग]] में मानक शब्द बन गए।


== उच्च सामंजस्य ==
== उच्च सामंजस्य ==
{{unreferenced section|date=October 2014}}
वस्तु-उन्मुख प्रोग्रामिंग में, यदि वर्ग की सेवा करने वाली विधियाँ कई पहलुओं में समान होती हैं, तो उस वर्ग को उच्च सामंजस्य कहा जाता है।<ref name="Marsic_2012"/> अत्यधिक सामंजस्यपूर्ण प्रणाली में, कोड पठनीयता और पुन: प्रयोज्यता बढ़ जाती है, जबकि जटिलता को प्रबंधनीय रखा जाता है।
वस्तु-उन्मुख प्रोग्रामिंग में, यदि एक वर्ग की सेवा करने वाली विधियाँ कई पहलुओं में समान होती हैं, तो उस वर्ग को उच्च सामंजस्य कहा जाता है।<ref name="Marsic_2012"/>अत्यधिक सामंजस्यपूर्ण प्रणाली में, कोड पठनीयता और पुन: प्रयोज्यता बढ़ जाती है, जबकि जटिलता को प्रबंधनीय रखा जाता है।
[[File:CouplingVsCohesion.svg|thumb|एकजुटता]]सामंजस्य बढ़ जाता है यदि:
[[File:CouplingVsCohesion.svg|thumb|एकजुटता]]सामंजस्य बढ़ जाता है अगर:
*वर्ग में एम्बेड की गई कार्यप्रणाली, इसके विधियों के माध्यम से एक्सेस की गई, में बहुत कुछ सामान्य है।
*एक वर्ग में एम्बेड की गई कार्यप्रणाली, इसके तरीकों के माध्यम से एक्सेस की गई, में बहुत कुछ सामान्य है।
*डेटा के मोटे दाने वाले या असंबंधित सेट से बचकर, विधियाँ संबंधित गतिविधियों की छोटी संख्या को परिणाम देती हैं।
*तरीके ग्रैन्युलैरिटी#डेटा ग्रैन्युलैरिटी या डेटा के असंबंधित सेट से बचकर बहुत कम संख्या में संबंधित गतिविधियां करते हैं।
*संबंधित विधियाँ समान स्रोत फ़ाइल में हैं या अन्यथा एक साथ समूहीकृत हैं; उदाहरण के लिए, अलग फ़ाइलों में लेकिन समान उप-निर्देशिका/फ़ोल्डर में।
*संबंधित विधियाँ एक ही स्रोत फ़ाइल में हैं या अन्यथा एक साथ समूहीकृत हैं; उदाहरण के लिए, अलग फ़ाइलों में लेकिन एक ही उप-निर्देशिका/फ़ोल्डर में।


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


जबकि सिद्धांत रूप में एक मॉड्यूल में केवल एक एकल, परमाणु तत्व - एक एकल कार्य होने के कारण पूर्ण सामंजस्य हो सकता है, उदाहरण के लिए - व्यवहार में जटिल कार्य एकल, सरल तत्व द्वारा अभिव्यक्त नहीं होते हैं। इस प्रकार एकल-तत्व मॉड्यूल में एक तत्व होता है जो या तो बहुत जटिल होता है, किसी कार्य को पूरा करने के लिए, या बहुत संकीर्ण होता है, और इस प्रकार अन्य मॉड्यूल के लिए कसकर [[युग्मन (कंप्यूटर प्रोग्रामिंग)]] होता है। इस प्रकार सामंजस्य इकाई जटिलता और युग्मन दोनों के साथ संतुलित है।
जबकि सिद्धांत रूप में मॉड्यूल में केवल एकल, परमाणु तत्व - एकल कार्य होने के कारण पूर्ण सामंजस्य हो सकता है, उदाहरण के लिए - व्यवहार में जटिल कार्य एकल, सरल तत्व द्वारा अभिव्यक्त नहीं होते हैं। इस प्रकार एकल-तत्व मॉड्यूल में तत्व होता है जो या तो बहुत जटिल होता है, किसी कार्य को पूरा करने के लिए, या बहुत संकीर्ण होता है, और इस प्रकार अन्य मॉड्यूल के लिए कसकर [[युग्मन (कंप्यूटर प्रोग्रामिंग)]] होता है। इस प्रकार सामंजस्य इकाई जटिलता और युग्मन दोनों के साथ संतुलित है।


== सामंजस्य के प्रकार ==
== सामंजस्य के प्रकार ==
सामंजस्य एक गुणात्मक माप है, जिसका अर्थ है कि मापे जाने वाले स्रोत कोड को एक वर्गीकरण निर्धारित करने के लिए [[रूब्रिक (अकादमिक)]] का उपयोग करके जांचा जाता है। सामंजस्य प्रकार, सबसे खराब से सर्वोत्तम तक, इस प्रकार हैं:
सामंजस्य गुणात्मक माप है, जिसका अर्थ है कि मापे जाने वाले स्रोत कोड को वर्गीकरण निर्धारित करने के लिए [[रूब्रिक (अकादमिक)]] का उपयोग करके जांचा जाता है। सामंजस्य प्रकार, सबसे खराब से सर्वोत्तम तक, इस प्रकार हैं:


;{{anchor|Coincidental}}आकस्मिक सामंजस्य (सबसे खराब): संयोगात्मक सामंजस्य तब होता है जब मॉड्यूल के कुछ हिस्सों को मनमाने ढंग से समूहीकृत किया जाता है; भागों के बीच एकमात्र संबंध यह है कि उन्हें एक साथ समूहीकृत किया गया है (उदाहरण के लिए, एक "उपयोगिताएँ" वर्ग)। उदाहरण:
;आकस्मिक सामंजस्य (सबसे खराब): संयोगात्मक सामंजस्य तब होता है जब मॉड्यूल के कुछ हिस्सों को इच्छानुसार समूहीकृत किया जाता है; भागों के बीच एकमात्र संबंध यह है कि उन्हें एक साथ समूहीकृत किया गया है (उदाहरण के लिए, "उपयोगिताएँ" वर्ग)। उदाहरण: <syntaxhighlight>
:: <वाक्यविन्यास हाइलाइट लैंग = सी>
/*
/*
समूह: फ़ंक्शन परिभाषाएँ
Groups: The function definitions
भाग: प्रत्येक फ़ंक्शन पर शर्तें
Parts: The terms on each function
*/
*/
मॉड्यूल ए {
Module A {
   /*
   /*
   आर (एक्स) = 5x + 3 का कार्यान्वयन
   Implementation of r(x) = 5x + 3
   इस तरह समूह कार्यों का कोई विशेष कारण नहीं है,
   There is no particular reason to group functions in this way,
   इसलिए कहा जाता है कि मॉड्यूल में आकस्मिक सामंजस्य है।
   so the module is said to have Coincidental Cohesion.
   */
   */  
   आर (एक्स) = (एक्स) + बी (एक्स)
   r(x) = a(x) + b(x)  
   (एक्स) = 2x + 1
   a(x) = 2x + 1
   बी (एक्स) = 3x + 2
   b(x) = 3x + 2
}
}
</वाक्यविन्यास हाइलाइट>
</syntaxhighlight>


;{{anchor|Logical}}तार्किक सामंजस्य: तार्किक सामंजस्य तब होता है जब एक मॉड्यूल के कुछ हिस्सों को समूहीकृत किया जाता है क्योंकि वे तार्किक रूप से एक ही काम करने के लिए वर्गीकृत होते हैं, भले ही वे प्रकृति से भिन्न हों (उदाहरण के लिए, सभी माउस और कीबोर्ड इनपुट हैंडलिंग रूटीन को समूहीकृत करना या सभी मॉडलों, विचारों और नियंत्रकों को बंडल करना) एक मॉडल-व्यू-नियंत्रक में अलग-अलग फ़ोल्डरों में)
;तार्किक सामंजस्य: तार्किक सामंजस्य तब होता है जब मॉड्यूल के हिस्सों को समूहीकृत किया जाता है क्योंकि वे तार्किक रूप से समान काम करने के लिए वर्गीकृत होते हैं, तथापि वे प्रकृति से भिन्न (उदाहरण के लिए, सभी माउस और कीबोर्ड इनपुट हैंडलिंग रूटीन को समूहीकृत करना या सभी मॉडलों, विचारों और नियंत्रकों को अलग-अलग एमवीसी पैटर्न में फ़ोल्डरों में बंडल करना) होते हैं।


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


;{{anchor|Procedural}}प्रक्रियात्मक सामंजस्य: प्रक्रियात्मक सामंजस्य तब होता है जब मॉड्यूल के कुछ हिस्सों को समूहीकृत किया जाता है क्योंकि वे हमेशा निष्पादन के एक निश्चित अनुक्रम का पालन करते हैं (उदाहरण के लिए, एक फ़ंक्शन जो फ़ाइल अनुमतियों की जांच करता है और फिर फ़ाइल खोलता है)
;प्रक्रियात्मक सामंजस्य: प्रक्रियात्मक सामंजस्य तब होता है जब मॉड्यूल के कुछ हिस्सों को समूहीकृत किया जाता है क्योंकि वे सदैव निष्पादन के निश्चित अनुक्रम (उदाहरण के लिए, फलन जो फ़ाइल अनुमतियों की जांच करता है और फिर फ़ाइल खोलता है) का पालन करते हैं।


;{{anchor|Communicational|Informational}}संचार/सूचनात्मक सामंजस्य: संचार संबंधी सामंजस्य तब होता है जब एक मॉड्यूल के कुछ हिस्सों को समूहीकृत किया जाता है क्योंकि वे एक ही डेटा पर काम करते हैं (उदाहरण के लिए, एक मॉड्यूल जो सूचना के समान रिकॉर्ड पर काम करता है)।
;संचार/सूचनात्मक सामंजस्य: संचार संबंधी सामंजस्य तब होता है जब मॉड्यूल के कुछ हिस्सों को समूहीकृत किया जाता है क्योंकि वे समान डेटा पर काम करते हैं (उदाहरण के लिए, मॉड्यूल जो सूचना के समान रिकॉर्ड पर काम करता है)।


;{{anchor|Sequential}}अनुक्रमिक सामंजस्य: अनुक्रमिक सामंजस्य तब होता है जब मॉड्यूल के कुछ हिस्सों को समूहीकृत किया जाता है क्योंकि एक भाग से आउटपुट असेंबली लाइन की तरह दूसरे भाग में इनपुट होता है (उदाहरण के लिए, एक फ़ंक्शन जो फ़ाइल से डेटा पढ़ता है और डेटा को संसाधित करता है)।
;अनुक्रमिक सामंजस्य: अनुक्रमिक सामंजस्य तब होता है जब मॉड्यूल के कुछ हिस्सों को समूहीकृत किया जाता है क्योंकि एक भाग से आउटपुट असेंबली लाइन की तरह दूसरे भाग में इनपुट होता है (उदाहरण के लिए, फलन जो फ़ाइल से डेटा पढ़ता है और डेटा को संसाधित करता है)।


;{{anchor|Functional}}कार्यात्मक सामंजस्य (सर्वश्रेष्ठ): कार्यात्मक सामंजस्य तब होता है जब मॉड्यूल के कुछ हिस्सों को समूहीकृत किया जाता है क्योंकि वे सभी मॉड्यूल के एक अच्छी तरह से परिभाषित कार्य में योगदान करते हैं (उदाहरण के लिए, एक्सएमएल स्ट्रिंग का लेक्सिकल विश्लेषण)उदाहरण:
;कार्यात्मक सामंजस्य (सर्वश्रेष्ठ): कार्यात्मक सामंजस्य तब होता है जब मॉड्यूल के कुछ हिस्सों को समूहीकृत किया जाता है क्योंकि वे सभी मॉड्यूल के अच्छी तरह से परिभाषित कार्य (उदाहरण के लिए, एक्सएमएल स्ट्रिंग का लेक्सिकल विश्लेषण) में योगदान करते हैं। उदाहरण:<syntaxhighlight>
:: <वाक्यविन्यास हाइलाइट लैंग = सी>
/*
/*
समूह: फ़ंक्शन परिभाषाएँ
Groups: The function definitions
भाग: प्रत्येक फ़ंक्शन पर शर्तें
Parts: The terms on each function
*/
*/
मॉड्यूल ए {
Module A {
   /*
   /*
   अंकगणितीय परिचालनों का कार्यान्वयन
   Implementation of arithmetic operations
   कहा जाता है कि इस मॉड्यूल में कार्यात्मक सामंजस्य है क्योंकि
   This module is said to have functional cohesion because
   सरल अंकगणितीय परिचालनों को समूहित करने का इरादा है
   there is an intention to group simple arithmetic operations
   इस पर।
   on it.
   */
   */
   (एक्स, वाई) = एक्स + वाई
   a(x, y) = x + y
   बी (एक्स, वाई) = एक्स * वाई
   b(x, y) = x * y
}
}


मॉड्यूल बी {
Module B {
   /*
   /*
   मॉड्यूल बी: कार्यान्वयन r(x) = 5x + 3
   Module B: Implements r(x) = 5x + 3
   इस मॉड्यूल को परमाणु सामंजस्य कहा जा सकता है। पूरा
   This module can be said to have atomic cohesion. The whole
   प्रणाली (भागों के रूप में मॉड्यूल ए और बी के साथ) को कार्यात्मक भी कहा जा सकता है
   system (with Modules A and B as parts) can also be said to have functional
   सामंजस्य, क्योंकि इसके दोनों भागों के विशिष्ट अलग-अलग उद्देश्य हैं।
   cohesion, because its parts both have specific separate purposes.
   */
   */
   आर (एक्स) = [मॉड्यूल ए]। ए ([मॉड्यूल ए]। बी (5, एक्स), 3)
   r(x) = [Module A].a([Module A].b(5, x), 3)
}
}
</वाक्यविन्यास हाइलाइट>
</syntaxhighlight>
 
;पूर्ण सामंजस्य (परमाणु): उदाहरणː <syntaxhighlight>
;{{anchor|Perfect|Atomic}}पूर्ण सामंजस्य (परमाणु): उदाहरण।
:: <वाक्यविन्यास हाइलाइट लैंग = सी>
/*
/*
समूह: फ़ंक्शन परिभाषाएँ
Groups: The function definitions
भाग: प्रत्येक फ़ंक्शन पर शर्तें
Parts: The terms on each function
*/
*/
मॉड्यूल ए {
Module A {
   /*
   /*  
   आर (एक्स) = 2x + 1 + 3x + 2 का कार्यान्वयन
   Implementation of r(x) = 2x + 1 + 3x + 2
   इसे पूर्ण सामंजस्य कहा जाता है क्योंकि इसे इससे अधिक कम नहीं किया जा सकता है।
   It's said to have perfect cohesion because it cannot be reduced any more than that.
   */
   */
   आर (एक्स) = 5x + 3
   r(x) = 5x + 3
}
}
</वाक्यविन्यास हाइलाइट>
</syntaxhighlight>
 
चूंकि सामंजस्य रैंकिंग प्रकार का पैमाना है, रैंक उत्तम सामंजस्य की स्थिर प्रगति का संकेत नहीं देते हैं। लैरी कॉन्सटेंटाइन, [[एडवर्ड योरडन]] और [[स्टीव मैककोनेल]] सहित विभिन्न लोगों द्वारा अध्ययन<ref name="McConnell" /> संकेत मिलता है कि पहले दो प्रकार के सामंजस्य हीन हैं; संचार और अनुक्रमिक सामंजस्य बहुत अच्छा है; और कार्यात्मक सामंजस्य श्रेष्ठ है।
हालांकि सामंजस्य एक रैंकिंग प्रकार का पैमाना है, रैंक बेहतर सामंजस्य की एक स्थिर प्रगति का संकेत नहीं देते हैं। लैरी कॉन्सटेंटाइन, [[एडवर्ड योरडन]] और [[स्टीव मैककोनेल]] सहित विभिन्न लोगों द्वारा अध्ययन<ref name="McConnell"/>संकेत मिलता है कि पहले दो प्रकार के सामंजस्य हीन हैं; संचार और अनुक्रमिक सामंजस्य बहुत अच्छा है; और कार्यात्मक सामंजस्य श्रेष्ठ है।


== यह भी देखें ==
== यह भी देखें ==
Line 116: Line 109:
* [http://www.aivosto.com/project/help/pm-oo-cohesion.html Cohesion metrics]
* [http://www.aivosto.com/project/help/pm-oo-cohesion.html Cohesion metrics]
* [https://github.com/mschwager/cohesion Measuring Cohesion in Python]
* [https://github.com/mschwager/cohesion Measuring Cohesion in Python]
[[Category: सॉफ़्टवेयर वास्तुशिल्प]] [[Category: सॉफ्टवेयर मेट्रिक्स]] [[Category: प्रोग्रामिंग सिद्धांत]]


[[Category: Machine Translated Page]]
[[Category:Created On 17/02/2023]]
[[Category:Created On 17/02/2023]]
[[Category:Lua-based templates]]
[[Category:Machine Translated Page]]
[[Category:Pages with script errors]]
[[Category:Pages with syntax highlighting errors]]
[[Category:Short description with empty Wikidata description]]
[[Category:Templates Vigyan Ready]]
[[Category:Templates that add a tracking category]]
[[Category:Templates that generate short descriptions]]
[[Category:Templates using TemplateData]]
[[Category:प्रोग्रामिंग सिद्धांत]]
[[Category:सॉफ़्टवेयर वास्तुशिल्प]]
[[Category:सॉफ्टवेयर मेट्रिक्स]]

Latest revision as of 16:47, 2 November 2023

कंप्यूटर प्रोग्रामिंग में, कहेसिओन उस 'डिग्री' को संदर्भित करता है जिस तक मॉड्यूल (प्रोग्रामिंग) के अंदर के तत्व एक साथ होते हैं।[1] दूसरे अर्थ में, यह विधि और कक्षा (कंप्यूटर प्रोग्रामिंग) के डेटा और उस वर्ग द्वारा प्रदान किए गए कुछ एकीकृत उद्देश्य या अवधारणा के बीच संबंधों की शक्ति का उपाय है। दूसरे अर्थ में, यह वर्ग के विधियों और स्वयं डेटा के बीच संबंध की शक्ति का उपाय है।

सामंजस्य क्रमिक प्रकार का माप है और इसे सामान्यतः "उच्च कहेसिओन" या "निम्न कहेसिओन" के रूप में वर्णित किया जाता है। उच्च सामंजस्य वाले मॉड्यूल उत्तम होते हैं, क्योंकि उच्च सामंजस्य सॉफ्टवेयर के कई वांछनीय लक्षणों से जुड़ा होता है, जिसमें रोबस्टनेस, विश्वसनीयता, पुन: प्रयोज्यता और समझ सम्मिलित है। इसके विपरीत, कम सामंजस्य अवांछनीय लक्षणों से जुड़ा हुआ है जैसे कि बनाए रखना, परीक्षण करना, पुन: उपयोग करना या यहां तक ​​कि समझना जटिल है।

सामंजस्य को अधिकांशतः युग्मन, अलग अवधारणा के विपरीत माना जाता है। उच्च सामंजस्य अधिकांशतः ढीले युग्मन और इसके विपरीतता से संबंधित होता है।[2] 1960 के दशक के उत्तरार्ध में लैरी कॉन्स्टेंटाइन द्वारा युग्मन और सामंजस्य के सॉफ्टवेयर मीट्रिक का आविष्कार संरचित डिज़ाइन के हिस्से के रूप में किया गया था, जो देखभाल और संशोधन व्यय को कम करने वाली "अच्छी" प्रोग्रामिंग प्रथाओं की विशेषताओं पर आधारित था। संरचित डिजाइन, सामंजस्य और युग्मन लेख स्टीवंस, मायर्स और कॉन्सटेंटाइन[1] (1974), योरडॉन और कॉन्सटेंटाइन पुस्तक[3] (1979) में प्रकाशित किए गए थे। बाद के दो, बाद में सॉफ्टवेयर इंजीनियरिंग में मानक शब्द बन गए।

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

वस्तु-उन्मुख प्रोग्रामिंग में, यदि वर्ग की सेवा करने वाली विधियाँ कई पहलुओं में समान होती हैं, तो उस वर्ग को उच्च सामंजस्य कहा जाता है।[4] अत्यधिक सामंजस्यपूर्ण प्रणाली में, कोड पठनीयता और पुन: प्रयोज्यता बढ़ जाती है, जबकि जटिलता को प्रबंधनीय रखा जाता है।

एकजुटता

सामंजस्य बढ़ जाता है यदि:

  • वर्ग में एम्बेड की गई कार्यप्रणाली, इसके विधियों के माध्यम से एक्सेस की गई, में बहुत कुछ सामान्य है।
  • डेटा के मोटे दाने वाले या असंबंधित सेट से बचकर, विधियाँ संबंधित गतिविधियों की छोटी संख्या को परिणाम देती हैं।
  • संबंधित विधियाँ समान स्रोत फ़ाइल में हैं या अन्यथा एक साथ समूहीकृत हैं; उदाहरण के लिए, अलग फ़ाइलों में लेकिन समान उप-निर्देशिका/फ़ोल्डर में।

उच्च सामंजस्य (या ठोस सामंजस्य) के लाभ हैं:

  • कम मॉड्यूल जटिलता (वे कम संचालन वाले सरल हैं)।
  • बढ़ी हुई प्रणाली देखभाल, क्योंकि डोमेन में तार्किक परिवर्तन कम मॉड्यूल को प्रभावित करते हैं, और क्योंकि मॉड्यूल में बदलाव के लिए अन्य मॉड्यूल में कम बदलाव की आवश्यकता होती है।
  • बढ़ा हुआ मॉड्यूल पुन: प्रयोज्यता, क्योंकि अनुप्रयोग डेवलपर्स मॉड्यूल द्वारा प्रदान किए गए संचालन के संयोजन सेट के बीच सॉफ़्टवेयर घटक को अधिक सरलता से ढूंढते हैं।

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

सामंजस्य के प्रकार

सामंजस्य गुणात्मक माप है, जिसका अर्थ है कि मापे जाने वाले स्रोत कोड को वर्गीकरण निर्धारित करने के लिए रूब्रिक (अकादमिक) का उपयोग करके जांचा जाता है। सामंजस्य प्रकार, सबसे खराब से सर्वोत्तम तक, इस प्रकार हैं:

आकस्मिक सामंजस्य (सबसे खराब)
संयोगात्मक सामंजस्य तब होता है जब मॉड्यूल के कुछ हिस्सों को इच्छानुसार समूहीकृत किया जाता है; भागों के बीच एकमात्र संबंध यह है कि उन्हें एक साथ समूहीकृत किया गया है (उदाहरण के लिए, "उपयोगिताएँ" वर्ग)। उदाहरण:
/*
Groups: The function definitions
Parts: The terms on each function
*/
Module A {
  /*
  Implementation of r(x) = 5x + 3
  There is no particular reason to group functions in this way,
  so the module is said to have Coincidental Cohesion.
  */ 
  r(x) = a(x) + b(x) 
  a(x) = 2x + 1
  b(x) = 3x + 2
}
तार्किक सामंजस्य
तार्किक सामंजस्य तब होता है जब मॉड्यूल के हिस्सों को समूहीकृत किया जाता है क्योंकि वे तार्किक रूप से समान काम करने के लिए वर्गीकृत होते हैं, तथापि वे प्रकृति से भिन्न (उदाहरण के लिए, सभी माउस और कीबोर्ड इनपुट हैंडलिंग रूटीन को समूहीकृत करना या सभी मॉडलों, विचारों और नियंत्रकों को अलग-अलग एमवीसी पैटर्न में फ़ोल्डरों में बंडल करना) होते हैं।
टेम्पोरल सामंजस्य
टेम्पोरल सामंजस्य तब होता है जब मॉड्यूल के हिस्सों को संसाधित होने पर समूहीकृत किया जाता है - भागों को प्रोग्राम निष्पादन में विशेष समय पर संसाधित (उदाहरण के लिए, फलन जिसे अपवाद को पकड़ने के बाद बुलाया जाता है जो खुली फाइलों को बंद करता है, त्रुटि बनाता है, लॉग और उपयोगकर्ता को सूचित करता है) किया जाता है ।
प्रक्रियात्मक सामंजस्य
प्रक्रियात्मक सामंजस्य तब होता है जब मॉड्यूल के कुछ हिस्सों को समूहीकृत किया जाता है क्योंकि वे सदैव निष्पादन के निश्चित अनुक्रम (उदाहरण के लिए, फलन जो फ़ाइल अनुमतियों की जांच करता है और फिर फ़ाइल खोलता है) का पालन करते हैं।
संचार/सूचनात्मक सामंजस्य
संचार संबंधी सामंजस्य तब होता है जब मॉड्यूल के कुछ हिस्सों को समूहीकृत किया जाता है क्योंकि वे समान डेटा पर काम करते हैं (उदाहरण के लिए, मॉड्यूल जो सूचना के समान रिकॉर्ड पर काम करता है)।
अनुक्रमिक सामंजस्य
अनुक्रमिक सामंजस्य तब होता है जब मॉड्यूल के कुछ हिस्सों को समूहीकृत किया जाता है क्योंकि एक भाग से आउटपुट असेंबली लाइन की तरह दूसरे भाग में इनपुट होता है (उदाहरण के लिए, फलन जो फ़ाइल से डेटा पढ़ता है और डेटा को संसाधित करता है)।
कार्यात्मक सामंजस्य (सर्वश्रेष्ठ)
कार्यात्मक सामंजस्य तब होता है जब मॉड्यूल के कुछ हिस्सों को समूहीकृत किया जाता है क्योंकि वे सभी मॉड्यूल के अच्छी तरह से परिभाषित कार्य (उदाहरण के लिए, एक्सएमएल स्ट्रिंग का लेक्सिकल विश्लेषण) में योगदान करते हैं। उदाहरण:
/*
Groups: The function definitions
Parts: The terms on each function
*/
Module A {
  /*
  Implementation of arithmetic operations
  This module is said to have functional cohesion because 
  there is an intention to group simple arithmetic operations
  on it. 
  */
  a(x, y) = x + y
  b(x, y) = x * y
}

Module B {
  /*
  Module B: Implements r(x) = 5x + 3
  This module can be said to have atomic cohesion. The whole
  system (with Modules A and B as parts) can also be said to have functional
  cohesion, because its parts both have specific separate purposes. 
  */
  r(x) = [Module A].a([Module A].b(5, x), 3)
}
पूर्ण सामंजस्य (परमाणु)
उदाहरणː
/*
Groups: The function definitions
Parts: The terms on each function
*/
Module A {
  /* 
  Implementation of r(x) = 2x + 1 + 3x + 2
  It's said to have perfect cohesion because it cannot be reduced any more than that.
  */
  r(x) = 5x + 3
}

चूंकि सामंजस्य रैंकिंग प्रकार का पैमाना है, रैंक उत्तम सामंजस्य की स्थिर प्रगति का संकेत नहीं देते हैं। लैरी कॉन्सटेंटाइन, एडवर्ड योरडन और स्टीव मैककोनेल सहित विभिन्न लोगों द्वारा अध्ययन[5] संकेत मिलता है कि पहले दो प्रकार के सामंजस्य हीन हैं; संचार और अनुक्रमिक सामंजस्य बहुत अच्छा है; और कार्यात्मक सामंजस्य श्रेष्ठ है।

यह भी देखें

संदर्भ

  1. 1.0 1.1 Yourdon, Edward; Constantine, Larry LeRoy (1979) [1975]. Structured Design: Fundamentals of a Discipline of Computer Program and Systems Design. Yourdon Press. Bibcode:1979sdfd.book.....Y. ISBN 978-0-13-854471-3.
  2. Ingeno, Joseph (2018). Software Architect's Handbook. Packt Publishing. p. 175. ISBN 978-178862406-0.
  3. Stevens, Wayne P.; Myers, Glenford J.; Constantine, Larry LeRoy (June 1974). "Structured design". IBM Systems Journal. 13 (2): 115–139. doi:10.1147/sj.132.0115.
  4. Marsic, Ivan (2012). Software Engineering. Rutgers University.
  5. McConnell, Steve (June 2004) [1993]. Code Complete (2 ed.). pp. 168-171. ISBN 978-0-7356-1967-8.


बाहरी संबंध