Java Encapsulation को एक single unit के तहत डेटा (variables और methods) के रैपिंग के लिए उपयोग किया जाता है। Encapsulation के बारे में अगर दसरे तारिके से देखे तो यह एक सुरक्षा कवच है जो डेटा को इस शील्ड के बाहर के code द्वारा एक्सेस किए जाने से रोकता है। Encapsulation का अर्थ यह सुनिश्चित करना है कि "sensitive" डेटा users से छिपा हुआ हो। जावा में encapsulation प्राप्त करने के लिए हमे ये करना होगा की:
- किसी class के variables को private घोषित करना होगा।
- Variable के value को access और modify करने के लिए public setter और getter methods प्रदान करना होगा।
Encapsulation में, एक class के variables अन्य classes से छिपे रहेंगे, और केवल उनके वर्तमान class के methods के माध्यम से ही access किया जा सकता है। इसलिए, इसे डेटा छिपाने के रूप में भी जाना जाता है।
Encapsulation चार fundamental OOP concepts में से एक है। अन्य तीन Inheritance, Polymorphism और Abstraction हैं।
इसको इस तरह से समझे है, जैसे एक Gastritis की कैप्सूल में कई components होती है। जिसे खाने वाले (यूजर) को जानने के जरूरत नहीं होता है, एक यूजर के लिए वह केवल एक कैप्सूल ही काफ़ी होता है।
Get and Set Method
पिछले chapter से हमने देखा कि private variables को केवल उसी class के अंदर ही एक्सेस किया जा सकता है। हालाँकि, यदि हम public get और set methods प्रदान करते हैं, तो private variables का एक्सेस भी संभव है।
नीचे दिया एक उदाहरण है जो दर्शाता है कि Java में get और set methods का प्रयोग करके encapulation कैसे प्राप्त करें:
public class Student {
// Private data menber
private String name;
private int roll;
// Public Getter and setter methods
public String getName() {
return name;
}
public void setName(String newName) {
this.name = newName;
}
public int getRoll() {
return roll;
}
public void setRoll(int newRoll) {
this.roll = newRoll;
}
}
Step 1: हमने एक public क्लास बनाया Student
, और उसके अंदर दो private variable name
और roll
बनाया। अब जैसे की हम जानते हैं कि private variables को केवल उसी class के अंदर ही एक्सेस किया जा सकता है।
Step 2: लेकिन अब हम Student
क्लास के private variable को उस क्लास के बहार से एक्सेस करना चाहते हैं जो की संभव नहीं है।
Step 3: अब java ने इसका समाधान निकाला जो की है get और set method।
Step 4: get method, variable name
और roll
का value को return करती है।
Step 5: set method एक पैरामीटर (newName)
और (newRoll)
लेती है और इसे name और roll variable लिए असाइन करती है। this
कीवर्ड की मदद से जिसका का उपयोग वर्तमान object को refer करने के लिए किया जाता है। जिस्का मतलब है कि newName
ही name
है और newRoll
ही roll
है।
नीचे हम एक उदाहरण देखेंगे जहां पर हम Student क्लास के private variable को एक्सेस करने की कोशिश करेंगे।
public class Exam {
public static void main(String[] args) {
// Creating instance of Student class
Student myObj = new Student();
// Setting values through setter methods
myObj.name("Vikram Prasad"); // Error
myObj.roll(2450); // Error
// Getting value through getter methods
System.out.println(myObj.name() + " roll no is: " + myObj.roll()); // Error
}
}
जैसे की हम जानते हैं कि private variables को केवल उसी class के अंदर ही एक्सेस किया जा सकता है। इसीलिए हम यहा पर name
और roll
variable को एक्सेस नहीं कर पा रहे हैं।
इसिलिए set method की मदद से name
और roll
variable को सेट करता है और get method से उसे एक्सेस कर रहे हैं जो this
कीवर्ड की मदद से set methods name
variable को refer करता है।
public class Exam {
public static void main(String[] args) {
// Creating instance of Student class
Student myObj = new Student();
// Setting values through setter methods
myObj.setName("Vikram Prasad");
myObj.setRoll(2450);
// Getting value through getter methods
System.out.println(myObj.getName() + " roll no is: " + myObj.getRoll());
}
}
// Result: Vikram Prasad roll no is: 2450
Benefits of Java Encapsulation
- एक class के fields को read-only या write-only के लिए बनाया जा सकता है।
- Flexible: प्रोग्रामर अन्य parts को affect किए बिना, कोड के एक हिस्से को बदल सकता है।
- Data Hiding: Users को क्लास के inner implementation के बारे में कोई जानकारी नहीं होगी।