जवाबों:
class C जावा या C ++ की तरह ही एक क्लास को परिभाषित करता है।object Oकुछ अनाम वर्ग के उदाहरण के रूप में एक सिंगलटन ऑब्जेक्ट बनाता है O; इसका उपयोग स्थिर सदस्यों को रखने के लिए किया जा सकता है जो किसी वर्ग के उदाहरणों से संबद्ध नहीं हैं।object O extends Tवस्तु का Oएक उदाहरण बनाता है trait T; आप तब Oकहीं भी गुजर सकते हैं , एक Tउम्मीद है।class C, तो कक्षा object Cकी साथी वस्तु है C; ध्यान दें कि साथी वस्तु है नहीं स्वचालित रूप से का एक उदाहरण C।ऑब्जेक्ट और क्लास के लिए स्काला प्रलेखन भी देखें ।
object स्थिर सदस्यों के मेजबान के रूप मेंसबसे अधिक बार, आपको उन 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 एक विशेष नाम उदाहरण के रूप मेंआप objectकिसी वर्ग या विशेषता के कुछ विशेष उदाहरणों के रूप में भी स्वयं का उपयोग कर सकते हैं । जब आप ऐसा करते हैं, तो आपकी वस्तु को traitउप-वर्ग का एक उदाहरण बनने के लिए कुछ का विस्तार करना होगा।
निम्नलिखित कोड पर विचार करें:
object A extends B with C {
...
}
इस घोषणा पहले एक गुमनाम (दुर्गम) वर्ग है कि दोनों फैली हुई वाणी Bऔर C, और इस वर्ग के नाम पर रखा गया का एक उदाहरण को दर्शाता है A।
इसका अर्थ Aहै प्रकार Bया C, या वस्तुओं की अपेक्षा वाले कार्यों को पारित किया जा सकता है B with C।
objectस्काला में वस्तुओं की कुछ विशेष विशेषताएं भी मौजूद हैं। मैं आधिकारिक दस्तावेज पढ़ने की सलाह देता हूं ।
def apply(...) सामान्य विधि नाम-कम सिंटैक्स सक्षम करता है A(...)def unapply(...)कस्टम पैटर्न मिलान चिमटा बनाने की अनुमति देता हैCommerceवर्ग को मान्यता नहीं देगा , लेकिन जेवीएम और जावा भाषा को। (यह है कि आप कैसे कर सकते हैं object Foo{ def main(args:Seq[String]) }और कार्यक्रम को चलाने की उम्मीद करते हैं।)
ए classपरिभाषा है, विवरण है। यह अन्य प्रकारों की विधियों और रचना के संदर्भ में एक प्रकार को परिभाषित करता है।
एक 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
}
}
def f(x: X) = ???, तो वह निजी तरीकों को xसाथी वर्ग की कॉल करने में सक्षम होगा X।
जैसा कि कई लोगों द्वारा समझाया गया है, objectएक एकल उदाहरण को परिभाषित करता है। यहाँ जवाब में एक बात जो मुझे विश्वास है कि छोड़ दी गई है जो objectकई उद्देश्यों को पूरा करती है।
यह एक class/ के लिए साथी वस्तु traitहो सकती है, जिसमें स्थैतिक विधियों या सुविधा विधियों को माना जा सकता है।
यह एक मॉड्यूल की तरह ज्यादा कार्य कर सकता है, जिसमें संबंधित / सहायक प्रकार और परिभाषाएं शामिल हैं, आदि।
यह एक classया एक या अधिक traitएस बढ़ाकर एक इंटरफ़ेस लागू कर सकता है ।
यह एक ऐसे मामले का प्रतिनिधित्व कर सकता sealed traitहै जिसमें कोई डेटा नहीं है। इस संबंध में, यह अक्सर case classबिना किसी पैरामीटर के साथ अधिक सही माना जाता है । sealed traitकेवल case objectकार्यान्वयनकर्ताओं के साथ विशेष मामला कमोबेश किसी Enum का Scala संस्करण है।
यह implicit-driven तर्क के लिए सबूत के रूप में कार्य कर सकता है।
यह एक एकल प्रकार का परिचय देता है।
यह एक बहुत शक्तिशाली और सामान्य निर्माण है। स्काला शुरुआती के लिए बहुत भ्रमित करने वाली बात यह हो सकती है कि एक ही निर्माण में अलग-अलग उपयोग हो सकते हैं। और एक objectइन सभी के कई अलग-अलग उपयोगों की सेवा कर सकता है, जो और भी अधिक भ्रमित हो सकते हैं।
स्काला में एक वस्तु को परिभाषित करना जावा में एक वर्ग को परिभाषित करने जैसा है जिसमें केवल स्थिर विधियां हैं। हालांकि, स्काला में एक ऑब्जेक्ट एक और सुपरक्लास का विस्तार कर सकता है, इंटरफेस को लागू कर सकता है, और चारों ओर पारित किया जा सकता है, हालांकि यह एक वर्ग का एक उदाहरण था। (तो यह एक वर्ग पर स्थिर तरीकों की तरह है लेकिन बेहतर है)।
औपचारिक अंतर -
उपयोग में अंतर:
object । आप इसे संबंधित वर्ग के साथ या बिना उपयोग कर सकते हैं। 1 मामले में इसे एक साथी वस्तु कहा जाता है। आपको करना होगा:
एक कार्यक्रम बनाने के लिए आपको मुख्य विधि का उपयोग करना चाहिए object, अंदर नहीं class।
object Hello {
def main(args: Array[String]) {
println("Hello, World!")
}
}आप इसे भी उपयोग कर सकते हैं क्योंकि आप जावा में सिंगलटन ऑब्जेक्ट का उपयोग करते हैं।
वस्तु कीवर्ड एक नई सिंगलटन प्रकार है, जो एक तरह है बनाता वर्ग केवल एक ही नामित उदाहरण है। यदि आप जावा से परिचित हैं, तो स्काला में एक वस्तु की घोषणा करना एक अनाम वर्ग का एक नया उदाहरण बनाने जैसा है।
स्काला में जावा के स्थिर कीवर्ड के बराबर नहीं है , और स्कैला में अक्सर एक ऑब्जेक्ट का उपयोग किया जाता है जहां आप जावा में स्थिर सदस्यों के साथ एक वर्ग का उपयोग कर सकते हैं।
स्काला में, कोई staticअवधारणा नहीं है। तो scala आपके प्रोग्राम के निष्पादन के लिए प्रवेश बिंदु प्रदान करने के लिए एक सिंगलटन ऑब्जेक्ट बनाता है। यदि आप सिंगलटन ऑब्जेक्ट नहीं बनाते हैं, तो आपका कोड सफलतापूर्वक संकलित करेगा लेकिन कोई आउटपुट नहीं देगा। सिंगलटन ऑब्जेक्ट के अंदर घोषित तरीके विश्व स्तर पर सुलभ हैं। एक सिंगलटन ऑब्जेक्ट कक्षाओं और लक्षणों का विस्तार कर सकता है।
स्काला सिंगलटन ऑब्जेक्ट उदाहरण
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);
}
}
मुझे खेद है, मुझे बहुत देर हो गई है लेकिन मुझे उम्मीद है कि यह आपकी मदद करेगा।
जावा क्लास के समान स्कैला क्लास लेकिन स्कैला आपको क्लास में प्रवेश की कोई विधि नहीं देता, जैसे जावा में मुख्य विधि। ऑब्जेक्ट कीवर्ड से जुड़ी मुख्य विधि। आप ऑब्जेक्ट कीवर्ड के बारे में एक वर्ग के सिंगलटन ऑब्जेक्ट बनाने के बारे में सोच सकते हैं जो कि स्पष्ट रूप से परिभाषित किया गया है।
अधिक जानकारी scala प्रोग्रामिंग में इस लेख वर्ग और ऑब्जेक्ट कीवर्ड की जाँच करें
ऑब्जेक्ट कुछ विस्तार में जावा में स्थिर वर्ग के समान है, स्थिर विशेषता का अर्थ है कि स्थिर वर्ग को जेवीएम में डालते समय ऑब्जेक्ट बनाने की आवश्यकता नहीं है, इसका उपयोग सीधे वर्ग नाम और उसी उदाहरण (समान डेटा स्थिति) द्वारा किया जा सकता है ) का उपयोग किया जाता है जहाँ भी साझा किया जाता है।
एक वर्ग अन्य भाषाओं के किसी भी वर्ग की तरह है। आप किसी वाक्य रचना के अंतर के साथ किसी अन्य भाषा की तरह ही कक्षा को परिभाषित करते हैं।
class Person(val name: String)
val me = new Person("My name")
हालाँकि, ऑब्जेक्ट केवल एकल ऑब्जेक्ट के साथ एक वर्ग है। यह इसे दिलचस्प बनाता है क्योंकि इसका उपयोग एक वर्ग के स्थिर सदस्यों को साथी ऑब्जेक्ट का उपयोग करने के लिए किया जा सकता है । इस साथी ऑब्जेक्ट की कक्षा परिभाषा के निजी सदस्यों तक पहुंच है और इसका वही नाम है जिस वर्ग को आप परिभाषित कर रहे हैं।
class Person(var name: String) {
import Person._
def hi(): String = sayHello(name)
}
object Person {
private def sayHello(name: String): String = "Hello " + name
}
val me = new Person("My name")
me.hi()
इसके अलावा, उल्लेखनीय बिंदु यह है कि ऑब्जेक्ट क्लास को आलसी बनाया गया है जो एक और महत्वपूर्ण बिंदु है। इसलिए, जब तक उन्हें हमारे कोड में आवश्यक नहीं किया जाता है, ये तत्काल नहीं हैं।
यदि आप JDBC के लिए कनेक्शन निर्माण को परिभाषित कर रहे हैं, तो आप उन्हें ऑब्जेक्ट के अंदर बना सकते हैं जैसे कि हम एकल ऑब्जेक्ट्स के साथ जावा में करते हैं।
यदि आप जावा बैकग्राउंड से आ रहे हैं तो स्कैला में क्लास की अवधारणा जावा के समान है, लेकिन स्कैला कैंट में क्लास में स्थिर सदस्य होते हैं।
Scala में ऑब्जेक्ट्स सिंगलटन प्रकार होते हैं जिन्हें आप ऑब्जेक्ट नाम का उपयोग करके इसके अंदर तरीके कहते हैं, scala ऑब्जेक्ट में एक कीवर्ड है और जावा ऑब्जेक्ट में क्लास का एक उदाहरण है