Computer >> कंप्यूटर ट्यूटोरियल >  >> प्रोग्रामिंग >> Ruby

रूबी ऑन रेल्स में बहुरूपता में महारत हासिल करना:एक व्यावहारिक मार्गदर्शिका

<पी> यदि आपने कभी ऑब्जेक्ट-ओरिएंटेड प्रोग्राम (ओओपी) बनाने में समय बिताया है, तो संभवतः आपने अपने एप्लिकेशन में बहुरूपता का उपयोग किया होगा या, कम से कम, यह शब्द सुना होगा।

<पी> यह उस प्रकार का शब्द है जिसे आप विज्ञान या कंप्यूटर विज्ञान की पाठ्यपुस्तक में देखने की उम्मीद करेंगे। हो सकता है कि आपने बहुरूपता पर शोध करने में समय बिताया हो और अवधारणा को स्पष्ट रूप से समझे बिना इसे अपने एप्लिकेशन में लागू भी किया हो।

<पी> यह आलेख आपको विशेष रूप से रूबी ऑन रेल्स में बहुरूपता की बेहतर समझ देगा। इसे पूरा करने के लिए, हम इसमें गोता लगाएँगे:

  • वास्तविक दुनिया में बहुरूपता का उपयोग
  • ओओपी के माध्यम से प्रोग्रामिंग में बहुरूपता
  • उच्च-गुणवत्ता कोड बनाए रखने में सहायता के लिए आप इसे अपने रेल एप्लिकेशन में कैसे शामिल कर सकते हैं
<पी> चलिए आगे बढ़ते हैं!

वास्तविक दुनिया में बहुरूपता

<पी> विभिन्न संदर्भों में बहुरूपता को परिभाषित करने के कई तरीके हैं। एक उपयोगी परिभाषा, संदर्भ की परवाह किए बिना, 'एक वस्तु की एक से अधिक रूप प्रदर्शित करने की क्षमता' है . वास्तव में, यदि हम शब्द को ही तोड़ दें, तो पॉली का अर्थ है 'अनेक' और रूप का अर्थ है 'रूप'।

<पी> वास्तविक दुनिया में, इस परिभाषा का एक मूल उदाहरण एक महिला हो सकती है जो एक पुलिस अधिकारी, बहन, किसी का बच्चा, किसी की मां आदि भी है। प्रत्येक भूमिका उसके व्यवहार को निर्धारित करती है और वह जो व्यक्ति है उसमें योगदान देती है।

बहुरूपता और आनुवंशिकी

<पी> कंप्यूटर प्रोग्रामिंग के बाहर, बहुरूपता एक शब्द है जो आमतौर पर जीव विज्ञान और आनुवंशिकी से जुड़ा होता है। इस संदर्भ में, बहुरूपता को विशेष रूप से आनुवंशिक विविधताओं के रूप में परिभाषित किया गया है जिसके परिणामस्वरूप एक प्रजाति के भीतर कई अलग-अलग रूप या प्रकार के व्यक्ति होते हैं।

<पी> जगुआर के बारे में सोचो. जगुआर में कई जीन भिन्नताएं हो सकती हैं, जो उनके फर के रंग को प्रभावित कर सकती हैं। अधिकांश जगुआर में काले घेरे के साथ गहरे भूरे रंग का रंग होता है। हालाँकि, परिवर्तित जीन के कारण उनके वृत्त हल्के या गहरे हो सकते हैं, और कुछ के फर का रंग काला हो सकता है।

<पी> पक्षियों की एक ही प्रजाति के भीतर अलग-अलग रंजकता बहुरूपता का एक और उदाहरण है। गॉल्डियन फ़िंच पर विचार करें, जिसके रंग में व्यक्तियों के बीच स्पष्ट अंतर होता है।

एकरूपता बनाम बहुरूपता

<पी> यदि हम अपना ध्यान एकरूपता की ओर मोड़ें तो हम बहुरूपता को और अधिक समझ सकते हैं। जीव विज्ञान के अनुरूप, मोनोमोर्फिज्म को 'सिर्फ एक रूप वाली प्रजाति' के रूप में परिभाषित किया जा सकता है , जो अपने विकास के विभिन्न चरणों के दौरान उसी स्वरूप को बनाए रखता है।

<पी> पेंगुइन मोनोमोर्फिक हैं। विशेषज्ञों के लिए भी लिंगों के बीच अंतर करना मुश्किल है। पेंगुइन में जीन अंतर न्यूनतम होते हैं। इसलिए, पेंगुइन के भौतिक गुण लगभग अप्रभेद्य हैं, खासकर उनके आकार और काले और सफेद रंग के संदर्भ में।

