logo

Programmmalash asoslari lab

Загружено в:

08.08.2023

Скачано:

0

Размер:

1009.8486328125 KB
Samarqand Davlat Universiteti  “Raqamli texnologiyalar”  fakulteti amaliy 
matematika yo`nalishi   Programmmalash asoslari  fanidan tayyorlagan
       
    Labaratoriya ishlari Kirish
“Programmalash   asoslari”   fanidan   labaratoriya   ishini   bajarishning   bosh
maqsadi   talabalarga   qo‘yilgan   masalani     echuvchi   kompyuter   programmasini
tuzishga     o‘rgatishdir.   Shu   maqsadda   programmalash   tillari   va   muhitlari   haqida
umumiy tushunchalar beriladi va bu tillardan foydalanish o‘rgatiladi.
Laboratoriya   ishi   nazariy   va   amaliy   qismlardan   iborat.   Nazariy   qism
informatika   va     hisoblash   texnikasi,   algoritmlar,   C/C++   programmalash   tili,   Qt
ob’yektga yo‘naltirilgan programmalash muhiti boblaridan tashkil topgan. 
Nazariy   qismda   programmalashga   kirishning   nazariy   asosi   bo‘lgan
algoritmlarga   alohida   e’tibor   qaratilgan.   Bu   erda   algoritmlarni   tavsiflash   va
keyinchalik kompyuterda amalga oshirish uchun zarur bo‘lgan bir qator matematik
tushunchalar     yordamchi   algoritm,   rekursiya,   xotira,   massiv,   indeks,   parametr   va
h.k. kiritilib, turli xil sinf masalalarining algoritmlari tuziladi. 
Programmalash   tili   -   tuzilgan   algoritmni   kompyuter   amalga   oshirish   uchun
vositadir.   Bu   o‘rinda   turli   murakkablikdagi   sintaksis   va   semantikaga   ega   bo‘lgan
tillardan   foydalanish   mumkin.   Fanda   C++     tilining   alfaviti,   til   qurilmalarining
umumiy sintaksisi, berilganlar turlari, operatsiyalar va funktsiyalar qaraladi, oqim
bilan   ishlash,   ko‘rsatgichlar,   amallarni   qayta   yuklashlar,   funktsiyalarni   qayta
yuklash,   qoliplar   va   modulli   programmmalash   va   grafika   moduli   bilan   ishlash
o‘rgatiladi.
Programmalashga   o‘rgatish   mos   amaliy   masalalarga   tayangan   holda   olib
boriladi.     Fanning   amaliy   qismida   algoritmlar,   C++   programmalash   tili,   Qt
muhitida ishlash bo‘yicha masalalarni o‘z ichiga oladi.
Programmalash   asoslari   fani   bevosita   tizimli   programmalash,   Berilganlar
bazasini   boshqarish   tizimlari,   Kompyuter   grafikasi   va   Kompyuter   tarmoqlari
fanlari   bilan   uzviy   bog‘liqdir   va   bu   fan   kompyuter   texnologiyalari   bo‘yicha
mutaxassis tayyorlashda umumiy asos rolini o‘ynaydi. 1-LABAROTORIYA ISHI
Mavzu:  Obyekt modeli va uning afzaliklari
Dasturlarni yozishga protsedurali yondashuv yaxshi, lekin sizning dasturingiz
kichik   bo'lsa   bundan   foydalanishingiz   mumkin.   Dastur   hajmi   katta   bo’la
boshlagach,   siz   darhol   ushbu   protseduraviy   yondashuvdagi   muammolarning   ba'zi
qiyinchiliklarini sezasiz.
 Kod katta va hajmli. Dasturga kiritmoqchi bo'lgan, biror narsa qo'shadigan,
o'zgartiradigan   va   hokazo   kerakli   funksiyani   yoki   kerakli   kodni   topish   siz   uchun
murakkab muammo aylanadi.
 Dasturga   yangi   xususiyatlarni   qo'shish   va   uni   kengaytirish   murakkab
bo’ladi.
Protseduraviy yondashuv  - bu hamma narsa ma'lum bir tartibda ketganda va
biror   narsani   o'zgartirish   uchun   ko'p   ishni   bajarish,   ko'p   bog'liqliklarni   tuzatish
kerak:  siz birini  o'zgartirasiz,  o'zgarishlar  kodning boshqa  qismiga ta'sir  qiladi  va
hokazo.
Agar   siz   katta   dasturni   protsedurali   yondashuv   yordamida   yozmoqchi
bo'lsangiz,   bu   kamchiliklarning   barchasini   o'zingiz   sezishingiz   mumkin.   Shundan
so'ng,   sizning   dasturingizda   kodni   tartibga   solishning   boshqa   usulini   topishingiz
mumkin.
Bunday yo'l bor va u OYD deb nomlanadi. So'nggi paytlarda u juda mashhur
bo'lib ketdi.
  OYD   - bu katta va murakkab dasturlarni ishlab chiqishni soddalashtirishning bir
usuli. Bular prinsipial jihatdan, agar bizga biron bir katta dastur yozishning hojati
bo'lmasa, OYDsiz osonlikcha qila olamiz.
 Bir butunlik  – yaxlit kontekstda fikrlash nazariy jihatdan ajoyib yondashuv bo'lsa
-da,   har   ikki   tomonda   ham   tegishli   kod   nusxalari   borligi   sababli,   xatti   -
harakatlarning   o'zi   yuborilmaydi.   Shu   bilan   birga,   butun   ob'ektni   butun   tarmoq
bo'ylab uzatiladigan kontekstda o'ylash muhimdir. 
To'g'ri   loyihalash   –   bu   konsepsiyaning   yaxshi   namunasi-   bu   brauzer
yuklanadigan   ob'ekt.   Brauzer   ma'lum   bir   ob'ekt   qanday   harakatlarni   bajarishini
oldindan   bilmaydi,   chunki   u   hali   kodni   "ko'rmagan".   Ob'ekt   yuklangach,   brauzer
ushbu ob'ektdagi kodni bajaradi va undagi ma'lumotlarni ishlatadi
Topshiriq-22:   Mashina   nomli   sinf   yarating.   Tarkibida   ikki   xil   konstruktor
bo‘lsin
#include<iostream>
using namespace std;
class Mashina
{private: 
    int m_turi;     int m_rangi;
public:
    Mashina()
    {m_turi =23;
        m_rangi =3;
    }
    Mashina(int a, int b)
    {   m_turi =a;
        m_rangi =b;
    }
     void chiqarish()
     {    cout<<"Mashinaning turi"<<m_turi <<endl;
         cout<<"Mashibaning rangi"<<m_rangi <<endl;
     }
};
int main()
{
   Mashina malumot;
   mashinamal(22,2);
   malumot.chiqarish();
   mal.chiqarish();
    return 0;
}  2-LABAROTORIYA ISHI
Mavzu:  Abstraktlash
Abstrakt sinf ta’rifi . Hech bo’lmasa bitta sof (bo’sh) virtual funksiyaga ega
bo’lgan sinf abstrakt sinf deyiladi.
Quyidagi e’longa ega bo’lgan komponentali funksiya sof virtual funksiya
deyiladi: 
virtual <tur> <funksiya_nomi>
(<formal_parametrlar_ro’yxati>) = 0;
Bu yozuvda  « = 0» konstruksiya  «sof  spesifikator» deyiladi. Sof  virtual  funksiya
ta’rifiga misol:
virtual void fpure (void) = 0;
Sof   virtual   funksiya   hech   narsa   qilmaydi   va   uni   chaqirib   bo’lmaydi.   Uning
qo’llanilishi   –   hosila   sinflarda   uning   o’rnini   egallovchi   funksiyalar   uchun   asos
bo’lish. Abstrakt sinf esa hosila sinf uchun asosiy (bazaviy) sinf sifatida ishlatilishi
mumkin.   Agar   sof   virtual   funksiya   hosila   sinfda   to’liq   ta’riflanmasa,   u   hosila
sinfda ham sof virtual bo’lib qoladi, natijada hosila sinf ham abstrakt sinf bo’ladi.
Abstrakt sinfni faqat boshqa sinf ajdodi sifatida ishlatish mumkin:
Ba’zi   sinflar   abstrakt   tushunchalarni   ifodalaydi   va   ular   uchun   ob’ekt   yaratib
bo’lmaydi. Bunday sinflar biror hosila sinfda ma’noga ega bo’ladi:masalan,
class Abstract
{
public:
virtual void draw() = 0;
};
class Derived : public Abstract
{
public:
void draw() { cout « "Salom.";}
};
int main( void ) {
Derived d;
Abstract a;
return 0;
}
Agar   sof   virtual   funksiya   hosila   sinfda   to’liq   ta’riflanmasa,   u   hosila   sinfda
ham sof virtual bo’lib qoladi, natijada hosila sinf ham abstrakt sinf bo’ladi.
class Abstract
{
    virtual int f() = 0;
virtual float g(float) = 0;
};
class Derived : class Abstract
{
int f();
};
int main (void)
{
Abstract a; //hato
Derived d; // hato
}
Abstrakt   sinflar   realizasiya   detallarini   aniqlashtirmasdan   faqat   interfeysni
ko’rsatish uchun ishlatiladi. Masalan,  operasion tizimda qurilma drayveri  abstract
sinf sifatida berilishi mumkin: 
class character_device {
public:
virtual int open() = 0;
virtual int close(const char*) = 0;
virtual int read(const char*, int) = 0;
virtual int write(const char*, int) = 0; virtual int ioctl(int ...) = 0;
// ...
};
Drayverlar   character_device   sinfining   ajdodlari   sifatida   kiritilishi
mumkin.Abstrakt   sinf   turidagi   o’zgaruvchi   yaratib   bo’lmaydi,   lekin   abstrakt   sinf
turidagi   ko’rsatkich   yaratish   mumkin.   Bu   ko’rsatkichga   abstrakt   sinf   abstract
bo’lmagan   turli   avlodlari   adresini   qiymat   sifatida   berib,  abstrakt   usulga   mos   turli
usullarni chaqirish mumkin.
Abstraksiya.   Garchi   ob’ektga   mo’ljallangan   tillar   inkapsulyasiyalashdan
foydalanishga   yordam   bersa-da,   biroq   ular   inkapsulyasiyalashni   kafolatlamaydi.
Tabe   va   ishonchsiz   kodni   yaratib   qo’yish   oson.   Samarali   inkapsulyasiyalash   -
sinchkovlik   bilan   ishlab   chiqish   hamda   abstraksiya   va   tajribadan   foydalanish
natijasi.   Inkapsulyasiyalashdan   samarali   foydalanish   uchun   dasturni   ishlab
chiqishda   avval   abstraksiyadan   va   uning   bilan   bog’liq   konsepsiyalardan
foydalanishni o’rganib olish lozim.
Topshiriq-22:   Viloyat  nomli sinf yarating. Tarkibida ikkita metod ,ikkita xossa
bolsin.Talaba yoshini getYosh() metodi orqali junating  
#include<bits/stdc++.h>
using namespace std;
class Viloyat
{
public:
string nomi;
void getManzil()
{
cout << "Viloyatnomi:" << nomi<< "\n"<<endl;
}
};
int main()
{
Viloyat nomi; viloyat.nomi = "viloya tnomi, toshkent-2200 yoshda ";
guruh.getManzil();
return 0;
} 3-LABAROTORIYA ISHI
Mavzu:  Modullik
Modulli   dasturlash   tushunchasi .   Strukturaviy   dasturlash   texnologiyasi
singari,   modulli   dasturlash   konsepsiyasi   bir   nechta   tushunchalar   va   qoidalar
shaklida shakllantirilishi mumkin:
•   Vazifaning   funksional   dekompozitsiyasi   -   katta   vazifani   bir   nechta
kichikroq,   funksional   jihatdan   mustaqil   kichik   vazifalar   -   modullarga   bo lish.ʻ
Modullar bir-biriga faqat kirish va chiqish ma’lumotlari bilan bog langan.	
ʻ
•   Modul   -   modulli   dasturlash   tushunchasining   asosi.   Funksional
parchalanishdagi har bir modul bitta kirish va bitta chiqishga ega bo lgan qora quti.	
ʻ
Modulli yondashuv dasturni ishlash jarayonida osonroq yangilashga imkon beradi
va unga xizmat ko rsatishni  yengillashtiradi. Bundan tashqari, modulli yondashuv	
ʻ
turli  xil  dasturlash  tillarida bitta loyiha dasturlarining qismlarini  ishlab chiqishga,
so ngra   yig ish   vositalaridan   foydalanib   ularni   bitta   yuk   moduliga   birlashtirishga	
ʻ ʻ
imkon beradi.
•   Amalga   oshirilgan   yechimlar   sodda   va   tushunarli   bo lishi   kerak.   Agar	
ʻ
modulning   maqsadi   aniq   bo lmasa,   demak   bu   boshlang ich   yoki   oraliq	
ʻ ʻ
muammoning   ajratilishi   yetarli   darajada   bajarilmaganligini   ko rsatadi.   Bunday	
ʻ
holda, muammoni  yana bir  bor  tahlil  qilish va ehtimol, qo shimcha topshiriqlarni	
ʻ
qismiy masalalarga ajratish kerak. Agar loyihada qiyin joylar mavjud bo lsa, ularni	
ʻ
yaxshilab   o ylangan   sharhlar   tizimi   yordamida   batafsilroq   hujjatlashtirish   kerak.	
ʻ
Ushbu   jarayon   muammoning   barcha   modullari   maqsadi   va   ularning   maqbul
kombinatsiyasi   to g risida   aniq   tushunchaga   erishmaguningizcha   davom   etishi	
ʻ ʻ
kerak.
•   Moduldagi   barcha   o zgaruvchilarning   maqsadi   izohlar   yordamida	
ʻ
belgilanishi 
bilan tavsiflanishi kerak.
Topshiriq-22:     Mashina   nomli   sinf   yarating.Uning   bosib   o’tgan   yo’liga   qarab
yoqilg’I sarfini aniqlash metodi bulsin. 
#include<bits/stdc++.h>
using namespace std;
class Mashina{
private:
double sarf;
double kmsarf; public:
void print(int masofa,int vaqt)
{
sarf = masofa;
kmsarf = vaqt;
double  letr;
letr=sarf /kmsarf  ;
cout   <<   "Mashina   shuncha   masofani     "   <<   letr<<"   letrda
bosib o'di'" << "\n";
}
};
int main()
{
Mashina let;
let.print(110, 10);
return 0;
} 4-LABAROTORIYA ISHI
Mavzu  :IRERXIYA 
Sodda   vorislik.   Ko’plikdagi   vorislik.   Polimorf   usullar. C++   tili   o’zining
barcha   ajdodlarining   xususiyatlari,   ma’lumotlari,   usullari   va   voqealarini   meros
qilib   oladigan   hosila   sinfini   e’lon   qilish   imkoniyatini   beradi.   Hosila   sinfda,
shuningdek yangi tavsiflarni  e’lon qilish hamda meros sifatida olinayotgan ayrim
funksiyalarni  qo’shimcha  yuklash mumkin.   Vorislik  asos  sinf  kodidan hosila sinf
nusxalarida takroran foydalanish imkonini beradi.
Hosila   sinfni   e’lon   qilishning   umumlashgan   sintaksisini   ko’rib   chiqamiz.
Seksiyalarni   sanab   o’tish   tartibi   himoya   imtiyozlarini   eng   ommaviylariga   qarab
kengayib borishiga mos keladi:
class className: [<kirish huquqini beruvchi spesifikator>] parent Class {
<Do’stona sinflarni e’lon qilish>
private:
<xususiy ma’lumotlar a’zolari>
<xususiy konstruktorlar>
<xususiy usullar>
protected:
<himoyalangan ma’lumotlar a’zolari>
<himoyalangan konstruktorlar>
<himoyalangan usullar>
public:
<ommaviy xususiyatlar>
<ommaviy ma’lumotlar a’zolari>
<ommaviy konstruktorlar>
<ommaviy destruktor>
<ommaviy usullar>
Himoyalangan   (protected)   komponentalar   sinf   ichida   va   hosila   sinflarda
murojaat   huquqiga   ega.   Bazaviy   sinf   imkoniyatlarini   kengaytiradigan   sinflarni
yuzaga keltirish mumkin: bu yo’l  siz uchun g’oyat qulay, ammo ozgina ishlashni
talab   qilgan   funksiyaga   ega.   Hosila   sinfda   kerakli   funksiyani   yangidan   yaratish vaqtni   bekorga   sarflash   bilan   barobar.   Buning   o’rniga   bazaviy   sinfda   koddan
takroran   foydalanish   kerak:   bunda   u   talab   qilingan   darajada   kengaytirilishi
mumkin.   Hosila   sinfda   sizni   qoniqtirmaydigan   bazaviy   sinf   funksiyasini   qayta
aniqlang   xolos.   Xuddi   shunday   yo’l   bilan   bazaviy   sinf   imkoniyatlarini
cheklaydigan   sinflarni   yuzaga   keltirish   mumkin:   Bu   yo’l   siz   uchun   g’oyat   qulay,
ammo nimanidir ortiqcha qiladi.
Agar   asos   sinf   parametrli   konstruktorga   ega   bo’lsa   hosila   sinf   ham   albatta
parametrli   kontruktorga   ega   bo’lishi   shart   va   bu   konstruktor   inisializatorlar
ro’yxatida yoki tanasida asos sinf konstruktorini chaqirishi lozim. Masalan:
class Base
{
int a;
public:
Base(int a1): a(a1){}
};
class Derived : public Base
{
int b;
public:
Derived(int a1, int b1) : Base(a1),b(b1){}
};
Topshiriq-22 :     Mashina   nomli   sinf   e’lon   qilib   ,nechinchi   kursda   o’qishini
aniqlavchi metodni yozing. 
#include<bits/stdc++.h>
using namespace std;
class mashina{
private:
double raqami ;
public:
void print(int raqami)
{ Mashina=raqami;
double  nomer1;
nomer1=raqami;
cout << "Mashina raqami=  " << nomer1 << "\n";
}
};
int main()
{
Mashian raqami;
raqami.print( 2);
return 0;
} 5-LABAROTORIYA ISHI
Mavzu:   Sinf va obyekt tushunchalari
Sinflar .   C++   tilining   eng   foydali   xususiyatlaridan   biri   bu   muayyan
muammolarni   hal   qilish   uchun   ko'proq   mos   keladigan   ma'lumotlar   turlarini
aniqlashdir. O'zingizning shaxsiy ma'lumotlar turlarini yaratish uchun ro'yxatlar va
tuzilmalardan   qanday   foydalanish   mumkinligini   allaqachon   ko'rgansiz.   Masalan,
sanani saqlash uchun struktura quyidagicha e’lon qilinadi.
struct DateStruct
{
        int day;
        int month;
        int year;
};
Sinf metodlari
Ma'lumotlarni saqlashdan tashqari, sinflar funktsiyalarni ham o'z ichiga olishi
mumkin. Sinf ichida aniqlangan funksiyalar metodlar deb ataladi. Metodlarni sinf
ichida   ham,   tashqarisida   ham   aniqlash   mumkin.   Hozircha   biz   ularni   sinf   ichida
belgilaymiz (soddaligi uchun), ularni sinfdan tashqarida qanday aniqlash mumkin -
birozdan keyin ko'rib chiqamiz.
DateClass sinfi tarkibida print() metodini e’lon qilish:
class DateClass
{
public:
        int m_day;
        int m_month;
        int m_year;
        void print() // funksiya-a’zoni aniqlash
        {
                cout << m_day << "/" << m_month << "/" << m_year;
        }
};  class kalit so'zi sizga a'zo o'zgaruvchilari va metodlarini o'z ichiga oladigan
maxsus   C++   ma'lumotlar   turini   yaratishga   imkon   beradi.   Sinflar   -   ob'ektga
yo'naltirilgan dasturlashning asosi.
strukturalar haqida eslatma.   C da strukturalar faqat ma'lumotlarni saqlashi
mumkin   va   ular   bilan   bog'liq   metodlar   bo'lmasligi   mumkin.   C++   da   sinflarni
loyihalashdan   so'ng   (class   kalit   so'zidan   foydalangan   holda)   Bjarne   Stroustrup
struktura   (C   dan   meros   bo'lib   o'tgan)   bog'liq   metodlarga   ega   bo'lishi   kerakligi
haqida   o'ylab   ko'rdi.   Biroz   o'ylanib,   nima   kerakligini   hal   qildi.   Shuning   uchun, yuqoridagi   dasturlarda   biz   sinf   o'rniga   struct   kalit   so'zidan   foydalanishimiz
mumkin va hamma narsa ishlaydi!
1-misol.   Ikkita   butun   sonni   o'z   ichiga   olgan   Numbers   sinfini   yarating.   Bu
ikkita   butun   sonni   saqlash   uchun   bu   sinf   ikkita   a'zo   o'zgaruvchiga   ega   bo'lishi
kerak. Shuningdek, siz ikkita metodni yaratishingiz kerak:
1-metod.   set() metodi, bu sizga o'zgaruvchiga qiymatlarni belgilash imkonini
beradi;
2-metod.  print() metodi, bu o'zgaruvchilar qiymatlarini chop etadi.
1-misolning yechimi.
#include <iostream>
class Numbers
{
public:
int m_first;
int m_second;
void set(int first, int second)
{
m_first = first;
m_second = second;
}
void print()
{
std::cout << "Numbers(" << m_first << ", " << m_second << ")\n";
}
};
int main()
{
Numbers n1;
n1.set(3, 3);
Numbers n2{ 4, 4 };
n1.print();
n2.print();
return 0;  }
Topshiriq-22:   Y=ax+b   nomli   sinf   yarating.   Tarkibida   public   spetsifikatorlari
orqali metodlar va xossalar e’lon qiling .Ulardan asosiy dasturda foydalanin.    #include<bits/stdc++.h>
using namespace std;
class Chiziqli funksiya{
private:
double Chiziqli_funksiya;
public:
void print(int raqami)
{Chiziqli _funksiay = raqami;
cout << "Chiziqli funksiay ko’rinishi" << Chizqli_funksiya << "\n"; }
};
int main()
{
Funksiya turi;
kan.print(6876483);
return 0;
} 6-LABAROTORIYA ISHI
Mavzu  : Konstruktor va destruktor tushunchalari.
Konstruktorlar   uchun   standart   parametrlardan   foydalanmang.   To'pning
rangini (m_color) va radiusini (m_radius) (Ball sinfining ob'ekti) ko'rsatish uchun
boshqa funktsiyani yozing.
main () funksiyasi uchun quyidagi kod:
int main()
{
        Ball def;
        def.print();
 
Ball black("black");
black.print();
Ball thirty(30.0);
thirty.print();
Ball blackThirty("black", 30.0);
blackThirty.print();
 
        return 0;
}
Topshiriq-22 : Aylana nomli sinf yarating. Tarkibida 2 ta metod, 4 ta xossa, 2
ta konstruktor, 1 ta destruktor bo’lsin
#include<bits/stdc++.h>
using namespace std;
class Aylana {
private:
int radiusi;
string ;
public:
// bunda Konstruktorlarni elon qilamiz;
Aylana_radiusi (int soni,string joylori)
{ }
void getNomi()
{
cout << "Aylana radiusini kiriting ': " << radusi<< "\n";
}
~fudbool_jamoasi()
{
radiusi=0;
joylari = " ";
}
};
int main()
{
Aylana radusi= radiusi ()
n.radusi _soni();
n.getNomi();
return 0;
}  7-LABAROTORIYA ISHI
Mavzu:   Sinfda o’zgaruvchi va metodlarni ko’rinish sohalari
Qoida.   Sinf   a'zolarining   o'zgaruvchilariga   private   kirish   spetsifikatorini   va
public   kirish   spetsifikatorini   sinf   metodlariga   o'rnating   (agar   sizda   boshqacha
sabab bo'lmasa).
private   va   public   kirish   xususiyatlarini   ishlatadigan   sinfning   misolini   ko'rib
chiqaylik:
#include <iostream>
class DateClass 
{
        int m_day; //jimlik bo’yicha yopiq
        int m_month;        
    int m_year; 
public:
        void setDate(int day, int month, int year) // ochiq 
        {
//   setDate   ()   usuli   sinfning   yopiq   a'zolaridan   foydalana   oladi,   chunki   u   o'zi
sinf a'zosi
                m_day = day;
                m_month = month;
                m_year = year;
        }
 
        void print() // ochiq, har qanday ob'ekt kirish huquqiga ega
        {
                std::cout << m_day << "/" << m_month << "/" << m_year;
        }
};
 
int main()
{
        DateClass date;
        date.setDate(12, 11, 2018); //bu to’g’ri
        date.print(); // to’g’ri, chunki print() ochiq foydalanish xususiyatiga ega
 
        return 0;
}
Dasturni bajarish natijasi:
Esda   tutingki,   biz   sana   ob'ektining   a'zo   o'zgaruvchilariga   to'g'ridan   -to'g'ri
main() dan kira olmasak ham (ular sukut bo'yicha yopiq bo'lgani uchun), biz ularga
setDate () va print () umumiy usullari orqali kirishimiz mumkin. Sinflarning   ochiq   a'zolari   umumiy   (yoki   "public")   interfeysni   tashkil   qiladi.
Sinf   a'zolariga   sinfdan   tashqaridan   kirish   mumkin   bo'lganligi   sababli,   umumiy
interfeys   sinfdan   foydalanadigan   dasturlarning   bir   xil   sinf   bilan   qanday   aloqada
bo'lishini aniqlaydi.
Topshiriq-22:     Trapetsiya   nomli   sinf   yarating.   Tarkibida   metodlar     hosil
qiling .Sinfga oid obyektlar yatating va initsializatsiyalashtiring .
#include<bits/stdc++.h>
using namespace std;
class trapetsiya{
private:
int x;
int y;
public:
trapetsiya(int i=0,int j=0):x(i),y(j){
}
int getX() const{
return x;
}
int getY() const{
return y;
}
};
int main()
{
trapitsiya yon(10,15);
cout << "(" << yon.getX() << "," << yon.getY() << ")";
return 0;
}  8-LABAROTORIYA ISHI
Mavzu:  I nkapsulyatsiya prinsipi
Inkapsulatsiyalash,   vorislik   va   polimorfizm   obyektga   mo'ljallangan
dasturlash (OMD) ning uchta bazaviy tushunchasi hisoblanadi.
Inkapsulyasiyalash   -   ma’lumotlarning   va   shu   ma’lumotlar   ustida   ish   olib
boradigan   kodlarning   bitta   ob’ektda   birlashtirilishi.   OMD   atamachiligida
ma’lumotlar   ob’ekt   ma’lumotlari   a’zolari   (data   members)   deb,   kodlar   ob’ektli
usullar yoki funksiya-a’zolari (methods, member functions) deb   ataladi.
Inkapsulyasiya   yordamida   berilganlarni   yashirish   ta’minlanadi.   Bu   juda
yaxshi   xarakteristika   bo’lib   foydalanuvchi   o’zi   ishlatayotgan   ob’ektning   ichki
ishlari   haqida   umuman   o’ylamaydi.   Haqiqatan   ham,   xolodilnikni   ishlatishda
refrijektorni   ishlash   prinsipini   bilish   shart   emas.   Yaxshi   ishlab   chiqilgan   dastur
ob’ektini   qo’llashda   uning   ichki   o’zgaruvchilarining   o’zaro   munosabati   haqida
qayg’urish   zarur   emas.   C++tilida   inkapsulyasiya   prinsipi   sinf   deb   ataluvchi
nostandart turlarni(foydalanuvchi turlarini) hosil qilish orqali himoya qilinadi
Inkapsulatsiyalash   dasturni   qandaydir   monolit,   boiinmas   narsa   sifatida   olib
qaramay,   ko'plab   mustaqil   elementlarga   bo'lish   imkonini   beradi.   Har   bir   element
o'z funksiyalarini boshqa elementlardan   mustaqil ravishda bajara oladigan alohida
modul sifatida olib qaraladi.
Aynan   inkapsulatsiyalash   tufayli   mustaqillik   darajasi   ortadi,   chunki   ichki
detallar interfeys ortida yashiringan boiadi.
Samarali inkapsulyasiyalash.
Mohiyatan   inkapsulatsiyalash   atamasi   «gcrmctik   berkitilgan;   tashqi
ta'sirlardan   himoyalangan   dastur   qismi»   degan   ma'noni   bildiradi.   Agar   biror   bir
dasturiy obyektga inkapsulatsiyalash qo'llangan boisa, u holda bu obyekt qora quti
sifatida   olib   qaraladi.   Siz   qora   quti   nima   qilayotganini   uning   tashqi   interfeysini
ko'rib turganingiz uchungina bilishingiz mumkin. Qora qutini biron narsa qilishga
majburlash   uchun   unga   xabar   yuborish   kerak.   Qora   quti   ichida   nima   sodir
bo'layotgani ahamiyatli emas, qora quti yuborilgan xabarga adekvat (mos ravishda)
munosabatda bo'lishi muhimroqdir.
OYD uslubida kod yozishning sxematik misoli:
Obyekt {
xossa: qiymat;
funksiya_metod() {
ichki_funksiya_tanasi
}
}
obyekt->metodni_chaqirish();
Bu shartli misol. U har xil dasturlash tillarida turlicha ko'rinadi. Ob'ektga   yo'naltirilgan   dasturlashning   asosiy   afzalligi   shundaki,   ularni
boshqarish   uchun   ishlatiladigan   ma'lumotlar   ham,   operatsiyalar   ham   (kod)   bitta
ob'ektga   joylashtirilgan.   Masalan,   ob'ekt   tarmoq   bo'ylab   harakatlansa,   u
ma'lumotlar va xatti -harakatlarni o'z ichiga olgan holda, to'liq uzatiladi.
Bir butunlik  – yaxlit kontekstda fikrlash nazariy jihatdan ajoyib yondashuv
bo'lsa   -da,   har   ikki   tomonda   ham   tegishli   kod   nusxalari   borligi   sababli,   xatti   -
harakatlarning   o'zi   yuborilmaydi.   Shu   bilan   birga,   butun   ob'ektni   butun   tarmoq
bo'ylab uzatiladigan kontekstda o'ylash muhimdir. 
To'g'ri   loyihalash   –   bu   konsepsiyaning   yaxshi   namunasi-   bu   brauzer
yuklanadigan   ob'ekt.   Brauzer   ma'lum   bir   ob'ekt   qanday   harakatlarni   bajarishini
oldindan   bilmaydi,   chunki   u   hali   kodni   "ko'rmagan".   Ob'ekt   yuklangach,   brauzer
ushbu ob'ektdagi kodni bajaradi va undagi ma'lumotlarni ishlatadi.
Ob'ektlar   ob'ektga   yo'naltirilgan   dasturlarning   qurilish   bloklari   hisoblanadi.
Ob'ektga   yo'naltirilgan   texnologiyadan   foydalanadigan   dastur   asosan   ob'ektlar
to'plamidir. Misol  sifatida, tegishli  kompaniya xodimlarini  ifodalovchi  ob'ektlarni
o'z   ichiga   olgan   korporativ   tizimni   ko'rib   chiqaylik.   Bu   ob'ektlarning   har   biri
keyinchalik  tasvirlangan ma'lumotlar va xatti -harakatlardan iborat.
Ob'ekt   ma'lumotlari.   Ob'ektdagi   ma'lumotlar   uning   holatini   ko'rsatadi.
Ob'ektga yo'naltirilgan dasturlash terminologiyasida bu ma'lumotlar   atributlar  deb
ataladi.   Bizning   misolimizda,   1-rasmda   ko'rsatilgandek,   xodimlarning   atributlari
ijtimoiy   xavfsizlik   raqami,   tug'ilgan   sanasi,   jinsi,   telefon   raqami   va   boshqalar
bo'lishi   mumkin.   Atributlar   bir   tashkilotdan   boshqasiga   (bu   holda   xodimlar)   farq
qiladiga n 
GETTER   VA   SETTER   -   Getter   va   setter   tushunchasi   ma'lumotlarni   yashirish
konsepsiyasini qo'llab-quvvatlaydi. Boshqa ob'ektlar ob'ektlardan birida joylashgan
ma'lumotlarni   to'g'ridan   -to'g'ri   boshqarishi   shart   emasligi   sababli,   qabul
qiluvchilar   va   o'rnatuvchilar   ob'ekt   ma'lumotlariga   boshqariladigan   kirishni
ta'minlaydi.   Qabul   qiluvchilar   va   o'rnatuvchilar   ba'zan   mos   ravishda   aksessuarlar
va o'zgartirish usullari deb ataladi. Shuni   ta'kidlash   kerakki,   biz   faqat   usullarning   interfeysini   ko'rsatamiz,   amalga
oshirishni   emas.   Metodlarni   samarali   qo'llash   uchun   barcha   foydalanuvchilar
bilishi kerak bo'lgan quyidagi ma'lumotlar:
metod nomi; metodga berilgan parametrlar;
Metodning qaytish turi. Xatti -harakatlar 2-rasmda ko'rsatilgan.
 
3-rasmda, Payroll ob'ektida har bir aniq xodim uchun ish haqi miqdorini hisoblash
uchun   ishlatiladigan   calcPay()   usuli   mavjudligini   ko'rsatadi.   Boshqa
ma'lumotlardan   tashqari,   ish   haqi   to'lashda   tegishli   xodimning   ijtimoiy   xavfsizlik
raqami bo'lishi  kerak. Buning uchun u Employee ob'ektiga xabar  yuborishi  kerak
(bu   holda   getSocialSecurityNumber   ()   metodiga   tegishli).   Bu   shuni   anglatadiki,
Payroll   ob'ekti   Employee   obyektining   getSocialSecurityNumber   ()   metodini
chaqiradi. Xodim ob'ekti bu xabarni "ko'radi" va so'ralgan ma'lumotni qaytaradi. Topshiriq-22:     Tovar nomli sinf yarating. Tarkibida getterlar va settterlar hosil
qiling . 
#include<bits/stdc++.h>
using namespace std;
class Tovar{
private:
    int nomi;
public:
    // Setterlarni hosil qilamiz:
    void printset(int sonni) {
      this -> sonni = sonni;
    }
    // Getterlarni hosil qilamiz:
    int printget() {
      return sonni;
    }
};
int main()
{
Tovarlar nomi;
    tovar.printset(3);
    cout <<tovar.printget();
return 0;
}  Xulosa
Men   204-guruh   talabasi   Yusufov   Xasan   labaratoriya   mashg`ulotini   bajarish
davomida     sinflar   va   obyektlar     haqidagi   juda   ko`p   tushunchalarga   ega   bo`ldim.
Sinf   tuzish   tartibini   diqqat   bilan   kuzatib,   o`rganib   chiqdim.   Uning     xossalari,
tasvirlash   usullari,   dasturni   ishlatishda,   unda   metodlar   yaratish   ,konstruktor   va
destruktorlarni ishlatishni va sinflarda qullab malumotlarga ega bo’ldim.  Ma'lumki,
C++   standart   kutubxonasi   bizga   qulay   bo’lishi   uchun   yaratilgan   sinflarga   to'la.
string, vector va array - barchasi sinf turlari! Shuning uchun, siz ushbu turdagi har
qanday   obyektni   yaratganingizda,   siz   sinf   obyektini   yaratasiz   va   agar   siz   ushbu
obyektlar   yordamida   funksiyani   chaqirsangiz,   siz   metodni   chaqirasiz:   C++   da
strukturalar   haqida   eslatma.   C   da   strukturalar   faqat   ma'lumotlarni   saqlashi
mumkin   va   ular   bilan   bog'liq   metodlar   bo'lmasligi   mumkin.   C++   da   sinflarni
loyihalashdan   so'ng   (class   kalit   so'zidan   foydalangan   holda)   Bjarne   Stroustrup
struktura   (C   dan   meros   bo'lib   o'tgan)   bog'liq   metodlarga   ega   bo'lishi   kerakligi
haqida   o'ylab   ko'rdi.   Biroz   o'ylanib,   nima   kerakligini   hal   qildi.   Shuning   uchun,
yuqoridagi   dasturlarda   biz   sinf   o'rniga   struct   kalit   so'zidan   foydalanishimiz
mumkin va hamma narsa ishlaydi!   Ko'pgina ishlab chiquvchilar bu noto'g'ri qaror,
deb   o'ylashadi,   chunki   bu   muammolarga   olib   kelishi   mumkin,   masalan,   sinf
xotirani   o'z   -o'zidan   tozalaydi   (masalan,   xotira   ajratilgan   sinf)   sinfning   vayron
bo'lishidan   oldin   uni   xalos   qiladi),   lekin   struktura   bilan   ishlashda   buni   taxmin
qilish   xavfli.   Shuning   uchun,   faqat   ma'lumotlarni   saqlash   uchun   ishlatiladigan
strukturalar   uchun   struct   kalit   so'zidan   foydalanish   hamda   ma'lumotlar   va
funksiyalarni   birlashtirishni  talab   qiladigan   obyektlarni  aniqlash   uchun  class  kalit
so'zidan foydalanish tavsiya etiladi.
Qoidalar:   faqat   ma'lumotlarni   saqlash   uchun   ishlatiladigan   struktura   uchun   struct
kalit so'zidan foydalaning. Ma'lumot va funksiyalarni birlashtirgan obyektlar uchun
class kalit so'zidan foydalaning  FOYDALANGAN  ADABIYOTLAR:
1 .  Sh.A.Nazirov, R.V.Qobulov, M.R.Babajanov «C va C++ TILI»
Informatika fanidan o’quv qo’llanma //TATU 489 b. Toshkent, 2012.
2. C / C ++.   Программирование   на   языке   высокого   уровня   /   Т.   А.   `
Павловская. — СПб.:Питер, 2003. —461 с: ил.
3. Программирование на языке С++ в среде  Qt   Creator :
/ Е. Р. Алексеев, Г. Г. Злобин, Д. А. Костюк,О. В. Чеснокова,
А. С. Чмыхало — М. :  ALT   Linux , 2015. — 448 с.
4. Жасмин Бланшет, Марк Саммерфилд  Qt  4:Программирование  GUI  на
C ++ 
5.   М.Шлее,   Qt   5.10.   Профессиональное   программирование   на   С++.   -
СПб.: БХВ-Петербург, 2018. - 1072 с.
Qo ʻ shimcha    adabiyotlar :
1.Герберт   Шилд.   С++.   Базовый   курс.   Москва,   Издательский   дом
“Вильямс”.  2010.-621 с.
2.Bjarne   Stroustrup.   Programming:   Principles   and   Practice   using   C++
(Second Edition)" Addison-Wesley.  2014, 1305  page .
3.Программирование на языке С++ в среде  Qt   Creator :
Е. Р. Алексеев, Г. Г. Злобин, Д. А. Костюк,О. В. Чеснокова,
А. С. Чмыхало — М. : ALT Linux, 2015. — 448 с. :

