2012-07-25 8 views
5

यह मेरा होमवर्क प्रश्न है: निम्नलिखित वर्गों में से कौन सा कड़ाई से Encapsulated नहीं है?कसकर Encapsulated कक्षा

class A 
{ 
    private int x; 
} 
class B 
{ 
    private int x; 
    public void setX(int x) 
    { 
     this.x=x; 
    } 
    public int getX() 
    { 
     return x; 
    } 
} 
class C 
{ 
    private int x; 
    private void setX(int x) 
    { 
     this.x=x; 
    } 
    private int getX() 
    { 
     return x; 
    } 
} 

मैंने कुछ समय कोडरंच पर खोज करने में बिताया लेकिन आवश्यक सामान प्राप्त करने में सक्षम नहीं था। क्या कोई मेरी मदद कर सकता हैं?

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

+0

यह शायद समझाया नहीं किया जाएगा के रूप में परिभाषित किया गया है शामिल आपकी मदद नहीं करेगा, लेकिन प्रश्न एक बेतुका अमूर्त तरीके से (संभवतः आपके प्रशिक्षकों द्वारा) उत्पन्न किया गया है। एक वर्ग कसकर encapsulated है जब यह केवल अपने ग्राहकों की जरूरत इंटरफ़ेस का खुलासा करता है। किसी दिए गए वर्ग के उद्देश्य को जानने के बिना अर्थपूर्ण रूप से कहना असंभव है। – millimoose

उत्तर

1

आप बिल्कुल सही हैं। कक्षा ए और कक्षा सी दोनों कसकर encapsulated नहीं हैं क्योंकि तंग encapsulation सार्वजनिक गेटर्स और सेटर्स के साथ जोड़ा निजी क्षेत्रों का तात्पर्य है।

+0

अब मैं उलझन में हूँ ... क्योंकि मैं 4 विकल्प हैं: एक: क्लास ए बी: कक्षा बी सी: कक्षा सी डी: के ऊपर अपनी internals को – user1500024

+2

सीधी पहुंच कैप्सूलीकरण तात्पर्य कोई नहीं? – jeff

1

encapsulation की आपकी परिभाषा सही है। लेकिन मुझे लगता है कि आप थोड़ा सा भटक रहे हैं।

Encapsulation का अर्थ है कि आप दूसरों को अपने आंतरिक लोगों तक सीधे पहुंचने नहीं देते हैं। आप उपयोगकर्ता कार्यक्षमता का पर्दाफाश करते हैं और आप अपने स्वयं के आंतरिक प्रबंधन करते हैं।

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

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

+0

असल में इस प्रश्न को भर्ती योग्यता परीक्षा में 4 विकल्पों के साथ पूछा जाता है: कक्षा ए, बी, सी या कोई नहीं। उनमें से, केवल एक सही है। तो सबसे सही जवाब क्या है? – user1500024

+0

@ user1500024 उन विकल्पों में से? मैं कोई नहीं कहूंगा क्योंकि 'बी' अपने सभी आंतरिक खुलासा करता है, और 'ए' और 'सी' कुछ भी नहीं दिखाता है और इसलिए बेकार है। उस ने कहा कि "बी" का जवाब देने के लिए एक तर्क है (क्योंकि जब यह 'x' का खुलासा करता है तो कम से कम इसे नियंत्रित करता है); जैसे कि 'ए' और' सी 'के लिए कोई तर्क है क्योंकि वे' x' का खुलासा नहीं करते हैं। यह सिर्फ एक हास्यास्पद अस्पष्ट सवाल है। – millimoose

+1

मैं पूरी तरह से सहमत हूं ... मैं उस व्यक्ति को तैयार करता हूं जिसने इस तरह के एक प्रश्न को डिजाइन किया है। – user1500024

4

आपकी कक्षा में परिभाषित "तंग encapsulation" कैसे है? जहां तक ​​मैं Google खोज से कह सकता हूं, वहां तक ​​कोई अकादमिक या उद्योग-व्यापी परिभाषा नहीं है।

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

यह प्रश्न सिर्फ encapsulation की अवधारणा को गलत तरीके से प्रस्तुत करता है। आप "encapsulation सत्यापनकर्ता" दिनचर्या के माध्यम से कोड नहीं चला सकते हैं। यह एक मानव डिजाइन निर्णय है जिसमें आप कहते हैं कि जो खुलासा हुआ है वह होना चाहिए और जो नहीं होना चाहिए। मूल रूप से, यह आम तौर पर डेटा को निजी होने की आवश्यकता होती है, लेकिन क्या कोई विधि सार्वजनिक या निजी होनी चाहिए, जो वास्तव में इसका अर्थ है और वास्तव में क्या कर रही है।

0

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

0

यहाँ वर्ग बी कसकर क्योंकि जैसा कि परिभाषा के अनुसार समझाया हो जाएगा

0

सभी अपने ऊपर वर्गों कसकर समाहित हैं "अगर एक वर्ग निजी चर & सार्वजनिक गुणों के साथ घोषित किया जाता है, तो कसी कैप्सूलीकरण होना कहा जाता है"।

एक वर्ग को कसकर encapsulated कहा जाता है अगर और केवल अगर, सभी डेटा सदस्यों को निजी के रूप में घोषित किया जाता है। यहां हमें चिंता नहीं करनी चाहिए कि क्या सार्वजनिक एक्सेसर्स या म्यूटेटर मौजूद हैं या नहीं।

-1

एक वर्ग "कसकर समझाया" होने के लिए यदि और केवल यदि हर चर निजी के रूप में घोषित किया जाता है कहा जाता है। (चाहे अगर वे गेटर या सेटर तरीकों या नहीं होते हैं।

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

0

तीनों आप द्वारा वर्णित वर्गों कसकर समाहित हैं।

मैं एफ कक्षा में केवल निजी चर और कोई अन्य सार्वजनिक चर नहीं है, तब एक वर्ग को कसकर कक्षा में शामिल किया जाता है।

यह गेटर या सेटर विधियों पर निर्भर नहीं है।

हमें गेटर और सेटर्स की आवश्यकता है क्योंकि हमें चर बनाने की आवश्यकता है ताकि हम उन्हें अन्य वर्ग या कार्यों में उपयोग कर सकें।

तो सार्वजनिक गेटर और सेटर विधि के बावजूद सभी तीन वर्गों को कसकर encapsulated हैं।

0

कसकर समझाया वर्ग मतलब है कि सभी सदस्य चर के रूप में निजी इसलिए सभी वर्गों कसकर समाहित हैं नायब घोषित करता है, तो एक माता पिता के वर्ग एक सदस्य चर कि नहीं निजी अपने बच्चे को कक्षा कसकर

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