ओओपी में विकसित होने पर, कभी-कभी एक पुस्तकालय द्वारा एक इंटरफ़ेस / अनुबंध दिया जाता है जिसे आप बदल नहीं सकते हैं। आइए इस इंटरफ़ेस को जे।
अब आपके पास कक्षा ए की एक वस्तु है जो उन वस्तुओं का उपभोग करती है जो इस इंटरफ़ेस को लागू करती हैं। अंदर ए इंटरफ़ेस की परिभाषाओं का केवल एक छोटा सा हिस्सा आवश्यक है। प्रोजेक्ट के दौरान कुछ ऑब्जेक्ट क्लास मेरे द्वारा बनाए गए हैं (चलो उनमें से एक को टाइप डी कहते हैं), इसलिए इंटरफ़ेस जे के अंदर सब कुछ के कार्यान्वयन में एक ओवरहेड है।
मैं इंटरफ़ेस J में कार्यक्षमता का सबसेट लागू करना चाहता हूं, लेकिन मेरे समाधान अब तक मुझे संतुष्ट नहीं करते हैं:
- J के हर पहलू को लागू करना और फिर "notImforceedException" को फेंकना मेरी वस्तुओं के उपयोगकर्ता को गलत बनाता है: ऐसा लगता है कि मेरे प्रकार की वस्तुएँ D इंटरफ़ेस J के अनुरूप होंगी, लेकिन वे नहीं - और मेरी वस्तुओं के अन्य उपभोक्ता (जो ऑब्जेक्ट को इंटरफ़ेस स्वीकार करते हैं) जम्मू) मेरी वस्तुओं की अखंडता पर भरोसा नहीं कर सकता।
- एक नए परिभाषित इंटरफ़ेस को लागू करना मुझे उन वस्तुओं का उपयोग करने से रोकता है जो केवल इंटरफ़ेस जे को लागू करते हैं, हालांकि इंटरफ़ेस जे मेरे अपने इंटरफ़ेस के साथ पूरी तरह से संगत है।
- अपने कस्टम ऑब्जेक्ट को इंटरफ़ेस J को लागू करने देना महत्वपूर्ण ओवरहेड पैदा करेगा, क्योंकि उन्हें इस सभी कार्यक्षमता की आवश्यकता नहीं है।
जब मैं इंटरफ़ेस J को बदलने में सक्षम था, तो मैं एक "सुपर-इंटरफ़ेस" K बनाऊंगा जिसमें इंटरफ़ेस J की कार्यक्षमता का यह सबसेट था, और इंटरफ़ेस J को इंटरफ़ेस K से विरासत में मिला। लेकिन मैं इंटरफ़ेस J को बदल नहीं सकता।
इस समस्या का एक वस्तु-उन्मुख समाधान क्या है? सबसे अच्छा समाधान अभी भी "सिर्फ" इंटरफ़ेस जे को लागू कर रहा है? या इसमें कोई बदलाव किए बिना एक इंटरफ़ेस को "सुपरक्लास" करने के लिए ओओपी-तरीके हैं?