कक्षाएं वस्तुएं हैं

रूबी का अध्ययन करने वालों को पता है कि इसमें सभी संस्थाएं वस्तुएं हैं, लेकिन कभी-कभी वे यह नहीं जानते हैं कि कितना है। तो, रूबी में कक्षाएं भी ऑब्जेक्ट हैं।











रूबी में, कक्षाएं ऐसी वस्तुएं हैं जो कक्षा वर्ग के उदाहरण हैं।



OOP अनुस्मारक



एक वर्ग एक प्रकार है जो वस्तुओं की संरचना का वर्णन करता है।

एक वस्तु कंप्यूटर के पता स्थान में एक इकाई है जो तब दिखाई देती है जब एक वर्ग का एक उदाहरण बनाया जाता है।



भविष्य में, पढ़ने में आसानी के लिए, मैं कभी-कभी किसी वस्तु के लिए शब्द का उपयोग करूंगा

और वर्ग के लिए शब्द प्रकार



क्लास प्रॉपर्टीज को कहीं स्टोर करने की जरूरत है।



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



अनाम वर्ग


रूबी में एक वर्ग बनाने के तंत्र को इस तरह के अलोकप्रिय तरीके से समझा जा सकता है।



myklass = Class.new do def test puts "TEST" end def self.ctest puts "CLASS TEST" end end myklass # => #<Class:0xb6f3e768> myklass.class # => Class myklass.name # => "" myklass.ctest # => "CLASS TEST"
      
      







हमने अब बिल्कुल सामान्य बनाया है, लेकिन अनाम वर्ग (नाम पद्धति एक रिक्त स्ट्रिंग लौटाती है) और

इसे myklass वैरिएबल में डालेंMyklass क्या है? यह वह वस्तु है जिसमें हमारी कक्षा का विवरण संग्रहीत है, इस वस्तु का वर्ग वर्ग है



हमारा अनाम वर्ग, इसके सभी तरीके और चर केवल myklass ऑब्जेक्ट में मौजूद हैं।



एक अनाम वर्ग का उदाहरण


एक अनाम वर्ग का उदाहरण (अर्थात, उसकी वस्तु) किसी अन्य के लिए बनाया गया है:



 m = myklass.new m.test # => 'TEST' m.class # => #<Class:0xb6f3e768> m.class==myklass # => true
      
      







एक अनाम कक्षा का पालन


एक अनाम वर्ग को उसी तरह विरासत में प्राप्त किया जा सकता है जैसे कि एक अनाम वर्ग।



 class MyKlass2 < myklass # ... end MyKlass2.superclass == myklass # => true #   : mk2 = Class.new myklass do # .. end mk2.superclass == myklass mk2.name # => ""
      
      







मुझे नाम से बुलाओ


रूबी से थोड़ा जादू है। एक वर्ग नाम तब प्रकट होता है जब कक्षा का वर्णन करने वाली वस्तु को कॉन्स्टेंट को सौंपा जाता है।



जैसा कि आप जानते हैं, रूबी में, स्थिरांक एक बड़े अक्षर से शुरू होते हैं, इसलिए कक्षा के नाम।



 MyKlass = myklass MyKlass # => 'MyKlass' MyKlass.name # => 'MyKlass' myklass.name # => 'MyKlass'
      
      







कृपया ध्यान दें कि MyKlass एक वर्ग का नाम नहीं है, यह एक स्थिरांक है जो वर्ग का वर्णन करने वाली एक वस्तु को संग्रहीत करता है। लेकिन उस समय जब हमने इसे इस स्थिरांक को सौंपा, हमारी कक्षा को एक नाम मिला जो स्थिरांक के नाम से मेल खाता है।



सामान्य तौर पर, कक्षा का नाम अक्सर प्रकृति में सिर्फ जानकारीपूर्ण होता है। आखिरकार, आप नाम से नहीं, बल्कि उसी चर या कॉन्स्टेंट का उपयोग करके कक्षा का उपयोग करते हैं जिसमें यह संग्रहीत होता है।



मुर्गी या अंडा?



अन्य प्रकार की तरह वर्ग प्रकार, ऑब्जेक्ट प्रकार से विरासत में मिला है। लेकिन, इसके बाद:



 Object.class # => Class Class.class # => Class Class.superclass # => Module Module.class # => Class Module.superclass # => Object
      
      







यह पता लगाना कि प्रथम क्या है - वस्तु या वर्ग असंभव है। एक वर्ग कैसे एक स्थिर हो सकता है जो उस वर्ग की वस्तु को संग्रहीत करता है जो इसका एक उदाहरण है? वास्तव में, ऑब्जेक्ट , क्लास, और मॉड्यूल इंटरप्रेटर में एम्बेडेड प्राथमिक संरचनाएं हैं, और वे एक दूसरे से रूबी कोड द्वारा नहीं बनते हैं, हालांकि रूबी सफलतापूर्वक ऐसा होने का दिखावा करती है।



एक रोचक तथ्य।


वास्तव में, रूबी में कोई वर्ग विधियां नहीं हैं (जो हमें लगता है कि हम डीईएफ सेल्फ के माध्यम से वर्णन करते हैं )। केवल क्लास के ऑब्जेक्ट्स सहित ऑब्जेक्ट्स की विधियाँ हैं।



लेकिन उस अगले गुरुवार को और ...



संबंधित लिंक



rhg.rubyforge.org/chapter02.html

rbdev.ru/2010/07/izuchaem-yadro-ruby-klassy-i-obekty

stackoverflow.com/questions/1219691/why-object-class-class-in-ruby



All Articles