44 / 90

C++ Encapsulation

C++ inkapsulyatsiyasi

Inkapsulyatsiya ob'ektga yo'naltirilgan dasturlashning asosiy xususiyatlaridan biridir. Bu bitta sinf ichidagi ma'lumotlar a'zolari va funksiyalarini birlashtirishni o'z ichiga oladi.

Sinf ichidagi o'xshash ma'lumotlar a'zolari va funksiyalarini birlashtirish ham ma'lumotlarni yashirishga yordam beradi.

C++ inkapsulyatsiyasi

Umuman olganda, inkapsulyatsiya o'xshash kodni bir joyga o'rash jarayonidir.

C++ da biz bitta sinf ichida birgalikda ishlaydigan ma'lumotlar a'zolari va funksiyalarini birlashtira olamiz. Masalan,

example.cpp
class Rectangle {
  public:
    int length;
    int breadth;

    int getArea() {
      return length * breadth;
    }
};

Yuqoridagi dasturda getArea() funksiyasi to'rtburchakning maydonini hisoblab chiqadi. Hududni hisoblash uchun unga uzunlik va kenglik kerak.

Shunday qilib, ma'lumotlar a'zolari (uzunlik va kenglik) va getArea() funksiyasi Rectangle sinfida birga saqlanadi.

Encapsulation in C++

C++ Encapsulation

1-misol: C++ inkapsulyatsiyasi

example.cpp
// To'rtburchaklar maydonini hisoblash uchun dastur
#include <iostream>
using namespace std;

class Rectangle {
  public:
    // Hududni hisoblash uchun zarur bo'lgan o'zgaruvchilar
    int length;
    int breadth;

    // O'zgaruvchilarni ishga tushirish uchun konstruktor
    Rectangle(int len, int brth) : length(len), breadth(brth) {}

    // Hududni hisoblash funksiyasi
    int getArea() {
      return length * breadth;
    }
};

int main() {
  // Rectangle sinfining obyektini yarating
  Rectangle rect(8, 6);

  // getArea() funksiyasini chaqiring
  cout << "Area = " << rect.getArea();

  return 0;
}

Chiqish

kod
Area = 48

Yuqoridagi misolda biz to'rtburchakning maydonini hisoblaymiz.

Hududni hisoblash uchun bizga ikkita o'zgaruvchi kerak: uzunlik va kenglik va funksiya: getArea() . Shunday qilib, biz ushbu o'zgaruvchilar va funksiyalarni Rectangle nomli bitta sinf ichida birlashtirdik.

Bu erda o'zgaruvchilar va funksiyalarga boshqa sinflardan ham kirish mumkin. Shunday qilib, bu ma'lumotlarni yashirish emas.

Bu faqat inkapsulyatsiya. Biz shunchaki o'xshash kodlarni birga saqlaymiz.

[!NOTE] Odamlar ko'pincha inkapsulyatsiyani ma'lumotlarni yashirish deb hisoblashadi, ammo bu mutlaqo to'g'ri emas. Kapsülleme tegishli sohalar va usullarni birlashtirishni anglatadi. Bu ma'lumotlarni yashirishga erishish uchun ishlatilishi mumkin. Inkapsulyatsiyaning o'zi ma'lumotlarni yashirish emas.

Nima uchun inkapsulyatsiya?

  • C++ da inkapsulyatsiya tegishli maʼlumotlar va funksiyalarni birga saqlashga yordam beradi, bu bizning kodimizni toza va oʻqishni osonlashtiradi.
example.cpp
#include <iostream>
using namespace std;

class Rectangle {
   private:

    // Hududni hisoblash uchun zarur bo'lgan o'zgaruvchilar
    int length;
    int breadth;

   public:

    // Uzunlik uchun sozlash funksiyasi
    void setLength(int len) {
      length = len;
    }

    // Kenglik uchun sozlagich funksiyasi
    void setBreadth(int brth) {
      breadth = brth;
    }

    // Uzunlik uchun Getter funksiyasi
    int getLength() {
      return length;
    }

    // Kenglik uchun Getter funksiyasi
    int getBreadth() {
      return breadth;
    }
    // Hududni hisoblash funksiyasi
    int getArea() {
      return length * breadth;
    }
};

int main() {
  // Rectangle sinfining obyektini yarating
  Rectangle rectangle1;

  // Setter funksiyasidan foydalanib uzunlikni ishga tushiring
  rectangle1.setLength(8);

  // 
  rectangle1.setBreadth(6);

  // Getter funksiyasidan foydalanib, uzunlikka kirish
  cout << "Length = " << rectangle1.getLength() << endl;

  // Getter funksiyasidan foydalanib kenglikka kirish
  cout << "Breadth = " << rectangle1.getBreadth() << endl;

  // getArea() funksiyasini chaqiring
  cout << "Area = " << rectangle1.getArea();

  return 0;
}

Chiqish

kod
Length = 8
Breadth = 6
Area = 48

Bu erda biz private uzunlik va kenglik o'zgaruvchilarini yaratdik.

Bu shuni anglatadiki, ushbu o'zgaruvchilarga Rectangle sinfidan tashqarida to'g'ridan-to'g'ri kirish mumkin emas.

Ushbu xususiy oʻzgaruvchilarga kirish uchun biz public funksiyalaridan setLength() , getLength() , setBreadth() va getBreadth() dan foydalandik. Bular getter va setter funksiyalari deb ataladi.

O'zgaruvchilarni shaxsiy qilish bizga sinfdan tashqaridan ruxsatsiz kirishni cheklash imkonini berdi. Bu ma'lumotlarni yashirish.

Agar biz main() sinfidagi o'zgaruvchilarga kirishga harakat qilsak, xatoga duch kelamiz.

example.cpp
// xato: rectangle1.length kirish mumkin emas
rectangle1.length = 8;

// xato: rectangle1.breadth kirish mumkin emas
rectangle1.length = 6;