2012-06-09 16 views
5

मुझे परिपत्र संदर्भों के बारे में पता है (क्लास एक धारक वर्ग बी और कक्षा बी कक्षा ए रखती है)। लेकिन चूंकि मैंने पर्याप्त प्रोग्राम नहीं किया है, इसलिए मेरे लिए उपयोग करने के कारण ढूंढना मेरे लिए मुश्किल है। मैं सोच रहा था कि क्या लोग मुझे कुछ अच्छे उदाहरण दे सकते हैं और संभवतः उन्हें इस्तेमाल करने के अच्छे कारण बता सकते हैं।कक्षाओं के साथ परिपत्र संदर्भ के कारण?

उदाहरण के लिए, अभी मैं 2 डी स्रोत कोड ट्यूटोरियल देख रहा हूं और उपयोगकर्ता ने एक प्राणी और एक CreatureAi क्लास बनाया जो एक दूसरे का संदर्भ देता है। किस कारण से? मुझे अभी तक पता नहीं है, यही कारण है कि मैं उदाहरणों की तलाश में हूं और अभी भी चारों ओर पढ़ रहा हूं।

उत्तर

10

सर्कुलर संदर्भ का सबसे स्पष्ट मामला आत्म-संदर्भ है: आपको इसे लिंक की गई सूचियों, पेड़ों और अन्य कई पुनरावर्ती संरचनाओं के लिए चाहिए।

सर्कुलर संदर्भ प्रायः कक्षाओं के पदानुक्रम के भीतर निहित होते हैं, जैसे कि मनमाना घोंसले के साथ यूआई तत्व, या अभिव्यक्ति पेड़।

अंत में, परिपत्र संदर्भ का एक सामान्य मामला द्विपक्षीय माता-पिता संबंध है: एक अभिभावक (उदाहरण के लिए एक यूआई पैनल) अपने बच्चों की एक सरणी का संदर्भ देता है, और प्रत्येक बच्चे (जैसे बटन, टेबल इत्यादि) माता-पिता के लिए एक संदर्भ। माता-पिता को अपने बच्चों को यह बताने की आवश्यकता है कि यह सक्षम, अक्षम, दृश्यमान या अदृश्य हो; एक बच्चा आकार बदलने के लिए माता-पिता को सूचित कर सकता है, दृश्य स्थिति बदल सकता है, आदि

यह अंतिम उदाहरण शायद आपके प्राणी-CreatureAI जोड़ी के समान है: वे अलग हैं क्योंकि उनकी चिंताएं भिन्न हैं, लेकिन उनके प्रत्येक के संदर्भ हैं अन्य क्योंकि उन्हें विभिन्न कार्यों पर सहयोग करने की आवश्यकता है।

11

आपके पास एक क्लास कंपनी है जिसमें व्यक्तियों की एक सूची है जो इसके लिए काम करती है। संग्रह में प्रत्येक व्यक्तिगत वर्ग के उदाहरण में उस कंपनी का संदर्भ होता है जिसके लिए वे काम करते हैं।

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

+0

यह वास्तव में * केवल * डिज़ाइन हो सकता है यदि आप OrmLite का उपयोग कर रहे थे, जहां आपको कोड में विदेशी संबंध निर्दिष्ट करना होगा। लेकिन हाँ मुझे यह पसंद नहीं है। – Voo

0

अक्सर यह सख्ती से जरूरी नहीं है, लेकिन ऑब्जेक्ट्स के साथ काम करने वाले कोड के लिए उच्च स्तर की सुविधा प्रदान करता है।

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

2

वहाँ स्वयं संदर्भ या संदर्भ चक्र के लिए किन्हीं भी कारणों से

  • वे डोमेन मॉडल में निहित हो सकता है; जैसे लोगों के बच्चे होते हैं जो लोग भी होते हैं, फ़ोल्डरों में अन्य फ़ोल्डरों सहित अन्य चीजें होती हैं। इन चीजों को लागू करने का एक प्राकृतिक तरीका एक आत्म संदर्भ या चक्र है।

  • वे एक सामान्य या अनुप्रयोग विशिष्ट डेटा संरचना के निहित हो सकते हैं; e..g। एक लिंक्ड सूची में नोड्स होते हैं जिसमें सूची में "अगला" और "पिछला" नोड के संदर्भ शामिल होते हैं, और इसके लिए नोड क्लास को स्वयं संदर्भित करने की आवश्यकता होती है।

  • चक्रीय संदर्भ के पीछे तर्क आवेदन के डिजाइन का एक मौलिक हिस्सा हो सकता है।

  • या, यह केवल एक कार्यान्वयन सुविधा हो सकता है, या पिछले रिफैक्टरिंग या कोड-बेस विकास का ऐतिहासिक आर्टेफैक्ट हो सकता है।

मूल रूप से, आप (समग्र रूप से) आवेदन codebase को देखने के लिए यह पता लगाने की क्यों इन चक्रीय निर्भरता मौजूद जरूरत है ... और अगर वे वास्तव में आवश्यक हैं।

संबंधित मुद्दे