प्रोग्रामिंग में WRAPPER शब्द का उपयोग कहाँ और कैसे किया जाता है, यह क्या करने में मदद करता है?


87

मैं अन्य वर्गों या एपीआई या कुछ कोड के रैपर बनाने के शब्द का उपयोग करते हुए सॉफ्टवेयर डेवलपर्स में आता हूं, यह एक ऐसा शब्द है जिसका इस्तेमाल सॉफ्टवेयर प्रोग्रामर द्वारा किया जाता है।

तो किसी भी विचार का क्या मतलब है;

एक साधारण प्रश्न की तरह; हमें दो प्रकार की सरणी छँटाई तकनीक मिली, जिससे हम इसके लिए एक आवरण बना सकते हैं

ऊपर एक बहुत ही सरल उदाहरण है

जवाबों:


137

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

क्लासिक डिजाइन पैटर्न का वर्णन करते समय 'रैपर' शब्द का भी उपयोग किया जा सकता है।

एक सरलीकृत इंटरफ़ेस प्रदान करने के लिए एक वस्तु को लपेटना अक्सर 'मुखौटा' पैटर्न के रूप में वर्णित किया जाता है। रैपर मुखौटा है।

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

आपके द्वारा वर्णित उदाहरण, जहां आपके पास दो कक्षाएं हैं जो विभिन्न एल्गोरिदम का उपयोग करके सरणी सॉर्टिंग कर सकते हैं जैसे कि 'रणनीति' पैटर्न, जहां आप किसी वस्तु पर एक ऑपरेशन करने का एक तरीका प्रदान करते हैं, लेकिन उस ऑपरेशन के लिए उपयोग किया जाने वाला एल्गोरिदम अलग हो सकता है उस वस्तु की संरचना पर।

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

किसी प्रकार की जटिलता को छिपाने के लिए विशाल बहुमत के रैपर मौजूद हैं।


5
ओह, समझ गया ... धन्यवाद :) एक बहुत विस्तृत जवाब, मेरी रैपर समस्याओं को हल किया :) :)
— बासित एनवार

