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

From Vigyanwiki
Revision as of 00:44, 28 February 2023 by alpha>Rajkumar

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

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

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

/* समूह: फलन परिभाषाएँ भाग: प्रत्येक फलन पर शर्तें

  • /

मॉड्यूल ए {

 /*
 आर (एक्स) = 5x + 3 का कार्यान्वयन
 इस तरह समूह कार्यों का कोई विशेष कारण नहीं है,
 इसलिए कहा जाता है कि मॉड्यूल में आकस्मिक सामंजस्य है।
 */
 आर (एक्स) = ए (एक्स) + बी (एक्स)
 ए (एक्स) = 2x + 1
 बी (एक्स) = 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)
}
<वाक्यविन्यास हाइलाइट लैंग = सी>

/* समूह: फलन परिभाषाएँ भाग: प्रत्येक फलन पर शर्तें

  • /

मॉड्यूल ए {

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

}

मॉड्यूल बी {

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

/* समूह: फलन परिभाषाएँ भाग: प्रत्येक फलन पर शर्तें

  • /

मॉड्यूल ए {

 /*
 आर (एक्स) = 2x + 1 + 3x + 2 का कार्यान्वयन
 इसे पूर्ण सामंजस्य कहा जाता है क्योंकि इसे इससे अधिक कम नहीं किया जा सकता है।
 */
 आर (एक्स) = 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.


बाहरी संबंध