क्या हम कह सकते हैं कि वस्तुओं में विशेषताएँ, अवस्थाएँ और व्यवहार हैं?


16

मैं ओरेकल की अवधारणाओं के ओरेकल के माध्यम से पढ़ रहा था और मैं इस विवरण में आया:

वास्तविक दुनिया की वस्तुएं दो विशेषताओं को साझा करती हैं: वे सभी राज्य और व्यवहार हैं। कुत्तों में राज्य (नाम, रंग, नस्ल, भूख) और व्यवहार (भौंकने, लाने, ले जाने की पूंछ) है। सॉफ्टवेयर ऑब्जेक्ट्स वैचारिक रूप से वास्तविक दुनिया की वस्तुओं के समान होते हैं: वे भी राज्य और संबंधित व्यवहार से मिलकर होते हैं।

उस मार्ग के साथ मेरी समस्या यह है कि राज्य का वर्णन करते समय इसके मिश्रण की विशेषताएँ भी हैं। उदाहरण के लिए, एक कुत्ते का नाम और रंग इसके गुण हैं, जबकि यह भूखा या थुलथुला होना इसके राज्य हैं।

इसलिए मेरी राय में वस्तुओं की विशेषताओं को तीन भागों में तोड़ना अधिक सटीक है: विशेषताएँ, अवस्थाएं और व्यवहार

निश्चित रूप से, जब इसे एक प्रोग्रामिंग भाषा में अनुवाद किया जाता है, तो मैं देख सकता हूं कि तीन-गुना विभाजन एक दो गुना एक हो जाता है, क्योंकि दोनों विशेषताओं और राज्यों को फ़ील्ड / चर में संग्रहीत किया जाएगा, जबकि व्यवहार तरीकों / कार्यों में संग्रहीत किए जाएंगे।

लेकिन वैचारिक रूप से यह 3 चीजों को अलग करने के लिए अधिक समझ में आता है।

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

या किसी को याद किया था?


4
हाँ, आप व्यवहार को अनुकरण करने के लिए एक तकनीक के रूप में लक्षण याद कर रहे हैं।
यनीस

इस पोस्ट पर एक नज़र डालें, इससे मदद मिल सकती है: yegor256.com/2014/12/09/…
yegor256

जवाबों:


13

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

यह तीन-भाग की परिभाषा वास्तव में प्रोग्रामिंग भाषाओं में दर्शाई गई है, उदाहरण के लिए finalजावा में readonlyकीवर्ड या C # में कीवर्ड का उपयोग करके उदाहरण डेटा को इंगित करने के लिए जो कि उदाहरण के जीवन भर नहीं बदल सकता है।

मुझे जोड़ना है, हालांकि, गैर-बदलते उदाहरण डेटा को आमतौर पर विशेषता नहीं कहा जाता है। हम उन्हें 'अंतिम' या 'आसानी से' या 'निरंतर डेटा' के रूप में बोलते हैं, जिस पर हम किस भाषा का उपयोग कर रहे हैं, उसके आधार पर बोलते हैं। उनके लिए उचित शब्द 'अपरिवर्तनीय' होगा, लेकिन तब इस शब्द का इस अर्थ में अक्सर उपयोग नहीं किया जाता है; यह अधिक बार अन्य चीजों के लिए उपयोग किया जाता है।


इसे एक उदाहरण की गैर-बदलती और बदलती विशेषताओं के संदर्भ में सोचना समझ में आता है। और मुझे खुशी है कि मैं इससे दूर नहीं था। धन्यवाद!
डैनियल स्कोको

क्या राज्य के निर्माण या निर्माण की प्रक्रिया के दौरान दीपक का आकार छोटा होता है?
जेएफओ

नहीं, यह एक विशेषता होने जा रही है। (शब्द के ओपी अर्थ में।)
माइक नाकिस

4
राज्य और विशेषताओं में कोई बुनियादी अंतर नहीं है इसलिए राज्य को संभवतः परिवर्तनशील या अपरिवर्तनीय के रूप में परिभाषित करना सरल है। जबकि (अपरिवर्तनीय) विशेषता और (परिवर्तनशील) स्थिति गलत नहीं है (और कई अर्थों में समतुल्य है), यह अंतर परिभाषा को आवश्यकता से अधिक जटिल बनाता है। हालांकि IMO शब्द "राज्य" संभवतः अवधारणा का वर्णन करने के लिए सबसे अच्छा शब्द नहीं है क्योंकि "राज्य" किसी भी तरह से तात्पर्य है कि इसे बदलना चाहिए, जबकि "राज्य" - जैसा कि ओरेकल के लेख में वर्णित है - ऐसा नहीं है।
रेयान

