हैडली विकम (RStudio में मुख्य वैज्ञानिक) द्वारा "एडवांस्ड आर, 2 डी संस्करण" (सीआरसी प्रेस, 2019) के अनुसार कई आर ऑब्जेक्ट सिस्टम का अपडेटेड फास्ट रंडाउन है, जिसमें ऑब्जेक्ट के बारे में अध्याय के आधार पर यहां एक वेब प्रतिनिधित्व है । -ऑर्डिनेटेड प्रोग्रामिंग ।
2015 के पहले संस्करण में ओओ पर संबंधित अध्याय के साथ यहां एक वेब प्रतिनिधित्व है ।
ऊ सिस्टम के लिए दृष्टिकोण
हेडली ने ओओ प्रोग्रामिंग के लिए दो अलग-अलग तरीकों को अलग करने के लिए निम्नलिखित को परिभाषित किया है:
कार्यात्मक OOP : विधियां (कॉल करने योग्य कोड टुकड़े) जेनेरिक कार्यों (जावा / सी # सामान्य तरीकों के साथ भ्रमित नहीं होने ) से संबंधित हैं । ग्लोबल लुकअप टेबल में स्थित होने के तरीकों के बारे में सोचें। निष्पादित करने की विधि फ़ंक्शन के नाम के आधार पर रनटाइम सिस्टम द्वारा पाई जाती है और उस फ़ंक्शन को पारित किए गए एक या अधिक तर्कों के प्रकार (या ऑब्जेक्ट क्लास) (इसे "विधि प्रेषण" कहा जाता है)। सिंटेक्स-वार, विधि कॉल सामान्य फ़ंक्शन कॉल की तरह लग सकता है myfunc(object, arg1, arg2)
:। यह कॉल जोड़ी ("myfunc", टाइपोफ़ (ऑब्जेक्ट)) या संभवतः ("myfunc", typeof (ऑब्जेक्ट), टाइपोफ़ (arg1), टाइपोफ़ (arg2) से जुड़ी विधि की तलाश के लिए रनटाइम का नेतृत्व करेगी ।अगर भाषा उस का समर्थन करती है। R के S3 में जेनेरिक फंक्शन का पूरा नाम (फंक्शन-नेम, क्लास) पेयर देता है। उदाहरण के लिए: mean.Date
Dates के माध्य की गणना करने की विधि है। methods("mean")
फ़ंक्शन नाम के साथ सामान्य विधियों को सूचीबद्ध करने का प्रयास करें mean
। कार्यात्मक OOP दृष्टिकोण उदाहरण के लिए OO पायनियर स्मॉलटॉक , कॉमन लिस्प ऑब्जेक्ट सिस्टम और जूलिया में पाया जाता है । हैडली ने कहा कि "आर की तुलना में, जूलिया का कार्यान्वयन पूरी तरह से विकसित है और बहुत ही शानदार है।"
इनकैप्सुलेटेड OOP : तरीके ऑब्जेक्ट या क्लासेस के होते हैं, और मेथड कॉल आमतौर पर दिखते हैं object.method(arg1, arg2)
। इसे एनकैप्सुलेटेड कहा जाता है क्योंकि ऑब्जेक्ट डेटा (फ़ील्ड्स) और व्यवहार (तरीके) दोनों को इनकैप्सुलेट करता है । ऑब्जेक्ट या ऑब्जेक्ट के क्लास विवरण से जुड़ी लुकअप तालिका में स्थित होने के तरीके के बारे में सोचें। रनटाइम विधि के नाम के आधार पर विधि को देखता है और संभवतः एक या अधिक तर्कों का प्रकार है। यह "लोकप्रिय" OO भाषाओं जैसे C ++, Java, C # में पाया जाने वाला दृष्टिकोण है।
दोनों मामलों में, यदि वंशानुक्रम समर्थित है (यह संभवतः है), रनटाइम वर्ग पदानुक्रम को ऊपर की ओर ले जा सकता है जब तक कि यह कॉल लुकिंग कुंजी के लिए एक मैच नहीं मिला है।
कैसे पता लगाया जाए कि R ऑब्जेक्ट किस सिस्टम से संबंधित है
library(sloop) # formerly, "pryr"
otype(mtcars)
#> [1] "S3"
आर ऑब्जेक्ट सिस्टम
S3
- कार्यात्मक ओओपी दृष्टिकोण।
- हैडली के अनुसार सबसे महत्वपूर्ण प्रणाली।
- सबसे सरल, सबसे आम। पहले OO प्रणाली का उपयोग आर।
- बेस आर के साथ आता है, पूरे बेस आर में उपयोग किया जाता है।
- लागू गारंटी के बजाय सम्मेलनों पर निर्भर करता है।
- देखें चेम्बर्स, जॉन एम, और ट्रेवर जम्मू Hastie। 1992. "एस में सांख्यिकीय मॉडल" वड्सवर्थ और ब्रूक्स / कोल एडवांस्ड बुक्स एंड सॉफ्टवेयर।
- में विवरण "उन्नत अनुसंधान, 2 संस्करण" यहाँ ।
एस 4
- कार्यात्मक ओओपी दृष्टिकोण।
- हैडली के अनुसार तीसरी सबसे महत्वपूर्ण प्रणाली।
- S3 का पुनर्लेखन, इसलिए S3 के समान है, लेकिन अधिक औपचारिक और अधिक सख्त: यह आपको प्रोग्राम डिजाइन के बारे में सावधानी से सोचने के लिए मजबूर करता है। बड़ी प्रणालियों के निर्माण के लिए उपयुक्त (जैसे बायोकॉन्टर प्रोजेक्ट)।
- आधार "विधियों" पैकेज में लागू किया गया।
- देखें: चैम्बर्स, जॉन एम। 1998. "डेटा के साथ प्रोग्रामिंग: ए गाइड टू द एस लैंग्वेज।" स्प्रिंगर।
- में विवरण "उन्नत अनुसंधान, 2 संस्करण" यहाँ ।
आरसी उर्फ "संदर्भ कक्षाएं"
- एन्क्रिप्टेड OOP दृष्टिकोण।
- बेस आर के साथ आता है।
- S4 पर आधारित है।
- RC ऑब्जेक्ट विशेष प्रकार के S4 ऑब्जेक्ट हैं जो "म्यूटेबल" भी हैं। आर के सामान्य कॉपी-ऑन-संशोधित शब्दार्थों का उपयोग करने के बजाय, उन्हें जगह-जगह संशोधित किया जा सकता है। ध्यान दें कि उत्परिवर्तनीय स्थिति के बारे में तर्क करना मुश्किल है और बदसूरत कीड़े का स्रोत है लेकिन कुछ अनुप्रयोगों में अधिक कुशल कोड हो सकता है।
R6
- एन्क्रिप्टेड OOP दृष्टिकोण।
- हेडली के अनुसार दूसरी सबसे महत्वपूर्ण प्रणाली।
- R6 पैकेज में पाया जा सकता है (के साथ स्थापित
library(R6)
)
- आरसी के समान, लेकिन हल्का और बहुत तेज: यह S4 या विधियों पैकेज पर निर्भर नहीं करता है । आर वातावरण के शीर्ष पर निर्मित। भी है:
- सार्वजनिक और निजी तरीके
- सक्रिय बाइंडिंग (फ़ील्ड, जिसे एक्सेस करते समय, वास्तव में एक विधि कहते हैं)
- क्लास इनहेरेंस जो पैकेज में काम करती है
- दोनों वर्ग के तरीकों (कोड उस वर्ग के अंतर्गत आता है और के माध्यम से एक उदाहरण का उपयोग कर सकते
self
, private
, super
) और सदस्य कार्यों (क्षेत्रों के लिए सौंपे गए कार्य है, लेकिन जो तरीकों नहीं कर रहे हैं, बस कार्यों)
- आर के "कॉपी-ऑन-संशोधित" शब्दार्थ से बचने के लिए एक मानकीकृत तरीका प्रदान करता है
- पैकेज साइट देखें: "R6: R के लिए एन्क्रिप्टेड ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग" ।
- में विवरण "उन्नत अनुसंधान, 2 संस्करण" यहाँ ।
अन्य
वहाँ दूसरों की तरह हैं R.oo (आर सी के समान), आद्य (प्रोटोटाइप आधारित, जावास्क्रिप्ट लगता है) और Mutatr । हालांकि, "उन्नत आर" कहता है:
आर 6 के अलावा, जिसका व्यापक रूप से उपयोग किया जाता है, ये सिस्टम मुख्य रूप से सैद्धांतिक हित हैं। उनके पास अपनी ताकत है, लेकिन कुछ आर उपयोगकर्ता उन्हें जानते और समझते हैं, इसलिए दूसरों के लिए आपके कोड को पढ़ना और योगदान करना कठिन है।
"एडवांस्ड आर, 2 डी एडिशन" में ट्रेड-ऑफ के अध्याय को भी पढ़ना सुनिश्चित करें ।