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

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

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

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

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

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

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

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


 * आकस्मिक सामंजस्य (सबसे खराब): संयोगात्मक सामंजस्य तब होता है जब मॉड्यूल के कुछ हिस्सों को मनमाने ढंग से समूहीकृत किया जाता है; भागों के बीच एकमात्र संबंध यह है कि उन्हें एक साथ समूहीकृत किया गया है (उदाहरण के लिए, एक "उपयोगिताएँ" वर्ग)। उदाहरण:
 * <वाक्यविन्यास हाइलाइट लैंग = सी>

/* समूह: फ़ंक्शन परिभाषाएँ भाग: प्रत्येक फ़ंक्शन पर शर्तें मॉड्यूल ए { /* आर (एक्स) = 5x + 3 का कार्यान्वयन इस तरह समूह कार्यों का कोई विशेष कारण नहीं है, इसलिए कहा जाता है कि मॉड्यूल में आकस्मिक सामंजस्य है। */ आर (एक्स) = ए (एक्स) + बी (एक्स) ए (एक्स) = 2x + 1 बी (एक्स) = 3x + 2 } 


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


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


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


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


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


 * कार्यात्मक सामंजस्य (सर्वश्रेष्ठ): कार्यात्मक सामंजस्य तब होता है जब मॉड्यूल के कुछ हिस्सों को समूहीकृत किया जाता है क्योंकि वे सभी मॉड्यूल के एक अच्छी तरह से परिभाषित कार्य में योगदान करते हैं (उदाहरण के लिए, एक्सएमएल स्ट्रिंग का लेक्सिकल विश्लेषण)। उदाहरण:
 * <वाक्यविन्यास हाइलाइट लैंग = सी>

/* समूह: फ़ंक्शन परिभाषाएँ भाग: प्रत्येक फ़ंक्शन पर शर्तें मॉड्यूल ए { /* अंकगणितीय परिचालनों का कार्यान्वयन कहा जाता है कि इस मॉड्यूल में कार्यात्मक सामंजस्य है क्योंकि सरल अंकगणितीय परिचालनों को समूहित करने का इरादा है इस पर। */ ए (एक्स, वाई) = एक्स + वाई बी (एक्स, वाई) = एक्स * वाई }

मॉड्यूल बी { /* मॉड्यूल बी: कार्यान्वयन r(x) = 5x + 3 इस मॉड्यूल को परमाणु सामंजस्य कहा जा सकता है। पूरा प्रणाली (भागों के रूप में मॉड्यूल ए और बी के साथ) को कार्यात्मक भी कहा जा सकता है सामंजस्य, क्योंकि इसके दोनों भागों के विशिष्ट अलग-अलग उद्देश्य हैं। */ आर (एक्स) = [मॉड्यूल ए]। ए ([मॉड्यूल ए]। बी (5, एक्स), 3) } 


 * पूर्ण सामंजस्य (परमाणु): उदाहरण।
 * <वाक्यविन्यास हाइलाइट लैंग = सी>

/* समूह: फ़ंक्शन परिभाषाएँ भाग: प्रत्येक फ़ंक्शन पर शर्तें मॉड्यूल ए { /* आर (एक्स) = 2x + 1 + 3x + 2 का कार्यान्वयन इसे पूर्ण सामंजस्य कहा जाता है क्योंकि इसे इससे अधिक कम नहीं किया जा सकता है। */ आर (एक्स) = 5x + 3 } 

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

यह भी देखें

 * युग्मन (कंप्यूटर विज्ञान)
 * वस्तु-उन्मुख प्रोग्रामिंग शब्दों की सूची
 * स्टेटिक कोड विश्लेषण

बाहरी संबंध

 * Definitions of Cohesion metrics
 * Cohesion metrics
 * Measuring Cohesion in Python