मुझे लगता है कि जैसे-जैसे वर्ष बीतते जाएंगे, लोगों में अपरिवर्तनशीलता की ओर रुख बदल रहा है; जो लोग इसके महत्व को समझते हैं, उनके लिए एक भिन्न नाम के साथ वार करने के लिए पर्याप्त और अपरिवर्तनीय अवस्था के बीच एक बुनियादी अंतर है। क्या मैं बहुत दिलचस्प पढ़ने की सलाह दे सकता हूं? एरिक लिपर्ट - कोड में शानदार रोमांच - सी # भाग में अपरिपक्वता: एक प्रकार की अपरिवर्तनीयता
माइक नाकिस

4

मुझे लगता है कि यह कहना अधिक सटीक है कि वस्तुओं में केवल दो विशेषताएं हैं। ओरेकल का उदाहरण लेना:

कुत्तों में राज्य (नाम, रंग, नस्ल, भूख) और व्यवहार (भौंकने, लाने, ले जाने की पूंछ) है। सॉफ्टवेयर ऑब्जेक्ट्स वैचारिक रूप से वास्तविक दुनिया की वस्तुओं के समान होते हैं: वे भी राज्य और संबंधित व्यवहार से मिलकर होते हैं।

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

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


क्या एक लोमड़ी का फर रंग एक राज्य बन जाता है क्योंकि यह सर्दियों में बदल जाता है?
जेएफओ

@ जेफ़ो फर का रंग भी तब बदल सकता है जब वह पुराना, गीला, रंगा हुआ हो ... किसी भी कारण से। यह वास्तव में केवल एक राज्य नहीं है क्योंकि यह एक वस्तु के जीवन के दौरान बदल सकता है, लेकिन क्योंकि एक ही प्रकार की विभिन्न वस्तुओं में उस विशेषता के लिए अलग-अलग मूल्य हो सकते हैं।
छिपकली

1

राज्य विशेषताओं और संगत मूल्यों का सेट है, इसलिए मेरे दृष्टिकोण से, आप सही नहीं हैं (और आप सरलता से अनावश्यक अतिरिक्त जटिलता पैदा कर रहे हैं)।


0

हम चीजों को असंख्य तरीकों से वर्गीकृत कर सकते हैं और प्रत्येक वर्गीकरण का कोई "सही उत्तर" नहीं होगा। चीजों को वर्गीकृत करने का एक फायदा है केवल अगर वर्गीकरण कुछ गहरी समझ की ओर जाता है या संचार में सुधार करता है। यदि आपकी टीम शर्तों के गुणों, राज्यों और कार्यों का उपयोग करना पसंद करती है और इनकी अच्छी कार्य परिभाषाएँ हैं तो इससे आंतरिक संचार को बेहतर बनाने में मदद मिलेगी लेकिन इस समूह के बाहर संचार करते समय आपको लचीला होना चाहिए।

"भूखे" और "प्यासे" अवधारणाओं को बुनियादी विशेषताओं (जैसे रक्त शर्करा, जलयोजन स्तर) से प्राप्त किया जा सकता है, इसलिए हम एक मेटा-विशेषता के रूप में राज्य के बारे में सोच सकते हैं जो आधार विशेषताओं से प्राप्त होती है जिसे हम सत्य या गलत के आधार पर चक्रित कर सकते हैं। प्रासंगिक आधार विशेषताओं की स्थिति। प्रकाश उदाहरण के लिए, हम प्रकाश के गुण applied_voltageऔर resistanceकार्यों voltage_switch()और होने के बारे में सोच सकते हैं shine()voltage_swich()फिर कुछ इनपुट (जैसे मैनुअल स्विच, प्रकाश, टाइमर, आदि) की एक समारोह है और shine()की एक समारोह है applied_voltageऔर resistance। हम एक मेटा-विशेषता की घोषणा कर सकते हैं light_stateजो कि मानसिक रूप से वस्तु का निर्माण करने में मदद करने के लिए सही या गलत है, लेकिन अंत में ये विचार सभी मानसिक निर्माण हैं जो हम अपने काम को व्यवस्थित करने के लिए उपयोग करते हैं।


-2

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

private boolean thirsty;

वैकल्पिक रूप से, आप इसे कुछ पसंद कर सकते हैं

private Date lastDrinkAt;

