Encapsulation in Java in Hindi

Last Updated on February 11, 2023 by RAJENDRAPRASAD

Encapsulation in java in Hindi – Hello दोस्तों rajhindime.in में आपका स्वागत है |

दोस्तों, पिछले कुछ postsमें आपने Inheritance तथा Polymorphism के बारे में विस्तार से जाना |

आज के इस पोस्ट Encapsulation in Java in Hindi में आप Encapsulation के बारे में विस्तार से जानेंगे |

इससे पहले हम Encapsulation को जाने, आइए कुछ example देखते हैं |

Medical capsule:

दोस्तों आपने कभी न कभी medical capsule का use किया होगा अथवा उसे देखा जरूर होगा | यहाँ किसी भी बीमारी के इलाज से सम्बंधित दवाइयों को एक साथ group करके उसे capsule के अन्दर भरा जाता है |

Vehicles:

बहुत सारे अलग-अलग parts को जैसे engine, window, door, side mirror इत्यादि को एक साथ जोड़कर अर्थात उन सभी को group में लाकर एक vehicle का निर्माण होता है |

ठीक, उसी तरह Java में, 

Encapsulation in Java

Encapsulation एक ऐसा mechanism/process है, जिसका use करके, data (variable) तथा उस data पर कार्य करने वाले methods (functions) को एक साथ wrap अर्थात group करके एक single unit बनाया जाता है |

आप यह भी जानते हैं कि हम data और उसके methods को एक साथ Java class में define करते हैं |

इसलिए, सभी Java class, Encapsulation के example हैं |

Encapsulation क्यों जरुरी है ? – Need of Encapsulation in Java

Mostly, Java में Encapsulation को data hide करने के लिए use किया जाता है | इसके द्वारा हम यह decide करते हैं कि, user को code के किस part का access देना चाहिए और किस part का नहीं | हम यह भी कह सकते हैं कि, इसे data security के लिए use किया जाता है |

आइए, जानते हैं कि इसे Java program में implement कैसे करते हैं ?

How to achieve encapsulation

Step 1. Class के सभी variable को private declare करके

Step 2. public getter और setter method को define करें, variable की value को access या modify करने के लिए

Program 1:

class Student {

	private int id;
	private String name;

	}

public class EncapsulationDemo {

	public static void main(String[] args) {
		Student s = new Student();
		
		System.out.println("Student ID:" + s.id + "\nStudent Name:" + s.name);
	}
}

OutPut:

Exception in thread "main" java.lang.Error: Unresolved compilation problems: 
	The field Student.id is not visible
	The field Student.name is not visible

	at com.javapractice.EncapsulationDemo.main(EncapsulationDemo.java:13)

Explanation:

Program 1 में हमने Student class define किया है जो, उसके variable id और name तथा method getId(), setId(), getname(), setname() सभी को एक साथ एक unit में group करके रखा हुआ है |

यहाँ, हमने variable id तथा name को private declare किया है जिससे, इसे कोई भी class के outside access नहीं कर सकता | इस concept को data hiding कहते हैं |

चूँकि, यहाँ हमने variables को private declare किया है इसलिए, जब हमने उन्हें object की सहायता से call करने की कोशिश की तो हमें compile time error मिला |

Program 2:

class Student {

	private int id;
	private String name;

	public int getId() {
		return id;
	}

	public void setId(int s_id) {
		this.id = s_id;
	}

	public String getname() {
		return name;
	}

	public void setname(String s_name) {
		this.name = s_name;
	}
}

public class EncapsulationDemo {

	public static void main(String[] args) {
		Student s = new Student();
		s.setId(101);
		s.setname("Peter");
		System.out.println("Student ID:" + s.getId() + "\nStudent Name:" + s.getname());
	}
}

OutPut:

Student ID:101
Student Name:Peter

Explanation:

Program 2 में हमनें इन दोनों private variables id तथा name के लिए getter और setter method भी define किया है, जो कि public है |