Samarqand Davlat Universiteti “Raqamli texnologiyalar” fakulteti amaliy matematika yo`nalishi Programmmalash asoslari fanidan tayyorlagan Labaratoriya ishlari

Kirish “Programmalash asoslari” fanidan labaratoriya ishini bajarishning bosh maqsadi talabalarga qo‘yilgan masalani echuvchi kompyuter programmasini tuzishga o‘rgatishdir. Shu maqsadda programmalash tillari va muhitlari haqida umumiy tushunchalar beriladi va bu tillardan foydalanish o‘rgatiladi. Laboratoriya ishi nazariy va amaliy qismlardan iborat. Nazariy qism informatika va hisoblash texnikasi, algoritmlar, C/C++ programmalash tili, Qt ob’yektga yo‘naltirilgan programmalash muhiti boblaridan tashkil topgan. Nazariy qismda programmalashga kirishning nazariy asosi bo‘lgan algoritmlarga alohida e’tibor qaratilgan. Bu erda algoritmlarni tavsiflash va keyinchalik kompyuterda amalga oshirish uchun zarur bo‘lgan bir qator matematik tushunchalar yordamchi algoritm, rekursiya, xotira, massiv, indeks, parametr va h.k. kiritilib, turli xil sinf masalalarining algoritmlari tuziladi. Programmalash tili - tuzilgan algoritmni kompyuter amalga oshirish uchun vositadir. Bu o‘rinda turli murakkablikdagi sintaksis va semantikaga ega bo‘lgan tillardan foydalanish mumkin. Fanda C++ tilining alfaviti, til qurilmalarining umumiy sintaksisi, berilganlar turlari, operatsiyalar va funktsiyalar qaraladi, oqim bilan ishlash, ko‘rsatgichlar, amallarni qayta yuklashlar, funktsiyalarni qayta yuklash, qoliplar va modulli programmmalash va grafika moduli bilan ishlash o‘rgatiladi. Programmalashga o‘rgatish mos amaliy masalalarga tayangan holda olib boriladi. Fanning amaliy qismida algoritmlar, C++ programmalash tili, Qt muhitida ishlash bo‘yicha masalalarni o‘z ichiga oladi. Programmalash asoslari fani bevosita tizimli programmalash, Berilganlar bazasini boshqarish tizimlari, Kompyuter grafikasi va Kompyuter tarmoqlari fanlari bilan uzviy bog‘liqdir va bu fan kompyuter texnologiyalari bo‘yicha mutaxassis tayyorlashda umumiy asos rolini o‘ynaydi.

1-LABAROTORIYA ISHI Mavzu: Obyekt modeli va uning afzaliklari Dasturlarni yozishga protsedurali yondashuv yaxshi, lekin sizning dasturingiz kichik bo'lsa bundan foydalanishingiz mumkin. Dastur hajmi katta bo’la boshlagach, siz darhol ushbu protseduraviy yondashuvdagi muammolarning ba'zi qiyinchiliklarini sezasiz.  Kod katta va hajmli. Dasturga kiritmoqchi bo'lgan, biror narsa qo'shadigan, o'zgartiradigan va hokazo kerakli funksiyani yoki kerakli kodni topish siz uchun murakkab muammo aylanadi.  Dasturga yangi xususiyatlarni qo'shish va uni kengaytirish murakkab bo’ladi. Protseduraviy yondashuv - bu hamma narsa ma'lum bir tartibda ketganda va biror narsani o'zgartirish uchun ko'p ishni bajarish, ko'p bog'liqliklarni tuzatish kerak: siz birini o'zgartirasiz, o'zgarishlar kodning boshqa qismiga ta'sir qiladi va hokazo. Agar siz katta dasturni protsedurali yondashuv yordamida yozmoqchi bo'lsangiz, bu kamchiliklarning barchasini o'zingiz sezishingiz mumkin. Shundan so'ng, sizning dasturingizda kodni tartibga solishning boshqa usulini topishingiz mumkin. Bunday yo'l bor va u OYD deb nomlanadi. So'nggi paytlarda u juda mashhur bo'lib ketdi. OYD - bu katta va murakkab dasturlarni ishlab chiqishni soddalashtirishning bir usuli. Bular prinsipial jihatdan, agar bizga biron bir katta dastur yozishning hojati bo'lmasa, OYDsiz osonlikcha qila olamiz. Bir butunlik – yaxlit kontekstda fikrlash nazariy jihatdan ajoyib yondashuv bo'lsa -da, har ikki tomonda ham tegishli kod nusxalari borligi sababli, xatti - harakatlarning o'zi yuborilmaydi. Shu bilan birga, butun ob'ektni butun tarmoq bo'ylab uzatiladigan kontekstda o'ylash muhimdir. To'g'ri loyihalash – bu konsepsiyaning yaxshi namunasi- bu brauzer yuklanadigan ob'ekt. Brauzer ma'lum bir ob'ekt qanday harakatlarni bajarishini oldindan bilmaydi, chunki u hali kodni "ko'rmagan". Ob'ekt yuklangach, brauzer ushbu ob'ektdagi kodni bajaradi va undagi ma'lumotlarni ishlatadi Topshiriq-22: Mashina nomli sinf yarating. Tarkibida ikki xil konstruktor bo‘lsin #include<iostream> using namespace std; class Mashina {private: int m_turi;

int m_rangi; public: Mashina() {m_turi =23; m_rangi =3; } Mashina(int a, int b) { m_turi =a; m_rangi =b; } void chiqarish() { cout<<"Mashinaning turi"<<m_turi <<endl; cout<<"Mashibaning rangi"<<m_rangi <<endl; } }; int main() { Mashina malumot; mashinamal(22,2); malumot.chiqarish(); mal.chiqarish(); return 0; }