<पी> मोनोमोर्फिक प्रजातियों में लिंगों के बीच अंतर करने के लिए व्यवहार संबंधी संकेत अक्सर सबसे आसान तरीका होते हैं।

<पी> आइए, विशेष रूप से प्रोग्रामिंग में बहुरूपता पर अपना ध्यान केंद्रित करें।

OOP में बहुरूपता

<पी> यदि हम बहुरूपता की अपनी प्रारंभिक परिभाषा पर विचार करें - किसी वस्तु की एक से अधिक रूप प्रदर्शित करने की क्षमता — हम इसे OOP से सहजता से जोड़ सकते हैं।

<पी> OOP में, हम अलग-अलग ऑब्जेक्ट में पास करके अलग-अलग परिणाम उत्पन्न करने के लिए एक ही विधि का उपयोग कर सकते हैं। हम इसे प्राप्त करने के लिए सशर्तों का उपयोग कर सकते हैं। हालाँकि, यह भारी कोड बना सकता है और हमें DRY सिद्धांतों से दूर कर सकता है। स्वच्छ और तार्किक OOP एप्लिकेशन बनाने में बहुरूपता आवश्यक है।

<पी> आइए दो उदाहरण देखें कि रूबी जैसी OOP भाषा में बहुरूपता को कैसे लागू किया जा सकता है:वंशानुक्रम और डक-टाइपिंग के माध्यम से।

रूबी में बहुरूपता और वंशानुक्रम

<पी> वंशानुक्रम वह है जहां एक बच्चे वर्ग को मूल वर्ग के गुण विरासत में मिलते हैं।

<पी> नीचे एक उदाहरण दिया गया है कि हम वंशानुक्रम के साथ बहुरूपता को कैसे कार्यान्वित कर सकते हैं:

 <पी> उपरोक्त कोड में दो बाल वर्ग हैं - Stringed और Percussion - मूल वर्ग Instrument से विरासत में मिला है . यह उदाहरण बहुरूपी है, क्योंकि हम एक विधि कह रहे हैं:instrument_example - और यह कई रूपों को आउटपुट करता है:Saxophone , Guitar , और Drums .

<पी> वंशानुक्रम के माध्यम से बहुरूपता प्राप्त करने का यह उदाहरण अनिवार्य रूप से एक विधि को ओवरराइड कर रहा है, लेकिन OOP भाषा में बहुरूपता की स्पष्ट समझ प्रदान करने में मदद करता है।

रूबी में डक-टाइपिंग और बहुरूपता

<पी> OOP में बहुरूपता का एक अधिक व्यावहारिक उदाहरण डक-टाइपिंग के माध्यम से है, जैसा कि नीचे दिया गया है।

 <पी> हालाँकि प्रत्येक वर्ग विधि का नाम brand है , हम विधि को ओवरराइड नहीं करते हैं (बहुरूपी वंशानुक्रम के विपरीत)। मूल वर्ग से विरासत में मिलने के बजाय, यहां हमारे पास चार स्वतंत्र वर्ग हैं, जिनमें से प्रत्येक की अपनी पद्धति है। डक-टाइपिंग उपयोगी है, क्योंकि हम प्रत्येक विधि का आउटपुट प्राप्त करने के लिए कक्षाओं के माध्यम से पुनरावृत्ति कर सकते हैं (प्रत्येक विधि को अलग से कॉल करने के विपरीत)।

<पी> फिर से, डक-टाइपिंग बहुरूपी है, जिसे हम एक विधि कहते हैं - brand - और एक आउटपुट उत्पन्न करें जो कई रूप लेता है:Gibson , Pearl , Fender , और Casio . बेशक, इस परिणाम को उत्पन्न करने में डक-टाइपिंग और बहुरूपता आवश्यक नहीं हैं। हालाँकि, स्वच्छ और तार्किक कोड लागू करना बहुत उपयोगी है।

रूबी ऑन रेल्स में बहुरूपता

<पी> रूबी ऑन रेल्स में एक सक्रिय रिकॉर्ड एसोसिएशन के रूप में बहुरूपता अच्छी तरह से काम करती है। यदि मॉडल अनिवार्य रूप से एक ही काम करते हैं, तो हम बहुरूपी संबंध बनाने के लिए उन्हें एक एकल मॉडल में बदल सकते हैं।

<पी> वाद्ययंत्र विषय पर ध्यान केंद्रित करते हुए, आइए एक ऐसे एप्लिकेशन पर विचार करें जहां उपयोगकर्ता वाद्ययंत्रों को पोस्ट, टिप्पणी और समीक्षा कर सकते हैं। नीचे इकाई-संबंध आरेख (ईआरडी) की जांच करें:

