scala - स्कैला में ऑब्जेक्ट और क्लास के बीच अंतर




class object (9)

tl; डॉ

  • class C एक कक्षा को परिभाषित करता है, जैसे कि जावा या सी ++ में।
  • object O कुछ अज्ञात वर्ग के उदाहरण के रूप में एक singleton object O बनाता है; इसका उपयोग उन स्थिर सदस्यों को पकड़ने के लिए किया जा सकता है जो कुछ वर्ग के उदाहरणों से जुड़े नहीं हैं।
  • object O extends T ऑब्जेक्ट O को trait T का एक उदाहरण बनाता है; फिर आप कहीं भी पास कर सकते हैं, एक T की उम्मीद है।
  • यदि class C , तो object C कक्षा C का साथी वस्तु C ; ध्यान दें कि साथी ऑब्जेक्ट स्वचालित रूप से C उदाहरण नहीं C

object और class लिए स्कैला दस्तावेज़ भी देखें।

स्थिर सदस्यों के मेजबान के रूप में उपयोग करें

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

object A {
  def twice(i: Int): Int = 2*i
}

फिर आप A.twice(2) का उपयोग कर उपरोक्त विधि को कॉल कर सकते हैं।

यदि twice कुछ कक्षा A सदस्य थे, तो आपको पहले एक उदाहरण बनाना होगा:

class A() {
  def twice(i: Int): Int = 2 * i
}

val a = new A()
a.twice(2)

आप देख सकते हैं कि यह कैसे अनावश्यक है, क्योंकि twice किसी भी आवृत्ति-विशिष्ट डेटा की आवश्यकता नहीं होती है।

एक विशेष नामित उदाहरण के रूप में उपयोग करें

आप object को कक्षा या विशेषता के कुछ विशेष उदाहरण के रूप में भी उपयोग कर सकते हैं। जब आप ऐसा करते हैं, तो आपके ऑब्जेक्ट को इसके सबक्लास का उदाहरण बनने के लिए कुछ trait बढ़ाने की आवश्यकता होती है।

निम्नलिखित कोड पर विचार करें:

object A extends B with C {
  ...
}

यह घोषणा पहले एक अज्ञात (अप्राप्य) वर्ग घोषित करती है जो B और C दोनों को बढ़ाती C , और A नामक इस वर्ग के एक उदाहरण को तुरंत चालू करती है।

इसका मतलब है कि B या C , या B with C की वस्तुओं की अपेक्षा करने वाले कार्यों को पारित किया जा सकता B with C

object की अतिरिक्त विशेषताएं

स्कैला में वस्तुओं की कुछ विशेष विशेषताएं भी मौजूद हैं। मैं object पढ़ने की सलाह देते हैं।

  • def apply(...) सामान्य विधि नाम- A(...) कम वाक्यविन्यास को सक्षम बनाता है A(...)
  • def unapply(...) कस्टम पैटर्न मिलान extractors बनाने की अनुमति देता है
  • यदि एक ही नाम की कक्षा के साथ, वस्तु अंतर्निहित मानकों को हल करते समय एक विशेष भूमिका निभाती है

मैं बस इंटरनेट पर कुछ स्कैला ट्यूटोरियल पर जा रहा हूं और कुछ उदाहरणों में देखा है कि उदाहरण की शुरुआत में ऑब्जेक्ट घोषित किया गया है।

स्कैला में class और object बीच क्या अंतर है?


एक class एक परिभाषा है, एक विवरण। यह विधियों और अन्य प्रकार की संरचना के मामले में एक प्रकार को परिभाषित करता है।

एक object एक सिंगलटन है - एक वर्ग का एक उदाहरण जो अद्वितीय होने की गारंटी है। कोड में प्रत्येक object के लिए, एक अज्ञात वर्ग बनाया जाता है, जो आपके द्वारा object को लागू करने के लिए घोषित किए गए object भी वर्ग से प्राप्त होता है। इस वर्ग को स्कैला स्रोत कोड से नहीं देखा जा सकता है - हालांकि आप इसे प्रतिबिंब के माध्यम से प्राप्त कर सकते हैं।

object और class बीच एक रिश्ता है। एक वस्तु को एक वर्ग का साथी-वस्तु कहा जाता है यदि वे एक ही नाम साझा करते हैं। जब ऐसा होता है, तो प्रत्येक के पास दूसरे में private दृश्यता के तरीकों तक पहुंच होती है। हालांकि, ये विधियां स्वचालित रूप से आयात नहीं होती हैं। आपको या तो उन्हें स्पष्ट रूप से आयात करना होगा, या कक्षा / ऑब्जेक्ट नाम के साथ उन्हें उपसर्ग करना होगा।

उदाहरण के लिए:

class X {
  // class X can see private members of object X
  // Prefix to call
  def m(x: Int) = X.f(x)

  // Import and use
  import X._
  def n(x: Int) = f(x)

  private def o = 2
}

object X {
  private def f(x: Int) = x * x

  // object X can see private members of class X
  def g(x: X) = {
    import x._
    x.o * o // fully specified and imported
   }
}

ऑब्जेक्ट जावा में स्थिर वर्ग के बराबर होता है, कुछ स्थिरता के लिए, स्थिर विशेषताओं का मतलब है कि स्थिर वर्ग को JVM में डालने पर ऑब्जेक्ट बनाने की आवश्यकता नहीं है, इसका उपयोग सीधे इसके वर्ग के नाम से किया जा सकता है