अगर class के बहार किसी को id तथा name को access करना है तो वह, उसे केवल getter और setter method के द्वारा ही access कर सकते हैं |

Encapsulation Vs Data Hiding

अक्सर, लोग Encapsulation और Data Hiding को same समझते है, और बार-बार इसे एक दूसरे के स्थान पर use करते हैं परन्तु, ऐसा बिल्कुल नहीं है |

Encapsulation का कार्य है केवल data तथा उससे related method को एक साथ जोड़कर/ group बनाकर उसे एक unit के रूप में बना के रखना, जो better management तथा security प्रदान करता है |

उदाहरण के तौर पर आप इसे अपनी Society से relate कर सकते हो जैसे, आपकी society में बहुत सारे rooms हैं, Swimming pool है, gym है, guest-house है, audit room है इत्यादि इत्यादि |

अब इन सबको आपस में जोड़कर किसने रखा है, आपकी अपनी society ने, तो इस तरह आपकी society यहाँ Encapsulation की भूमिका निभा रही है |

दूसरी तरफ, Data hiding, data member के access को ristrict करती है, उसकी implementation details को छुपा कर |

उदाहरण के लिए आपकी society में जो audit room है, gym है, swimming pool है उसे आपकी society member को छोड़कर अन्य सभी लोग use नहीं कर सकते, उसे केवल वही use कर सकता है जिसे आपकी society ने permission दिया हो |

NOTE: Encapsulation, Data Hiding को achieve करने में help करता है |

Data hiding को access modifier का use करके achieve किया जाता है |

Java में मुख्यतः 4 access modifier हैं |

1. public               2. Private             3. Protected        4. Default

अधिक जानकारी के लिए Access Modifier in Java in Hindi को पढ़ें |

Encapsulation data को एक साथ bundle करके उसे एक unit के रूप में बना के रखता है, इस तरह यह data को hide भी करता है | यह data को private भी करता है, जिससे data को outside class access नहीं किया जा सकता |

Data hiding के साथ ही साथ यह end-user को केवल relevant (जो जरूरी है सिर्फ वही )details ही provide करता है, बिना implementation details को expose किए, जो कि abstraction कहलाता है |

इस तरह हम कह सकते हैं कि, encapsulation यह abstraction तथा data-hiding दोनों का combination(जोड़) है |

Encapsulation = data hiding + abstraction

Abstraction के बारे में हम आनेवाले  post में विस्तार से जानेगें |

Program 3:

class Area {
	int length;
	int breadth;

	Area(int length, int breadth) {
		this.length = length;
		this.breadth = breadth;
	}

	void getArea() {
		int area = length * breadth;
		System.out.println("Area is : " + area);
	}
}

public class EncapsulationDemo1 {

	public static void main(String[] args) {
		Area rectangle = new Area(3, 7);
		rectangle.getArea();
	}
}

OutPut:

Area is : 21

Explanation:

Program 3 में हमनें एक class create किया है जिसका purpose है Area को calculate करना |

Area calculate करने के लिए हमें दो variables length और breadth तथा एक method getArea() की जरुरत है |

यहाँ, हमनें दो variables तथा एक method को एक साथ bundled करके एक class में रखा है |

ध्यान दो यहाँ variables और method दोनों को दूसरे class(EncapsulationDemo1) द्वारा भी direcly access किया जा रहा है, इसलिए यहाँ data hiding नहीं हो रहा |

यहाँ केवल encapsulation हो रहा है, जो कि variable तथा method को एक साथ रखना है |

Encapsulation और Data Security

आइए, data security को एक और program के द्वारा समझते हैं |

दोस्तों, आपने कभी न कभी ATM machine में incorrect PIN enter किया होगा, इसे समझने के लिए नीचे दिए गए program को execute करें |

मान लो, आप को Account Balance जानना है |

