इटरेटर पैटर्न

From Vigyanwiki
Revision as of 21:01, 14 June 2023 by alpha>Indicwiki (Created page with "ऑब्जेक्ट ओरिएंटेड प्रोग्रामिंग में, इटरेटर पैटर्न एक डिज़ाइन...")
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)

ऑब्जेक्ट ओरिएंटेड प्रोग्रामिंग में, इटरेटर पैटर्न एक डिज़ाइन पैटर्न (कंप्यूटर साइंस) है जिसमें एक इटरेटर का उपयोग संग्रह (अमूर्त डेटा प्रकार) को पार करने और कंटेनर के तत्वों तक पहुंचने के लिए किया जाता है। पुनरावर्तक पैटर्न कंटेनरों से एल्गोरिदम को अलग करता है; कुछ मामलों में, एल्गोरिदम आवश्यक रूप से कंटेनर-विशिष्ट होते हैं और इस प्रकार उन्हें अलग नहीं किया जा सकता है।

उदाहरण के लिए, काल्पनिक कलन विधि SearchForElement को कंटेनर-विशिष्ट एल्गोरिथम के रूप में लागू करने के बजाय आमतौर पर एक निर्दिष्ट प्रकार के पुनरावर्तक का उपयोग करके कार्यान्वित किया जा सकता है। यह SearchForElement को किसी भी कंटेनर पर उपयोग करने की अनुमति देता है जो आवश्यक प्रकार के पुनरावर्तक का समर्थन करता है।

सिंहावलोकन

इटरेटर [1] डिजाइन पैटर्न तेईस प्रसिद्ध में से एक है डिजाइन पैटर्न्स यह वर्णन करता है कि लचीले और पुन: प्रयोज्य ऑब्जेक्ट-ओरिएंटेड सॉफ़्टवेयर को डिज़ाइन करने के लिए आवर्ती डिज़ाइन समस्याओं को कैसे हल किया जाए, अर्थात ऐसी वस्तुएँ जिन्हें लागू करना, बदलना, परीक्षण करना और पुन: उपयोग करना आसान हो।

इटरेटर डिज़ाइन पैटर्न किन समस्याओं को हल कर सकता है?

[2]

  • समग्र वस्तु के तत्वों को इसके प्रतिनिधित्व (डेटा संरचनाओं) को उजागर किए बिना एक्सेस और ट्रैवर्स किया जाना चाहिए।
  • नए ट्रैवर्सल ऑपरेशंस को इसके इंटरफ़ेस को बदले बिना कुल ऑब्जेक्ट के लिए परिभाषित किया जाना चाहिए।

एग्रीगेट इंटरफ़ेस में एक्सेस और ट्रैवर्सल ऑपरेशंस को परिभाषित करना अनम्य है क्योंकि यह एग्रीगेट को विशेष एक्सेस और ट्रैवर्सल ऑपरेशंस के लिए प्रतिबद्ध करता है और नए ऑपरेशंस को जोड़ना असंभव बनाता है बाद में समग्र इंटरफ़ेस को बदले बिना।

इटरेटर डिज़ाइन पैटर्न किस समाधान का वर्णन करता है?

  • एक अलग (इटरेटर) ऑब्जेक्ट को परिभाषित करें जो एक समग्र ऑब्जेक्ट तक पहुँचने और ट्रैवर्सिंग को एनकैप्सुलेट करता है।
  • ग्राहक इसके प्रतिनिधित्व (डेटा संरचनाओं) को जानने के बिना एक कुल तक पहुँचने और पार करने के लिए एक पुनरावर्तक का उपयोग करते हैं।

अलग-अलग तरीकों से एक समुच्चय तक पहुँचने और पार करने के लिए अलग-अलग पुनरावृत्तियों का उपयोग किया जा सकता है।
नए पुनरावर्तकों को परिभाषित करके नई पहुंच और ट्रैवर्सल संचालन को स्वतंत्र रूप से परिभाषित किया जा सकता है।

नीचे यूएमएल क्लास और सीक्वेंस डायग्राम भी देखें।

परिभाषा

Iterator पैटर्न का सार किसी समग्र वस्तु के तत्वों को उसके अंतर्निहित प्रतिनिधित्व को उजागर किए बिना क्रमिक रूप से एक्सेस करने का एक तरीका प्रदान करना है। .[3]


संरचना

यूएमएल वर्ग और अनुक्रम आरेख

Iterator डिज़ाइन पैटर्न के लिए एक नमूना UML वर्ग और अनुक्रम आरेख।[4]

