मैं GRASP सीखने की कोशिश कर रहा हूँ और मैंने पाया कि यह ( पेज 3 पर ) लो कपलिंग के बारे में बताया गया है और जब मैंने पाया तो मुझे बहुत आश्चर्य हुआ:
addTrackएकAlbumकक्षा के लिए विधि पर विचार करें , दो संभावित विधियाँ हैं:
addTrack( Track t )तथा
addTrack( int no, String title, double duration )कौन सी विधि युग्मन को कम करती है? दूसरा एक करता है, क्योंकि एल्बम वर्ग का उपयोग करने वाले वर्ग को ट्रैक क्लास जानने की आवश्यकता नहीं है। सामान्य तौर पर, विधियों के मापदंडों को आधार प्रकार (int, char ...) और कक्षाओं को जावा से उपयोग करना चाहिए। * संकुल।
मैं इस के साथ diasgree करते हैं; मेरा मानना addTrack(Track t)है कि addTrack(int no, String title, double duration)विभिन्न कारणों से बेहतर है :
यह हमेशा संभव के रूप में कम मापदंडों के लिए एक विधि के लिए बेहतर होता है (चाचा बॉब के क्लीन कोड के अनुसार कोई नहीं या एक अधिमानतः, कुछ मामलों में 2 और विशेष मामलों में 3, 3 से अधिक आवश्यकताओं को फिर से तैयार करने की आवश्यकता होती है - ये निश्चित रूप से सिफारिशों के नियम नहीं हैं) ।
यदि
addTrackएक इंटरफ़ेस का एक तरीका है, और आवश्यकताओं की आवश्यकता है किTrackअधिक जानकारी होनी चाहिए (वर्ष या शैली) तो इंटरफ़ेस को बदलना होगा और इसलिए कि विधि को किसी अन्य पैरामीटर का समर्थन करना चाहिए।एनकैप्सुलेशन टूट गया है; यदि
addTrackएक इंटरफेस में है, तो यह के आंतरिक पता नहीं होना चाहिएTrack।यह वास्तव में कई मापदंडों के साथ दूसरे तरीके से अधिक युग्मित है। मान लीजिए
noपैरामीटर जरूरतों से परिवर्तित करने कीintकरने के लिएlong, क्योंकि वहाँ की तुलना में अधिक कर रहे हैंMAX_INTपटरियों (या जो भी कारण के लिए); तबTrackऔर विधि दोनों को बदलने की जरूरत है, जबकि अगर विधिaddTrack(Track track)केवलTrackहोगी-तो बदल दी जाएगी।
सभी 4 तर्क वास्तव में एक दूसरे के साथ जुड़े हुए हैं, और उनमें से कुछ अन्य से परिणाम हैं।
कौन सा दृष्टिकोण बेहतर है?