सामंजस्य (Cohesion) और कपलिंग (Coupling) दो सबसे महत्वपूर्ण ऑब्जेक्ट-ओरिएंटेड सिद्धांत हैं।
सामंजस्य एक क्लास के अंदर सभी मेथड्स के बीच संबंध के बारे में है। क्या वे इंस्टेंस वेरिएबल्स और पैरामीटर्स के उसी सेट का उपयोग कर रहे हैं, सभी एक ही लक्ष्य की ओर मिलकर काम कर रहे हैं? या हर मेथड एक-दूसरे से अलग महसूस होता है?
कपलिंग यह है कि एक क्लास दूसरी क्लासेस पर कितना निर्भर है, यह बाकी सिस्टम से कितना "बंधा हुआ" है, और इस क्लास की अलगाव में उपयोग करने की क्षमता।

ये दोनों अवधारणाएं आपको अपने कोड बेस में हर क्लास को लेंस के एक विशिष्ट सेट के माध्यम से देखने में मदद करती हैं। ये लेंस आपको यह पता लगाने में मदद करते हैं कि आपका क्लास डिज़ाइन कितना ठोस है और आप कहां कुछ बदलाव कर सकते हैं।
सर्वोत्तम परिणामों के लिए आप उच्च सामंजस्य और कम कपलिंग का लक्ष्य रखना चाहते हैं।
सामंजस्य का एक उदाहरण
कम सामंजस्य आपकी पिज़्ज़ा पर एक असामान्य टॉपिंग होने जैसा है, जबकि उच्च सामंजस्य ऐसा लगता है जैसे सब कुछ वहीं है जहां उसे होना चाहिए।
आप इसके लिए एक एहसास प्राप्त कर सकते हैं, लेकिन इसे मापना कठिन है, आप केवल एक संख्या प्राप्त नहीं कर सकते जो आपको बताए कि आपकी क्लास कितनी सामंजस्यपूर्ण है। इसलिए इसे समझने में आसान बनाने के लिए मैं आपको एक कोड उदाहरण दिखाना चाहता हूं जहां यह वास्तव में स्पष्ट है।
यह रहा:
class Library def lend_book end def return_book end def make_coffee end end
इस उदाहरण में make_coffee काफी अलग दिखता है, भले ही इस लाइब्रेरी में एक कैफेटेरिया हो, Library क्लास के लिए कॉफी बनाना कोई मायने नहीं रखता 🙂
कैफेटेरिया को इसकी किताबों के बारे में कोई जानकारी नहीं चाहिए, किताब कैसे उधार दें, आदि।
और लाइब्रेरी को यह जानने की जरूरत नहीं है कि कितनी कॉफी बची है या इसे कैसे बनाया जाए।
यही हमारा मतलब है LOW सामंजस्य से।
बेशक:
यह हमेशा इतना स्पष्ट नहीं होता, कभी-कभी आपको ध्यान देना पड़ता है और मेथड नामों से आगे देखना पड़ता है।
- ये मेथड्स वास्तव में क्या कर रहे हैं?
- वे किस डेटा के साथ काम कर रहे हैं?
- वे किन वस्तुओं के साथ सहयोग कर रहे हैं?
ये प्रश्न आपको अपनी क्लास के सामंजस्य के स्तर का अंदाजा देना चाहिए।
आप कम सामंजस्य को कैसे ठीक करते हैं?
आपको उन मेथड्स को निकालना होगा जो इस क्लास से संबंधित नहीं हैं, अक्सर एक नई क्लास में।
कपलिंग का एक उदाहरण
अब आइए कपलिंग पर एक नज़र डालते हैं।
यहां उदाहरण है:
class ShoppingCart attr_accessor :items def initialize @items = [] end end class Order def process_order(cart) cart.items.map(&:price).inject(:+) end end
इस उदाहरण में Order ShoppingCart से अत्यधिक कपल्ड है क्योंकि यह इसके बारे में बहुत कुछ जानता है, यह जानता है कि एक items वेरिएबल है और इसके साथ कुछ गणना कर रहा है।
अब यदि आप ShoppingCart के items के कार्यान्वयन को बदलते हैं, तो आपको Order को भी बदलना होगा।
अच्छा नहीं!
हम इसे इस तरह ठीक कर सकते हैं:
class ShoppingCart attr_accessor :items def initialize @items = [] end def calculate_total items.map(&:price).inject(:+) end end class Order def process_order(cart) cart.calculate_total end end
हमने गणना के विवरण को वहां ले जाकर कपलिंग कम कर दी है जहां वे संबंधित हैं।
यदि आपको इसके लिए एक रूपक चाहिए तो उन सेल फोन्स के बारे में सोचें जो फिक्स्ड बैटरी के साथ आते हैं, वह उच्च कपलिंग है।
यदि आप बैटरी बदल सकते हैं तो वह कम कपलिंग है।
ध्यान दें कि आपको अभी भी कपलिंग के कुछ स्तर की आवश्यकता है, फोन बैटरी के बिना काम नहीं करेगा और Order क्लास यह जाने बिना काम नहीं करेगी कि ग्राहक से कितना शुल्क लेना है।
सारांश
आपने दो बहुत महत्वपूर्ण OOP सिद्धांतों, सामंजस्य और कपलिंग के बारे में सीखा। ये दो अवधारणाएं आपको यह पता लगाने में मदद करती हैं कि एक क्लास में मेथड्स कितनी अच्छी तरह एक साथ काम करते हैं और आपकी क्लास बाकी सिस्टम से कितनी स्वतंत्र है।
आप इसे अभी अपनी किसी एक प्रोजेक्ट पर लागू कर सकते हैं, इसे खोलें और अपनी कुछ क्लासेस को देखें। आप जो सीखा है उसका उपयोग करके उन्हें कैसे सुधार सकते हैं?
पढ़ने के लिए धन्यवाद! शेयर करना और न्यूज़लेटर की सदस्यता लेना न भूलें अगर आपने अभी तक नहीं लिया है 🙂