उत्तर

17

इयान में किया उदाहरण के लिए, इस मूल रूप से एक शब्दावली सवाल यह है कि और "भाषा-नास्तिक" इस सवाल का, बहुत भाषा/संबंधित पर्यावरण से संबद्ध टैग के बावजूद है।

डिजाइन चर्चाओं के लिए, संपत्ति और आवृत्ति चर का उपयोग एक दूसरे के लिए किया जा सकता है, क्योंकि विचार यह है कि एक संपत्ति एक वस्तु का वर्णन करने वाली डेटा वस्तु है।

एक विशिष्ट भाषा के बारे में बात करते समय ये दोनों अलग-अलग हो सकते हैं। उदाहरण के लिए, सी # में एक संपत्ति वास्तव में एक फ़ंक्शन है जो ऑब्जेक्ट देता है, जबकि एक आवृत्ति चर एक वर्ग का एक गैर स्थैतिक सदस्य चर है।

+1

+1: यह निश्चित रूप से भाषा से संबंधित है। – Powerlord

+0

हाँ, गरीब जावा .... अभी भी कोई गुण नहीं है :( –

2

कोड सी #

public class ClassName 
{ 
    private string variable; 

    public string property 
    { 
     get{ return variable; } 
     set { variable = value; } 
    } 
} 
0

जावा में हमारे पास JavaBeans Properties नामक कुछ है, लेकिन यह मूल रूप से एक आवृत्ति चर है जो इसके गेटर और सेटर के लिए एक निश्चित नामकरण पैटर्न का पालन करता है।

0

क्या कहा गया है, सी # जैसे लैंगेज में, एक संपत्ति अनिवार्य रूप से एक प्राप्त और सेट फ़ंक्शन है। नतीजतन, इसमें कस्टम तर्क हो सकता है जो प्राप्त करने/सेटिंग के अतिरिक्त चलता है। एक आवृत्ति चर यह नहीं कर सकता है।

1

शायद ऐसा इसलिए है क्योंकि आप पहली बार सी ++ से आए थे ?! मेरे स्कूल के दिनों में मेरे पास प्रोफेसर थे जो क्लास गुण या कक्षा को हर समय योगदान देते थे। चूंकि मैं जावा सी # दुनिया में चले गए, मैंने सदस्यों के बारे में सुनना शुरू कर दिया। कक्षा के सदस्यों, उदाहरण के सदस्यों ...

और फिर संपत्ति एपियर! जावा और .NET में। तो मुझे लगता है कि यह आपके सदस्यों को कॉल करने के लिए बेहतर है। Wheather वे उदाहरण के सदस्य हैं (या जैसा कि आप इसे आवृत्ति चर कहा जाता है) या कक्षा के सदस्य ....

चीयर्स!

1

एक संपत्ति कर सकती है, और मुझे लगता है कि ज्यादातर करता है, एक आवृत्ति चर लौटाता है लेकिन यह और भी कर सकता है। आप एक संपत्ति, कुल मूल्यों में तर्क डाल सकते हैं या अन्य इंस्टेंस चर आदि अपडेट कर सकते हैं। मुझे लगता है कि ऐसा करने से बचने के लिए सबसे अच्छा है। तर्क तरीकों से जाना चाहिए।

0

एक संपत्ति किसी ऑब्जेक्ट से जुड़े किसी प्रकार का डेटा है। उदाहरण के लिए, एक सर्कल की एक संपत्ति इसका व्यास है, और दूसरा इसका क्षेत्र है।

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

कुछ भाषाओं में "प्रथम श्रेणी" गुणों की अवधारणा है। इसका मतलब है कि क्लाइंट एप्लिकेशन के लिए, प्रॉपर्टी दिखती है और इंस्टेंस वैरिएबल की तरह उपयोग की जाती है। यही है, circle.getDiameter() जैसे कुछ लिखने के बजाय, आप circle.diameter लिखेंगे, और circle.setRadius(5) के बजाय, आप circle.radius = 5 लिखेंगे।

3

हर्षी इस भाषा विशिष्ट होने के बारे में सही है। लेकिन भाषा विशिष्ट उत्तरों के निशान में जोड़ने के लिए:

पायथन में, एक उदाहरण चर एक उदाहरण की विशेषता है, (आमतौर पर) उदाहरण के शब्दकोश में संदर्भित किया जाता है।यह जावा में सदस्यों या आवृत्ति चर के समान है, सिवाय सबकुछ सार्वजनिक है।

गुण गेटटर/सेटर विधियों के शॉर्टकट हैं जो एक उदाहरण चर की तरह दिखते हैं। इस प्रकार, निम्नलिखित वर्ग परिभाषा (गुइडो के new style object manifesto से संशोधित):

class C(object): 

    def __init__(self): 
     self.y = 0 

    def getx(self): 
     if self.y < 0: return 0 
     else: return self.y 

    def setx(self, x): 
     self.y = x 

    x = property(getx, setx) 

>>> z = C() 
>>> z.x = -3 
>>> print z.x 
0 
>>> print z.y 
-3 
>>> z.x = 5 
>>> print z.x 
5 
>>> print z.y 
5 

yz का एक उदाहरण चर रहा है, x एक संपत्ति है। (आम तौर पर, जहां एक संपत्ति परिभाषित की जाती है, वहां संबंधित तकनीकों को अस्पष्ट करने के लिए उपयोग की जाने वाली कुछ तकनीकें होती हैं ताकि अन्य कोड सीधे इसका उपयोग न करें।) अजगर में गुणों का लाभ यह है कि एक डिजाइनर को चारों ओर जाना नहीं है पूर्व emptively एक संपत्ति के लिए एक उदाहरण चर परिवर्तित किसी भी मौजूदा कोड (जब तक कोड खामियों अपने कैप्सूलीकरण ठीक करने के लिए कोशिश कर रहा है का लाभ लेने के लिए, या वर्ग निरीक्षण या कुछ अन्य मेटा पर निर्भर है को तोड़ने नहीं करना चाहिए द्वारा सभी उदाहरण चर, भविष्य कैप्सूलीकरण के बाद से encapsulating -प्रोग्रामिंग तकनीक)।

यह सब इतना लंबा जवाब है कि डिजाइन स्तर पर, गुणों के बारे में बात करना अच्छा होता है। यह अज्ञेयवादी है कि आपको किस प्रकार के encapsulation करने की आवश्यकता हो सकती है। मुझे लगता है कि यह सिद्धांत भाषा अज्ञेयवादी नहीं है, लेकिन पाइथन के बगल में भाषाओं पर लागू होता है।

0

दिए गए अन्य उत्तरों के विपरीत, मैं सोचता हूं कि सदस्य चर और गुणों के बीच उपयोगी अंतर है जो भाषा-अज्ञेयवादी है।

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

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

2

उद्देश्य सी में, एक संपत्ति एक आवृत्ति चर है जो अपने सेटर और गेटर को कॉल करने के लिए ओवरलोडेड डॉट ऑपरेटर का लाभ उठा सकती है। तो my.food = "चीज़बर्गर" वास्तव में [मेरा सेटफूड: "चीज़बर्गर"] के रूप में व्याख्या किया जाता है। यह एक और मामला है जहां परिभाषा निश्चित रूप से भाषा अज्ञेयवादी नहीं है क्योंकि उद्देश्य-सी @property कीवर्ड को परिभाषित करता है।

संबंधित मुद्दे