शब्द सामंजस्य मूल रूप से स्रोत कोड के मॉड्यूल का वर्णन करने के लिए इस्तेमाल किया गया था कि मॉड्यूल के स्रोत कोड कितनी अच्छी तरह एक दूसरे से संबंधित थे। विभिन्न क्षेत्रों में सामंजस्य के विचार का उपयोग किया जाता है। उदाहरण के लिए, एक सैन्य इकाई जैसे लोगों का एक समूह सामंजस्यपूर्ण हो सकता है, जिसका अर्थ है कि इकाई के लोग एक समान लक्ष्य के लिए मिलकर काम करते हैं।
स्रोत कोड सामंजस्य का सार यह है कि मॉड्यूल में स्रोत कोड एक सामान्य, अच्छी तरह से परिभाषित लक्ष्य की ओर एक साथ काम करता है। मॉड्यूल आउटपुट बनाने के लिए आवश्यक स्रोत कोड की न्यूनतम मात्रा मॉड्यूल में है और अधिक नहीं। इंटरफ़ेस अच्छी तरह से परिभाषित है और इनपुट इंटरफ़ेस के माध्यम से प्रवाहित होते हैं और आउटपुट इंटरफ़ेस के माध्यम से वापस प्रवाहित होते हैं। कोई साइड इफेक्ट नहीं हैं और अतिसूक्ष्मवाद पर जोर दिया गया है।
कार्यात्मक रूप से चिपकने वाले मॉड्यूल का एक लाभ यह है कि यूनिट परीक्षणों को विकसित करना और स्वचालित करना सीधा है। वास्तव में एक मॉड्यूल के सामंजस्य का एक अच्छा उपाय यह है कि मॉड्यूल के लिए संपूर्ण इकाई परीक्षणों का एक पूरा सेट बनाना कितना आसान है।
एक मॉड्यूल एक वस्तु उन्मुख भाषा में एक वर्ग या एक कार्यात्मक भाषा या गैर-वस्तु उन्मुख भाषा में एक समारोह हो सकता है, जैसे सी। कोष्ठक को मापने के इस क्षेत्र में मूल काम के ज्यादातर आईबीएम में वापस COBOL कार्यक्रमों के साथ काम शामिल है। 1970 के दशक में सामंजस्य निश्चित रूप से एक वस्तु उन्मुख अवधारणा नहीं है।
अनुसंधान का मूल आशय जिसमें सामंजस्य की अवधारणा और युग्मन की संबद्ध अवधारणा थी, से अनुसंधान किया गया था कि कार्यक्रमों की विशेषताओं को समझना, बनाए रखना और विस्तारित करना कहां आसान था। लक्ष्य प्रोग्रामिंग की सर्वोत्तम प्रथाओं को सीखने, उन सर्वोत्तम प्रथाओं को संहिताबद्ध करने और फिर अन्य प्रोग्रामर को अभ्यास सिखाने में सक्षम होना था।
अच्छे प्रोग्रामर्स का लक्ष्य सोर्स कोड लिखना होता है, जिसका सामंजस्य यथासंभव उच्च होता है जिससे पर्यावरण और समस्या को हल किया जा रहा है। इसका तात्पर्य यह है कि एक बड़े अनुप्रयोग में स्रोत कोड बॉडी के कुछ हिस्से अन्य भागों से भिन्न होंगे जो उस मॉड्यूल या कक्षा में स्रोत कोड के सामंजस्य के स्तर तक होंगे। आप जिस समस्या को हल करने का प्रयास कर रहे हैं, उसके कारण कुछ समय के लिए आपको सबसे अच्छा अस्थायी या अनुक्रमिक सामंजस्य मिल सकता है।
सामंजस्य का सबसे अच्छा स्तर कार्यात्मक सामंजस्य है। कार्यात्मक सामंजस्य वाला एक मॉड्यूल गणितीय फ़ंक्शन के समान है जिसमें आप इनपुट का एक सेट प्रदान करते हैं और आपको एक विशिष्ट आउटपुट मिलता है। एक सही मायने में कार्यात्मक मॉड्यूल का आउटपुट के अतिरिक्त दुष्प्रभाव नहीं होगा और न ही यह किसी भी प्रकार की स्थिति को बनाए रखेगा। इसके बजाय एक अच्छी तरह से परिभाषित इंटरफ़ेस होगा जो मॉड्यूल के किसी भी आंतरिक को उजागर किए बिना मॉड्यूल की कार्यक्षमता को एन्क्रिप्ट करता है और मॉड्यूल का उपयोग करने वाला व्यक्ति इनपुट का एक विशेष सेट प्रदान करेगा और बदले में एक विशेष आउटपुट प्राप्त करेगा। एक सही मायने में कार्यात्मक मॉड्यूल थ्रेड सुरक्षित होना चाहिए।
कई प्रोग्रामिंग भाषा पुस्तकालयों में कार्यात्मक मॉड्यूल के कई उदाहरण होते हैं चाहे कक्षाएं, टेम्प्लेट, या फ़ंक्शन। सबसे कार्यात्मक सामंजस्यपूर्ण उदाहरण गणितीय कार्य होंगे जैसे पाप, कोसाइन, वर्गमूल आदि।
अन्य कार्यों के दुष्प्रभाव हो सकते हैं या कुछ प्रकार की स्थिति बनाए रख सकते हैं, जिसके परिणामस्वरूप उन कार्यों का उपयोग अधिक जटिल हो सकता है।
उदाहरण के लिए, एक फ़ंक्शन जो एक अपवाद को फेंकता है या एक वैश्विक त्रुटि चर ( errno
सी में) सेट करता है या इसे एक अनुक्रम में उपयोग किया जाना चाहिए (strtok()
फ़ंक्शन मानक सी लाइब्रेरी से एक उदाहरण है क्योंकि यह आंतरिक स्थिति बनाए रखता है) या जो एक पॉइंटर प्रदान करता है जो तब होना चाहिए प्रबंधित या कुछ लॉग उपयोगिता के लिए एक लॉग जारी करता है एक फ़ंक्शन के सभी उदाहरण हैं जो अब कार्यात्मक सामंजस्य नहीं है।
मैंने योरडन और कॉन्स्टेंटाइन की मूल पुस्तक, स्ट्रक्चर्ड प्रोग्रामिंग दोनों को पढ़ा है, जहाँ मुझे पहली बार 1980 के दशक में सामंजस्य का विचार आया और मेइलिर पेज-जोन्स की पुस्तक प्रैक्टिकल गाइड टू स्ट्रक्चर्ड सिस्टम्स डिज़ाइन, और पेज-जोन्स ने वर्णन करने का बेहतर काम किया। युग्मन और सामंजस्य दोनों। The Yourdon और Constantine पुस्तक कुछ अधिक अकादमिक लगती है। स्टीव मैककोनेल की पुस्तक कोड कम्प्लीट काफी अच्छी और व्यावहारिक है और संशोधित संस्करण में अच्छी प्रोग्रामिंग प्रैक्टिस के बारे में कहने के लिए काफी कुछ है।