logo

Programmmalash asoslari fanidan LAB

Загружено в:

08.08.2023

Скачано:

0

Размер:

1062.3076171875 KB
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 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-15   Futbol   komandasi   nomli   sinf   yarating.   Tarkibida   ikki   xil
konstruktor bo‘lsin
#include <bits/stdc++.h>
using namespace std;
class Futbol_koman
{
private:
    string name;
    int number;
public:
    Futbol_koman()
    {
        name = "";
        number = 0;
    }     Futbol_koman(string name,int number)
    {
        this->name = name;
        this->number = number;
    }
    void print()
    {
        cout << "Komanda nomi: " << name <<"\n";
        cout << "Futbolchilar soni: " << number << "\n";
    }
};
int main()
{
    Futbol_koman fut = Futbol_koman("REAl MADRIT",21);
    fut.print();
    return 0;
} 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-15 . Futbol komandasi nomli sinf yarating. Tarkibida 2 ta metod, 3
ta xossa bo’lsin. Jamoa sardorini getSardor() metodi orqali jo’nating
#include <bits/stdc++.h>
using namespace std;
class Futbol_komand
{
private:
    string name;
    int number;
public:
    void getName(string n)
    {
        name = n;
    }
    int numbers (int n)
    {
        this->number = n;
    }
    void print()
    {
        cout << "Komanda nomi: " << name <<"\n";
        cout << "Oyinchilar soni: " << number << "\n";
    }
};
int main()
{
    Futbol_komand foot;
    foot.getName("REAL MADRIT");
    foot.numbers(100);     foot.print();
    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-15 :    Fakultet nomli sinf yarating. Tarkibida 1 ta metod, 3 ta xossa, 2
ta konstruktor, 1 ta destruktor bo’lsin
#include <bits/stdc++.h>
using namespace std;
class Fakultet
{
private:
    double maosh;
    int ishchilar_soni;
    string ish_nomi;
    int sum;
    string name;
public:
    Fakultet()
    {
        maosh = 0;
        ishchilar_soni = 0;
        ish_nomi = "";
        name = "";
    }
    Fakultet(string name,double maosh,int ishchilar_soni,string ish_nomi)
    {
        this->maosh = maosh;
        this->ishchilar_soni = ishchilar_soni;
        this->ish_nomi = ish_nomi;
        this->name = name;
    }
    suma()     {
        sum = ishchilar_soni * maosh;
    }
    void print()
    {
        cout << "Fakultet nomi: " << name << "\n";
        cout << "Fani maoshi: " << maosh << "\n";
        cout << "Xodimlar soni:" << ishchilar_soni << "\n";
        cout << "ish nomi: " << ish_nomi << "\n";
        cout << "Fakultet umumiy harajatlari:" << sum << "\n";
    }
    ~Fakultet()
    {
        cout << "Qaytadan ishga tushuring";
    }
};
int main()
{
    Fakultet name = Fakultet("Raqamli texnologiyalar",12000,12,"Usta");
    name.print();
    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-15:   Futbol  komandasi  nomli  sinf  yarating.  Tarkibida  public, private
spetsifikatorlari   orqali   metodlar   va   xossalar   e’lon   qiling.   Ulardan   asosiy
dasturda foydalaning
#include <bits/stdc++.h>
using namespace std;
class Futbol_komand
{
private:
    string name;
    int number;
public:
    void getName(string n)
    {
        name = n;
    }
    int numbers (int n)
    {
        this->number = n;
    }
    void print()
    {
        cout << "Komanda nomi: " << name <<"\n";
        cout << "Oyinchilar soni: " << number << "\n";
    }
};
int main()
{
    Futbol_komand foot;
    foot.getName("REAL MADRIT");     foot.numbers(100);
    foot.print();
    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  Xodim nomli sinf yozing. Xodimning maoshini yevroga o’tkazib
beradigan metod yozing va undan foydalaning
#include<iostream>
using namespace std;
class Xodim
{
  private:
    int sum;
  public:
    Xodim(int num)
    {
      this->sum = num;     }
      void print()
      {
          int yevro;
          yevro = sum * 7000;
          cout << "Yevroda = " << yevro << endl;
      }
};
int main()
{
  Xodim obj=Xodim(50);
  obj.print();
  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:    Shakllar nomli sinf yarating. Tarkibida ikki xil konstruktor 
bo‘lsin
#include <bits/stdc++.h>
using namespace std;
class ShaklTortburchak
{
private:
    string name;
    int a;
    int b;
    int sum;
public:
    ShaklTortburchak()
    {
       name = "";
       a = 0;
       b = 0;
       sum = 0;
    }
    ShaklTortburchak(string name,int a,int b)
    {
        this->name = name;
        this->a = a;
        this->b = b;
    }
    suma()
    {         sum = a * b;
    }
    void print()
    {
        cout << "Shakl  nomi: " << name << "\n";
        cout << "a:" << a << "\n";
        cout << "b: " << b << "\n";
        cout << "Shakl yuzasi:" << sum << "\n";
    }
};
int main()
{
    ShaklTortburchak name = ShaklTortburchak("To'rtburchak",12,16);
    name.print();
    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  Xodim nomli sinf yarating. Tarkibida getterlar va setterlar hosil
qiling 
#include <iostream> using namespace std;
class Xodim {
  private:
    string name;
  public:
    void setSalary(string s) {
      name = s;
    }
    string getSalary() {
      return name;
    }
};
int main() {
  Xodim obj;
  obj.setSalary("Makron MCHJ");
  cout << obj.getSalary();
  return 0;
}                                  Xulosa                     Men   204-guruh   talabasi   Usmonov   Shohruz   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. 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 с. :

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

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;