जावा एनकैप्सुलेशन
कैप्सूलीकरण
Encapsulation का अर्थ यह सुनिश्चित करना है कि "संवेदनशील" डेटा उपयोगकर्ताओं से छिपा हुआ है। इसे प्राप्त करने के लिए, आपको यह करना होगा:
- वर्ग चर/विशेषताओं को घोषित करें
private
-
एक चर के मूल्य तक पहुँचने और अद्यतन करने के लिए सार्वजनिक प्राप्त
और सेट विधियाँ प्रदान करें
private
प्राप्त करें और सेट करें
आपने पिछले अध्याय से सीखा है कि private
वेरिएबल्स को केवल एक ही क्लास के भीतर एक्सेस किया जा सकता है (बाहरी क्लास के पास इसकी कोई एक्सेस नहीं है)। हालाँकि, यदि हम सार्वजनिक प्राप्त और सेट विधियाँ प्रदान करते हैं, तो उन तक पहुँच संभव है ।
get
विधि चर मान लौटाती है, और विधि set
मान सेट करती है।
दोनों के लिए सिंटैक्स यह है कि वे या तो get
या से शुरू होते हैं set
, उसके बाद वेरिएबल के नाम से, ऊपरी मामले में पहले अक्षर के साथ:
उदाहरण
public class Person {
private String name; // private = restricted access
// Getter
public String getName() {
return name;
}
// Setter
public void setName(String newName) {
this.name = newName;
}
}
उदाहरण समझाया गया
विधि चर का get
मान लौटाती है name
।
set
विधि एक पैरामीटर ( ) लेती है और इसे वेरिएबल newName
को असाइन करती है
। name
कीवर्ड का this
उपयोग वर्तमान वस्तु को संदर्भित करने के लिए किया जाता है।
हालाँकि, जैसा कि name
चर के रूप में घोषित किया गया है private
, हम
इसे इस वर्ग के बाहर से एक्सेस नहीं कर सकते हैं :
उदाहरण
public class Main {
public static void main(String[] args) {
Person myObj = new Person();
myObj.name = "John"; // error
System.out.println(myObj.name); // error
}
}
यदि चर के रूप में घोषित किया गया था public
, तो हम निम्नलिखित आउटपुट की अपेक्षा करेंगे:
John
हालाँकि, जैसा कि हम एक private
चर तक पहुँचने का प्रयास करते हैं, हमें एक त्रुटि मिलती है:
MyClass.java:4: error: name has private access in Person
myObj.name = "John";
^
MyClass.java:5: error: name has private access in Person
System.out.println(myObj.name);
^
2 errors
इसके बजाय, हम चर को एक्सेस और अपडेट करने के लिए getName()
और विधियों का उपयोग करते हैं:setName()
उदाहरण
public class Main {
public static void main(String[] args) {
Person myObj = new Person();
myObj.setName("John"); // Set the value of the name variable to "John"
System.out.println(myObj.getName());
}
}
// Outputs "John"
एनकैप्सुलेशन क्यों?
- वर्ग विशेषताओं और विधियों का बेहतर नियंत्रण
- वर्ग विशेषताओं को केवल-पढ़ने के लिए बनाया जा सकता है (यदि आप केवल
get
विधि का उपयोग करते हैं), या केवल-लिखें (यदि आप केवलset
विधि का उपयोग करते हैं) - लचीला: प्रोग्रामर अन्य भागों को प्रभावित किए बिना कोड के एक भाग को बदल सकता है
- डेटा की बढ़ी सुरक्षा