911-20 guruh talabasi
Bazarbayev Jamshid
Dasturlash fanidan
Laboratoriya №2.
Ikapsulyatsiya
Inkapsulyatsiya - bu ma'lumotlar va ushbu ma'lumotlarni boshqaradigan kodni birlashtiruvchi va ikkalasini ham tashqi buzilish yoki noto'g'ri foydalanishdan himoya qiluvchi mexanizm. Ob'ektga yo'naltirilgan dasturlashda kod va ma'lumotlar birlashtirilishi mumkin; bu holatda "qora quti" deb ataladigan narsa yaratilayotgani aytiladi. Kodlar va ma'lumotlar shu tarzda birlashtirilganda ob'ekt yaratiladi. Boshqacha qilib aytganda, ob'ekt - bu kapsulani qo'llab-quvvatlovchi narsa.
Enkapsulyatsiyani amalga oshirish.C ++ da inkapsulatsiya ma'lumotlar va ushbu ma'lumotlar bilan ishlaydigan funktsiyalarni birlashtirgan sinf sifatida amalga oshiriladi. Ma'lumotlar asosan shaxsiy deb e'lon qilinadi, shuning uchun ularga sinfdan tashqarida kirish mumkin emas. Usullar yoki funktsiyalar ommaviy deb e'lon qilinadi va ularga sinf ob'ekti yordamida kirish mumkin.Biroq, biz to'g'ridan-to'g'ri shaxsiy a'zolarga kira olmaymiz va bu ma'lumotlarni yashirish deb ataladi. Bu amalga oshirilgandan so'ng ma'lumotlar himoyalanadi va ularga faqat ma'lumotlar e'lon qilingan ma'lum sinf funktsiyalari orqali kirish mumkin.
// Namuna dasturi
#iostream> ni o'z ichiga oladi
#include std nomidan foydalanish;
// kapsulani namoyish qilish uchun misol sinf
class sampleData {
int num;
char ch;
jamoat:
// ma'lumotlar qiymatlarini o'qish uchun getter usullari
int getInt () const {
qaytish raqami;
}
char getCh () const {
qaytish ch;
}
// ma'lumotlar qiymatlarini o'rnatish uchun setter usullari
bekor setInt (int num) {
this-> num = num;
}
bekor setCh (char ch) {
bu-> ch = ch; }};
int main () {
sampleData s;
s.setInt (100);
s.setCh ('Z');
cout << "num =" << s.getInt () << endl;
cout << "ch =" << s.getCh ();
qaytish 0;
}
Chiqish:
raqam = 100
ch = Z
Yuqoridagi dasturda biz ikkita a'zoning o'zgaruvchisini getter va setter usullari bilan bir qatorda birlashtirdik. va bu kapsulaga misol.Biz ikkita o'zgaruvchini e'lon qildik, ya'ni. tashqi va tashqi ko'rinishga ega bo'lmasliklari uchun num va ch xususiy o'zgaruvchilar sifatida. Ular faqat biz hammaga ochiq deb e'lon qilgan xususiyatlar uchun mavjud. Shu tarzda biz maxfiy ma'lumotlar a'zolarini sinfdagi shaxsiy o'zgaruvchilar sifatida yashaymiz.
C ++ da inkapsulyatsiyani yaxshiroq tushunish uchun yana bir misolni ko'rib chiqamiz.
#iostream> ni o'z ichiga oladi
#include std nomidan foydalanish;
// Sinf hisoblari: ma'lum bir xodimning ish haqi to'g'risidagi ma'lumotlarni o'z ichiga oladi.
sinf hisoblari {
int empId;
ikki martalik ish haqi, asosiy, nafaqalar, ajratmalar;
jamoat:
Hisoblar (int empId): empId (empId) {}
// ish haqi to'g'risidagi ma'lumotni o'qing
void readEmployeeInfo (int empId) {
cout << "Vvedite bazovuyu sotrudnika" << empId << ":"; cin >> asosiy;
cout << "nadbavok:"; cin >> nafaqalar;
cout << "uderjaniy:"; cin >> ajratmalar;
}
// ish haqini hisoblash
double calcSalary () {
ish haqi = asosiy + nafaqalar - ajratmalar;
ish haqini qaytarish;
}
// tafsilotlarni ko'rsatish
bo'sh ekran () {
ish haqi = hisoblashSalary ();
cout << "Sotrudnik:" << empId << endl;
cout << "Zarplata:" << ish haqi;
}
};
int main ()
{
Hisob qaydnomalari (1);
acc.readEmployeeInfo (1);
acc.display ();
}
Chiqish:
1: 10000 xodim uchun bazani kiriting
nafaqalar: 4324.43
ajratmalar: 1000
Xodim: 1
Ish haqi: 13324.4
Bu kapsulaning yana bir misoli. Yuqorida ko'rsatilgandek, bizda hisob ma'lumotlari va ushbu ma'lumotlar bilan ishlaydigan barcha funktsiyalarni bitta Hisob sinfiga birlashtirgan Hisoblar klassi mavjud. Asosiy funktsiyada biz ushbu sinfning ob'ektini yaratib, kerakli ma'lumotlarni olish uchun funktsiyalarga kirishimiz mumkin.Endi, agar ba'zi boshqa sinflar xodimlarning ma'lumotlari hisob ma'lumotlariga kirishni xohlasa, ular buni to'g'ridan-to'g'ri qila olmaydi. U "Hisob qaydnomasi" sinfining ob'ektini yaratishi kerak bo'ladi va u faqat ochiq bo'lgan elementlarga kirish imkoniyatiga ega bo'ladi. Shunday qilib, inkapsulyatsiya yordamida biz ma'lumotlarga kirishni boshqarishni kafolatlaymiz, shuningdek ma'lumotlar yaxlitligini kafolatlaymiz.
Enkapsulyatsiya va abstraktsiya o'rtasidagi farq
Abstraktsiya va inkapsulyatsiya bir-biri bilan chambarchas bog'liqdir. Inkapsulyatsiya ushbu ma'lumotlar bilan ishlaydigan ma'lumotlar va usullarni birlashtirib, abstraktsiyaga yordam beradi.
Inkapsulyatsiya mavhumligi
Ma'lumotlarni yashiradi Amalga oshirishni yashiradiMa'lumotlar va usullarni birgalikda birlashtiradi Foydalanuvchiga abstrakt interfeysni taqdim etadi, u faqat kerakli narsalarni aks ettiradiAbstraktsiyaga yordam kodni qayta ishlatishda va xavfsizlikda yordam beradi.Ma'lumotlar a'zolari va usullariga kirishni aniqlaydigan kirish spetsifikatorlari bo'lgan sinf sifatida amalga oshiriladi. Mavzu qilib bo'lmaydigan mavhum sinf va interfeyslar sifatida amalga oshiriladi.
Xulosa.Inkapsulyatsiya - bu OOPning eng muhim xususiyatlaridan biri, chunki bu bizga ma'lumotlarni yashirish imkoniyatini beradi. Bu, o'z navbatida, ma'lumotlarni xavfsizroq qiladi va zararli foydalanishdan himoya qiladi.Inkapsulyatsiya abstraktsiyaga yordam beradi, shunda biz oxirgi foydalanuvchini faqat kerakli interfeys bilan ta'minlay olamiz va shunga muvofiq boshqa tafsilotlarni yashiramiz. Ushbu o'quv qo'llanmada biz abstraktsiya va inkapsulyatsiya tushunchalarini ko'rib chiqdik
#include
#include using namespace std;
class talaba {
protected:
char * name;
int age;
public:
talaba (char * n, int a): name(n), age(a) { }
virtual void Show() = 0; };
class student: public talaba {
public:
student(char * n, int a): talaba(n,a) { }
void Show() {
cout << "Kim: " << name<<"Yoshi: "<class Erkinov: public talaba
{
public:
Erkinov (char * n, int a): talaba(n,a) { }
void Show()
{
cout << " Jamshid Bazarbayev (yonalishi): " << name << age << endl; } };
class qayerdan: public talaba
{
public:
qayerdan(char * n, int a): talaba(n,a) { }
void Show()
{
cout << "Qayerdan (xorazm): " << name << age << endl; } };
class qayerdaoqiydi: public talaba
{
public:
qayerdaoqiydi (char * n, int a): talaba(n,a) { }
void Show()
{
cout << "Qayerda o'qiydi:" << name << age << endl;
}
};
int main()
{
talaba *w[3];
w[0] = new student("Jamshid Bazarbayev ", 19);
w[1] = new Erkinov ("Komputer Injineringi ", 2020);
w[2] = new qayerdan("Gurlan ",2002);
w[3] = new qayerdaoqiydi("TATUUF ", 2020);
w[0]->Show();
w[1]->Show();
w[2]->Show();
w[3]->Show();
delete w[0];
delete w[1];
delete w[2];
delete w[3];
return 0;
}