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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

यह C++ 11 कार्यान्वयन अध्याय सामान्यीकरण वेक्टर पर फिर से आधारित है। <वाक्यविन्यास प्रकाश लैंग = सी ++>
 * 1) शामिल
 * 2) शामिल करें
 * 3) शामिल करें <प्रारंभकर्ता_सूची>

वर्ग वेक्टर { जनता: इटरेटर = डबल * का उपयोग करना; पुनरावर्तक प्रारंभ {वापसी तत्व; } पुनरावर्तक अंत {वापसी हाथ + sz; } वेक्टर (std::initializer_list 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' का एक उदाहरण फेंकने के बाद समाप्त हो गया क्या : वेक्टर :: ऑपरेटर [] 

यह भी देखें

 * समग्र पैटर्न
 * कंटेनर (डेटा संरचना)
 * डिजाइन पैटर्न (कंप्यूटर विज्ञान)
 * इटरेटर
 * पर्यवेक्षक पैटर्न

बाहरी संबंध

 * Object iteration in PHP
 * Iterator Pattern in C#
 * Iterator pattern in UML and in LePUS3 (a formal modelling language)
 * SourceMaking tutorial
 * Design Patterns implementation examples tutorial
 * Iterator Pattern