Program 4:

import java.util.Scanner;

class AtmMachine {

	private int atmPin = 2345;
	private float accoutBalance = 57000.29f;

		public void getAccoutBalance() {
		System.out.println("Please Enter your ATM PIN");
		for (int i = 0; i < 3; i++) {
			Scanner sc = new Scanner(System.in);
			int pinNum = sc.nextInt();
			if (pinNum == atmPin) {
				System.out.println("Balance in your Account is : " + accoutBalance + " Rupees");
				break;
			} else {
				if (i == 2) {
					System.out.println(
							"Card has been blocked as entered incorrect PIN 3 times, Please Contact your Bank to unlock your card");
					break;
				}
				System.out.println("You have entered incorrect PIN, Please Re-enter correct PIN");
			}
		}
	}
}

public class EncapsulationDemo {

	public static void main(String[] args) {
		AtmMachine am = new AtmMachine();
		am.getAccoutBalance();
	}
}

OutPut:

Please Enter your ATM PIN
415
You have entered incorrect PIN, Please Re-enter correct PIN
8546
You have entered incorrect PIN, Please Re-enter correct PIN
8481
Card has been blocked as entered incorrect PIN 3 times, Please Contact your Bank to unlock your card

Explanation:

Program 4 me चूँकि, हमें account balance जानना है इसलिए, सबसे पहले authentication check करने के लिए PIN number माँगा गया, जिससे पता चले कि आप ही सही account holder हो या नहीं |

अब जबकि user ने तीन बार गलत PIN enter किया इसलिए, अंत में उसका ATM Card block हो गया|

इस तरह यहाँ data security को maintain किया गया है |

अब इसी program 4 को फिर से execute करो |

OutPut:

Please Enter your ATM PIN
2345
Balance in your Account is : 57000.29 Rupees

Explanation:

अबकी बार user ने correct PIN enter किया, इसलिए वह अपना Account balance जान पाया |

NOTE: program 4 में हमने getAccoutBalance() का use किया है, इसे getter method कहते हैं, इसका use सिर्फ data (variable) की value को read करने के लिए किया जाता है |

आइए, अब setter method का use करें |

Program 5:

import java.util.Scanner;

class AtmMachine {

	private static int atmPin = 2345;

	public void setAtmPin() {
		System.out.println("Please Enter your ATM PIN");
		for (int i = 0; i < 3; i++) {
			Scanner sc = new Scanner(System.in);
			int pinNum = sc.nextInt();
			if (pinNum == atmPin) {
				System.out.println("Please Enter your new PIN");
				atmPin = sc.nextInt();
				System.out.println("You have reset your PIN successfully");
				break;
			} else {
				if (i == 2) {
					System.out.println(
							"Card has been blocked as entered incorrect PIN 3 times, Please Contact your Bank to unlock your card");
					break;
				}
				System.out.println("You have entered incorrect PIN, Please Re-enter correct PIN");
			}
		}
	}
	public void getAtmPin() {
		System.out.println("Your new PIN is : "+atmPin);
	}
}

public class EncapsulationDemo {

	public static void main(String[] args) {
		AtmMachine am = new AtmMachine();
		am.setAtmPin();
		am.getAtmPin();
	}
}

OutPut:

Please Enter your ATM PIN
2345
Please Enter your new PIN
8585
You have reset your PIN successfully
Your new PIN is : 8585

NOTE: Program 5 में हमनें setAtmPin() method का use किया है, इसे setter method कहतें हैं, इसका use data (variable) की value को केवल modify करने के किए जाता है |

Read-Only Class

वह java class जिसमें केवल getter method ही होता है, उसे Read-Only class कहते हैं |

Program 6:

class Employee{
	
	private String org_name = "RajHindiMe";

	public String getOrg_name() {
		return org_name;
	}
}

Explanation:

Program में आप केवल variable org_name की value को read कर सकते हैं, उसकी value को कभी भी modify नहीं कर सकते |