और यह निष्कर्ष निकालें कि क्या आपके कुत्ते की आवृत्ति वर्तमान समय की तुलना करके प्यासी है, जब वह कुछ पीता है।

किसी भी तरह से, आपकी वस्तुओं की स्थिति इसकी विशेषताओं के भीतर है।

फिर ऐसी कक्षाएं हैं जिनमें विशेषताएँ नहीं हैं, ज्यादातर उपयोगिता वर्ग हैं। लेकिन आप आमतौर पर इस मामले में उनमें से एक उदाहरण नहीं बनाना चाहते हैं।

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


1
ओरेकल ने स्पष्ट रूप से राज्य का उल्लेख किया ; बोली पढ़ें। और ओपी स्पष्ट रूप से किसी वस्तु की गैर-बदलती विशेषताओं के अर्थ में शब्द विशेषताओं का उपयोग कर रहा है , इसलिए वह उन्हें राज्य के साथ भ्रमित नहीं कर रहा है।
माइक नाकिस

वे अभी भी विशेषताएँ हैं - चाहे वे बदल रहे हों या, चाहे आप उन्हें "गुण" या "सदस्य" कहें। प्रोग्रामिंग की दुनिया में इसके गुणों के अलावा किसी वस्तु की स्थिति का प्रतिनिधित्व करने के लिए और कुछ नहीं है।
राकु

-3

वास्तविक-विश्व कनेक्शन गुमराह हैं। यहां बताया गया है कि मैं इसे कैसे सिखाऊंगा (c ++ approach):

  1. कंप्यूटर दो अलग भंडारण स्वरूपों का समर्थन करते हैं: डेटा और कोड
  2. डेटा बिट्स 010101010101 जैसा दिखता है
  3. कोड asm निर्देश जैसा दिखता है
  4. डेटा बिट्स के दो अलग-अलग मूल्य हैं, यह या तो 0 या 1 है
  5. डेटा डेटा प्रकारों के लिए सार है: int i = 1; 0000001 कुछ बिट्स के लिए सिर्फ कम संकेतन है
  6. कोड एक समारोह की तरह दिखेगा: int f (int a) {return a + a + a; } कुछ asm निर्देशों के लिए लघु संकेतन है
  7. जब आपके पास कई चर होते हैं, तो आप उन्हें एक संरचना में जोड़ते हैं: int a; फ्लोट बी; एक संरचना एबी को रखा जा सकता है {int a; फ्लोट बी; };
  8. जब आप इसमें कुछ कोड टुकड़े जोड़ते हैं, तो आपको एक क्लास मिलती है: ए बी एफ क्लास {int a; फ्लोट बी; फ्लोट राशि (फ्लोट सी) कास्ट {रिटर्न ए + बी + सी; }};
  9. फिर डेटा के लिए हमारे पास वैरिएबल नाम हैं जिनका उपयोग मूल्य को खोजने के लिए किया जा सकता है: डेटा तक पहुंचने के लिए a + b + c।
  10. और फिर हमारे पास सामान्य फ़ंक्शन कॉल हैं: int k = f (10); एफ-फंक्शन के अंदर "संग्रहीत" एएसएम निर्देशों का उपयोग करने के लिए।
  11. फिर ऑब्जेक्ट इंस्टेंस है: एबीएफ संस्करण;
  12. और सदस्य फ़ंक्शन कॉल करता है: int k2 = var.sum (10.0);
  13. फ़ंक्शंस में इंट च (इंट) है;
  14. सदस्य कार्यों के प्रकार ABF :: योग (फ्लोट) हैं;
  15. इस प्रकार के सूचक है ABF *
  16. a और b और c जैसे चर संदर्भ पर निर्भर होते हैं, यदि वे सदस्य फ़ंक्शन के अंदर हैं, तो उनका मतलब यह हो सकता है-> b, या बस b।
  17. सदस्य कार्य int ABf :: sum (फ्लोट c) int sum (ABf * this, float c) के लिए सिर्फ संक्षिप्त अंकन है;
  18. शब्द "राज्य" का अर्थ डेटा के समान है
  19. शब्द "व्यवहार" का अर्थ कोड के समान है
  20. "विशेषता" शब्द का अर्थ केवल डेटा के समान है।

इसलिए वास्तव में राज्य और विशेषता के बीच कुछ अलग नहीं है। यह बिट्स का सिर्फ यादृच्छिक संग्रह है। उन्हें अलग करना सिर्फ मनमाना भेद है। बस यह जानने की जरूरत है कि यह किस लिए है।

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