Java inkapsulyatsiya


ULASHISH

Inkapsulyatsiya

Inkapsulyatsiyaning ma’nosi — "maxfiy" ma’lumotlarning foydalanuvchilardan yashirilishini ta’minlash. Bunga erishish uchun quyidagilarni bajarishingiz kerak:

  • sinf o‘zgaruvchilari/atributlarini private deb e’lon qilish
  • private o‘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 
  }
}

Misolni ishga tushirish »

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"

O‘zingiz sinab ko‘ring »



Nega inkapsulyatsiya kerak?

  • Sinf atributlari va metodlarini yaxshiroq nazorat qilish
  • Sinf atributlarini faqat o‘qiladigan (agar faqat get metodidan foydalansangiz) yoki faqat yoziladigan (agar faqat set metodidan 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!