Write-Only class

वह java class जिसमें केवल setter method ही होता है, उसे Write-Only class कहते हैं |

Program 7:

class Employee{
	
	private String org_name;

	public void setOrg_name(String org_name) {
		this.org_name = org_name;
	}
}

Explanation:

Program me आप केवल variable org_name की value को set कर सकते हैं, उसकी value को कभी भी read नहीं कर सकते, क्योकि सबसे पहले तो यहाँ variable org_name private है और साथ ही कोई getter method भी नहीं है |

Tightly Encapsulated Class:

यदि किसी भी दिए गए class के सारे के सारे variable private हो, तो उस class को tightly Encapsulated class कहते हैं |

NOTE: केवल सारे variables ही private होने चाहिए | method का access modifier कुछ भी हो सकता है |

Program 8:

public class Student {
	
	private int id;
	
	public int getId() {
		return id;
	}
}

Explanation:

Program 8 में class Student के अंदर केवल एक ही variable है और वह भी private है, इसलिए यह class Tightly Encapsulated class है |

Program 9:

public class Employee {
	
	private int id;
	String name;
	private String designation;
	
	public int getId() {
		return id;
	}
}

Explanation:

Program 9 me variable name, private नहीं है, इसलिए class Employee, tightly encapsulated class नहीं है |

Program 10:

class A {
	private int x;
	private int y;
}

class B {
	String a;
	String b;
}

class C extends A {
	private String emp_name;
	private int emp_id;
}

class D extends B {
	private String stu_name;
	private int stu_id;
}

Explanation:

ऊपर दिए गए program में class A तथा C, दोनों ही tightly Encapsulated class हैं |

Class B tightly encapsulated class नहीं है क्योकि, इसमें variables private नहीं है |

जो भी class, class B को extents करेगा वह भी tightly encapsulated नहीं होगा, इसलिए class D भी tightly encapsulated class नहीं है |

Advantage of Encapsulation in Java

1. Getter और setter method के द्वारा हम किसी भी class को read -only अथवा write-only बना सकते हैं |

2. इसके द्वारा हम data पर control कर सकते हैं, example यदि कोई user ATM PIN type करते समय 5 digit(अंक) type करे तो हम उस user को message दे सकते हैं कि, केवल  4 digit ही type करे |

3. यह data hiding achieve करने में help करता है |

4. यह data को unauthorized access से बचता है अर्थात security प्रदान करता है |

5. चूँकि, यह data तथा methods को एक साथ group करके रखता है, इससे code को manage तथा maintain करना सरल हो जाता है |

6. यह code enhancement में help करता है, in future अगर हम किसी भी method के implementation part को change करना चाहे तो सरलता से कर सकते हैं, बिना किसी अन्य method को modify किए |

Disadvantage of Encapsulation in Java

1. Code की length बढ़ जाती है क्योकि जगह-जगह validation code को implement करना पड़ता है जैसे, authentication के लिए PIN, id, password को implement करना |

2. Performance slow हो जाता है क्योकि, execution में अधिक समय लगता है |

Conclusion – आजआपने क्या सीखा

इस post में आपने Encapsulation, इसे achieve कैसे करते हैं, getter और setter method क्या हैं, Encapsulation के advantages, disadvantages क्या हैं, Data hiding क्या है तथा Tightly Encapsulated Class के बारे में विस्तार से जाना |

आशा है कि, आपको मेरा यह Blog Encapsulation in Java in hindi, जरूर पसंद आया होगा |

अगर आप इस post से related कोई सवाल पूँछना चाहते हैं अथवा कोई सुझाव देना चाहते हैं तो comment करके जरूर बताएं, मैं उसका reply जरूर दूँगा |

इस post को अपना कीमती समय देने के लिए बहुत बहुत धन्यवाद् | फिर मिलेंगें |

Leave a Comment