उपरोक्त एकीकृत मॉडलिंग भाषा वर्ग आरेख में, Client वर्ग (1) को संदर्भित करता है Aggregate एक बनाने के लिए इंटरफ़ेस Iterator वस्तु (createIterator()) और (2) से Iterator ट्रैवर्सिंग के लिए इंटरफ़ेस Aggregate वस्तु (next(),hasNext()). Iterator1 e> वर्ग लागू करता है Iterator इंटरफ़ेस का उपयोग करके Aggregate1 कक्षा।

एकीकृत मॉडलिंग भाषा अनुक्रम आरेख रन-टाइम इंटरैक्शन दिखाता है: Client ई> वस्तु कॉल createIterator() एक पर Aggregate1 वस्तु, जो एक बनाता है Iterator1 वस्तु और उसे लौटाता है तक Client. Client e> तब उपयोग करता है Iterator1 के तत्वों को पार करने के लिए Aggregate1 वस्तु।

यूएमएल वर्ग आरेख

इटरेटर पैटर्न

उदाहरण

कुछ भाषाएँ सिंटैक्स को मानकीकृत करती हैं। C++ और Python उल्लेखनीय उदाहरण हैं।


सी ++

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

यह C++ 11 कार्यान्वयन अध्याय सामान्यीकरण वेक्टर पर फिर से आधारित है।[5] <वाक्यविन्यास प्रकाश लैंग = सी ++>

  1. शामिल <iostream>
  2. शामिल करें
  3. शामिल करें <प्रारंभकर्ता_सूची>

वर्ग वेक्टर { जनता:

 इटरेटर = डबल * का उपयोग करना;
 पुनरावर्तक प्रारंभ () {वापसी तत्व; }
 पुनरावर्तक अंत () {वापसी हाथ + sz; }
 
 वेक्टर (std::initializer_list<double> lst):elem(nullptr), sz(0) {
   एसजे = एलएसटी आकार ();
   एलएम = नया डबल [एसजेड];
   डबल * पी = एलएम;
   for (auto i = lst.begin(); i != lst.end(); ++i, ++p) {
     *पी = *मैं;
   }
 }
 ~ वेक्टर () {हटाएं [] तत्व; }
 int आकार () कास्ट {वापसी sz; }
 डबल और ऑपरेटर [] (इंट एन) {
   if (n <0 || n >= sz) std::out_of_range(वेक्टर::ऑपरेटर[]);
   वापसी तत्व [एन];
 }
 वेक्टर (स्थिरांक वेक्टर और) = हटाएं; // तीन का नियम
 वेक्टर और ऑपरेटर = (स्थिरांक वेक्टर और) = हटाएं;

निजी:

 डबल * तत्व;
 इंट एसजेड;

};

मुख्य प्रवेश बिंदु() {

 वेक्टर वी = {1.1*1.1, 2.2*2.2};
 
 के लिए (स्थिरांक ऑटो और एक्स: वी) {
   एसटीडी :: अदालत << एक्स << '\n';
 }
 for (auto i = v.begin(); i != v.end(); ++i) {
   एसटीडी :: अदालत << * मैं << '\n';
 }
 for (auto i = 0; i <= v.size(); ++i) {
   एसटीडी :: अदालत << वी ​​[i] << '\n';
 }

} </वाक्यविन्यास हाइलाइट>

प्रोग्राम आउटपुट है

<वाक्यविन्यास प्रकाश लैंग = सी ++> 1.21 4.84 1.21 4.84 1.21 4.84 'Std :: out_of_range' का एक उदाहरण फेंकने के बाद समाप्त हो गया

 क्या (): वेक्टर :: ऑपरेटर []

</वाक्यविन्यास हाइलाइट>

यह भी देखें

संदर्भ

  1. Erich Gamma; Richard Helm; Ralph Johnson; John Vlissides (1994). Design Patterns: Elements of Reusable Object-Oriented Software. Addison Wesley. pp. 257ff. ISBN 0-201-63361-2.
  2. "इटरेटर डिजाइन पैटर्न - समस्या, समाधान और प्रयोज्यता". w3sDesign.com. Retrieved 2017-08-12.
  3. Gang Of Four
  4. "इटरेटर डिजाइन पैटर्न - संरचना और सहयोग". w3sDesign.com. Retrieved 2017-08-12.
  5. Bjarne Stroustrup (2014). Programming: Principles and Practice using C++ (2 ed.). Addison Wesley. pp. 729 ff. ISBN 978-0-321-99278-9.


बाहरी संबंध