<पी> रूबी ऑन रेल्स में बहुरूपता में महारत हासिल करना:एक व्यावहारिक मार्गदर्शिका

<पी> इस उदाहरण में, हमारे पास एक एप्लिकेशन के लिए एक ईआरडी है जहां उपयोगकर्ता अपने विवरण के साथ एक उपकरण पोस्ट कर सकता है। एक उपयोगकर्ता उस पोस्ट किए गए उपकरण के बारे में एक टिप्पणी भी प्रदान कर सकता है।

<पी> फिर अन्य उपयोगकर्ता उपकरण की रेटिंग प्रदान कर सकते हैं और उनकी उपयोगिता या वैधता निर्धारित करने के लिए टिप्पणियों का मूल्यांकन कर सकते हैं। ये सक्रिय रिकॉर्ड एसोसिएशन बिल्कुल ठीक काम करते हैं और हमारे एप्लिकेशन के उद्देश्य को पूरा करते हैं।

<पी> यदि हम अपने एप्लिकेशन में अन्य एसोसिएशन जोड़ना चाहें तो क्या होगा? हमें डुप्लिकेट एसोसिएशन जोड़ने और दोहराने की आवश्यकता होगी।

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

<पी> रूबी ऑन रेल्स में बहुरूपता में महारत हासिल करना:एक व्यावहारिक मार्गदर्शिका

<पी> अब हमारे पास तीन मॉडल हैं जो अनिवार्य रूप से एक ही काम कर रहे हैं:किसी वस्तु की रेटिंग करना, लेकिन विभिन्न संदर्भों में। ये एसोसिएशन बहुरूपी एसोसिएशन के लिए तैयार हैं।

<पी> आइए बहुरूपी के रूप में रेटिंग मॉडल के साथ ईआरडी पर एक नजर डालें:

<पी> रूबी ऑन रेल्स में बहुरूपता में महारत हासिल करना:एक व्यावहारिक मार्गदर्शिका

<पी> चूँकि हमारे पास rating है कॉलम, मैंने मॉडल का नाम reviews रखा ratings के विपरीत भ्रम से बचने के लिए. यहां, गैर-समीक्षा मॉडल का अभी भी अन्य मॉडलों के साथ जुड़ाव है, लेकिन अलग-अलग रेटिंग मॉडल को एक एकल समीक्षा मॉडल में विलय कर दिया गया है।

<पी> reviewable_type और reviewable_id अब समीक्षा किस मॉडल से संबद्ध है, इसका प्रतिनिधित्व करके अलग-अलग रेटिंग मॉडल के समान भूमिका निभाएं।

<पी> reviewable_type कॉलम मॉडल वर्ग का नाम (user) संग्रहीत करता है , instrument_post , या comment ), और reviewable_id उस मॉडल की संबंधित आईडी संग्रहीत करता है।

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

<पी> अभी, हमारे बहुरूपी मॉडल में '-सक्षम' शब्द अजीब लग सकता है, लेकिन इसका उद्देश्य जल्द ही स्पष्ट हो जाएगा जब हम कुछ रेल जादू करेंगे।

<पी> समीक्षा मॉडल को बहुरूपी माना जाता है क्योंकि हमारे पास एक मॉडल या ऑब्जेक्ट है जो प्रतिनिधित्व कर सकता है और कई रूप ले सकता है:उपयोगकर्ता, टिप्पणी और उपकरण पोस्ट समीक्षा।

रूबी ऑन रेल्स में बहुरूपता लागू करना

<पी> रेल एप्लिकेशन में बहुरूपता लागू करने का समय! यदि हम ऐसे कार्य करते हैं मानो हमने अपना user पहले ही बना लिया है , instrument_post , और comment मॉडल, हम अपने बहुरूपी मॉडल को शामिल करना शुरू कर सकते हैं:reviews .

<पी> सबसे पहले, एक तालिका बनाएं और टर्मिनल से मॉडल तैयार करें, जैसे:

 <पी> यह माइग्रेशन फ़ाइल बनाता है:

 <पी> schema.rb माइग्रेशन चलने के बाद फ़ाइल अद्यतन। बहुरूपी विकल्प reviewable को रूपांतरित करता है reviewable_type में कॉलम और reviewable_id कॉलम:

 
 <पी> याद रखें जब हमने ऊपर '-सक्षम' शब्द का उल्लेख किया था? यह हमारे बहुरूपी संघ को नामित करने के लिए एक रेल नामकरण परंपरा है, जो हमें उपयोगकर्ता, उपकरण पोस्ट और टिप्पणी को 'समीक्षा योग्य' बनाने की क्षमता प्रदान करती है।

