Tajriba ishi №12



Download 40,43 Kb.
bet1/3
Sana31.01.2022
Hajmi40,43 Kb.
#420136
  1   2   3
Bog'liq
Dasturlash. 12-Tajriba ishi


Tajriba ishi №12
Mavzu;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 yetarlidir. 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.
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 quyidagi masalamizni ko’ramiz
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.
Mushuk Baroq;
Baroq.itsYosh = 5 // Xatolik!
// Yopik a’zoga murojaat qilish mumkin emas. 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.
Mushuk Baroq;
Baroq.itsYosh = 5 // Xatolik!
// Yopik a’zoga murojaat qilish mumkin emas.
Statik elementlar hamda funksiyalar
Shu paytgacha, har bir yaratilgan element o‘zining xususiy ma’lumotlar elementiga ega bo’lar edi. Lekin, shunday holat bo’ladiki, bitta sinf doirasidagi obyektlarning ba’zi elementlari o‘zaro bog’langan bo’ladi. Masalan, ish vaqti bir xil bo’lgan 1000 ta ishchining oylik maoshini hisoblaydigan dastur tuzish taklif qilinayotgan bo’lsin. Soliq stavkasini aniqlash uchun dastur har bir ishchining sharoitini bilishi kerak. Buning uchun aytaylik, state_of_employee nomli sinfdan foydalanamiz. Agar, ishchilar bir xil sharoitda ishlasa, demak, dastur barcha employee tipidagi obyektlar uchun (barcha ishchilar uchun) ushbu elementlardan o’zaro moslikda foydalanadi. Ushbu holatda dastur, bitta axborotning 999 ta nusxasidan foydalanish bilan xotiradan foydalanish hajmini kamaytiradi.
Sinfning elementidan o’zaro moslikda foydalanish uchun, ushbu element static (statik) deb e’lon qilinishi zarur. Agar, dastur ushbu elementga yangi qiymat o’zlashtirsa, hamma obyekt elementi ushbu yangi qiymatni qabul qiladi. Sinf elementi static deb e’lon qilinganidan so’ng, u umumiy (global) o’zgaruvchi sifatida e’lon qilinishi zarur.
#include //strcpy() uchun
#include //printf() uchun
#include //_getch() uchun
using namespace std;
class book_series
{
public:
book_series(char *, char *, float);
void show_book(void);
void set_pages(int);
private:
static int page_count; //bu umumiy element hisoblanadi
char title[64];
char author[64];
float price;
};
int book_series::page_count; //sinfdan tashqarida umumiy o`zgaruvchini e`lon qilish
void book_series::set_pages(int pages)
{
page_count = pages;
}
book_series::book_series(char *title, char *author, float price) //Sinfning konstruktori
{
strcpy(book_series::title, title); /*string sinfiga ulanish uchun zarur bo`lgan, strcpy() funksiyasi*/
strcpy(book_series::author, author);
book_series::price = price;
}
void book_series:: show_book (void)
{
printf("Sarlavha: %s\n",title);
printf("Muallif:%s\n",author);
printf("Narx: %.2f\n",price);
printf("Sahifalar: %d\n",page_count);
}
int main()
{
book_series programming("Studiing C++", "Author1", 22.95);
//programming obyektini konstruktor yordamida yaratish
book_series word( "Studiing to work with Word for Windows 7", "Author2", 19.95);
//word obyektini konstruktor yordamida yaratish
word.set_pages(256); /*Word obyektining sahifalari soni beriladi, bu programmingga ham ta'sir qiladi*/
programming.show_book ();
word.show_book() ;
programming.set_pages(512); //page_countni o`zgartirish
programming.show_book(); //obyekt ma`lumotlarini ekranga chiqarish
//programming
word.show_book(); //obyekt ma`lumotlarini ekranga chiqarish
//word
_getch();
}

Download 40,43 Kb.

Do'stlaringiz bilan baham:
  1   2   3




Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©hozir.org 2024
ma'muriyatiga murojaat qiling

kiriting | ro'yxatdan o'tish
    Bosh sahifa
юртда тантана
Боғда битган
Бугун юртда
Эшитганлар жилманглар
Эшитмадим деманглар
битган бодомлар
Yangiariq tumani
qitish marakazi
Raqamli texnologiyalar
ilishida muhokamadan
tasdiqqa tavsiya
tavsiya etilgan
iqtisodiyot kafedrasi
steiermarkischen landesregierung
asarlaringizni yuboring
o'zingizning asarlaringizni
Iltimos faqat
faqat o'zingizning
steierm rkischen
landesregierung fachabteilung
rkischen landesregierung
hamshira loyihasi
loyihasi mavsum
faolyatining oqibatlari
asosiy adabiyotlar
fakulteti ahborot
ahborot havfsizligi
havfsizligi kafedrasi
fanidan bo’yicha
fakulteti iqtisodiyot
boshqaruv fakulteti
chiqarishda boshqaruv
ishlab chiqarishda
iqtisodiyot fakultet
multiservis tarmoqlari
fanidan asosiy
Uzbek fanidan
mavzulari potok
asosidagi multiservis
'aliyyil a'ziym
billahil 'aliyyil
illaa billahil
quvvata illaa
falah' deganida
Kompyuter savodxonligi
bo’yicha mustaqil
'alal falah'
Hayya 'alal
'alas soloh
Hayya 'alas
mavsum boyicha


yuklab olish