java.util.List
इंटरफ़ेस getLast()
का समर्थन नहीं करता है क्योंकि डिजाइनर 'न्यूनतम इंटरफ़ेस' के लिए गए थे। परिभाषित तरीकों की न्यूनतम संख्या के साथ यह समझने और सीखने में तेज़ी से दोनों आसान बनाता है।
यह 'मानवीय इंटरफ़ेस' (जैसे Ruby array class में उपयोग किया जाता है) के विपरीत है जो सामान्य संचालन करने के तरीकों को प्रदान करने का प्रयास करता है (उदा। getLast()
)। चूंकि ऐसे कई उपयोग हैं जो इस तरह की मौलिक अवधारणा को एक सूची के रूप में रखा जा सकता है जिससे बहुत अधिक इंटरफेस हो जाते हैं।
अधिक जानकारी के लिए मार्टिन फाउलर के Minimal Interface और Humane Interface विवरण देखें।
क्यों LinkedList getLast()
का समर्थन करता है आदि, जावाडोक उद्धृत करने के लिए के रूप में:
... LinkedList वर्ग समान रूप से, मिल को हटाने और शुरुआत और सूची के अंत में एक तत्व डालने के लिए नामित किया गया तरीकों प्रदान करता है ।ये ऑपरेशन लिंक किए गए सूचियों को स्टैक, कतार, या डबल-एंडेड कतार (डेक) के रूप में उपयोग करने की अनुमति देते हैं।
संभवतः यह महसूस किया गया था कि इन विशिष्ट उपयोग मामलों के लिए एक सामान्य सूची पर्याप्त नहीं होगी।
जावा कलेक्शन एपीआई (जोशुआ ब्लोच) के मुख्य डिजाइनर के दिमाग में अंतर्दृष्टि के रूप में वह this list of API design maxims प्रदान करता है जिसके द्वारा वह काम करता है। इनमें से सबसे अधिक प्रासंगिक हैं:
एपीआई के प्रारंभिक ड्राफ्ट कम होना चाहिए, आमतौर पर कक्षा और विधि हस्ताक्षर और एक-पंक्ति विवरण वाले एक पृष्ठ होना चाहिए। यह एपीआई को पुन: स्थापित करना आसान बनाता है जब आपको पहली बार सही नहीं लगता है।
संदेह में, इसे छोड़ दें। यदि एपीआई डिज़ाइन का मौलिक प्रमेय है, तो यह है। यह कार्यक्षमता, कक्षाओं, विधियों, और पैरामीटर के लिए समान रूप से लागू होता है। एपीआई के हर पहलू जितना संभव हो उतना छोटा होना चाहिए, लेकिन कोई छोटा नहीं। आप हमेशा बाद में चीज़ें जोड़ सकते हैं, लेकिन आप उन्हें दूर नहीं ले जा सकते हैं। अवधारणात्मक वजन को कम करना कक्षा- या विधि-गणना से अधिक महत्वपूर्ण है।
एपीआई को कार्यान्वयन विवरण से मुक्त रखें। वे उपयोगकर्ताओं को भ्रमित करते हैं और विकसित करने के लिए लचीलापन को रोकते हैं। यह हमेशा स्पष्ट नहीं होता है कि कार्यान्वयन विवरण क्या है: ओवरस्पेसिफिकेशन से सावधान रहें।
पहुंच को कम करें; जब संदेह में, इसे निजी बनाओ। यह एपीआई को सरल बनाता है और युग्मन को कम करता है।
एपीआई डिज़ाइन निर्णयों के प्रदर्शन परिणामों पर विचार करें, लेकिन प्रदर्शन लाभ प्राप्त करने के लिए एपीआई को वार न करें। सौभाग्य से, अच्छी एपीआई आम तौर पर तेजी से कार्यान्वयन के लिए खुद को उधार देती है।
लेकिन उन्होंने यह भी कहा गया:
ग्राहक कुछ भी कर सकता है पुस्तकालय करना मत करना। इस नियम का उल्लंघन करने से क्लाइंट में बॉयलरप्लेट कोड होता है, जो परेशान और त्रुटि-प्रवण है।
जो दिखाता है कि डिज़ाइन दिशानिर्देश अक्सर संघर्ष करते हैं और एपीआई डिज़ाइनर नौकरी का सबसे कठिन हिस्सा इन संघर्षों को संतुलित करना है।
कोड में कुछ बार निपटने के बाद, मुझे पूरा यकीन है कि यह एपीआई डिजाइनर पर नाराज रखरखाव प्रोग्रामर को नाराज करने के लिए है। :-) ग्रीनफील्ड प्रोग्रामर लिंकडलिस्ट (सूची के बजाय) के आसपास गुजरते हैं ताकि वे getLast() का उपयोग कर सकें।रखरखाव के लोगों का पता चलता है कि ऐरेलिस्ट अधिक उपयुक्त है और इन सभी निर्दिष्ट लिंक्डलिस्टों से निपटना है जो वास्तव में पहली जगह में सूचीबद्ध होना चाहिए था (और शायद सूची इंटरफेस में इस एक महत्वपूर्ण विफलता को छोड़कर) ... –