2009-11-15 9 views
7

मुझे प्रोग्रामिंग असाइनमेंट दिया गया है और मुझे जो कुछ करना है, वह एक विधि है जो एक रैपर विधि है जो निर्देशांक को निम्नतम से उच्चतम क्रमबद्ध करने के लिए किसी अन्य विधि पर निर्भर करती है। मैं एक रैपर विधि को लागू करके वास्तव में क्या मतलब है इस पर अनिश्चित हूं।"रैपर विधि को लागू करने" का क्या अर्थ है?

static void sortCoordsByZ(double[][] coords) { 
    //implement the wrapper method for the recursive sort method. all work is done the recursive sort method 
} 

static void recursiveSort(double[][] coords, int lo, int hi) { 
    //recursive sort method 
} 
+0

@ डौगमैन - यह स्पष्ट नहीं है कि यह होमवर्क है (मैं एक काम पर प्रोग्रामिंग असाइनमेंट प्राप्त करता हूं), इसलिए जब तक प्रश्नकर्ता अन्यथा कहता है तब तक मैं टैग को हटा रहा हूं। Http://meta.stackexchange.com/questions/11189/what-to-do-about-tag-abuse देखें। –

उत्तर

2

यह एक और तरीका :) शायद यह अपने छंटाई करने के लिए एक प्रवेश बिंदु के रूप में प्रारंभिक और कृत्यों अपने मामले में हाय लो के मूल्यों और की तरह कुछ अतिरिक्त तर्क कहते हैं, गिर्द घूमती है।

9

एक रैपर विधि adapter या façade है; यह एक मौजूदा विधि के लिए एक वैकल्पिक इंटरफ़ेस प्रदान करता है।

आपको उन लोगों के लिए एक सरल इंटरफ़ेस प्रदान करने के लिए एक मुखौटा (मुखौटा) लिखने के लिए कहा गया है, जिन्हें उच्च और निम्न मान निर्दिष्ट करने की आवश्यकता नहीं है।

5

जब आप एक रैपर विधि लागू करते हैं, तो आप प्रभावी रूप से मौजूदा विधि का एक प्रकार कोडिंग कर रहे हैं, आमतौर पर क्योंकि मौजूदा विधि आपकी वर्तमान आवश्यकताओं को पूरा नहीं करती है। मूल विधि जटिल (बहुत अधिक पैरामीटर) हो सकता है या यह काफी आवश्यक बात है, जिसका मतलब है कि आप एक आवरण (या अधिभार) लिखने के लिए है कि अतिरिक्त काम मूल विधि नहीं करता है न कर पाएं। आम तौर पर जब एक रैपर लिखते हैं तो आप जो कुछ भी करते हैं उसके लिए मूल फ़ंक्शन का लाभ उठाएंगे, और अपने रैपर के साथ अंतराल को भरें।

7

आप स्टैक ओवरफ़्लो पर अपना असाइनमेंट प्रश्न पूछकर अभी एक रैपर विधि के रूप में कार्य कर रहे हैं!

एक रैपर विधि उत्तर के लिए "विशेषज्ञ" विधि पूछकर एक प्रश्न का उत्तर देती है। आम तौर पर, यह तीन चीजें करता है:

  1. यह सवाल इस तरह से फ्रेम करता है कि "विशेषज्ञ" विधि इसे समझ सकती है।
  2. यह "विशेषज्ञ" विधि से पूछता है कि प्रश्न
  3. कॉलर के लिए सही प्रारूप में रखने के उत्तर के लिए कुछ आसान है।

आपके मामले में, "विशेषज्ञ" विधि recursiveSort() है, और अपने sortCoordsByZ() विधि सही मापदंडों के साथ recursiveSort() फोन करना होगा, और फिर शायद यह लौटने से पहले जवाब के साथ कुछ करना।

3

उस मामले में यह सब मैं विधि "Z में क्रमित करें" में डालने के लिए अपने एक सरणी कहा जाता coords अपने सभी भरा स्लॉट्स है के माध्यम से जा अगर जरूरत नहीं होना चाहिए?

recursiveSort(coords, 0, coords.length-1); 
+0

हां, यह वही है जो आपको करना चाहिए। – bcat

1

आवरण तरीके अमूर्त, मानकीकरण, और पुनर्रचना

उदाहरण के लिए के लिए इस्तेमाल किया जा सकता है, तो आप विशेष सहायक तरीकों में से एक पुस्तकालय आयात और उन्हें अपने आवेदन के माध्यम से उपयोग करते हैं, फिर बाद में एक अलग करने के लिए स्विच करने का फैसला पुस्तकालय है कि आप और अधिक कार्यक्षमता आप तो है कि नए पुस्तकालयों तरीकों कॉल करने के लिए कहता है पिछले पुस्तकालयों तरीकों कोड के प्रत्येक पंक्ति के पुनर्लेखन के लिए होता है दे देंगे। आवेदन दसियों और सैकड़ों हजारों लाइनों तक पहुंचने के साथ यह एक बड़ा काम है। सॉफ़्टवेयर लाइसेंस प्राप्त होने पर यह अक्सर होता है और फिर जब यह एक नया विकल्प समाप्त हो जाता है तो चुना जाता है।

इस समस्या को आप अपने खुद के तरीकों में हेल्पर तरीकों के सभी लपेट कर सकते हैं हल करने के लिए। ये विधियां केवल 1 पंक्ति होती हैं जो आपकी आयातित लाइब्रेरी में विधियों को कॉल करती है। आप के माध्यम से अपने आवेदन के बजाय सीधे आयात पुस्तकालय बुलाने की आवरण तरीकों के सभी कॉल करेगा।

अब जब आप नई लाइब्रेरी आयात करना चाहते हैं तो सभी अमूर्तता का लाभ आता है। एप्लिकेशन के माध्यम से प्रत्येक कॉल को फिर से लिखने के बजाय आप केवल रैपर विधियों को फिर से लिख सकते हैं जो कि अपनी कक्षा होनी चाहिए। अब रैपर क्लास में 1 विधि बदलना पूरे एप्लिकेशन को अपडेट करता है जहां उस विधि का उपयोग किया जाता है। (उदाहरण के लिए एमवीसी 4 .NET एचटीएमएल हेल्पर विधियों को देखें)

मानकीकरण के विषय पर रैपर का उपयोग ऑब्जेक्ट बनने पर मैन्युअल रूप से सेट की गई कई चीजों के लिए डिफ़ॉल्ट मान सेट करने के लिए किया जा सकता है। लेकिन अब अगर वे रैपर में सेट हैं तो वे मूल विधि कहने पर हर बार सेट नहीं होना चाहिए। उदाहरण के लिए आप ग्रिडव्यू रैपर में ग्रिड व्यू के आयाम सेट कर सकते हैं और अब जब आप अपने एप्लिकेशन में रैपर विधि को कॉल करते हैं तो सभी ग्रिड दृश्यों में समान आयाम होते हैं और कोड के कम लाइनों को पूरे एप्लिकेशन में बनाए रखने की आवश्यकता होती है; रिफैक्टरिंग भी पूरा करना।