मैं 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 तर्क वास्तव में एक दूसरे के साथ जुड़े हुए हैं, और उनमें से कुछ अन्य से परिणाम हैं।
कौन सा दृष्टिकोण बेहतर है?