अजगर में xdress पैकेज github.com/xdress/xdress है । यह कहता है कि यह एक रैपर जनरेटर है। इस संदर्भ में, इसका क्या मतलब है? क्या यह सी में एक निष्पादन योग्य बनाता है (जो वास्तव में लिपटे हुए ऑब्जेक्ट (पायथन में) का उपयोग करने के लिए 'सी' (सी) तरीके से प्रदान करेगा, या क्या मैं भ्रमित हो रहा हूं?

79

सादृश्य द्वारा सरल व्याख्या: क्या लपेट रहा है?

समझाने के लिए कोड का उपयोग नहीं किया गया।

उदाहरण 1: एक Ipad "Iphone" को लपेटता है

IPad क्या करता है जो iphone नहीं करता है?

क्या वे मूल रूप से एक ही चीज़ नहीं हैं, सिवाय एक बड़ी स्क्रीन के?

Ipad iPhone को "लपेटता" है: इसका मतलब है कि आपके पास आईपैड के साथ ही आईफोन के सभी लाभ हैं, और एक बड़ी स्क्रीन आदि के फायदे हैं, लेकिन मूल रूप से, आईपैड के अंदर, एक आईफोन निहित है।

तब क्या अलग है? केवल एक चीज जो अलग है वह बाहरी है: आपके पास एक बड़ी स्क्रीन है, और शायद, आप Ipad पर फोन कॉल नहीं कर सकते।

एक iPhone एक Ipad के अंदर ही बात है।  Ipad शाब्दिक रूप से Iphone को लपेटता है।  सिवाय आप एक आईपैड के साथ कॉल नहीं कर सकते क्योंकि फोन कॉल करने की क्षमता "उजागर" नहीं हुई है।  Apple चाहता है कि आप x2 उत्पादों को सिर्फ एक ही खरीदें: P

यह सचमुच "वस्तुओं" के साथ एक ही बात है।

............. अंदर सभी अच्छी चीजें हैं जो समान हैं, लेकिन एक अलग बाहरी है। एक अलग आवरण।

"रैपर्स अंतर्निहित वस्तु की तुलना में विभिन्न विशेषताओं को उजागर कर सकते हैं" ...... ठीक है, लेकिन इसका क्या मतलब है?

कभी-कभी रैपर उन चीजों को सीमित कर सकता है जिन्हें आप अंदर एक्सेस कर सकते हैं। उदाहरण के लिए, आईपैड आपकी फ़ोन कॉल करने की क्षमता को सीमित कर सकता है, भले ही Iphone उसके भीतर दफन हो, उसमें वह क्षमता है।

उदाहरण 2: एक मैनुअल कार के रैपर के रूप में कार्य करने वाली स्वचालित कार

एक स्वचालित कार और एक मैनुअल कार के बारे में सोचें। पर्दे के पीछे, एक स्वचालित कार में, कुछ इंजीनियरिंग तंत्र होता है जो स्वचालित रूप से आपके लिए गियर बदलता है, लेकिन मूल रूप से, सतह के नीचे, कार अभी भी एक मैनुअल कार है। दूसरे शब्दों में, कार की स्वचालित विशेषताएं कार की मैनुअल कार्यक्षमता को "लपेटती" हैं। यदि आप मैन्युअल रूप से स्वचालित कार में गियर बदलना चाहते हैं - तो आप बस ऐसा नहीं कर सकते। स्वचालित कार में गियर बदलने की क्षमता "उजागर नहीं" है। लेकिन यह एक मैनुअल कार में उजागर होता है। दी गई सादृश्य थोड़ा तनावपूर्ण है, लेकिन मुझे आशा है कि आप देखते हैं कि मुझे क्या मिल रहा है

लेकिन एक आवरण का उद्देश्य क्या है?

यदि आप चीजों को सरल बनाना चाहते हैं तो आप एक रैपिंग क्लास लिखेंगे। आप 'रैपर' का उपयोग करना आसान बना देंगे और सभी जटिल बिट्स को रैपर के अंदर छोड़ देंगे, यह सुनिश्चित करेंगे कि उन जटिल बिट्स को 'उजागर' नहीं किया गया है।

उदाहरण के लिए, आपके पास एक .net रैपर हो सकता है, जो COM कॉल करता है। यदि आपके पास एक आवरण नहीं है, तो आप उन COM कॉल को स्वयं करने के लिए मजबूर होंगे। सौभाग्य से आवरण के साथ, आप सिर्फ .net रैपिंग कोड को कॉल करेंगे - जो उन COM कॉल को चालू करेगा। और उम्मीद है कि आप के लिए चीजों को सरल बनाना चाहिए।


8
टेक जर्गन्स की व्याख्या करते समय मुझे ये थोड़े स्पष्टीकरण पसंद हैं। क्या आप जानते हैं कि कोई भी साइट विशेष रूप से ऐसा करती है? धन्यवाद।
— viggy28

3
इस बात में दम है।
— एल। दई

11

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

संपादित करें: आप इन दो विकि लेखों में इसके बारे में और जानकारी पा सकते हैं: पुस्तकालय और कार्य


4

Wrapper कुछ कोड है जो वास्तविक API को बदले बिना कुछ API को आंतरिक रूप से कॉल करने के लिए बनाया गया है।

इसका एक उदाहरण फेसबुक की उनकी फेसबुक सी # एसडीके की रिलीज है । एसडीके वास्तव में एक आवरण है क्योंकि यह केवल आपको विशिष्ट तरीकों और कक्षाओं को दिए बिना अपने अंतर्निहित प्लेटफॉर्म को कॉल करने देता है। दूसरी ओर, फेसबुक डेवलपर टूलकिट इसकी पूर्ण एपीआई है।


मुझे एक C # प्रोग्राम लिखना होगा जो एक स्क्रिप्ट फ़ाइल बनाता है (स्क्रिप्टिंग भाषा एक हार्डवेयर डिवाइस के लिए विशिष्ट है और इसे कहा जाता है CoraScript)। CoraScript में लगभग 50 या तो कमांड होते हैं, एक, जो एक डिवाइस से कनेक्ट होता है, एक वह जो उस डिवाइस को फाइल भेजता है, उसे अपनी फ़्लैश मेमोरी आदि में किसी एप्लिकेशन को निष्पादित करने के लिए कहता है, बजाय एक कॉर्स्क्रिप्ट को हैंड-कोडिंग के, मैं। C # लाइब्रेरी बनाना पसंद करते हैं जो इस तरह की स्क्रिप्ट तैयार करेगा। क्या यह C # लाइब्रेरी wrapper libraryकॉरास्क्रिप्ट स्क्रिप्टिंग भाषा के लिए कहा जाएगा ?
— मिन्ह ट्रान

उस स्क्रिप्टिंग भाषा के लिए कमांड-लाइन-दुभाषिया एक कंसोल एप्लिकेशन है। जब वह अनुप्रयोग चलता है, तो वह CoraScript कमांड लेता है, उन्हें निष्पादित करता है, और उस कमांड का आउटपुट लौटाता है (उदाहरण के लिए, Connect localhostCoraScript कमांड स्ट्रिंग +connect,"coralib3.dll version 1,8,11"को यह इंगित करने के लिए लौटाएगा कि कमांड सफलतापूर्वक निष्पादित हुई है)।
— मिन्ह

2

"रैपर" के कई उदाहरण हैं और कभी-कभी इस शब्द का इस्तेमाल किया जाता है। निम्नलिखित दो उदाहरण हैं जो दिमाग में आते हैं:

डीएलएल आवरण

अतीत में मैंने .NET DLL के आसपास एक COM रैपर बनाया है। पुराने अनुप्रयोगों में .NET की उन्नत सुविधाओं का उपयोग करने के लिए जो COM को समझते हैं लेकिन .NET को नहीं समझते हैं।

ऑब्जेक्ट रैपर (जावा)

जावा में, java.langआठ आदिम प्रकारों के लिए ऑब्जेक्ट तरीके प्रदान करने के लिए पैकेज में प्रदान किया गया एक वर्ग है । जावा में सभी आदिम आवरण वर्ग अपरिवर्तनीय हैं। इसलिए Wrapperजब Objectआवश्यक हो तो कक्षाओं का उपयोग आदिम मूल्यों का प्रतिनिधित्व करने के लिए किया जाता है।


1

रैपर फ़ंक्शन, एक फ़ंक्शन जिसका मुख्य उद्देश्य दूसरे फ़ंक्शन को कॉल करना है


-1

कहते हैं कि आप अपने कोड में कुछ और कार्य करना चाहते हैं, लेकिन आप कोड को बदल नहीं सकते। यहीं से रैपर को मदद मिलती है। मूल कोड को बदले बिना आउटपुट प्राप्त करने के लिए आप एक रैपर का उपयोग कर सकते हैं।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.