मैं php में काम करता हूं, और इंटरफेस की अवधारणा मुझे यहां थोड़ा बेकार लगता है। पढ़ने से, मैं समझता हूं कि इंटरफेस "अनुबंध द्वारा डिजाइन" का हिस्सा हैं, लेकिन कम से कम किसी विशेष प्रकार की वापसी की गारंटी के बिना, वास्तव में कोई अनुबंध नहीं है। ऐसा लगता है कि यह एक अनुबंध की तरह है जो पढ़ता है, "हम निम्नलिखित करने के लिए सहमत हैं:" "- समझौते की कोई शर्तें नहीं हैं।गतिशील/ढीले-टाइप की गई भाषाओं में इंटरफ़ेस क्यों?
यदि मुझे गारंटी है कि किसी ऑब्जेक्ट की कोई विधि है, तो ऐसा लगता है कि इंटरफेस विशेष रूप से उपयोगी नहीं हैं। अगर मैं किसी ऑब्जेक्ट को कॉल करने का प्रयास करता हूं, तो मुझे कोई घातक त्रुटि मिलती है, इसलिए मुझे बहुत जल्दी पता चलता है कि उस वर्ग के पास उस नाम के साथ कोई विधि नहीं है। अगर मैं स्मार्ट बनना चाहता हूं और पहले से जांचना चाहता हूं कि कक्षा में कोई तरीका है, तो इंटरफ़ेस की जांच कर रहा है, और यह देख रहा है कि ऑब्जेक्ट लागू करता है कि इंटरफ़ेस मुझे उस ऑब्जेक्ट को सीधे जांचने से कहीं अधिक समय नहीं बचाता है (जो मैं करता हूं वैसे भी यह देखने के लिए कि कक्षा में उस पद्धति के बावजूद यह तरीका था, चाहे वह किसी भी इंटरफेस को लागू करता या लागू नहीं करता)।
दूसरे शब्दों में, सिर्फ इसलिए कि मेरे पास विशेष नाम हैं जिनके पास विशेष नाम हैं, जो मुझे किसी विशेष व्यवहार की गारंटी नहीं देते हैं। अगर मुझे किसी निश्चित प्रकार के चर के रिटर्न की गारंटी है, तो मुझे कम से कम कुछ आउटपुट होगा जो आउटपुट होगा, और मैं उस इंटरफ़ेस के साथ ऑब्जेक्ट का उपयोग करने वाले कोड को लिख सकता हूं, क्योंकि मुझे पता है कि मैं क्या कर रहा हूं इसका यदि यह एक स्ट्रिंग देता है, तो मैं कम से कम निश्चितता के साथ कोडिंग जारी रख सकता हूं कि मैं बाद में स्ट्रिंग आउटपुट से निपट रहा हूं। इसलिए जब रिटर्न प्रकार निर्दिष्ट होता है तो मुझे कम से कम कुछ व्यवहार की गारंटी है। क्या इंटरफेस के लिए व्यवहार भाग की गारंटी है, या नहीं?
एकमात्र चीज जो मैं सोच सकता हूं वह यह है कि जब मैं कोड लिख रहा हूं, तो यह बाद में उस कक्षा को लिखते समय कुछ तरीकों को बनाने के लिए सुनिश्चित करने के लिए एक नोट के रूप में कार्य करता है। जब मैं कोड लिख रहा हूं तो यह मचान की तरह लगता है; जब मैं वास्तव में इसका उपयोग कर रहा हूं तब से मुझे बहुत लाभ नहीं दिखता है। इसलिए जब मैं कक्षाएं बना रहा हूं, तब से मैं मानक को बनाए रखना मेरे लिए अधिक है। यह लाभ अनुबंध द्वारा डिजाइन की अवधारणा में वास्तव में कब्जा नहीं किया जाता है।
वास्तव में PHP जैसे गतिशील/ढीली टाइप की गई भाषाओं में इंटरफ़ेस का उपयोग करने से आपको क्या लाभ मिलता है? क्या वे महान हैं, या यह कुछ ऐसा है जो अधिक मजबूत ओओ भाषा लागू करता है, इसलिए PHP भी इसे लागू करता है?
पेडेंटिक नोट: PHP 'untyped' नहीं है। यह गतिशील और ढीला टाइप किया गया है। एक बड़ा अंतर है ... – ircmaxell
अगर यह एक बड़ा अंतर बनाता है तो यह इतना pedantic नहीं है :) फिक्स्ड। – user151841
क्या होगा यदि आपके सॉफ़्टवेयर की आवश्यकता है कि कोई विधि किसी प्राइम नंबर या यूएस-एएससीआईआई स्ट्रिंग को लौटाती है? सिर्फ इसलिए कि एक इंटरफेस "अनुबंध" के उस हिस्से को निर्दिष्ट नहीं कर सकता है, और वे चीजें आपके प्रोग्राम को फेंक सकती हैं, क्या इसका मतलब यह है कि इंटरफेस सभी भाषाओं में पूरी तरह से बेकार है? साथ ही, दृढ़ता से टाइप की गई भाषाओं में, एक प्रकार-मेल-मिलाप भी एक त्रुटि उत्पन्न करता है। इसलिए आप आसानी से पूछ सकते हैं कि आपको मजबूती से टाइप की गई भाषाओं में अपने इंटरफ़ेस में रिटर्न प्रकार निर्दिष्ट करने की आवश्यकता क्यों है। –