वस्तु और उदाहरण में अंतर


83

मैं सवाल इस तरह की गई है पता पूछा से पहले , लेकिन मैं अब भी लगता है कि इस सवाल का जवाब मेरे लिए बहुत अस्पष्ट है (और, विस्तार से, कुछ / सबसे शुरुआती) समझ।

मैं खुद को प्रक्रियात्मक और बुनियादी ओओपी की तुलना में प्रोग्रामिंग की व्यापक अवधारणाओं को सिखाने की कोशिश कर रहा हूं। मैं OOP की ठोस अवधारणाओं को समझता हूं (आप एक वर्ग बनाते हैं जिसके पास डेटा (सदस्य) और फ़ंक्शन (विधियाँ) हैं और फिर उस वर्ग को तुरंत चलाने के लिए उस समय का सामान बनाते हैं, जो उस तरह का है।

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

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

क्या एसओ के विशेषज्ञ यहां ओपोर की दुनिया में आगे बढ़ने के लिए शुरुआती समय में "अहा" पल की मदद कर सकते हैं?

नोट: यह होमवर्क नहीं है, मैं स्कूल नहीं जाता - हालांकि, मुझे लगता है कि यह उन लोगों की मदद करेगा जो होमवर्क की मदद की तलाश में हैं।


1
मुझे आश्चर्य है कि क्या आप कुछ अतिरिक्त प्रश्न जोड़ना चाहेंगे, जैसे "सभी उदाहरण वस्तुएं हैं?" , और, "सभी वस्तुओं के उदाहरण हैं?" यदि दोनों "हाँ", तो हम पुष्टि कर सकते हैं कि वे समान हैं।
पश्चिमीगुन

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

जवाबों:


131

एक घर के डिजाइन के लिए एक खाका एक वर्ग विवरण की तरह है। उस खाके से निर्मित सभी घर उस वर्ग की वस्तुएँ हैं। एक दिया गया घर एक उदाहरण है।


6
इसके अलावा, मेरे गृहनगर की एक सड़क है, जिसमें थोड़ी बहुत स्थानीय प्रसिद्धि है क्योंकि वहां एक पंक्ति में 8 पहचान की गई ईंट के घर हैं ("आवास विकास की अवधारणा से पहले" अस्तित्व में आया था)। तो मैं बहुत अच्छी तरह से कल्पना कर सकते हैं। "क्लास" वही है जो वास्तुकार ने आकर्षित किया। तैयार घर "वस्तुएं" हैं क्योंकि वे सभी समान रूप से निर्मित हैं। प्रत्येक घर एक "उदाहरण" है क्योंकि उनके पास (और तब भी जारी रखा जा सकता है) सभी तब से अलग तरह से व्यवहार करते हैं [अब एक साइडिंग है: o (]
TCCV

16
और स्टेटिक विधियां उन उपयोगिताओं की तरह हैं जिन्हें सभी घर साझा करते हैं।
WOPR

2
लेकिन क्या खाका एक उदाहरण से निर्मित घर नहीं है?
हॉट लिप्स

1
इसका अर्थ है, वर्ग की परिभाषा के आधार पर पहली यादें। जबकि बनाए गए सभी ऑब्जेक्ट को ऑब्जेक्ट कहा जाता है।
हाफिज शहबाज अली

6
वस्तु और उदाहरण बिल्कुल एक ही नहीं है?
प्रवीण कुमार

42

सच्चाई यह है कि ऑब्जेक्ट ओरिएंटेड प्रोग्रामिंग अक्सर विकास के दार्शनिक पक्ष और कंप्यूटर के वास्तविक यांत्रिक कामकाज के बीच एक डिस्कनेक्ट बनाकर भ्रम पैदा करता है। मैं आपके लिए दोनों के विपरीत प्रयास करूंगा:

OOP की मूल अवधारणा यह है: क्लास >> ऑब्जेक्ट >> इंस्टेंस।

वर्ग = ब्लू प्रिंट। ऑब्जेक्ट एक वास्तविक चीज़ है जिसे 'ब्लू प्रिंट' (घर की तरह) के आधार पर बनाया गया है। एक उदाहरण वस्तु की एक आभासी प्रति (लेकिन वास्तविक प्रति नहीं) है।

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

प्रक्रिया है: प्रोसेसर >> मेमोरी लोकेशन का उदाहरण >> ऑरिजिनल ऑब्जेक्ट की मेमोरी लोकेशन।

ध्यान दें कि इससे कोई फर्क नहीं पड़ता कि आप किस उदाहरण का उपयोग करते हैं - अंतिम परिणाम हमेशा समान रहेगा। सभी उदाहरण अपने स्मृति स्थानों में एक ही सटीक जानकारी बनाए रखना जारी रखेंगे - ऑब्जेक्ट का मेमोरी एड्रेस - और केवल ऑब्जेक्ट बदल जाएगा।

वर्ग और वस्तु के बीच संबंध थोड़ा अधिक भ्रामक है, हालांकि दार्शनिक रूप से इसका सबसे आसान (ब्लू प्रिंट >> हाउस) समझना है। यदि वस्तु वास्तविक डेटा है जिसे स्मृति में कहीं रखा गया है, तो 'क्लास' क्या है? यह पता चलता है कि यंत्रवत् वस्तु वर्ग की एक सटीक प्रति है। तो कक्षा स्मृति में कहीं और एक और चर है जो ऑब्जेक्ट में वही सटीक जानकारी रखता है जो ऑब्जेक्ट करता है। रिश्तों के बीच अंतर पर ध्यान दें:

ऑब्जेक्ट क्लास की एक कॉपी है। उदाहरण एक चर है जो ऑब्जेक्ट का मेमोरी एड्रेस रखता है।

आपके पास एक ही वर्ग के कई ऑब्जेक्ट हो सकते हैं और फिर उनमें से प्रत्येक ऑब्जेक्ट के कई उदाहरण हो सकते हैं। इन मामलों में, प्रत्येक ऑब्जेक्ट के इंस्टेंस का सेट वैल्यू के बराबर है, लेकिन ऑब्जेक्ट्स के बीच इंस्टेंस नहीं हैं। उदाहरण के लिए:

कक्षा A को कक्षा A से आज्ञा दें, Object2, Object2 और Object3।

// ऑब्जेक्ट 1 का ऑब्जेक्ट 2 और ऑब्जेक्ट 3 के समान सटीक मूल्य है, लेकिन मेमोरी में विभिन्न स्थानों पर हैं।

Object1 >> से obj1_Instance1, obj1_Instace2, obj1_Instance3

// ये सभी उदाहरण स्मृति में और विभिन्न स्थानों में मूल्य के बराबर हैं। उनके मान = Object1.MemoryAddress।

आदि।

जब आप टाइप शुरू करते हैं तो चीजें गड़बड़ हो जाती हैं। यहाँ c # से प्रकारों का उपयोग करके एक उदाहरण दिया गया है:

// मान लें कि व्यक्ति पर्सन मौजूद है john = new Person ();

वास्तव में, इस कोड का विश्लेषण करना आसान है यदि आप इसे दो भागों में तोड़ते हैं:

Person john;
john = new Person();

तकनीकी बोल में, पहली पंक्ति ' प्रकार का एक चर घोषित करती हैव्यक्ति। लेकिन इसका क्या मतलब है?? सामान्य स्पष्टीकरण यह है कि मेरे पास अब एक खाली चर है जो केवल एक व्यक्तिगत वस्तु रख सकता है। लेकिन एक मिनट रुको - इसका एक खाली चर! उस चर स्मृति स्थान में कुछ भी नहीं है। यह पता चला है कि 'प्रकार' यांत्रिक रूप से अर्थहीन हैं। मूल रूप से डेटा का प्रबंधन करने के तरीके के रूप में आविष्कार किया गया था और कुछ नहीं। यहां तक ​​कि जब आप आदिम प्रकार जैसे कि int, str, chr (w / o इसे इनिशियलाइज़ करते हैं) घोषित करते हैं, तो कंप्यूटर के भीतर कुछ भी नहीं होता है। प्रोग्रामिंग का यह अजीब वाक्यात्मक पहलू हिस्सा है जहां लोगों को यह विचार मिलता है कि कक्षाएं वस्तुओं का खाका हैं। OOP के प्रतिनिधि प्रकार, ईवेंट हैंडलर, आदि के साथ प्रकारों के साथ और भी अधिक भ्रामक हो गया है, मैं उन पर बहुत अधिक ध्यान केंद्रित नहीं करने की कोशिश करूंगा और बस याद रखूंगा कि वे सभी एक मिथ्या नाम हैं।

दूसरी पंक्ति भी थोड़ी भ्रमित करने वाली है क्योंकि यह एक ही बार में दो काम करती है:

सही पक्ष "नए व्यक्ति ()" का मूल्यांकन पहले किया जाता है। यह व्यक्ति वर्ग की एक नई प्रति बनाता है - अर्थात, यह एक नई वस्तु बनाता है।

बाईं ओर "जॉन =", फिर उसके बाद मूल्यांकन किया जाता है। यह एक संदर्भ चर में जॉन को बदल देता है, यह उस वस्तु का मेमोरी एड्रेस देता है जो केवल उसी पंक्ति के दाईं ओर बनाया गया था।

यदि आप एक अच्छे डेवलपर बनना चाहते हैं, तो यह समझना महत्वपूर्ण है कि कोई भी कंप्यूटर वातावरण कभी भी दार्शनिक आदर्शों के आधार पर काम नहीं करता है। कंप्यूटर भी तार्किक नहीं हैं - वे वास्तव में तारों का एक बड़ा संग्रह है जो मूल बूलियन सर्किट (ज्यादातर नंद और ओआर) का उपयोग करके एक साथ चिपके हुए हैं।


32

शब्द क्लास से आता वर्गीकरण ( श्रेणी जिसमें कुछ डाल दिया है अब हम सब सुना है कि एक,) कक्षा एक खाका की तरह है, लेकिन यह वास्तव में क्या मतलब है? इसका मतलब यह है कि कक्षा एक विशेष श्रेणी का विवरण रखती है, ( मैं जावा का उपयोग करके उदाहरण के साथ कक्षा, वस्तु और उदाहरण के बीच का अंतर दिखाना चाहूंगा और मैं पाठकों से अनुरोध करूंगा कि इसे पढ़ते समय एक कहानी की तरह कल्पना करें, और यदि आप जावा से कोई फर्क नहीं पड़ता ) इससे कोई फर्क नहीं पड़ता। तो चलिए एक श्रेणी बनाते हैं जिसे ह्यूमनबीइंग कहा जाता है , इसलिए जावा प्रोग्राम इसे इस प्रकार व्यक्त करेगा।

class HumanBeing{ 
   /*We will slowly build this category*/ 
}

अब क्या गुण एक है humanbeing सामान्य रूप में है नाम , उम्र , ऊंचाई , वजन अब के लिए हमें इन चार गुण के लिए हमारे आत्म को सीमित करते हैं, हमें हमारे श्रेणी में जोड़ने जाने

class HumanBeing{
    private String Name;
    private int Age;
    private float Height;
    private float Weight; 

   /*We still need to add methods*/

}

अब प्रत्येक श्रेणी में उदाहरण श्रेणी के लिए एक व्यवहार होता है। डॉग में छाल, भ्रूण , रोल आदि का व्यवहार होता है ... इसी प्रकार हमारी श्रेणी ह्यूमनबीइंग का भी कुछ व्यवहार हो सकता है, उदाहरण के लिए जब हम अपने ह्यूमनबीइंग से पूछते हैं कि आपका नाम / उम्र / वजन / क्या है ऊंचाई? यह हमें इसका नाम / उम्र / वजन / ऊंचाई देना चाहिए, इसलिए जावा में हम इसे निम्नानुसार करते हैं

class HumanBeing{
    private String Name;
    private int Age;
    private float Height;
    private float Weight;  

    public HumanBeing(String Name,int Age,float Height,float Weight){
       this.Name = Name;
       this.Age  = Age;
       this.Height = Height;
       this.Weight = Weight;
    }

    public String getName(){
      return this.Name;
    }

    public int getAge(){
      return this.age;
    }

    public float getHeight(){
      return this.Height;
    }

    public float getWeight(){
      return this.Weight;
    }
}

अब हमने अपनी श्रेणी HumanBeing में व्यवहार जोड़ दिया है , इसलिए हम इसका नाम, आयु, ऊँचाई, वजन पूछ सकते हैं लेकिन आप इन विवरणों को किससे पूछेंगे, क्योंकि class HumanBeingयह केवल एक श्रेणी है, यह एक खाका है उदाहरण के लिए एक वास्तुकार एक खाका बनाता है। वह जिस भवन का निर्माण करना चाहता है, उसका एक कागज अब हम ब्लूप्रिंट ( भवन के बारे में उसका विवरण ) पर नहीं बना सकते हैं, हम केवल एक बार भवन में रह सकते हैं क्योंकि यह बनाया गया है इसलिए यहां हमें अपनी श्रेणी से एक मानवजाति बनाने की आवश्यकता है जिसे हम ऊपर वर्णित है, तो हम जावा में कैसे करते हैं

class Birth{
  public static void main(String [] args){
    HumanBeing firstHuman = new HumanBeing("Adam",25,6.2,90);    
  }
}

अब उपरोक्त उदाहरण में हमने अपना पहला इंसान बनाया है जिसका नाम उम्र का वजन है, इसलिए उपरोक्त कोड में वास्तव में क्या हो रहा है? । हम कर रहे हैं instantiating हमारे श्रेणी humanbeing यानी एक वस्तु की हमारी कक्षा बनाई गई है

नोट: ऑब्जेक्ट और इंस्टेंस पर्यायवाची नहीं हैं कुछ मामलों में ऐसा लगता है जैसे ऑब्जेक्ट और इंस्टेंस पर्यायवाची हैं लेकिन वे नहीं हैं, मैं दोनों मामलों को दूंगा

केस 1: ऑब्जेक्ट और इंस्टेंस लगता है समानार्थी शब्द
मुझे थोड़ा विस्तार से बताएं, जब हम कहते हैं कि हमारी श्रेणी का HumanBeing firstHuman = new HumanBeing("Adam",25,6.2,90); एक ऑब्जेक्ट ढेर मेमोरी पर बनाया गया है और कुछ पता इसे आवंटित किया गया है, और firstHumanउस पते का एक संदर्भ रखता है, अब यह ऑब्जेक्ट ह्यूमनबीइंग का एक उद्देश्य और ह्यूमनबीइंग का एक उदाहरण । यहां ऐसा लगता है जैसे ऑब्जेक्ट और इंस्टेंस पर्यायवाची हैं, मैं खुद को दोहराऊंगा कि वे समानार्थी नहीं हैं

हमें हमारी कहानी को फिर से शुरू करने दें, हमने अपना पहला इतिहास बनाया है, अब हम उसका नाम, आयु, ऊंचाई, वजन पूछ सकते हैं, यह है कि हम इसे जावा में कैसे करते हैं

class Birth{
  public static void main(String [] args){
    HumanBeing firstHuman = new HumanBeing("Adam",25,6.2,90);
    System.out.println(firstHuman.getName());
    System.out.println(firstHuman.getAge());
    ...
    ...  
  }
}

इसलिए हम पहले इंसान हैं और अपने पहले इंसान को कुछ योग्यता देकर पंख हिलाते हैं, चलो उसे डॉक्टर बनाते हैं, इसलिए हमें डॉक्टर नाम की एक श्रेणी चाहिए और हमारे डॉक्टर को कुछ व्यवहार देना चाहिए, इसलिए जावा में हम निम्नानुसार करते हैं।

class Doctor extends HumanBeing{
   public Doctor(String Name,int Age,float Height,float Weight){
      super(Name,Age,Height,Weight);
   }
   public void doOperation(){
    /* Do some Operation*/ 
   }

   public void doConsultation(){
    /* Do so Consultation*/
   }
}  

यहां हमने इनहेरिटेंस की अवधारणा का उपयोग किया है जो कोड में कुछ पुन: प्रयोज्यता ला रहा है, हर डॉक्टर हमेशा एक ह्यूमनबीइंग पहले होगा, इसलिए ए डॉक्टर के पास नाम, आयु, वजन, ऊंचाई होगी जो फिर से लिखने के बजाय ह्यूमनबीइंग से इनहेरिट होगी। ध्यान दें कि हमने अभी एक डॉक्टर का वर्णन लिखा है जिसे हमने अभी तक नहीं बनाया है, इसलिए हम अपने में एक डॉक्टर बनाएँclass Birth

class Birth{
  public static void main(String [] args){
    Doctor firstDoctor = new Doctor("Strange",40,6,80);
    .......
    .......
    /*Assume some method calls , use of behaviour*/
    .......
    .......    
  }
}

केस 2: ऑब्जेक्ट और इंस्टेंस पर्यायवाची नहीं हैं
। उपरोक्त कोड में हम कल्पना कर सकते हैं कि हम अपनी श्रेणी के डॉक्टर को तत्काल दे रहे हैं और इसे जीवन में ला रहे हैं अर्थात हम बस श्रेणी का एक ऑब्जेक्ट बना रहे हैं डॉक्टर , जैसा कि हम पहले से ही जानते हैं कि ऑब्जेक्ट को एचटीएम मेमोरी पर बनाया गया है। और firstDoctorढेर पर उस वस्तु का एक संदर्भ रखता है;

यह विशेष वस्तु firstDoctorइस प्रकार है (कृपया ध्यान दें firstDoctorकि यह वस्तु का संदर्भ है, यह स्वयं वस्तु नहीं है)

  1. firstDoctorहै की एक वस्तुclass Doctor और एक का एक उदाहरणclass Doctor
  2. firstDoctorका एक उद्देश्य नहीं है,class HumanBeing लेकिन एक उदाहरण हैclass HumanBeing

तो एक विशेष वस्तु किसी विशेष वर्ग के लिए एक उदाहरण हो सकती है लेकिन उसे उस दिए गए वर्ग की वस्तु नहीं होना चाहिए

निष्कर्ष:

ऑब्जेक्ट को किसी विशेष श्रेणी का उदाहरण कहा जाता है यदि वह उस विशेष श्रेणी की सभी विशेषताओं को संतुष्ट करता है

वास्तविक दुनिया उदाहरण इस प्रकार होगा, हम पहले मनुष्य के रूप में पैदा हुए हैं इसलिए हमें मानव के रूप में छवि देते हैं, अब जब हम बड़े होते हैं तो हम जिम्मेदारियां लेते हैं और नए कौशल सीखते हैं और जीवन उदाहरण में विभिन्न भूमिका निभाते हैं बेटा, भाई, एक बेटी, एक पिता , माँ अब हम वास्तव में क्या हैं? हम कह सकते हैं कि हम भाई, बेटी, ... आदि मानव की वस्तुओं के उदाहरण हैं

आशा है कि ये आपकी मदद करेगा

धन्यवाद


5
... और इस उत्तर पर हमारे पास केवल 3 upvotes क्यों हैं?
प्रतिक अंबानी

13

यहां छवि विवरण दर्ज करें

वस्तुएं स्मृति की चीजें हैं जबकि उदाहरण ऐसी चीजें हैं जो उनके संदर्भ में हैं। उपरोक्त तस्वीर में:

  • std (उदाहरण) -> छात्र वस्तु (दाएं)
  • std1 (उदाहरण) -> छात्र वस्तु (बाएं)
  • std2 (उदाहरण) -> छात्र वस्तु (बाएं)
  • std3 (उदाहरण) -> कोई वस्तु (शून्य)

4
यह बहुत बढ़िया बात है। मैं वास्तव में इस तथ्य को पसंद करता हूं कि इसे निम्न स्तर मिलता है। मैं आगे और पीछे जा रहा हूं कि क्या मुझे सादृश्य से बेहतर यह पसंद है। मुझे लगता है कि 2 को एक साथ जानना मेरे लिए वास्तव में आवश्यक है। upvote, लेकिन निश्चित नहीं कि अगर मैं आपको इसका उत्तर दे सकूं क्योंकि यह पहले से ही दिया गया है। फिर भी आपका धन्यवाद। इससे बहुत कुछ साफ हो जाता है।
TCCV

अच्छा, तो एक उदाहरण एक वस्तु के लिए एक संकेतक है? (उदाहरण == स्मृति पता के साथ चर?)
स्टेनो

6
ट्रूंग, आपका जवाब गलत और भ्रमित करने वाला है। वास्तव में एक उदाहरण बेस क्लास ऑब्जेक्ट से प्राप्त वस्तु है। उदाहरण == वस्तु। इस या इस उत्तर में उदाहरण के लिए इस शब्दावली को अच्छे से समझाया गया है ।
स्टेनो

@jww: छवि के लिए एक कड़ी है math.hws.edu/javanotes/c5/objectsInHeap.png जो अब 404. मुमकिन है कि यह समय यह पोस्ट किया गया था पर दिखाई दे रही थी।
मैट बरलैंड

6

एक वस्तु एक वर्ग का उदाहरण है (वर्ग आधारित भाषाओं के लिए)।

मुझे लगता है कि यह सबसे सरल स्पष्टीकरण है जिसके साथ मैं आ सकता हूं।


1
मैं मानता हूं कि आपका स्पष्टीकरण मेरे पढ़ने के तरीके के बारे में सही है, लेकिन ऑनलाइन बहुत सारी प्रविष्टियां हैं जो दोनों के बीच अंतर बनाती हैं। मैं नहीं जानता कि क्या इस तरह के सवाल का जवाब किसी भाषा के बिना नहीं दिया जा सकता है (वाह-मेटा-सवाल, यह सवाल एक ऐसा वर्ग है जिसे बिना किसी भाषा, भाषा के बिना इसका इस्तेमाल किए नहीं किया जा सकता)।
TCCV

6

एक वर्ग एक वस्तु को परिभाषित करता है। आप कई भाषाओं में और भी आगे बढ़ सकते हैं और कह सकते हैं कि एक इंटरफ़ेस वस्तुओं के बीच सामान्य विशेषताओं और विधियों को परिभाषित करता है।

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

एक बार जब आप इन विशेषताओं को परिभाषित कर लेते हैं तो आपके पास एक वस्तु का एक उदाहरण होता है।

आशा है, इससे स्थिति स्पष्ट हो जाएगी।


मुझे लगता है कि जो मूल रूप से कह रहा है कि जो ने कहा। यदि मैं गलत हूं तो मुझे सही करों।
TCCV

3
ऊपर जो कहते हैं कि ब्लूप्रिंट से बने सभी घर ऑब्जेक्ट हैं। सच। और वह कहते हैं कि एक दिया घर एक उदाहरण है। सच। लेकिन, सभी घर उदाहरण हैं और एक दिया गया घर एक वस्तु भी है। वह एक अंतर बना रहा था जहां कोई नहीं था। कोड में एक वस्तु और एक उदाहरण के बीच अंतर करना आवश्यक है जिस समय हम इसका निर्माण करते हैं। हम कहते हैं कि यह वास्तव में बनाया गया है जब यह तुरंत है। एक आम सवाल यह हो सकता है: क्या आपको ऑब्जेक्ट को तुरंत याद था? अर्थात। यदि आप एक वस्तु घोषित करने के बाद कंस्ट्रक्टर को कॉल करना भूल गए।
डेरेक लित्ज़ जूल

1
आह, यह एक अच्छा अंतर है। तो इसे दूसरे तरीके से कहने के लिए, एक उदाहरण एक ऑब्जेक्ट है जिसका निर्माण किया गया है (यानी, जिसे कंस्ट्रक्टर कहा जाता है)।
TCCV

3

"एक वर्ग वस्तुओं के एक सेट का वर्णन करता है जिसे उसके उदाहरण कहते हैं।" - ज़ेरॉक्स लर्निंग रिसर्च ग्रुप, "द स्मॉलटॉक -80 सिस्टम", बाइट मैगजीन वॉल्यूम 06 नंबर 08, पी 39, 1981।


2

एक वस्तु क्या है?

एक वस्तु एक वर्ग का एक उदाहरण है। ऑब्जेक्ट को आपके आस-पास की वास्तविक दुनिया के उदाहरणों को देखकर सबसे अच्छा समझा जा सकता है। आप डेस्क, आपका लैपटॉप, आपकी कार सभी एक वस्तु के अच्छे वास्तविक उदाहरण हैं।

वास्तविक विश्व वस्तु दो विशेषताओं को साझा करती है, इन सभी में स्थिति और व्यवहार होता है। मनुष्य भी एक वस्तु का एक अच्छा उदाहरण है, हम मनुष्यों में राज्य / गुण हैं - नाम, ऊंचाई, वजन और व्यवहार - चलना, दौड़ना, बात करना, सोना, कोड: पी।

कक्षा क्या है?

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

नाम विशेषताएँ / राज्य संचालन / विधियाँ

class Car 
{
    int speed = 0;
    int gear = 1;

    void changeGear(int newGear)
    {
        gear = newGear;
    }

    void speedUp(int increment) 
    {
        speed = speed + increment;
    }

    void applyBrakes(int decrement) 
    {
        speed = speed - decrement;
    }
}

ऊपर के उदाहरण पर विचार करें, खेतों speedऔर gearवस्तु के राज्य का प्रतिनिधित्व करेंगे, और तरीकों changeGear, speedUpऔर applyBrakesबाहरी दुनिया के साथ कार वस्तु के व्यवहार को परिभाषित।

संदर्भ:


1

मुझे लगता है कि यह बताना महत्वपूर्ण है कि आम तौर पर दो चीजें होती हैं। खाका और प्रतियाँ। लोग इन विभिन्न चीजों को नाम देते हैं; कक्षाएं, वस्तुएं, उदाहरण कुछ ऐसे नाम हैं जो लोग उनके लिए उपयोग करते हैं। महत्वपूर्ण बात यह है कि इसका खाका और प्रतियां हैं - उनके लिए नामों की परवाह किए बिना। यदि आपके पास पहले से ही इन दोनों के लिए समझ है, तो बस उन अन्य चीजों से बचें जो आपको भ्रमित कर रही हैं।


0

सेब की तुलना सेब से करते हैं। हम सभी जानते हैं कि एक सेब क्या है। यह किस तरह का दिखता है। इसका स्वाद कैसा लगता है वह एक वर्ग है। यह एक चीज की परिभाषा है। यह वह चीज है जिसके बारे में हम जानते हैं।

अब जाओ एक सेब ढूंढो। यह एक उदाहरण है। हम इसे देख सकते हैं। हम इसका स्वाद ले सकते हैं। हम इसके साथ काम कर सकते हैं। यह हमारे पास है।

क्लास = हम किसी चीज के बारे में क्या जानते हैं। परिभाषा।

ऑब्जेक्ट / इंस्टेंस = कुछ ऐसा जो उस परिभाषा को फिट करता है जो हमारे पास है और जिसके साथ हम काम कर सकते हैं।


0

कुछ मामलों में, एक उदाहरण का वर्णन करने के लिए "ऑब्जेक्ट" शब्द का उपयोग किया जा सकता है, लेकिन अन्य मामलों में इसका उपयोग किसी उदाहरण के संदर्भ का वर्णन करने के लिए किया जाता है । शब्द "उदाहरण" केवल वास्तविक उदाहरण को संदर्भित करता है।

उदाहरण के लिए, एक सूची को वस्तुओं के संग्रह के रूप में वर्णित किया जा सकता है, लेकिन यह वास्तव में वस्तु उदाहरणों के संदर्भ में है।


तो इस मामले में, एक संदर्भ सिर्फ एक स्थान-धारक है जिसमें उदाहरण के लिए एक लिंक है? जहां एक लिंक मेमोरी एड्रेस की तरह कुछ हो सकता है?
TCCV

0

मुझे हमेशा यह विचार पसंद आया है कि एक वर्ग की परिभाषा "सार डेटा प्रकार" के बराबर होती है । यही है, जब आपने एक वर्ग को परिभाषित किया है तो आप एक नए प्रकार की "कुछ", उसके डेटा प्रकार प्रतिनिधित्व, आदिम और अन्य "somethings" के संदर्भ में परिभाषित कर रहे हैं, और कार्यों और / या विधियों के संदर्भ में उसका व्यवहार। (सामान्यता और औपचारिकता के लिए क्षमा करें)

जब भी आप एक वर्ग को परिभाषित करते हैं तो आप उसके गुणों और व्यवहार के साथ कुछ संस्थाओं को परिभाषित करने के लिए एक नई संभावना को खोलते हैं, जब आप तुरंत और / या किसी विशेष वस्तु का निर्माण करते हैं तो आप वास्तव में भौतिक हो जाते हैं। कि संभावना।

कभी-कभी शब्द वस्तु और उदाहरण विनिमेय होते हैं। कुछ ओओपी शुद्धतावादी बनाए रखेंगे कि सब कुछ एक वस्तु है, मैं शिकायत नहीं करूंगा, लेकिन वास्तविक ओओपी दुनिया में, हम डेवलपर्स दो सिद्धांतों का उपयोग करते हैं:

  1. कक्षा: सार डेटा प्रकार का नमूना जिससे आप अन्य एडीटी प्राप्त कर सकते हैं और ऑब्जेक्ट बना सकते हैं।
  2. ऑब्जेक्ट: जिसे इंस्टेंस भी कहा जाता है, डेटा संरचनाओं के विशेष उदाहरणों का प्रतिनिधित्व करता है और किसी दिए गए सार डेटा प्रकार द्वारा दर्शाए गए फ़ंक्शन।

0

ऑब्जेक्ट ओरिएंटेड प्रोग्रामिंग एक सिस्टम रूपक है जो आपके प्रोग्राम को संभालने के लिए आवश्यक ज्ञान को व्यवस्थित करने में आपकी मदद करता है, एक तरह से जिससे आपको अपने प्रोग्राम को विकसित करने में आसानी होगी। जब आप OOP का उपयोग करके प्रोग्राम चुनते हैं, तो आप अपने OOP-Googles को चुनते हैं, और आप तय करते हैं कि आप वास्तविक दुनिया की समस्या को देखेंगे क्योंकि संदेश भेजने के द्वारा कई वस्तुएं आपस में सहयोग कर रही हैं। एक आदमी को कार चलाते हुए देखने के बजाय आप एक लड़के को कार को एक संदेश भेजते हुए देखें कि वह कार को क्या करना चाहता है। कार एक बड़ी वस्तु है, और यह उस संदेश का जवाब देगी कि यह इंजन को एक संदेश भेज रहा है या यह पहिया ठीक से प्रतिक्रिया करने में सक्षम है कि चालक ने उसे संदेश में क्या करने के लिए कहा था, आदि ...

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

  • वे सभी लोग उसी तरह से व्यवहार करते हैं, इसलिए मैं ड्राइवर नामक एक वर्ग बनाऊंगा जो यह निर्दिष्ट करेगा कि दुनिया के सभी ड्राइवर व्यवहार करते हैं, क्योंकि वे सभी एक ही तरह से व्यवहार करते हैं। (और आपके वर्ग आधारित OOP का उपयोग कर रहे हैं)
  • या आपका कहना है अरे! दूसरा चालक पहले चालक के समान व्यवहार करता है, सिवाय इसके कि वह थोड़ा तेज चलना पसंद करता है। और तीसरा चालक पहले चालक के समान व्यवहार करता है, सिवाय इसके कि जब वह ड्राइव करता है तो उसे ज़िगज़ैगिंग पसंद है। (और आप प्रोटोटाइप आधारित OOP का उपयोग करते हैं)।

फिर आप कंप्यूटर में यह जानकारी डालना शुरू करते हैं कि सभी ड्राइवर कैसे व्यवहार करते हैं (या पहला ड्राइवर कैसे व्यवहार करता है, और दूसरा और तीसरा उस एक से कैसे भिन्न होता है), और थोड़ी देर बाद आपके पास अपना प्रोग्राम है, और आप कोड का उपयोग करते हैं तीन ड्राइवर बनाएं जो आप उस पीसी के अंदर उपयोग कर रहे हैं जो वास्तविक दुनिया में आपके द्वारा देखे गए ड्राइवरों को परिष्कृत करने के लिए है। जो 3 ड्राइवर आपने पीसी के अंदर बनाए हैं, वे या तो प्रोटोटाइप के उदाहरण हैं (वास्तव में पहला प्रोटोटाइप है, पहला आप खुद ही प्रोटोटाइप हो सकते हैं कि आप चीजों को कैसे मॉडल करते हैं) या आपके द्वारा बनाए गए वर्ग के आधार पर। उदाहरण और वस्तु के बीच का अंतर यह है कि वस्तु वास्तविक दुनिया में आपके द्वारा उपयोग किए जाने वाले रूपक है। आप आदमी और कार को वस्तुओं के रूप में देखना चुनते हैं (यह कहना गलत होगा कि आप उन्हें उदाहरण के रूप में देखते हैं) आपस में सहयोग करते हैं। और फिर आप इसे अपने कोड बनाने के लिए प्रेरणा के रूप में उपयोग करते हैं। उदाहरण केवल आपके प्रोग्राम में मौजूद है, आपके द्वारा प्रोटोटाइप या क्लास बनाने के बाद। "ऑब्जेक्ट्स" पीसी के बाहर मौजूद हैं क्योंकि इसकी मैपिंग आप प्रोग्राम के साथ वास्तविक दुनिया को एकजुट करने के लिए उपयोग करते हैं। यह गाय को पीसी में आपके द्वारा बनाए गए ड्राइवर के उदाहरण के साथ एकजुट करता है। इसलिए ऑब्जेक्ट और इंस्टेंस बेहद संबंधित हैं, लेकिन वे बिल्कुल समान नहीं हैं (एक उदाहरण प्रोग्राम में एक ऑब्जेक्ट का "लेग" है, और दूसरा "लेग" वास्तविक दुनिया में है)।


0

मुझे लगता है कि सबसे अच्छा जवाब पहले ही दूर दिया गया है।

कक्षाएं ब्लूप्रिंट हैं, और ऑब्जेक्ट बिल्डिंग हैं या उस ब्लूप्रिंट के उदाहरणों ने मेरे लिए भी चाल चली।

कभी-कभी, मुझे लगता है कि कक्षाएं टेम्पलेट हैं (जैसे एमएस वर्ड में), जबकि ऑब्जेक्ट दस्तावेज़ हैं जो टेम्पलेट का उपयोग करते हैं।


0

इस धागे में पहले दिए गए उदाहरणों में से एक का विस्तार ...

एक परिदृश्य पर विचार करें - एक आवश्यकता है कि आवासीय उद्देश्यों के लिए पड़ोस में 5 घर बनाने की आवश्यकता है। सभी 5 घरों में एक साझा निर्माण वास्तुकला है। निर्माण वास्तुकला एक वर्ग है । घर एक वस्तु है । इसमें रहने वाले लोगों के साथ प्रत्येक घर एक उदाहरण है

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.