औपचारिक अंतर -

  1. आप कन्स्ट्रक्टर पैरामीटर प्रदान नहीं कर सकते हैं
  2. यह एक प्रकार नहीं है - आप नए ऑपरेटर के साथ एक उदाहरण नहीं बना सकते हैं। लेकिन इसमें फ़ील्ड, विधियां, सुपरक्लास का विस्तार और लक्षणों में मिश्रण हो सकता है।

उपयोग में अंतर:

  • स्कैला में स्थिर तरीके या फ़ील्ड नहीं हैं। इसके बजाय आपको object उपयोग करना चाहिए। आप इसे संबंधित वर्ग के साथ या बिना इस्तेमाल कर सकते हैं। पहले मामले में इसे एक साथी वस्तु कहा जाता है। आपको करना होगा:
    1. कक्षा और वस्तु दोनों के लिए एक ही नाम का उपयोग करें
    2. उन्हें एक ही स्रोत फ़ाइल में डाल दें।
  • एक प्रोग्राम बनाने के लिए आपको object में मुख्य विधि का उपयोग करना चाहिए, class नहीं।

    object Hello {
      def main(args: Array[String]) {
        println("Hello, World!")
      }
    }
    
  • जब आप जावा में सिंगलटन ऑब्जेक्ट का उपयोग करते हैं तो आप इसका भी उपयोग कर सकते हैं।




किसी ऑब्जेक्ट में बिल्कुल एक उदाहरण होता है (आप new MyObject नहीं कह सकते हैं)। आपके पास कक्षा के कई उदाहरण हो सकते हैं।

ऑब्जेक्ट जावा में स्थिर विधियों और फ़ील्ड के समान (और कुछ अतिरिक्त) उद्देश्यों को कार्य करता है।


जावा क्लास के समान स्कैला वर्ग लेकिन स्कैला आपको कक्षा में कोई भी विधि विधि नहीं देता है, जैसे जावा में मुख्य विधि। ऑब्जेक्ट कीवर्ड से जुड़ी मुख्य विधि। आप ऑब्जेक्ट कीवर्ड के बारे में सोच सकते हैं कि एक वर्ग के सिंगलटन ऑब्जेक्ट को बनाते हुए जिसे परिभाषित किया गया है।

अधिक जानकारी स्कैला प्रोग्रामिंग में इस आलेख वर्ग और ऑब्जेक्ट कीवर्ड की जांच करें


स्कैला में किसी ऑब्जेक्ट को परिभाषित करना जावा में एक क्लास को परिभाषित करना है जिसमें केवल स्थिर तरीके हैं। हालांकि, स्कैला में एक वस्तु एक और सुपरक्लास का विस्तार कर सकती है, इंटरफेस लागू कर सकती है, और चारों ओर पारित की जा सकती है जैसे कि यह एक वर्ग का उदाहरण था। (तो यह एक वर्ग पर स्थिर तरीकों की तरह है लेकिन बेहतर)।


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

स्कैला सिंगलटन ऑब्जेक्ट उदाहरण

object Singleton{  
    def main(args:Array[String]){  
        SingletonObject.hello()         // No need to create object.  
    }  
}  


object SingletonObject{  
    def hello(){  
        println("Hello, This is Singleton Object")  
    }  
}  

आउटपुट:

Hello, This is Singleton Object

स्कैला में, जब आपके पास सिंगलटन ऑब्जेक्ट के समान नाम वाला वर्ग होता है, तो उसे साथी वर्ग कहा जाता है और सिंगलटन ऑब्जेक्ट को साथी ऑब्जेक्ट कहा जाता है।

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

स्कैला कंपैनियन ऑब्जेक्ट उदाहरण

class ComapanionClass{  
    def hello(){  
        println("Hello, this is Companion Class.")  
    }  
}  
object CompanoinObject{  
    def main(args:Array[String]){  
        new ComapanionClass().hello()  
        println("And this is Companion Object.")  
    }  
}  

आउटपुट:

Hello, this is Companion Class.
And this is Companion Object.

स्कैला में, एक वर्ग में निम्न शामिल हो सकते हैं:

1. डेटा सदस्य

2. सदस्य विधि

3. कन्स्ट्रक्टर ब्लॉक

4. नेस्टेड क्लास

5. सुपर क्लास सूचना आदि

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

कक्षा के स्कैला नमूना उदाहरण

class Student{  
    var id:Int = 0;                         // All fields must be initialized  
    var name:String = null;  
}  
object MainObject{  
    def main(args:Array[String]){  
        var s = new Student()               // Creating an object  
        println(s.id+" "+s.name);  
    }  
} 

मुझे खेद है, मुझे बहुत देर हो चुकी है लेकिन मुझे उम्मीद है कि यह आपकी मदद करेगा।


ऑब्जेक्ट एक वर्ग है लेकिन इसमें पहले से ही एक उदाहरण है, इसलिए आप new ObjectName ऑब्जेक्टनाम को कॉल नहीं कर सकते हैं। दूसरी तरफ, कक्षा सिर्फ टाइप है और यह new ClassName() कॉल करके एक उदाहरण हो सकता है।





object