शब्द ' राज्य ' का उपयोग विभिन्न इंद्रियों में किया जा सकता है, जो सभी एक सटीक परिभाषा के लिए भी अतिसंवेदनशील नहीं हो सकते हैं। इसलिए यह महत्वपूर्ण था कि आप अपने पेपर में एक परिभाषा को शामिल करें, यह स्पष्ट करने के लिए कि आप इस शब्द का उपयोग कैसे कर रहे थे। निम्नलिखित में मैं किसी वस्तु की स्थिति की एक अनूठी परिभाषा नहीं प्रस्तुत करता, बल्कि इसके बारे में सोचने के कई तरीकों को स्केच करने की कोशिश करता हूं, जो विभिन्न संदर्भों में उचित हो सकता है।
सबसे पहले, हालांकि, आपको यह सोचने की ज़रूरत है कि आप ' ऑब्जेक्ट ' से क्या मतलब है : क्या आप एक वैचारिक वस्तु के बारे में सोच रहे हैं, यानी कुछ इकाई जिसे आप मॉडल करने की कोशिश कर रहे हैं, या एक विशिष्ट कार्यक्रम में एक वर्ग की आवृत्ति के बारे में; शायद आप एक चर की स्थिति के बारे में भी सोचना चाहते हैं जो अलग-अलग समय पर अलग-अलग वस्तुओं या एक प्रणाली के बारे में बता सकता है, शायद एक निश्चित उपयोगकर्ता इंटरफ़ेस के माध्यम से।
ओओपी में किसी वस्तु की स्थिति को परिभाषित करने में कठिनाई का एक हिस्सा यह है कि जब हम किसी विशेष भाषा में मॉडलिंग करते हैं, तो वह भाषा अक्सर हमें ऑब्जेक्ट विशेषताओं को अलग करने की अनुमति नहीं देती है, जो कि वैचारिक रूप से दूसरों से समान इकाई का हिस्सा हैं। उदाहरण के लिए, एक लिंक की गई सूची में Car
कई Link
-objects शामिल होंगे, जिनमें अगले (और शायद पिछले) के संकेत होते हैं, Link
हालांकि वैचारिक रूप से सूची एक ही वस्तु है; लिंक में भी एम्बेड किया जा सकता हैCar
-objects या उन्हें संकेत मिलता है, लेकिन इस मामले में लिंक की गई वस्तुएं सूची के भाग के बजाय वैचारिक रूप से अलग होती हैं; हाल के परिवर्तनों की एक सूची में, कभी-कभी, परिवर्तन केवल सूची में मौजूद हो सकते हैं और इसे इसका हिस्सा माना जा सकता है। इन विभिन्न मामलों में हमें यह तय करना होगा कि क्या हम जुड़े हुए ऑब्जेक्ट को शामिल करने के लिए किसी एक वस्तु की स्थिति पर विचार करते हैं। इसके अलावा, एक के Car
लिए एक लिंक हो सकता है Registering_Authority
- हम शायद कार की स्थिति को बदलने के लिए नहीं मानते हैं जब इसके पंजीकरण प्राधिकारी अपनी वेबसाइट के URL को बदलते हैं। जब तक कार्यान्वयन भाषा हमें विभिन्न प्रकार के लिंक को भेद करने की अनुमति नहीं देती है, तब तक अकेले भाषा के संदर्भ में किसी वस्तु की स्थिति की सामान्य परिभाषा बनाना संभव नहीं होगा।
' बाहरी ' या ' कार्यात्मक ' राज्य को 'कैसे व्यवहार करता है' के रूप में परिभाषित किया जा सकता है, उदा। यह इनवोकेशन विधि या उपयोगकर्ता इंटरफ़ेस पर कैसे प्रतिक्रिया करता है। किसी ऑब्जेक्ट के लिए एक वर्ग उदाहरण के रूप में यह परिभाषा उस प्रकार पर निर्भर करती है जिस पर ऑब्जेक्ट को संबंधित के रूप में देखा जाता है: ए Circle
, रंग के रूप में देखा जाता हैColoured_Circle
दिखाई नहीं देता है, और इसलिए अपने राज्य के लिए अप्रासंगिक है। इसके साथ एक कठिनाई यह है कि 'यह कैसे प्रतिक्रिया करता है' को दिए गए मूल्यों के संदर्भ में परिभाषित करने की आवश्यकता हो सकती है, और ये 'मूल्य' अन्य वस्तुओं के राज्य हो सकते हैं। इसे औपचारिक रूप से कहने का एक तरीका यह है कि किसी वस्तु की दो अवस्थाएँ समान होती हैं यदि भविष्य में किसी सिस्टम के सभी संभावित निष्पादन निष्पादित होते हैं, जिसमें इनपुट से लेकर सिस्टम तक उसी मैपिंग में परिणामित होता है। इस एनक्लोजिंग सिस्टम को एक स्व-निहित प्रणाली होने की आवश्यकता हो सकती है, जो इसके पर्यावरण से स्वतंत्र निष्पादन में सक्षम है; दूसरी ओर, कोई व्यक्ति इसे स्वयं प्रश्न के रूप में छोटा होने की अनुमति दे सकता है। किसी भी मामले में, एक गणितीय दृष्टिकोण तब एक राज्य को एक समतुल्यता वर्ग के रूप में परिभाषित करना है
' आंतरिक ' राज्य को प्रतिनिधित्व की स्थिति के रूप में परिभाषित किया जा सकता है। एक पहला प्रयास स्पष्ट रूप से परिपत्र है, लेकिन शायद सहायक है: 'किसी वस्तु की आंतरिक स्थिति उसके सदस्यों की स्थिति है'। यहां हमें निरर्थक लोगों से प्रतिनिधित्व के महत्वपूर्ण पहलुओं को अलग करने की देखभाल करने की आवश्यकता है: निम्नतम स्तर पर, किसी वस्तु के प्रतिनिधित्व में अच्छी तरह से अन्य वस्तुओं के पते शामिल हो सकते हैं, लेकिन इस तरह के पते में बदलाव पर विचार करना उपयोगी नहीं है। राज्य में बदलाव के रूप में। दूसरी ओर, एक क्वेरी के परिणाम के लिए कैश की स्थिति में बदलाव, जबकि यह कार्यात्मक स्थिति पर कोई फर्क नहीं पड़ता (जैसा कि ऊपर वर्णित है), प्रदर्शन परीक्षणों पर विचार करते समय महत्वपूर्ण होगा।