941-19-guruh talabasi Maxmudov Sarvar
Mavzu: Microsoft Visual C++ da sinflardagi ma’lumotlarni himoyalash inkapsulyatsiya
Ishni bajarishdan maqsad: Visual Studio 2012 muhitida C++ dasturlash tilida inkapsulyatsiyani qo’llashni, polimorfizmni qo’llashni, sinflar orasidagi munosabatni, merosxo’rlikni qo’llashni o’rganish..
Nazariy qism:
Inkapsulyatsiya
Agarda muhandis ishlab chiqarish jarayonida rezistorni qo’llasa, u buni yangidan ixtiro qilmaydi, omborga (magazinga) borib mos parametrlarga muvofiq kerakli detalni tanlaydi. Bu holda muhandis joriy rezistor qanday tuzilganligiga e’tiborini qaratmaydi, rezistor faqatgina zavod xarakteristikalariga muvofiq ishlasa etarlidir. Aynan shu tashqi konstruktsiyada qo’llaniladigan yashirinlik yoki obyektni yashirinligi yoki avtonomligi xossasi inkapsulyatsiya deyiladi.
Inkapsulyatsiya yordamida berilganlarni yashirish ta’minlanadi. Bu juda yaxshi xarakteristika bo’lib foydalanuvchi o’zi ishlatayotgan obyektning ichki ishlari haqida umuman o’ylamaydi. Haqiqatan ham, xolodilnikni ishlatishda refrijektorni ishlash tamoyilini bilish shart emas. Yaxshi ishlab chiqilgan dastur obyektini qo’llashda uning ichki o’zgaruvchilarining o’zaro munosabati haqida qayg’urish zarur emas.
Yana bir marta takrorlash joizki, rezistorni samarali qo’llash uchun uning ishlash tamoyili va ichki qurilmalari haqidagi ma’lumotlarni bilish umuman shart emas. Rezistorning barcha xususiyatlari inkapsulyatsiya qilingan, ya’ni yashirilgan. Rezistor faqatgina o’z funksiyasini bajarishi etarlidir.
C++ tilida inkapsulyatsiya tamoyili sinf deb ataluvchi nostandart tiplarni(foydalanuvchi tiplarini) hosil qilish orqali himoya qilinadi.
Sinflar qanday tuzilishga ega ekanligi bilan keyinroq tanishib chiqamiz.
To’g’ri aniqlangan sinf obyektini butun dasturiy modul sifatida ishlatish mumkin. Haqiqiy sinfning barcha ichki ishlari yashirin bo’lishi lozim. To’g’ri aniqlangan sinfning foydalanuvchilari uning qanday ishlashini bilishi shart emas, ular sinf qanday vazifani bajarishini bilsalar etarlidir.
Sinf elementini e’lon qilishda bir nechta kalit so’zlardan foydalaniladi: public, private, protected.
Umumiy (public) komponentalar dasturni ixtiyoriy qismida murojaat xuquqiga ega. Ulardan, ixtiyoriy funksiya ushbu sinf ichida va sinf tashqarida foydalansa xam bo’ladi.
Xususiy (private) komponentalar sinf ichida murojaat xuquqiga ega, lekin sinf tashqarisidan esa murojaat kilish mumkin emas. Komponentalardan ushbu ular tavsiflangan sinfdagi funksiya - a’zolari yoki “do’stona”- funksiyalar orqali foydalanish mumkin.
Ximoyalangan (protected) komponentalar sinf ichida va xosila sinflarda murojaat xuquqiga ega.
Ulardan eng muhimlari public (ochiq) va private (yopiq) kalit so’zlari bo’lib, ular orqali obyektning a’zolariga murojaat qilish imkoniyati chegaralanadi.
Sinfning barcha usullari va xossalari boshlang’ich holda yopiq deb e’lon qilinadi. Yopiq a’zolarga faqatgina shu sinfning usullari orqaligina murojaat qilish mumkin. Obyektning ochiq a’zolariga esa dasturdagi barcha funksiyalar murojaat qilishlari mumkin. Sinf a’zolariga murojaat qilish imkonini belgilash juda muhim xususiyat bo’lib, bu masalani yechishda uncha katta tajribaga ega bo’lmagan dasturlarchilar ko’pincha qiyinchiliklarga duch keladilar. Bu holatni batafsilroq tushuntirish uchun mavzuni boshida keltirilgan masalamizga qaytamiz.
Class Mushuk
{
unsigned int itsYosh;
unsigned int itsOgirlik;
void Miyovlash();
}
Bu tarzda sinfni e’lon qilishda itsYosh va itsOgirlik maydonlari ham, Miyovlash() usuli ham yopiq a’zo sifatida aniqlanadi. Dasturda yuqoridagi tartibda Mushuk sinfi e’lon qilingan bo’lsa va bu sinf ekzemplyari bo’lgan obyektning itsYosh a’zosiga main() funksiyasi tanasidan turib murojaat qilsak kompilyator xatolik ro’y berganligi haqida xabar beradi.
Do'stlaringiz bilan baham: |