2010-04-15 34 views
7

सेटर्स और गेटर्स क्या हैं? मुझे उनकी ज़रूरत क्यों है? प्रभावी तरीके से उपयोग में उनका एक अच्छा उदाहरण क्या है? एक सेटर और गेटर का मुद्दा क्या है?मुझे समझाओ कि एक सेटर और गेटर क्या है

अद्यतन: मैं कुछ कोडिंग उदाहरण कृपया मिल सकता है?

+0

आप विकी पर म्यूटेटर देखना चाहते हैं: http://en.wikipedia.org/wiki/Mutator_method – Armstrongest

उत्तर

11

एक गेटर एक ऐसी विधि है जो किसी संपत्ति का मूल्य प्राप्त करती है। एक सेटर एक तरीका है जो किसी संपत्ति का मूल्य निर्धारित करता है। वहाँ उनकी प्रभावोत्पादकता के बारे में कुछ विवाद है, लेकिन अंक आम तौर पर कर रहे हैं:

  • कैप्सूलीकरण की पूर्णता के लिए

  • मामले में आंतरिक विवरण बदलने

अधिक उपयोगी है एक सुसंगत इंटरफ़ेस बनाए रखने के लिए जब आपको इसे प्राप्त करने या सेट करने के बारे में कुछ तर्क जोड़ने की आवश्यकता होती है, तो इसे लिखने से पहले किसी मान को सत्यापित करना।

7

एक गेटर/सेटर प्रचार से एक निजी क्षेत्र को छिपाने के लिए प्रयोग किया जाता है (यदि आप एक क्षेत्र के लिए सीधी पहुँच से बच सकते हैं)।

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

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

4

Getters & setters कार्यान्वयन से अलग इंटरफेस (गेटर/सेटर कार्यों) (कैसे डेटा वास्तव में संग्रहीत किया जाता है)।

2

getters और setters आप कैसे एक वस्तु का डेटा के सदस्यों या पहुँचा जा सकता है बदल नियंत्रित करने के लिए अनुमति देते हैं।

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

नहीं चाहते हैं कि लोग डेटा सदस्य पढ़ लें? डेटा सदस्य को निजी बनाएं, और एक गेटटर न लिखें जो मूल्य वापस देता है। नहीं चाहते कि लोग डेटा सदस्य को संशोधित करें? डेटा सदस्य को निजी बनाएं, और इसके लिए एक सेटटर न लिखें। अनुमत मूल्यों की सीमा को नियंत्रित करना चाहते हैं? सेटटर में रखो।

1

सार्वजनिक एक्सेसर्स (गेटर और सेटर) कभी-कभी समझ में आता है। (मैं नाराज है कि मैं न केवल एक वर्ग के सदस्य चर लेकिन यह भी 2 ज्यादातर व्यर्थ एक्सेसर तरीकों दस्तावेज़ के लिए है हूँ।)

यह आमतौर पर जेसन एस

ने उल्लेख मामलों को छोड़कर कैप्सूलीकरण साथ मदद नहीं करता है

कुछ चार डेटाबेस से भरी हुई है, लेकिन के लिए एक जावा उदाहरण एक बूलियन मान के रूप में प्रतिनिधित्व किया जाना चाहिए

char boolFromDb; 

public boolean getBoolFromDb() { 
    return boolFromDb == 'T'; 
} 

public void setBoolFromDb(boolean newValue) { 
    boolFromDb = newValue ? 'T' : 'F'; 
} 
2

एक सवाल जो इस से बाहर पॉप एक सीधा क्षेत्र का उपयोग करने के बजाय एक विधि का उपयोग कर रहा है, तो प्रदर्शन कम हो सकती है हो सकता है । उत्तर वास्तव में संकलक अनुकूलन कोड के रूप में नहीं है ताकि यदि आपकी विधि केवल return field; कर रही है, जहां field आपके वर्ग में फ़ील्ड है जिसे आप सेटर/गेटर के साथ छिपाते हैं, तो यह वास्तव में सीधे फ़ील्ड तक पहुंच जाएगा। इस प्रकार आप ज्यादातर मामलों में एक ही प्रदर्शन करते हैं, साथ ही बाद में विकल्प को बदलने/विकल्प प्राप्त करने के विकल्प को बदलने के विकल्प को रखते हुए।

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

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

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