Java inkapsulyatsiya
Inkapsulyatsiya
Inkapsulyatsiyaning ma’nosi — "maxfiy" ma’lumotlarning foydalanuvchilardan yashirilishini ta’minlash. Bunga erishish uchun quyidagilarni bajarishingiz kerak:
- sinf o‘zgaruvchilari/atributlarini
privatedeb e’lon qilish privateo‘zgaruvchining qiymatini olish va yangilash uchun public get va set metodlarini taqdim etish
Get va Set
Oldingi bobdan private o‘zgaruvchilarga faqat shu sinf ichida murojaat qilish mumkinligini (tashqi sinf ularga kira olmasligini) bilib oldingiz. Biroq public get va set metodlarini taqdim etsak, ularga murojaat qilish mumkin bo‘ladi.
get metodi o‘zgaruvchi qiymatini qaytaradi, set metodi esa qiymatni o‘rnatadi.
Ikkalasining sintaksisi shunday: ular get yoki set bilan boshlanadi, undan keyin birinchi harfi katta bo‘lgan o‘zgaruvchi nomi keladi:
Misol
public class Person {
private String name; // private = restricted access
// Getter
public String getName() {
return name;
}
// Setter
public void setName(String newName) {
this.name = newName;
}
}
Misol izohi
get metodi name o‘zgaruvchisining qiymatini qaytaradi.
set metodi parametr (newName) qabul qiladi va uni name o‘zgaruvchisiga o‘zlashtiradi. this kalit so‘zi joriy obyektga murojaat qilish uchun ishlatiladi.
Biroq name o‘zgaruvchisi private deb e’lon qilingani uchun unga bu sinfdan tashqarida murojaat qila olmaymiz:
Misol
public class Main {
public static void main(String[] args) {
Person myObj = new Person();
myObj.name = "John"; // error
System.out.println(myObj.name); // error
}
}
Agar o‘zgaruvchi public deb e’lon qilinganida, quyidagi natijani kutgan bo‘lardik:
John
Biroq private o‘zgaruvchiga murojaat qilishga urinayotganimiz uchun xato olamiz:
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
Buning o‘rniga o‘zgaruvchiga murojaat qilish va uni yangilash uchun getName() va setName() metodlaridan foydalanamiz:
Misol
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"
Nega inkapsulyatsiya kerak?
- Sinf atributlari va metodlarini yaxshiroq nazorat qilish
- Sinf atributlarini faqat o‘qiladigan (agar faqat
getmetodidan foydalansangiz) yoki faqat yoziladigan (agar faqatsetmetodidan foydalansangiz) qilish mumkin - Moslashuvchanlik: dasturchi kodning bir qismini boshqa qismlariga ta’sir qilmasdan o‘zgartira oladi
- Ma’lumotlar xavfsizligi oshadi
W3Schools Pathfinder
Yutuqlaringizni kuzating – bu bepul!