<पी> इस रेल जादू को काम करने के लिए, हमें यह सुनिश्चित करना होगा कि हमारे अन्य मॉडल हमारे बहुरूपी मॉडल के साथ सही ढंग से जुड़े हुए हैं।

 
 
 <पी> user , instrument_post , और comment अब मॉडलों की समीक्षा की जा सकती है और रेटिंग दी जा सकती है।

<पी> यदि हमने पहले ही कम से कम दो उपयोगकर्ता, एक टिप्पणी और एक उपकरण पोस्ट बना लिया है, तो हम सक्रिय रिकॉर्ड क्वेरीज़ के साथ विभिन्न तरीकों से समीक्षाएँ बना और उन तक पहुँच सकते हैं, जैसे:

 
 
 
 <पी> reviews के साथ इंटरैक्ट करने के कई अन्य तरीके हैं मॉडल, इस पर निर्भर करता है कि आपको कौन सा डेटा प्रस्तुत करना है। यह साझा करना महत्वपूर्ण है कि मूल मॉडल कैसे समीक्षा बना सकते हैं। जब तक समीक्षा किसी उपयोगकर्ता और समीक्षा योग्य मॉडल से जुड़ी होती है, सक्रिय रिकॉर्ड स्वचालित रूप से reviewable_id को लिंक करता है और reviewable_type संबंधित मॉडल के साथ।

<पी> हमारे रेल उदाहरणों में बहुरूपता के बिना, कई और तालिकाएँ, अनावश्यक डुप्लिकेट कॉलम, belongs_to होंगे , और has_many हमारे मॉडलों में एसोसिएशन। बहुरूपता ने तालिकाओं में शामिल होने की आवश्यकता को कम कर दिया है, जिससे सक्रिय रिकॉर्ड क्वेरी और एसोसिएशन आसान और तेज़ हो गए हैं।

रैप अप:स्वच्छ और तार्किक रूबी कोड के लिए बहुरूपता का उपयोग करें

<पी> इस पोस्ट में, हमने दो अलग-अलग वातावरणों में बहुरूपता की खोज की:जीव विज्ञान और रूबी प्रोग्रामिंग। दोनों मामलों में, बहुरूपता किसी वस्तु की एक से अधिक रूप प्रदर्शित करने की क्षमता है।

<पी> विशेष रूप से रूबी ऑन रेल्स में बहुरूपता के उपयोग पर विचार करने से पहले हमने देखा कि विरासत और डक-टाइपिंग के माध्यम से रूबी में बहुरूपता को कैसे लागू किया जाए।

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

<पी> हैप्पी कोडिंग!

<पी> पी.एस. यदि आप प्रेस से हटते ही रूबी मैजिक पोस्ट पढ़ना चाहते हैं, तो हमारे रूबी मैजिक न्यूज़लेटर की सदस्यता लें और एक भी पोस्ट न चूकें!
  1. CSS में ऑब्जेक्ट-फिट और ऑब्जेक्ट-पोजिशन के साथ क्रॉप इमेज CSS में ऑब्जेक्ट-फिट और ऑब्जेक्ट-पोजिशन के साथ क्रॉप इमेज

    CSS ऑब्जेक्ट-फिट और वस्तु-स्थिति संपत्ति हमें छवियों को क्रॉप करने और यह निर्दिष्ट करने में मदद करती है कि यह किसी तत्व में कैसे प्रदर्शित होता है। CSS ऑब्जेक्ट-फिट प्रॉपर्टी का सिंटैक्स इस प्रकार है - Selector {    object-fit: /*value*/    object-position:/*value*/ } उदाहरण नि

  1. बटन पर चेकबॉक्स का बहु-चयन jQuery में क्लिक करें? बटन पर चेकबॉक्स का बहु-चयन jQuery में क्लिक करें?

    इसके लिए id प्रॉपर्टी के साथ jQuery() का इस्तेमाल करें। निम्नलिखित कोड है - उदाहरण <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initialscale=1.0"> <title>D

  1. पायथन में सबसे बड़ा त्रिभुज क्षेत्र पायथन में सबसे बड़ा त्रिभुज क्षेत्र

    मान लीजिए कि हमारे पास एक विमान पर बिंदुओं की एक सूची है। हमें सबसे बड़े त्रिभुज का क्षेत्रफल ज्ञात करना है जो कि किसी भी 3 बिंदुओं से बन सकता है। इसलिए, यदि इनपुट [[0,0], [0,1], [1,0], [0,2], [2,0]] जैसा है, तो आउटपुट 2 होगा। इसे हल करने के लिए, हम इन चरणों का पालन करेंगे - res :=0 N :=अंक सूच