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.
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,
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++

// 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
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.
#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
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.
// xato: rectangle1.length kirish mumkin emas
rectangle1.length = 8;
// xato: rectangle1.breadth kirish mumkin emas
rectangle1.length = 6;