logo

Dron express

Загружено в:

19.11.2024

Скачано:

0

Размер:

2377.6298828125 KB
Mavzu: “ Dron express ” mavzusida MUNDARIJA:
KIRISH ...................................................................................................................... 3
I   BOB.   ILOVA   YARATISHDA   QO’LLANILADIGAN   DASTURIY
VOSITALARNING O’RNI ...................................................................................... 6
1.1. Java dasturlash tili va mobil dasturlashda foydalanish ................................... 6
1.2. Samaradorlikni oshiruvchi dasturlash algoritmlari: Matching algoritmi .. . . . 12
II   BOB.   DRON   EXPRESS   DASTURINI   TASHKIL   ETISHNING   ZARURIY
VOSITALARI ......................................................................................................... 16
2.1. Foydalanuvchilar bilan o’zaro muloqot integratsiyasini ta’minlash ............ 16
2.2. Android Studioda loyiha qurilishini tashkil qilish ........................................ 23
XULOSA ................................................................................................................. 33
FOYDALANILGAN ADABIYOTLAR ................................................................. 35
2  
KIRISH
Oziq-ovqat yetkazib berish ilovalari odamlarning taomlarga buyurtma berish
va lazzatlanish usullarini inqilob qilib, qulaylik va tanlovni barmoq uchida taqdim
etdi.   Raqamli   transformatsiya   davrida   ushbu   ilovalar   ajralmas   bo'lib   qoldi,   ular
smartfon   yoki   kompyuterlariga   bir   necha   marta   bosish   orqali   mijozlarni   sevimli
restoran   va   oshxonalari   bilan   bog'laydi.   Oziq-ovqat   yetkazib   berish   xizmatlariga
talabning o'sishi, ayniqsa global pandemiya sharoitida, iste'molchilar va biznesning
o'zgaruvchan ehtiyojlarini qondirish uchun mustahkam va samarali platformalarni
ishlab   chiqish   muhimligini   ta'kidlaydi.   Ushbu   kurs   ishi   o'zining   kengaytirilishi,
ishonchliligi   va   platformadan   mustaqilligi   bilan   mashhur   bo'lgan   ko'p   qirrali   va
kuchli   dasturlash   tili   bo'lgan   Java-dan   foydalangan   holda   oziq-ovqat   yetkazib
berish   dasturini   yaratish   yo'lini   boshlaydi.   Java   imkoniyatlaridan   foydalangan
holda   biz   foydalanuvchilar,   restoranlar   va   yetkazib   berish   xodimlari   o‘rtasida
uzluksiz o‘zaro aloqalarni osonlashtiradigan, xavfsizlik, unumdorlik va qulaylikni
ta’minlovchi funksiyalarga boy ilova yaratishni maqsad qilganmiz. Ushbu urinish
orqali   biz   talablarni   tahlil   qilish   va   tizimni   loyihalashdan   tortib,   amalga   oshirish,
sinovdan   o'tkazish   va   joylashtirishgacha   bo'lgan   dasturiy   ta'minotni   ishlab
chiqishning   nozik   tomonlarini   o'rganishga   intilamiz.   Eng   ilg‘or   tajribalarga   rioya
qilgan holda va zamonaviy rivojlanish metodologiyalaridan foydalangan holda, biz
nafaqat   bevosita   maqsadlarga   javob   beradigan,   balki   oziq-ovqat   yetkazib   berish
texnologiyasi   sohasida   kelajakdagi   takomillashtirish   va   innovatsiyalar   uchun
zamin   yaratadigan   yechim   ishlab   chiqishga   intilamiz.   Keyingi   bo'limlarda   biz
talablarni   har   tomonlama   tahlil   qilishdan   boshlanib,   oziq-ovqat   yetkazib   berish
bo'yicha   to'liq   funktsional   dasturni   ishga   tushirish   bilan   yakunlangan   rivojlanish
jarayonining   turli   qirralarini   ko'rib   chiqamiz.   Yo'lda   biz   qiyinchiliklarga   duch
kelamiz, muhim qarorlar qabul qilamiz va oxir-oqibat texnologiya va gastronomiya
o'rtasidagi sinergiyaga misol bo'ladigan aniq mahsulot bilan chiqamiz.
3 Kurs ishining dolzarbligi . Bugungi raqamli asrda oziq-ovqat yetkazib berish
ilovalari band odamlarning ehtiyojlarini qondirishda muhim rol o'ynaydi, ularning
ovqatlanish   tajribasida   qulaylik   va   tanlov   taklif   qiladi.   Shu   sababli,   Java-dan
foydalangan   holda   oziq-ovqat   yetkazib   berish   dasturini   ishlab   chiqish   juda
dolzarbdir,   chunki   u   talabalarga   real   dunyo   muammolari   va   iste'molchilar
talablariga javob beradigan echimlarni yaratishda amaliy tajriba beradi.
Kurs   ishining   ahamiyati .   Talabalarni   dasturiy   ta'minotni   ishlab   chiqish,
ma'lumotlar   bazasini   boshqarish   va   foydalanuvchi   interfeysi   dizayni   bo'yicha
qimmatli   ko'nikmalar   bilan   ta'minlaydi,   bularning   barchasi   texnologiya   sanoatida
talab qilinadi. Bundan tashqari, u har qanday professional  sohada muvaffaqiyatga
erishish   uchun   muhim   xususiyatlar   bo'lgan   tanqidiy   fikrlash,   muammolarni   hal
qilish va hamkorlikni rag'batlantiradi.
Kurs   ishining   maqsadi .   Java-dan   foydalangan   holda   oziq-ovqat   yetkazib
berish dasturini ishlab chiqish bo'yicha amaliy tajriba bilan ta'minlash va shu bilan
ularning texnik malakasini oshirish va dasturiy ta'minot muhandisligi tamoyillarini
tushunishdan   iborat.   Ushbu   loyiha   ustida   ishlash   orqali   talabalar   turli   manfaatdor
tomonlarning   ehtiyojlarini   qondiradigan   kengaytiriladigan,   ishonchli   va
foydalanuvchilarga   qulay   ilovalarni   yaratishning   murakkabliklari   haqida
tushunchaga ega bo'ladilar.
Kurs   ishining   vazifasi .   Tahlil   qilish,   tizim   arxitekturasini   loyihalash,
funktsiyalarni   amalga   oshirish,   funksionallikni   sinab   ko'rish   va   dasturni
joylashtirishni   o'z   ichiga   oladi.   Talabalarga   kod   yozish,   foydalanuvchi
interfeyslarini   yaratish   va   oziq-ovqat   yetkazib   berish   platformasini   ishlab   chiqish
uchun backend xizmatlarini integratsiya qilish topshirilgan.
Kurs ishining metodi. Tahlil qilishdan boshlab, joylashtirish va texnik xizmat
ko'rsatish   bilan   yakunlangan   tizimli   yondashuvga   amal   qiladi.   Talabalar   loyihani
yakunlash uchun Java dasturlash tili, ma'lumotlar bazalari, ishlab chiqish muhitlari
va   sinov   tizimlarini   o'z   ichiga   olgan   turli   xil   vositalar   va   texnologiyalardan
foydalanadilar.
4 Kurs   ishining   natijalari   va   xulosalari .   Kurs   ishi   natijalari   Java-da   ishlab
chiqilgan,   belgilangan   talablarga   javob   beradigan   va   dasturiy   ta'minotni   ishlab
chiqish tamoyillari bo'yicha malakasini ko'rsatadigan to'liq funktsional  oziq-ovqat
yetkazib   berish   dasturini   o'z   ichiga   oladi.   Qattiq   sinov   va   baholash   orqali   har
qanday   xato   yoki   muammolar   aniqlanadi   va   hal   qilinadi,   bu   esa   ilovaning
ishonchliligi   va   qulayligini   ta'minlaydi.   Kurs   ishidan   olingan   xulosalar   dasturiy
ta'minotni   ishlab   chiqish   jarayonlarida   hamkorlik,   innovatsiyalar   va   doimiy
takomillashtirish muhimligini ta'kidlaydi.
Kurs   ishi   yuzasidan   ishlab   chiqilgan   taklif   va   mulohazalar .   Yaxshilash
bo'yicha   takliflar   qo'shimcha   funktsiyalarni   o'z   ichiga   olishi,   foydalanuvchi
tajribasini   yaxshilash,   ish  faoliyatini   optimallashtirish  va  foydalanuvchi  interfeysi
dizaynini yaxshilashni o'z ichiga olishi mumkin. Bundan tashqari, ilovaning kuchli
va zaif   tomonlari,  olingan saboqlar  va  kelajakdagi   tadqiqot  va  ishlanmalar  uchun
yo'nalishlar   bo'yicha   sharhlar   keyingi   takrorlash   va   takomillashtirishga
yo'naltirilgan.   Umuman   olganda,   kurs   ishi   talabalarni   dasturiy   ta'minot
muhandisligi   va   texnologiyasi   bo'yicha   martaba   uchun   tayyorlaydigan   qimmatli
o'quv tajribasi bo'lib xizmat qiladi.
5 I BOB. ILOVA YARATISHDA QO’LLANILADIGAN DASTURIY
VOSITALARNING O’RNI
1.1. Java dasturlash tili va mobil dasturlashda foydalanish
Java   yuqori  darajali,  sinfga  asoslangan,   ob'ektga  yo'naltirilgan  dasturlash   tili
bo'lib,   u   iloji   boricha   kamroq   amalga   oshirishga   bog'liq   bo'lishi   uchun
mo'ljallangan. Bu umumiy maqsadli dasturlash tili bo lib, dasturchilarga bir martaʻ
yozish,   istalgan   joyda   ishlash   (WORA)   imkonini   beradi,   ya ni   kompilyatsiya	
ʼ
qilingan   Java   kodi   Java-ni   qo llab-quvvatlaydigan   barcha   platformalarda   qayta	
ʻ
kompilyatsiya   qilish   zaruratisiz   ishlashi   mumkin.   Java   ilovalari,   odatda,   asosiy
kompyuter arxitekturasidan qat'i nazar, har qanday Java virtual mashinasida (JVM)
ishlashi mumkin bo'lgan bayt kodiga kompilyatsiya qilinadi. Java tilining sintaksisi
C   va   C++   tillariga   o xshaydi,   lekin   ularning   har   ikkalasidan   ham   past   darajadagi	
ʻ
imkoniyatlarga ega. Java ish vaqti odatda an'anaviy kompilyatsiya qilingan tillarda
mavjud   bo'lmagan   dinamik   imkoniyatlarni   (masalan,   aks   ettirish   va   ish   vaqti
kodini o'zgartirish) taqdim etadi.
Java   chiqqandan   so'ng   qisqa   vaqt   ichida   mashhurlikka   erishdi   va   o'shandan
beri   juda   mashhur   dasturlash   tili   bo'ldi.   GitHub   ma'lumotlariga   ko'ra,   Java   2022
yilda   uchinchi   eng   mashhur   dasturlash   tili   bo'ldi.   Hali   ham   ommabop   bo'lsa-da,
so'nggi   yillarda   Java-dan   foydalanish   asta-sekin   kamayib   bormoqda,   JVM-dan
foydalanadigan boshqa tillar esa mashhurlikka erishmoqda.
Java   dastlab   Sun   Microsystems   kompaniyasida   Jeyms   Gosling   tomonidan
ishlab   chiqilgan.   U   1995   yil   may   oyida   Sun's   Java   platformasining   asosiy
komponenti   sifatida   chiqarilgan.   Java   kompilyatorlari,   virtual   mashinalari   va   sinf
kutubxonalarining original va mos yozuvlar ilovasi dastlab Sun tomonidan xususiy
litsenziyalar   ostida   chiqarilgan.   2007   yil   may   oyidan   boshlab,   Java   Community
Process spetsifikatsiyalariga muvofiq, Sun o'zining ko'pgina Java texnologiyalarini
faqat GPL-2.0 litsenziyasi ostida qayta litsenziyaladi. Oracle o'zining HotSpot Java
Virtual   Mashinasini   taklif   qiladi,   ammo   rasmiy   ma'lumotnoma   ilovasi   OpenJDK
JVM   bo'lib,   u   bepul   ochiq   kodli   dasturiy   ta'minot   bo'lib,   ko'pchilik   ishlab
6 chiquvchilar   tomonidan   qo'llaniladi   va   deyarli   barcha   Linux   distributivlari   uchun
standart JVM hisoblanadi.
2024-yil mart oyidan boshlab Java 22 eng so nggi versiya hisoblanadi. Java 8,ʻ
11,   17   va   21   -   avvalgi   LTS   versiyalari   hali   ham   rasmiy   ravishda   qo'llab-
quvvatlanadi.
Jeyms Gosling, Mayk Sheridan va Patrik Naughton 1991 yil iyun oyida Java
tili loyihasini boshladilar. Java dastlab interaktiv televideniye uchun mo'ljallangan
edi, lekin u o'sha paytda raqamli kabel televideniesi sanoati uchun juda rivojlangan
edi.   Bu   til   dastlab   Goslingning   idorasi   oldida   turgan   eman   daraxti   nomi   bilan
atalgan.   Keyinchalik   loyiha   Green   nomini   oldi   va   nihoyat   Java   deb   o'zgartirildi,
Java   kofesi,   Indoneziyadagi   kofe   turi.   Gosling   Java-ni   tizim   va   amaliy
dasturchilarga tanish bo'lgan C/C++ uslubidagi sintaksis bilan ishlab chiqdi.
Sun   Microsystems   1996   yilda   Java   1.0   sifatida   birinchi   ommaviy   dasturni
chiqardi.   U   mashhur   platformalarda   hech   qanday   to'lovsiz   ishlash   vaqtini
ta'minlovchi bir marta yozish, istalgan joyda ishga tushirish (WORA) funksiyasini
va'da qildi. Juda xavfsiz va sozlanishi mumkin bo'lgan xavfsizlik xususiyatiga ega,
u   tarmoq   va   fayllarga   kirishni   cheklash   imkonini   berdi.   Tez   orada   yirik   veb-
brauzerlar   Java   ilovalarini   veb-sahifalarda   ishga   tushirish   qobiliyatini   o'z   ichiga
oldi   va   Java   tezda   mashhur   bo'ldi.   Java   1.0   kompilyatori   Java   1.0   tili
spetsifikatsiyasiga  qat'iy  rioya  qilish  uchun Artur  van  Xoff  tomonidan  Java  tilida
qayta yozilgan. Java 2 ning paydo bo'lishi  bilan (dastlab J2SE 1.2 sifatida 1998 -
1999   yil   dekabrda   chiqarilgan)   yangi   versiyalar   turli   xil   platformalar   uchun
yaratilgan   bir   nechta   konfiguratsiyalarga   ega   edi.   J2EE-ga   korporativ   ilovalar
uchun texnologiyalar va API-lar odatda server muhitida ishlaydi, J2ME esa mobil
ilovalar   uchun   optimallashtirilgan   API-larni   o'z   ichiga   oladi.   Ish   stoli   versiyasi
J2SE   deb   o'zgartirildi.   2006   yilda   marketing   maqsadlarida   Sun   yangi   J2
versiyalarini mos ravishda Java EE, Java ME va Java SE deb o'zgartirdi.
1997 yilda Sun Microsystems Java-ni rasmiylashtirish uchun ISO/IEC JTC 1
standartlari organiga, keyinroq esa Ecma Internationalga murojaat qildi, biroq u tez
orada   bu   jarayondan   voz   kechdi.   Java   Java   hamjamiyat   jarayoni   orqali
7 boshqariladigan amalda standart bo'lib qolmoqda. Bir vaqtlar Sun o'zining xususiy
dasturiy   ta'minot   maqomidan   qat'i   nazar,   ko'pgina   Java   dasturlarini   bepul   taqdim
etgan.   Sun   Java   Enterprise   System   kabi   ixtisoslashgan   mahsulotlar   uchun
litsenziyalarni sotish orqali Java'dan daromad keltirdi.
2006   yil   13   noyabrda   Sun   o'zining   Java   virtual   mashinasining   (JVM)   ko'p
qismini   faqat   GPL-2.0  litsenziyasi   shartlariga  ko'ra  bepul   va  ochiq  kodli   dasturiy
ta'minot   (FOSS)   sifatida   chiqardi.   2007   yil   8   mayda   Sun   bu   jarayonni   tugatdi   va
JVM   ning   barcha   asosiy   kodlarini   bepul   dasturiy   ta'minot/ochiq   kodli   tarqatish
shartlari   ostida   taqdim   etdi,   bundan   tashqari,   Sun   mualliflik   huquqiga   ega
bo'lmagan kodning kichik bir qismi.
Sun   vitse-prezidenti   Rich   Grinning   aytishicha,   Sunning   Java   bilan   bog'liq
ideal   roli   xushxabarchi   bo'lgan.   2009–10-yillarda   Oracle   korporatsiyasi   Sun
Microsystems’ni   sotib   olgandan   so‘ng,   Oracle   o‘zini   ishtirok   va   shaffoflik
hamjamiyatini   rivojlantirishga   tinimsiz   sodiqlik   bilan   Java   texnologiyasining
boshqaruvchisi   sifatida   ta’rifladi.   Bu   Oracle-ning   Android   SDK   ichida   Java-dan
foydalanganligi  uchun ko'p o'tmay Googlega qarshi  da'vo qo'zg'atishiga to'sqinlik
qilmadi (Android bo'limiga qarang).
2010 yil 2 aprelda Jeyms Gosling Oracle'dan iste'foga chiqdi.
2016 yil yanvar oyida Oracle JDK 9 asosidagi Java ish vaqti muhitlari brauzer
plaginini to'xtatishini e'lon qildi.
Java   dasturiy   ta'minoti   noutbuklardan   ma'lumotlar   markazlarigacha,   o'yin
konsollaridan ilmiy superkompyuterlargacha bo'lgan hamma narsada ishlaydi.
Oracle (va boshqalar) eski versiyalarda hal etilmagan xavfsizlik muammolari
tufayli   Java-ning   eskirgan   va   qo'llab-quvvatlanmaydigan   versiyalarini   o'chirishni
tavsiya qiladi.
Java tilini yaratishda beshta asosiy maqsad bor edi:
Bu oddiy, ob'ektga yo'naltirilgan va tanish bo'lishi kerak.
U mustahkam va xavfsiz bo'lishi kerak.
U arxitektura-neytral va portativ bo'lishi kerak.
U yuqori samaradorlik bilan bajarilishi kerak.
8 U talqin qilinishi, tishli va dinamik bo'lishi kerak.
2023-yil sentabr oyidan boshlab Java 8, 11, 17 va 21 uzoq muddatli qo‘llab-
quvvatlash (LTS) versiyalari sifatida qo‘llab-quvvatlanadi.
Oracle   2019-yil   yanvar   oyida  Java   8  LTS-ning   eski   versiyasi   uchun   so‘nggi
nol   xarajatli   ommaviy   yangilanishni   tijorat   maqsadlarida   foydalanish   uchun
chiqardi,   garchi   u   Java   8-ni   shaxsiy   foydalanish   uchun   umumiy   yangilanishlar
bilan   cheksiz   muddatga   qo‘llab-quvvatlaydi.   Adoptium   kabi   boshqa   sotuvchilar
OpenJDK   ning   Long-Term   Support   (LTS)   versiyalarini   bepul   qurishni   taklif
qilishda davom etmoqdalar. Ushbu tuzilmalar  qo'shimcha xavfsizlik tuzatishlarini
va xatolarni tuzatishni o'z ichiga olishi mumkin.
Java-ning asosiy versiyalari va ularning chiqish sanalari:
Sun   turli   dastur   muhitlariga   mo'ljallangan   Java-ning   to'rtta   nashrini   aniqladi
va qo'llab-quvvatlaydi va ko'plab API-larini platformalardan biriga tegishli bo'lishi
uchun segmentlarga ajratdi. Platformalar quyidagilar:
Smart-kartalar uchun Java karta.
Java   Platformasi,   Micro   Edition   (Java   ME)   -   cheklangan   resurslarga   ega
bo'lgan muhitlarga mo'ljallangan.
9 Java   Platformasi,   Standard   Edition   (Java   SE)   –   maqsadli   ish   stantsiyalari
muhiti.
Java   platformasi,   Enterprise   Edition   (Java   EE)   -   yirik   taqsimlangan
korxonalar yoki Internet muhitlariga mo'ljallangan.
Java   API   dagi   sinflar   paketlar   deb   ataladigan   alohida   guruhlarga   ajratilgan.
Har   bir   paket   tegishli   interfeyslar,   sinflar,   kichik   paketlar   va   istisnolar   to'plamini
o'z ichiga oladi.
Sun   shuningdek,   shaxsiy   Java   deb   nomlangan   nashrni   taqdim   etdi,   u
keyinchalik standartlarga asoslangan Java ME konfiguratsiya-profil juftliklari bilan
almashtirildi.
Java-ning  dizayn maqsadlaridan  biri  bu  portativlikdir, ya'ni   Java  platformasi
uchun yozilgan dasturlar har qanday apparat va operatsion tizim kombinatsiyasida
shunga   o'xshash   tarzda   ishlashi   kerak.   Bunga   Java   tili   kodini   to'g'ridan-to'g'ri
arxitekturaga xos mashina kodiga emas, balki Java baytkodi deb nomlangan oraliq
ko'rinishga   kompilyatsiya   qilish   orqali   erishiladi.   Java   bayt-kod   ko'rsatmalari
mashina kodiga o'xshaydi, lekin ular xost apparati uchun maxsus yozilgan virtual
mashina   (VM)   tomonidan   bajarilishi   uchun   mo'ljallangan.   Yakuniy
foydalanuvchilar odatda mustaqil Java ilovalari uchun o'z qurilmalarida o'rnatilgan
Java   Runtime   Environment   (JRE)   yoki   Java   ilovalari   uchun   veb-brauzerdan
foydalanadilar.
Standart   kutubxonalar   grafika,   tirqish   va   tarmoq   kabi   xostlarga   xos
xususiyatlarga kirishning umumiy usulini taqdim etadi.
Universal   bayt-koddan   foydalanish   portlashni   osonlashtiradi.   Biroq,   bayt-
kodni mashina ko'rsatmalariga talqin qilishning qo'shimcha xarajatlari sharhlangan
dasturlarni mahalliy bajariladigan dasturlarga qaraganda deyarli har doim sekinroq
ishlaydi. Ish vaqtida mashina kodiga bayt-kodlarni kompilyatsiya qiluvchi Just-in-
time   (JIT)   kompilyatorlari   dastlabki   bosqichdan   boshlab   joriy   qilingan.   Java
Hotspot   kompilyatori   aslida   ikkita   kompilyatordan   iborat;   va   GraalVM   bilan
(masalan,   Java   11   ga   kiritilgan,   lekin   Java   16   dan   boshlab   olib   tashlangan)
bosqichli kompilyatsiya qilish imkonini beradi. Java o'zi platformadan mustaqil va
10 u   Java   virtual   mashinasi   (JVM)   tomonidan   ishlaydigan   maxsus   platformaga
moslashtirilgan   bo'lib,   u   Java   baytekodini   platformaning   mashina   tiliga   tarjima
qiladi.
Java-da   yozilgan   dasturlar   C++   da   yozilganlarga   qaraganda   sekinroq   va
ko'proq   xotira   talab   qiladigan   obro'ga   ega.   Biroq,   1997/1998   yillarda   Java   1.1
uchun   o'z   vaqtida   kompilyatsiya   kiritilishi,   yaxshi   kod   tahlilini   qo'llab-
quvvatlovchi til xususiyatlarining qo'shilishi (masalan, ichki sinflar, StringBuilder
klassi,   ixtiyoriy   tasdiqlar   va   h.k.)   bilan   Java   dasturlarini   bajarish   tezligi   sezilarli
darajada   yaxshilandi.   .)   va   Java   virtual   mashinasidagi   optimallashtirishlar,
masalan,   HotSpot   2000-yilda   Sunning   standart   JVM-ga   aylandi.   Java   1.5   bilan
ishlash   java.util.concurrent   paketi   qo shilishi   bilan   yaxshilandi,   jumladanʻ
ConcurrentMaps   va   blokirovkasiz   ilovalar.   boshqa   ko'p   yadroli   to'plamlar   va   u
Java 1.6 bilan yanada takomillashtirildi.
Ba'zi platformalar Java uchun to'g'ridan-to'g'ri apparat yordamini taklif qiladi;
Java virtual mashinasini dasturiy ta'minot o'rniga apparatda Java baytekodini ishga
tushiradigan mikro kontrollerlar mavjud va ba'zi ARM-ga asoslangan protsessorlar
o'zlarining   Jazelle   opsiyasi   orqali   Java   baytekodini   bajarish   uchun   apparat
yordamiga   ega   bo'lishlari   mumkin,   ammo   ARMning   joriy   ilovalarida   qo'llab-
quvvatlash asosan to'xtatilgan.
Java  ob'ektning hayot  aylanishida  xotirani  boshqarish  uchun avtomatik axlat
yig'uvchisidan   foydalanadi.   Dasturchi   ob'ektlar   qachon   yaratilganligini   aniqlaydi
va   Java   ish   vaqti   ob'ektlar   endi   foydalanilmay   qolganda   xotirani   tiklash   uchun
javobgardir.   Ob'ektga   havolalar   qolmagandan   so'ng,   erishib   bo'lmaydigan   xotira
axlat   yig'uvchi   tomonidan   avtomatik   ravishda   bo'shatish   huquqiga   ega   bo'ladi.
Agar   dasturchining   kodi   endi   kerak   bo'lmagan   ob'ektga   havolani   o'z   ichiga   olsa,
odatda,   endi   kerak   bo'lmagan   ob'ektlar   hali   ham   ishlatilayotgan   konteynerlarda
saqlangan   bo'lsa,   xotira   oqishiga   o'xshash   narsa   hali   ham   sodir   bo'lishi   mumkin.
Agar   mavjud   bo'lmagan   ob'ekt   uchun   usullar   chaqirilsa,   null   ko'rsatgich   istisnosi
tashlanadi.
11 Java-ning   avtomatik   xotirani   boshqarish   modeli   ortidagi   g'oyalardan   biri
shundaki, dasturchilar xotirani qo'lda boshqarish yukidan xalos bo'lishlari mumkin.
Ba'zi tillarda ob'ektlarni yaratish uchun xotira bilvosita stekda ajratiladi yoki aniq
ajratiladi   va   uymadan   ajratiladi.   Ikkinchi   holda,   xotirani   boshqarish   mas'uliyati
dasturchiga   tegishli.   Agar   dastur   ob'ektni   ajratmasa,   xotira   oqishi   sodir   bo'ladi.
Agar dastur allaqachon ajratilgan xotiraga kirishga yoki bo'shatishga harakat qilsa,
natija aniqlanmagan va oldindan aytish qiyin va dastur beqaror bo'lib qolishi yoki
ishdan   chiqishi   mumkin.   Buni   qisman   aqlli   ko'rsatgichlardan   foydalanish   orqali
tuzatish mumkin, ammo ular ortiqcha yuk va murakkablikni oshiradi. Chiqindilarni
yig'ish   mantiqiy   xotira   oqishini   oldini   olmaydi,   ya'ni   xotira   hali   ham   havola
qilingan, lekin hech qachon ishlatilmaydiganlar.
Axlat yig'ish har qanday vaqtda sodir bo'lishi mumkin. Ideal holda, bu dastur
ishlamay   qolganda   sodir   bo'ladi.   Agar   yangi   ob'ektni   ajratish   uchun   to'plamda
bo'sh xotira etarli bo'lmasa, u ishga tushishi kafolatlanadi; bu dasturning bir zumda
to'xtab   qolishiga   olib   kelishi   mumkin.   Java-da   aniq   xotirani   boshqarish   mumkin
emas.
1.2. Samaradorlikni oshiruvchi dasturlash algoritmlari: Matching algoritmi
Oziq-ovqat   yetkazib   berish   ilovasida   foydalanuvchi   tajribasi   va   operatsion
samaradorlikning   turli   jihatlarini   yaxshilash   uchun   bir   nechta   algoritmlardan
foydalanish mumkin.
Mos   keladigan   algoritm:   Bu   algoritm   mavjud   restoranlar   va   ularning
menyulari   bilan   foydalanuvchi   afzalliklariga   mos   keladi.   U   foydalanuvchiga
tegishli   variantlarni   taklif   qilish   uchun   oshxona   turi,   masofasi,   foydalanuvchi
reytinglari va yetkazib berish muddati kabi omillarni hisobga oladi.
Marshrutlash algoritmi: Yetkazib berish kontekstida marshrutlash algoritmlari
haydovchilarning yetkazib berish yo'llarini optimallashtirish uchun juda muhimdir.
Ushbu   algoritmlar   etkazib   berish   vaqtini   kamaytirish   va   samaradorlikni   oshirish
uchun   transport   sharoitlari,   etkazib   berish   vaqti   oynalari   va   bir   nechta
buyurtmalarning joylashuvi kabi omillarni hisobga oladi.
12 Tavsiya algoritmi: Tavsiya algoritmlari restoran va menyu elementlari uchun
moslashtirilgan   tavsiyalarni   taklif   qilish   uchun   foydalanuvchi   xatti-harakati,
afzalliklari   va   oldingi   buyurtmalarini   tahlil   qiladi.   Ushbu   algoritmlar
hamkorlikdagi filtrlash, kontentga asoslangan filtrlash yoki gibrid yondashuvlarga
asoslangan bo'lishi mumkin.
Buyurtmani   bajarish   algoritmi:   Bu   algoritm   buyurtmalarni   samarali   bajarish
jarayonini   boshqaradi.   Bu   buyurtma   hajmi,   masofa   va   yetkazib   berish   vaqti
cheklovlari   kabi   omillarni   hisobga   olgan   holda   mavjud   restoranlar   va   yetkazib
berish haydovchilariga buyurtma berishni optimallashtiradi.
Dinamik narxlash algoritmi: Dinamik narxlash algoritmlari talab, kun vaqti va
mavjudlik   kabi   omillarga   asoslanib,   menyu   elementlari   narxlarini   moslashtiradi.
Ushbu algoritmlar  daromadlarni  optimallashtirishga va eng  yuqori  soatlarda  talab
va taklifni muvozanatlashga yordam beradi.
Geolocation   algoritmlari:   Geolocation   algoritmlari   foydalanuvchining   joriy
manzilini   aniqlaydi   va   foydalanuvchi,   restoranlar   va   yetkazib   berish   manzillari
orasidagi masofani hisoblab chiqadi. Ular etkazib berishning aniq hisob-kitoblarini
taqdim etish va marshrutni rejalashtirishni optimallashtirish uchun zarurdir.
Baholash   va   tartiblash   algoritmlari:   Bu   algoritmlar   restoran   va   menyu
elementlarini tartiblash uchun foydalanuvchi reytinglari va sharhlarini tahlil qiladi.
Ular foydalanuvchilarga yuqori sifatli variantlarni topishga va umumiy qoniqishni
yaxshilashga yordam beradi.
Inventarizatsiyani  boshqarish   algoritmi:  Restoranlar  uchun  inventarizatsiyani
boshqarish   algoritmlari   ingredientlarga   bo'lgan   talabni   bashorat   qiladi   va
chiqindilarni   minimallashtirish   va   menyu   elementlari   mavjudligini   ta'minlash
uchun inventar darajasini boshqaradi.
Ushbu algoritmlar oziq-ovqat yetkazib berish dasturining o'ziga xos talablari
va   ko'lamiga   qarab   murakkablikda   farq   qilishi   mumkin.   Ushbu   algoritmlarni
amalga   oshirish   va   nozik   sozlash   ma'lumotlarni   tahlil   qilish,   optimallashtirish
texnikasi va dasturiy ta'minot muhandisligi bo'yicha tajribani talab qiladi.
13 Oziq-ovqat   yetkazib   berish   ilovasida   mos   keladigan   algoritm
foydalanuvchilarni   ularning   afzalliklari   va   boshqa   omillarga   asoslangan   eng   mos
restoran   variantlari   bilan   bog‘lashda   muhim   rol   o‘ynaydi.   Algoritm
foydalanuvchining   afzalliklari   haqida   ma'lumot   to'plashdan   boshlanadi.   Bunga
oshxona   turlari,   ovqatlanish   cheklovlari,   afzal   qilingan   narxlar   oralig'i,   yetkazib
berish   joyi   va   boshqa   tegishli   mezonlar   kiradi.   Keyinchalik,   algoritm   ilova
ma'lumotlar   bazasidan   yoki   tashqi   API'lardan   mavjud   restoranlar   haqidagi
ma'lumotlarni   oladi.   Bu   ma lumotlarga   oshxona   turlari,   menyu   elementlari,ʼ
joylashuvi,   ish   vaqti,   yetkazib   berish   zonalari   va   foydalanuvchi   reytinglari   kabi
restoran   tafsilotlari   kiradi.   Algoritm   restoranlar   ro yxatini   foydalanuvchining	
ʻ
afzalliklari   va   masofa,   mavjudlik   va   mashhurlik   kabi   boshqa   omillarga   qarab
filtrlaydi.   U   foydalanuvchining   oshxona   afzalliklariga   mos   keladigan,
foydalanuvchi   joylashgan   joyga   yetkazib   berishni   taklif   qiladigan   va   yuqori
reytingga   ega   bo'lgan   restoranlarni   birinchi   o'ringa   qo'yishi   mumkin.   Har   bir
restoranga foydalanuvchining afzalliklari va boshqa tegishli omillarga muvofiqligi
asosida ball beriladi. Algoritm oshxona mosligi, yaqinlik, etkazib berish muddatini
baholash,   maxsus   takliflar   mavjudligi   va   foydalanuvchi   reytinglari   kabi   turli
parametrlarni hisobga oladi. Yuqori ball to plagan restoranlar foydalanuvchi uchun	
ʻ
mosroq   deb   hisoblanadi.   Nihoyat,   algoritm   mos   keladigan   restoranlarni
foydalanuvchiga tartiblangan ro yxat yoki ilova interfeysidagi tarmoq ko rinishida	
ʻ ʻ
taqdim   etadi.   Foydalanuvchi   variantlarni   ko'rib   chiqishi,   batafsil   restoran
profillarini   ko'rishi,   menyularni   o'rganishi   va   buyurtmani   qaerga   joylashtirish
haqida qaror qabul qilishi mumkin. Algoritm foydalanuvchilarning o'zaro ta'siridan
o'rganadigan va vaqt o'tishi  bilan mos keladigan mezonlarni o'zgartiradigan qayta
aloqa   halqasini   o'z   ichiga   olishi   mumkin.   Masalan,   foydalanuvchi   reytinglari,
buyurtmalar   tarixi   va   har   bir   buyurtmadan   keyin   taqdim   etilgan   fikr-mulohazalar
asosida   tavsiyalarni   yaxshilashi   mumkin.   Algoritm   real   vaqt   rejimida   restoran
mavjudligi,   menyu   elementlari   yoki   foydalanuvchi   afzalliklaridagi   o'zgarishlarni
aks   ettirish   uchun   yangilanishlarni   taqdim   eta   olishi   kerak   .   Bu
foydalanuvchilarning har doim eng dolzarb va dolzarb ma'lumotlarga ega bo'lishini
14 ta'minlaydi.   Samarali   moslashish   algoritmi   foydalanuvchilarga   o'z   xohishlariga
mos   keladigan   restoranlarni   topishga   yordam   berish   orqali   foydalanuvchi
tajribasini   yaxshilaydi   va   buyurtma   berishda   tez   va   ongli   qaror   qabul   qilishni
osonlashtiradi.
Foydalanuvchilarni o‘z xohishlariga mos restoranlar bilan moslashtirish orqali
algoritm   shaxsiylashtirilgan   tajribani   taqdim   etadi.   Bu   foydalanuvchi   qoniqishini
va ilovaga bo'lgan munosabatini oshiradi, bu esa yuqoriroq saqlash stavkalariga va
takroriy   foydalanishga   olib   keladi.   Foydalanuvchilar   tanlashlari   mumkin   bo'lgan
juda   ko'p   sonli   restoranlarga   ega   bo'lgan   Moslash   algoritmi   foydalanuvchilarga
tegishli   variantlarni   taqdim   etish   orqali   kashfiyot   jarayonini   soddalashtiradi.   Bu
foydalanuvchilarning mos restoranlarni qidirishda vaqt va kuchini tejaydi, umumiy
foydalanish   qulayligini   oshiradi.   Yaxshi   ishlab   chiqilgan   Moslash   algoritmi
foydalanuvchilarning   o'zlari   qiziqqan   restoran   va   menyu   elementlarini   topish
ehtimolini oshiradi, bu esa yuqori konversiya stavkalariga olib keladi. 
15 II BOB. DRON EXPRESS DASTURINI TASHKIL ETISHNING ZARURIY
VOSITALARI
2.1. Foydalanuvchilar bilan o’zaro muloqot integratsiyasini ta’minlash
Foydalanuvchilar   o'zlarining   afzalliklariga   mos   keladigan   variantlar   taqdim
etilganda   buyurtma   berish   ehtimoli   ko'proq   bo'ladi,   bu   esa   platforma   uchun
daromadni   oshiradi.   Restoranning   mavjudligi,   yetkazib   berish   masofasi   va
buyurtma   hajmi   kabi   omillarni   hisobga   olgan   holda,   algoritm   yetkazib   berish
haydovchilari   va   oshxona   xodimlari   kabi   resurslardan   foydalanishni
optimallashtirishga   yordam   beradi.   Bu   samarali   operatsiyalarni   ta'minlaydi   va
chiqindilarni   minimallashtiradi,   platformaning   rentabelligiga   hissa   qo'shadi.
Foydalanuvchilar   ilova   bilan   o‘zaro   aloqada   bo‘lib,   fikr-mulohazalarini   bildirar
ekan,   Moslash   algoritmi   vaqt   o‘tishi   bilan   o‘z   tavsiyalarini   doimiy   ravishda
yaxshilashi   mumkin.   Bu   algoritm   aniqroq   va   dolzarb   bo'lib,   foydalanuvchining
yuqori   faolligi   va   qoniqishiga   olib   keladigan   ijobiy   geribildirim   davrini   yaratadi.
Olomon   bozorda   murakkab   moslashish   algoritmi   oziq-ovqat   yetkazib   berish
platformasi   uchun   raqobatbardosh   farqlovchi   bo'lib   xizmat   qilishi   mumkin.
Foydalanuvchilarga  yuqori   tavsiyalar   va   shaxsiylashtirilgan   tajribani   taqdim   etish
uzoq   muddatda   mijozlarni   jalb   qilish   va   saqlab   qolishga   yordam   beradi.   Oxir
oqibat,   oziq-ovqat   yetkazib   berish   platformasining   muvaffaqiyati   uning
foydalanuvchilarni   restoranlar   bilan   bog'lash   va   buyurtma   hajmini   oshirish
qobiliyatiga   bog'liq.   Muvaffaqiyatli   mos   keladigan   algoritm   foydalanuvchilarni
sotib   olish,   saqlash   va   umumiy   buyurtma   hajmini   oshirish   orqali   biznes   o'sishiga
hissa qo'shadi. Moslash algoritmi oziq-ovqat yetkazib berish ilovasining shunchaki
texnik   komponenti   emas;   bu   foydalanuvchi   tajribasi,   biznes   samaradorligi   va
bozorda raqobatdosh ustunlikning asosiy drayveri.
Oziq-ovqat   yetkazib   berish   ilovasida   mos   keladigan   algoritm   ma'lumotlarni
qayta ishlash, tahlil qilish va qaror qabul qilish mantig'ining kombinatsiyasi orqali
amalga   oshiriladi.   Moslash   algoritmi   foydalanuvchi   ma'lumotlarini   yig'ish   bilan
boshlanadi.   Bu   ularning   joylashuvi,   oshxona   afzalliklari,   ovqatlanish   cheklovlari,
byudjet   cheklovlari   va   boshqa   tegishli   mezonlarni   o'z   ichiga   olishi   mumkin.
16 Foydalanuvchilar   ushbu   ma'lumotni   ilovadagi   filtrlar   yoki   sozlamalar   orqali   yoki
ilova   ichidagi   o'tmishdagi   o'zaro   aloqalari   va   xatti-harakatlari   orqali   aniq   taqdim
etishlari   mumkin.   Algoritm   mavjud   restoranlar   haqidagi   ma'lumotlarni   ilova
ma'lumotlar   bazasidan   yoki   tashqi   API'lardan   oladi.   Bu   ma lumotlarga   restoranʼ
nomlari,   joylar,   taklif   qilinadigan   oshxonalar,   menyu   elementlari,   ish   soatlari,
yetkazib   berish   joylari   va   foydalanuvchi   reytinglari   kabi   ma lumotlar   kiradi.	
ʼ
Algoritm   restoran   ma'lumotlarini   qayta   ishlaydi   va   foydalanuvchining   afzalliklari
yoki   cheklovlariga   mos   kelmaydigan   variantlarni   filtrlaydi.   Masalan,   u
foydalanuvchi   joylashgan   joyga   yetkazib   berishni   taklif   qilmaydigan,   kerakli
oshxona   turlarini   taqdim   etmaydigan   yoki   reytinglari   past   bo'lgan   restoranlarni
istisno qilishi mumkin. Qolgan har bir restoranga foydalanuvchining afzalliklari va
boshqa   omillarga   muvofiqligi   asosida   ball   beriladi.   Algoritm   oshxona   mosligi,
yaqinlik,   etkazib   berish   muddatini   baholash,   maxsus   takliflar   mavjudligi   va
foydalanuvchi   reytinglari   kabi   turli   parametrlarning   vaznli   kombinatsiyasidan
foydalangan   holda   ballarni   hisoblab   chiqadi.   Yuqori   ball   to plagan   restoranlar	
ʻ
yuqoriroq reytingga ega bo lib, foydalanuvchiga yaxshiroq moslik sifatida taqdim	
ʻ
etiladi.   Algoritm   mos   keladigan   restoranlarni   dastur   interfeysida   foydalanuvchiga
taqdim   etadi.   Bunga   restoran   nomlari,   oshxona   turlari,   yetkazib   berish   vaqti
taxminlari,  reytinglar   va  maxsus   takliflar   kabi  tegishli  ma lumotlar  bilan  restoran	
ʼ
kartalari   yoki   kafellarini   ro yxat   yoki   panjara   ko rinishida   ko rsatish   kiradi.	
ʻ ʻ ʻ
Foydalanuvchilar   opsiyalarni   ko‘rib   chiqishlari,   batafsil   restoran   profillarini
ko‘rishlari,   menyularni   o‘rganishlari   va   buyurtmani   qaerga   joylashtirish   haqida
qaror   qabul   qilishlari   mumkin.   Algoritm   doimiy   ravishda   real   vaqt   rejimida   o'z
tavsiyalarini yangilab turadi, bu esa restoran mavjudligi, foydalanuvchi imtiyozlari
va   boshqa   tegishli   omillardagi   o'zgarishlarni   aks   ettiradi.   Shuningdek,   u
foydalanuvchilarning   o'zaro   ta'siridan   o'rganadigan   va   vaqt   o'tishi   bilan   mos
keladigan mezonlarni o'zgartiradigan geribildirim davrini o'z ichiga olishi mumkin.
Masalan,   foydalanuvchi   reytinglari,   buyurtmalar   tarixi   va   har   bir   buyurtmadan
keyin taqdim etilgan fikr-mulohazalar asosida tavsiyalarni yaxshilashi mumkin.
17 Ushbu   bosqichlarni   bajarish   orqali   Moslash   algoritmi   foydalanuvchilarni
ularning afzalliklariga mos keladigan restoranlar bilan samarali bog'laydi va oziq-
ovqat   yetkazib   berish ilovasida   buyurtma
berishda   tez   va   ongli   qaror qabul   qilishni
osonlashtiradi.
Bu   yerda   oziq-ovqat   yetkazib   berish   ilovasi   uchun   asosiy   mos   keladigan
algoritmni   qanday   amalga   oshirishingiz   mumkinligini   ko'rsatadigan
soddalashtirilgan   Java   kodi   misoli.   Ushbu   misolda   e'tibor   foydalanuvchining
afzalliklari asosida restoranlarni filtrlash va tartiblashga qaratilgan:
import java.util.ArrayList;
18 import java.util.List;
class Restaurant {
    private String name;
    private String cuisineType;
    private double distance;
    private double rating;
    public Restaurant(String name, String cuisineType, 
double distance, double rating) {
        this.name = name;
        this.cuisineType = cuisineType;
        this.distance = distance;
        this.rating = rating;
    }
    // Getters
    public String getName() {
        return name;
    }
    public String getCuisineType() {
        return cuisineType;
    }
    public double getDistance() {
        return distance;
    }
    public double getRating() {
        return rating;
    }
19 }
public class Dron express {
    private static List<Restaurant> restaurants = new 
ArrayList<>();
    static {
        restaurants.add(new Restaurant("Restaurant A", 
"Italian", 3.5, 4.2));
        restaurants.add(new Restaurant("Restaurant B", 
"Mexican", 2.0, 4.5));
        restaurants.add(new Restaurant("Restaurant C", 
"Indian", 1.8, 4.0));
    }
    public static List<Restaurant> matchRestaurants(String 
preferredCuisine, double maxDistance, double minRating) {
        List<Restaurant> matchedRestaurants = new 
ArrayList<>();
        for (Restaurant restaurant : restaurants) {
            // Check if restaurant matches user preferences
            if 
(restaurant.getCuisineType().equalsIgnoreCase(preferredCuis
ine)
                    && restaurant.getDistance() <= 
maxDistance
                    && restaurant.getRating() >= minRating)
{
                matchedRestaurants.add(restaurant);
            }
        }
        return matchedRestaurants;
    }
20     public static void main(String[] args) {
        // Example user preferences
        String preferredCuisine = "Italian";
        double maxDistance = 3.0; // in miles
        double minRating = 4.0;
        List<Restaurant> matchedRestaurants = 
matchRestaurants(preferredCuisine, maxDistance, minRating);
        // Print matched restaurants
        if (matchedRestaurants.isEmpty()) {
            System.out.println("No restaurants match your 
preferences.");
        } else {
            System.out.println("Matched Restaurants:");
            for (Restaurant restaurant : 
matchedRestaurants) {
                System.out.println(restaurant.getName() + "
- Cuisine: " + restaurant.getCuisineType() +
                        ", Distance: " + 
restaurant.getDistance() + " miles, Rating: " + 
restaurant.getRating());
            }
        }
    }
}
21 Bu misol nom, oshxona turi, masofa va reyting kabi atributlarga ega Restoran
sinfini belgilaydi. Dron express klassi ma'qullangan oshxona, maksimal masofa va
minimal   reyting   kabi   foydalanuvchilarning   afzalliklari   asosida   restoranlarni
filtrlaydigan matchRestaurants usulini o'z ichiga oladi. Nihoyat, asosiy usulda biz
ushbu   mos   keladigan   algoritmni   namunaviy   foydalanuvchi   imtiyozlari   bilan
qanday ishlatishni va mos keladigan restoranlarni chop etishni ko'rsatamiz.
22 2.2. Android Studioda loyiha qurilishini tashkil qilish  
Loyiha,   Android   Studio   loyihasining   eng   asosiy   shablonlaridan   birini
qo'llaydi.   Bu   soddalik   bizga   tavsiya   etilgan   ilovalar   arxitekturasi   va   Android
arxitekturasi   komponentlari   kabi   juda   ko p   tushunchalarni   birdaniga   joriy   etishʻ
orqali   yangi   boshlanuvchilarni   haddan   tashqari   ko tarmasdan   Android   ilovalarini	
ʻ
ishlab   chiqishning   ba zi   asosiy   jihatlarini   tanishtirish   imkonini   beradi.   Ushbu	
ʼ
bobdagi   o'quv   qo'llanmasini   kuzatib   borganingizda,   ushbu   boshlang'ich   misol
loyihasida qo'llanilgan texnikalar va kodlar keyinroq batafsilroq yoritiladi.
Ushbu   dastur   Android   platformasida   ishlaydigan   bir   ilovadir.   Kodning
tushunchalari quyidagicha:
package   com.example.burger;:   Bu   satr,   kod   faylining   qaysi   paketda
joylashganligini   ko'rsatadi.   Bu   paket   nomi   com.example.burger   degan   nomli
paketga tegishli.
importlar:   Bu   qator,   kerakli   Java   klasslarni   import   qiladi,   masalan,
AppCompatActivity,   Intent,   Bundle,   View,   ImageButton,   ImageView,   TextView,
va boshqalar.
MainActivity   klassi:   Bu   klass,   asosiy   dastur   faoliyati   uchun   boshlang'ich
aktivitetni ifodalaydi. AppCompatActivity klassidan miras olgan.
23 onCreate   metod:   Bu   metod,   aktivitet   yaratilganida  avtomatik   chaqiriladi.  Bu
metod   ichida   dasturimizning   boshlanishi   uchun   kerakli   harakatlar   amalga
oshiriladi.
setContentView(R.layout.activity_main);:   Bu   metod,   faqatgina   ko'rsatgichni
aktivitetning dizaynini belgilaydi. Bizning holatimizda, "activity_main.xml" nomli
fayl ishlatilgan.
findViewById(R.id.pedeAq);: Bu metod, XML faylda belgilangan ID boyicha
bir View elementini topadi. Bu dasturda, "pedeAq" nomli ImageView topiladi.
setOnClickListener:   Bu   metod,   belgilangan   tindagini   istalgan   elementga
qo'shadi.   Bizning   holatimizda,   "pedeAq"   ImageView'i   uchun   tindagini   qo'shishni
belgilaydi.
Intent   ac   =   new   Intent(MainActivity.this,   ActivityHost.class);:   Bu   qator,
yangi Intent obyektini yaratadi. Ushbu Intent, joriy aktivitetdan ActivityHost nomli
boshqa bir aktivitetga o'tishni boshlaydi.
startActivity(ac);:   Bu   qator,   belgilangan   Intent   obyektini   ishga   tushiradi.
Ushbu qator, birinchi aktivitetni yopib, yangi aktivitetni ochadi.
Bular   birga,   kod   boshlang'ich   bir   ImageView   elementini   tekshiradi   va   unga
bir OnClickListener qo'shadi. Tugmaga bosinganda, yangi bir aktivitet ochiladi.
Bu   dastur   kodida   asosan   Android   platformasi   bo'yicha   foydalanilgan
algoritmlar   shu   jihatdan   ko'p   yo'nalishli   emas,   balki   keng   qamrovli   loyihalarda
umumiy   ravishda   ishlatiladigan   ustuvor   konseptlardan   foydalanilgan.   Androidda
har   bir   faoliyatning   ("activity")   bir   tur   tug'ilganligi   mavjud.   Dastur   aktivatsiya
bo'lib,   faoliyatlar   yaratiladi,   ularga   kiriladi   va   tashlanadi.   onCreate   metodi,
aktivatilayotgan   faoliyatni   yaratishda   qo'llaniladi.   Bu   metod   faoliyatning   birinchi
marta   yaratilganda   chaqiriladi.   pedeAq.setOnClickListener   metod,   ImageView
uchun   yangi   bir   OnClickListener   yaratadi   va   unga   bog'liq   bo'lib,   pedeAq
ImageView-i   bosilganda   ishga   tushiriladigan   hodisa   yoziladi.     Intent   obyekti,   bir
faoliyatdan   boshqa   faoliyatga   o'tish   uchun   ishlatiladi.   Intent,   bir   aktivatilayotgan
faoliyatdan boshqa bir faoliyatni boshlash uchun ma'lumotni o'z ichiga oladi. Shu
24 bilan   birga,   startActivity   metodiga   beshlag'lik   (Intent)   beriladi,   bu   faoliyatni
boshlash uchun buyruq beradi.
Bular   birga,   dastur   kodida   Android   platformasining   hayot   o'lchoviga
asoslangan,   yani   har   bir   faoliyatning   nima   qilishi   kerakligi,   qanday   hodisalarga
javob berishi lozimligi hamda faoliyatlar orasida o'girish-chiqishlarni boshqarishga
imkoniyat beruvchi asoslar o'z ichiga olindi.
Zanjirlar faoliyatning XML tartib resurs fayliga bir necha qator qo'shish yoki
Layout   Editor-ning   zanjirga   xos   xususiyatlaridan   foydalanish   orqali   amalga
oshirilishi   mumkin.   ConstraintLayout   ota-onasining   yuqori   chap,   yuqori   markazi
va   yuqori   o'ng   tomonida   joylashishi   cheklangan   uchta   Tugma   vidjetidan   iborat
tartibni   ko'rib   chiqing.   Ushbu   o'zgarishlar   bilan   vidjetlar   endi   ikki   yo'nalishli
gorizontal   cheklovlarga   ega.   Bu   Layout   Editor   ichida   zanjir   ulanishlari   orqali
vizual tarzda taqdim etilgan ConstraintLayout zanjirini tashkil qiladi.
Agar   zanjir   uslubi   sozlanmagan   bo'lsa,   ConstraintLayout   sukut   bo'yicha
yoyilgan zanjir uslubiga mos keladi. Zanjir uslubini zanjirdagi har qanday vidjetni
sichqonchaning o‘ng tugmasi bilan bosish va Cycle Chain Mode menyu opsiyasini
tanlash   orqali   o‘zgartirish   mumkin.   Har   safar   menyu   opsiyasi   bosilganda,   uslub
tarqalish,   ichkariga   yoyish   va   qadoqlash   tartibida   boshqa   sozlamaga   o‘tadi.   Shu
bilan   bir   qatorda,   uslub   layout_constraints   xususiyatini   ochadigan   va   zanjirning
yo nalishiga   qarab   horizontal_chainStyle   yoki   vertical_chainStyle   xossalariniʻ
o zgartiruvchi Atributlar asbob oynasida ko rsatilishi mumkin:
ʻ ʻ
O'rganish uchun zanjirning yakuniy maydoni zanjirdagi har bir vidjet mavjud
bo'shliqda   qancha   joy   egallashini   nazorat   qilish   uchun   individual   vidjetlarni
tortishni o'z ichiga oladi. Og'irlangan zanjir faqat yoyilgan zanjir uslubi yordamida
25 amalga   oshirilishi   mumkin   va   vazn   xususiyatiga   javob   beradigan   zanjir   ichidagi
har   qanday   vidjet   moslikni   cheklash   rejimi   uchun   sozlangan   mos   o'lchov
xususiyatiga   (vertikal   zanjir   uchun   balandlik   va   gorizontal   zanjir   uchun   kenglik)
ega   bo'lishi   kerak.   Vidjet   o‘lchami   uchun   mos   cheklov   rejimi   vidjetni   tanlash,
Atributlar   panelini   ko‘rsatish   va   o‘lchamni   match_constraint   (0dp   ga   ekvivalent)
ga o‘zgartirish orqali sozlanishi mumkin.
Android   Studio   yordamida   Androidni   ishlab   chiqishning   ba'zi   asosiy
tushunchalari   yoritilgan   bo'lsa,   endi   Android   Studio   o'zgarishlarni   qo'llash
xususiyatini  joriy qilish uchun yaxshi  vaqt. Barcha  tajribali  ishlab  chiquvchilarga
ma'lumki, ilovani kompilyatsiya qilish va ishga tushirishni kutish uchun sarflangan
har bir soniya kodni yozish va qayta ishlashga sarflanadi.
Android   Studio   ning   dastlabki   versiyalarida   har   safar   loyihaga   o zgartirishʻ
kiritilishi   kerak   bo lganda,   Android   Studio   kodni   qayta   kompilyatsiya   qiladi,   uni	
ʻ
Dex   formatiga   o zgartiradi,   APK   paket   faylini   yaratadi   va   uni   qurilma   yoki
ʻ
emulyatorga   o rnatadi.   Ushbu   amallarni   bajargandan   so'ng,   ilova   nihoyat   ishga	
ʻ
tushiriladi   va   sinovga   tayyor   bo'ladi.   Hatto   tez   rivojlanish   tizimida   ham   bu
jarayonni   yakunlash   uchun   ancha   vaqt   talab   etiladi.   Katta   dastur   uchun   bu
jarayonni   yakunlash  uchun  bir   daqiqa  yoki  undan  ko'proq  vaqt  ketishi   odatiy  hol
emas.   O'zgarishlarni   qo'llash,   aksincha,   loyiha   ichidagi   ko'plab   kod   va   resurs
o'zgarishlarini   u   allaqachon   qurilma   yoki   emulyator   seansida   ishlayotgan   vaqtda
deyarli   bir   zumda   ilova   ichida   aks   ettirish   imkonini   beradi.   Masalan,   Android
Studio-da   ishlab   chiqilayotgan,   qurilma   yoki   emulyatorda   allaqachon   ishga
tushirilgan   ilovani   ko'rib   chiqaylik.   Resurs   sozlamalari   yoki   usuldagi   kodga
o'zgartirishlar   kiritilsa,   "O'zgarishlarni   qo'llash"   yangilangan   kod   va   resurslarni
ishlayotgan   ilovaga   suradi   va   o'zgarishlarni   dinamik   ravishda   "almashtiradi".
Keyin   o'zgarishlar   butun   ilovani   yaratish,   joylashtirish   va   qayta   ishga   tushirish
zaruratisiz   ishlayotgan   ilovada   aks   ettiriladi.   Bu   ko'pincha   o'zgarishlarni
o'zgarishlarni qo'llamasdan vaqtning bir qismini sinab ko'rish imkonini beradi.
26 Ilovaning ishlashi bo'yicha tafsilotlar
Android   Studio   ishlayotgan   ilovaga   o zgartirishlar   kiritish   uchun   “Ilovaniʻ
ishga   tushirish”,   “O zgarishlarni   qo llash   va   faollikni   qayta   ishga   tushirish”   va	
ʻ ʻ
“Kod   o zgarishlarini   qo llash”   ko rinishida   uchta   variantni   taqdim   etadi.   Ushbu	
ʻ ʻ ʻ
variantlarni quyidagicha umumlashtirish mumkin:
•   Ilovani   ishga   tushirish   -   joriy   ishlayotgan   ilovani   to‘xtatadi   va   uni   qayta
ishga   tushiradi.   Agar   loyiha   oxirgi   marta   ishga   tushirilgandan   keyin   unga   hech
qanday   o'zgartirish   kiritilmagan   bo'lsa,   ushbu   parametr   ilovani   qayta   ishga
tushiradi.   Boshqa   tomondan,   loyihaga   o'zgartirishlar   kiritilgan   bo'lsa,   Android
Studio ilovani ishga tushirishdan oldin qurilma yoki emulyatorga qayta tiklaydi va
qayta o'rnatadi.
•   Kod   o'zgarishlarini   qo'llash   -   bu   parametr   loyihaga   kiritilgan   yagona
o'zgartirishlar  mavjud  usullarning  asosiy   qismiga   o'zgartirishlar   kiritishni  nazarda
tutganda yoki yangi sinf yoki usul qo'shilganda foydalanish mumkin. Tanlanganda,
o‘zgarishlar   ishlayotgan   ilovaga   ilovani   yoki   hozirda   ishlayotgan   faoliyatni   qayta
ishga tushirmasdan  qo‘llaniladi. Biroq, bu rejimni har qanday loyiha resurslariga,
masalan,   maket   fayliga   o'zgartirish   kiritilganda   ishlatib   bo'lmaydi.   Boshqa
cheklovlarga   usullarni   olib   tashlash,   usul   imzosini   o'zgartirish,   sinflar   nomini
o'zgartirish   va   boshqa   tizimli   kod   o'zgarishlar   kiradi.   Loyiha   manifestiga
o'zgartirishlar kiritilganda ham ushbu parametrdan foydalanish mumkin emas.
•   O‘zgarishlarni   qo‘llash   va   faollikni   qayta   ishga   tushirish   -   tanlanganda,
ushbu rejim loyiha doirasida kiritilgan har qanday kod yoki manba o‘zgarishlarini
dinamik   ravishda   qo‘llaydi   va   dasturni   qayta   o‘rnatmasdan   yoki   qayta   ishga
tushirmasdan   faoliyatni   qaytadan   boshlaydi.   "Kod   o'zgarishlarini   qo'llash"
opsiyasidan   farqli   o'laroq,   bu   loyihaning   kodi   va   resurslariga   o'zgartirishlar
kiritilganda ishlatilishi mumkin. Biroq, ba'zi tarkibiy kod o'zgarishlari va manifest
modifikatsiyalari bilan bir xil cheklovlar qo'llaniladi.
27 Har   qanday   resurs   o'zgarishi   "O'zgarishlarni   qo'llash"   va   "Faoliyatni   qayta
ishga tushirish" opsiyasidan foydalanishni talab qiladi. Android Studio ichida ilova
->   res   ->   layout   ->   fragment_first.xml   layout   faylini   tanlang.   Dizayn   rejimida
Layout   Editor   vositasi   yordamida   standart   TextView   komponentini   tanlang   va
atributlar   vositasi   oynasidagi   matn   xususiyatini   "Salom   Android"   ga   o'zgartiring.
"Kod o'zgarishlarini qo'llash" tugmasini bosishdan oldin yuqoridagi "O'zgarishlarni
qo'llashni   tiklash   sozlamalarini   sozlash"   bo'limida   ko'rsatilgan   qayta   tiklash
opsiyalari o'chirilganligiga ishonch hosil qiling. E'tibor bering, so'rov bajarilmaydi,
chunki   bu   o'zgarish   loyiha   resurslarini   o'z   ichiga   oladi.   O'zgarishlarni   qo'llash   va
faoliyatni qayta ishga tushirish tugmasini bosing va faoliyat qayta ishga tushishini
va TextView vidjetida yangi matnni ko'rsatishini tekshiring. Ko'p yillar davomida
Google   Android   ilovalarini   yaratishda   asboblar   va   ishlab   chiqish   to'plamlarini
taqdim   etishdan   boshqa   maxsus   yondashuvni   tavsiya   qilmadi,   shu   bilan   birga
ishlab   chiquvchilarga   ma'lum   bir   loyiha   yoki   individual   dasturlash   uslubi   uchun
eng yaxshi variantni tanlash imkonini beradi. Bu 2017 yilda Android Architecture
Components   taqdimoti   bilan   o'zgardi,   u   o'z   navbatida   2018   yilda   chiqarilganda
Android   Jetpack   tarkibiga   kirdi.   Ushbu   bobda   Jetpack   tushunchalari,   Android
ilovalari   arxitekturasi   tavsiyalari   va   ba'zi   asosiy   arxitekturalar   haqida   umumiy
ma'lumot   berilgan.   komponentlar.   Asoslar   o‘rganilgach,   bu   mavzular   batafsil
yoritiladi va keyingi boblarda amaliy misollar orqali ko‘rsatiladi.
Android Jetpack Android Studio, Android arxitektura komponentlari, Android
qo llab-quvvatlash   kutubxonasi   va   Android   ilovasi   qanday   tuzilishini   tavsiyaʻ
qiluvchi   ko rsatmalar   to plamidan   iborat.   Android   Architecture   Components	
ʻ ʻ
Android   ilovalarini   ishlab   chiqishda   umumiy   vazifalarni   bajarishni   tez   va   oson
qilish   va   shu   bilan   birga   arxitektura   yo riqnomalarining   asosiy   tamoyiliga   mos	
ʻ
ravishda   ishlab   chiqilgan.   Ushbu   kitobda   Android   arxitekturasining   barcha
komponentlari   yoritilgan   bo‘lsa-da,   bu   bobda   asosiy   arxitektura   yo‘riqnomalari
hamda ViewModel, LiveData va Lifecycle komponentlariga e’tibor qaratiladi, shu
bilan   birga   ma’lumotlarni   bog‘lash   va   omborlar   bilan   tanishtiriladi.   Davom
etishdan oldin, ilovalarni ishlab chiqishda Jetpack yondashuvi ixtiyoriy ekanligini
28 tushunish   muhimdir.   Yillar   davomida   mashhurlikka   erishgan   boshqa
texnikalarning   ba'zi   kamchiliklarini   ta'kidlar   ekan,   Google   ilovalarni   ishlab
chiqishda   ushbu   yondashuvlarni   butunlay   qoralashdan   to'xtadi.   Google   ilovani
ishlab   chiqishning   to'g'ri   yoki   noto'g'ri   yo'li   bo'lmasa-da,   tavsiya   etilgan   yo'l   bor,
degan pozitsiyani egallaydi.
"Android Studio'da Android ilovasining namunasini yaratish" deb nomlangan
bo'limda   dasturning   orqa   mantiqi   bilan   birga   foydalanuvchi   interfeysini   taqdim
etish   va   boshqarish   uchun   barcha   kodlarni   o'z   ichiga   olgan   yagona   faoliyatdan
iborat   Android   loyihasi   yaratilgan.   Jetpack   joriy   etilgunga   qadar,   eng   keng
tarqalgan   arxitektura  ushbu   paradigmaga   amal   qilib,  bir  nechta   faoliyatdan  (ilova
ichidagi   har   bir   ekran   uchun   bitta)   ilovalardan   iborat   bo'lib,   har   bir   faoliyat   sinfi
ma'lum   darajada   foydalanuvchi   interfeysi   va   orqa   kodni   aralashtirib   yubordi.
Ushbu   yondashuv   ilovaning   hayot   aylanishi   bilan   bog'liq   bir   qator   muammolarni
keltirib chiqardi (masalan, foydalanuvchi qurilmani har aylantirganida faoliyat yo'q
qilinadi va qayta yaratiladi, bu esa doimiy ravishda saqlanmagan har qanday ilova
ma'lumotlarining   yo'qolishiga   olib   keladi.   saqlash),   shuningdek,   foydalanuvchi
tomonidan   foydalaniladigan   har   bir   ilova   ekrani   uchun   yangi   faoliyatni   ishga
tushirish bilan bog'liq samarasiz navigatsiya kabi muammolar.
Eng  oddiy  darajada,  Google   endi   bir  xil   faoliyat   doirasidagi   kontent   sifatida
turli ekranlar yuklanadigan bir harakatli ilovalarni yoqlaydi. Zamonaviy arxitektura
ko'rsatmalari,   shuningdek,   ilova   ichidagi   mas'uliyatning   turli   sohalarini   butunlay
alohida   modullarga   ajratishni   tavsiya   qiladi   ("tashvishlarni   ajratish"   tushunchasi).
Jetpack bilan zamonaviy Android ilovalari arxitekturasining ushbu yondashuvining
kalitlaridan biri ViewModel komponentidir.
ViewModel-ning  maqsadi   foydalanuvchi   interfeysi  bilan  bog'liq   ma'lumotlar
modeli   va   ilova   mantig'ini   foydalanuvchi   interfeysini   ko'rsatish   va   boshqarish   va
operatsion tizim bilan o'zaro aloqa qilish uchun mas'ul bo'lgan koddan ajratishdir.
Shu tarzda ishlab chiqilganda, ilova bir yoki bir nechta UI kontrollerlaridan iborat
bo‘ladi,   masalan,   faoliyat   kabi   nazoratchilarga   kerak   bo‘lgan   ma’lumotlarni
boshqarish   uchun   mas’ul   ViewModel   misollari.   ViewModel   faqat   ma'lumotlar
29 modeli   va   tegishli   mantiq   haqida   biladi.   U   foydalanuvchi   interfeysi   haqida   hech
narsa   bilmaydi   va   foydalanuvchi   interfeysi   ichidagi   ko'rinishlar   bilan   bog'liq
hodisalarga   bevosita   kirishga   yoki   ularga   javob   berishga   harakat   qilmaydi.   UI
boshqaruvchisi   ko'rsatish   uchun   ma'lumotga   muhtoj   bo'lsa,   u   ViewModeldan   uni
taqdim   etishni   so'raydi.   Xuddi   shunday,   foydalanuvchi   foydalanuvchi   interfeysi
ichidagi ko'rinishga ma'lumotlarni kiritganda, UI boshqaruvchisi uni ishlash uchun
ViewModel-ga   uzatadi.   Mas'uliyatni   bu   ajratish   UI   kontrollerlarining   hayot
aylanishi   bilan   bog'liq   muammolarni   hal   qiladi.   Ilovaning   ishlash   muddati
davomida   UI   kontrolleri   qanchalik   tez-tez   qayta   yaratilishidan   qat'i   nazar,
ViewModel   nusxalari   xotirada   qoladi   va   shu   bilan   ma'lumotlar   izchilligini
saqlaydi.   Misol   uchun,   faoliyat   tomonidan   ishlatiladigan   ViewModel   faoliyat
tugaguniga   qadar   xotirada   qoladi,   bu   bitta   faoliyat   ilovasida   ilova   chiqmaguncha
bo lmaydi.ʻ
Moliyaviy   aktsiyaning   joriy   narxi   kabi   real   vaqtda   ma'lumotlarni
ko'rsatadigan   ilovani   ko'rib   chiqing.   Ilova   ViewModel   ichidagi   ma'lumotlar
modelini so'nggi ma'lumotlar bilan doimiy ravishda yangilash uchun birja narxlari
veb-xizmatidan   foydalanishi   mumkin.   Ushbu   real   vaqtda   ma'lumotlar
foydalanuvchiga   darhol   ko'rsatilsagina   qo'llaniladi.   UI   boshqaruvchisi   so'nggi
ma'lumotlarning   foydalanuvchi   interfeysida   ko'rsatilishini   ta'minlashning   faqat
ikkita usuli mavjud. Bitta variant - tekshiruvchi ViewModel bilan doimiy ravishda
ma'lumotlar   oxirgi   ko'rsatilgandan   beri   o'zgarganligini   aniqlash   uchun   tekshirish.
Biroq,   bu   yondashuvning   muammosi   shundaki,   u   yanada   samaraliroq   bo'lishi
30 mumkin.   Ma'lumotlar   uzatishning   real   vaqt   rejimini   saqlab   qolish   uchun   UI
kontrolleri ma'lumotlarning o'zgarishini doimiy ravishda tekshirib turishi kerak edi.
ViewModel   ichidagi   ma'lum   bir   ma'lumot   elementi   o'zgarganda,   UI   tekshiruvi
bildirishnoma   olishi   yaxshiroq   yechim   bo'ladi.   Bu   LiveData   komponenti
yordamida amalga oshiriladi. LiveData - bu qiymatni  kuzatish mumkin bo'lishiga
imkon   beruvchi   ma'lumotlar   egasi.   Asosiy   ma'noda,   kuzatilishi   mumkin   bo'lgan
ob'ekt o'z ma'lumotlaridagi o'zgarishlar sodir bo'lganda boshqa ob'ektlarni xabardor
qilishi   mumkin   va   shu   bilan   foydalanuvchi   interfeysi   har   doim   ViewModel
ichidagi   ma'lumotlarga   mos   kelishini   ta'minlash   muammosini   hal   qiladi.   Bu,
masalan,   ViewModel   qiymatiga   qiziqqan   UI   kontrolleri   kuzatuvchini   o'rnatishi
mumkinligini   anglatadi,   bu   esa,   o'z   navbatida,   bu   qiymat   o'zgarganda   xabardor
qilinadi. Bizning faraziy ilovamizda, masalan, aktsiya bahosi ViewModel ichidagi
LiveData   ob'ektiga   o'raladi   va   UI   boshqaruvchisi   qiymat   o'zgarganda
chaqiriladigan   usulni   e'lon   qilib,   qiymatga   kuzatuvchi   tayinlaydi.   Ma'lumotlar
o'zgarishi bilan ishga tushirilganda, bu usul ViewModel-dan yangilangan qiymatni
o'qiydi va foydalanuvchi interfeysini yangilash uchun foydalanadi.
LiveData   misoli,   shuningdek,   kuzatuvchi   ob'ektga   LiveData   ob'ektidagi
asosiy   qiymatni   yangilash   imkonini   beruvchi   o'zgaruvchan   deb   e'lon   qilinishi
mumkin.   Foydalanuvchi,   masalan,   ViewModel-da   saqlangan   qiymatni   qayta
yozishi   kerak   bo'lgan   foydalanuvchi   interfeysiga   qiymat   kiritishi   mumkin.
LiveData-dan   foydalanishning   asosiy   afzalliklaridan   yana   biri   shundaki,   u   o'z
kuzatuvchilarining   hayot   aylanishi   holatidan   xabardor.   Agar,   masalan,   faoliyat
LiveData   kuzatuvchisini   o'z   ichiga   olsa,   tegishli   LiveData   obyekti   faoliyatning
hayot   aylanishi   holati   qachon   o'zgarganini   bilib   oladi   va   shunga   mos   ravishda
javob   beradi.   Agar   faoliyat   to'xtatilgan   bo'lsa   (ehtimol   ilova   fonga   qo'yilgan
bo'lsa), LiveData ob'ekti  kuzatuvchiga hodisalarni  yuborishni to'xtatadi. Aytaylik,
faoliyat endigina boshlandi yoki to'xtatilgandan keyin davom etadi. Bunday holda,
LiveData ob'ekti kuzatuvchiga LiveData hodisasini  yuboradi, shunda faoliyat  eng
so'nggi qiymatga ega bo'ladi. Xuddi shunday, LiveData misoli faoliyat qachon yo'q
qilinganini bilib oladi  va resurslarni  bo'shatish  uchun kuzatuvchini  olib tashlaydi.
31 Hozircha   biz   faqat   kuzatuvchilardan   foydalangan   holda   UI   kontrollerlari   haqida
gaplashdik.   Amalda   esa   kuzatuvchidan   hayot   tsiklini   boshqarishda   Jetpack
yondashuviga mos keladigan har qanday ob'ektda foydalanish mumkin.
Android   foydalanuvchiga   faol   ilovani   fonga   joylashtirish   va   qurilmadagi
boshqa   vazifalarni   bajargandan   so'ng   (shu   jumladan,   boshqa   ilovalarni   ishga
tushirish) keyin unga qaytish imkonini beradi. Agar qurilma resurslari kam bo'lsa,
operatsion   tizim   eng   kam   foydalanilgan   ilovadan   boshlab   fondagi   ilovalar
jarayonlarini   to'xtatish   orqali   buni   tuzatadi.   Biroq,   foydalanuvchi   tugatilgan   fon
ilovasiga   qaytganida,   u   o'chirilgan   yoki   tugatilganligidan   qat'i   nazar,   u   fonga
joylashtirilgan   paytdagi   holatda   paydo   bo'lishi   kerak.   ViewModel   bilan   bog'liq
ma'lumotlar   nuqtai   nazaridan,   buni   ViewModel   Saved   State   moduli   yordamida
amalga   oshirish   mumkin.   Ushbu   modul   qiymatlarni   ilovaning   saqlangan   holatida
saqlashga   va   tizim   tomonidan   boshlangan   jarayon   tugatilgan   taqdirda   qayta
tiklanishiga imkon beradi.
32 XULOSA
Xulosa qilib aytganda, Java-dan foydalangan holda oziq-ovqat yetkazib berish
dasturini   ishlab   chiqish   o'rganish   tajribalari,   qiyinchiliklar   va   g'alabalar   bilan
to'ldirilgan   sayohat   bo'ldi.   Puxta   rejalashtirish,   sinchkovlik   bilan   amalga   oshirish
va sinchkovlik bilan sinovdan o'tkazish orqali biz zamonaviy oziq-ovqat yetkazib
berish   xizmatlarining   mohiyatini   o'zida   mujassam   etgan   mustahkam   va
xususiyatlarga boy platformani muvaffaqiyatli yaratdik. Ushbu kurs ishi davomida
biz   talablarni   tahlil   qilish   va   tizimni   loyihalashdan   tortib,   amalga   oshirish,
sinovdan   o'tkazish   va   joylashtirishgacha   bo'lgan   dasturiy   ta'minotni   ishlab
chiqishning   nozik   tomonlarini   o'rganib   chiqdik.   Java   kuchidan   foydalanib,   biz
foydalanuvchilar,   restoranlar   va   yetkazib   berish   xodimlarining   turli   ehtiyojlarini
qondiradigan   kengaytiriladigan   va   ishonchli   dastur   yaratdik.     Texnologiya
rivojlanishda davom etar ekan va iste'molchilarning umidlari ortib borar ekan, har
doim   takomillashtirish   va   innovatsiyalar   uchun   joy   mavjud.   Buyurtmalarni   real
vaqt   rejimida   kuzatish,   mashinani   o‘rganishga   asoslangan   tavsiyalar   tizimlari   va
IoT   va   blokcheyn   kabi   rivojlanayotgan   texnologiyalar   bilan   uzluksiz   integratsiya
kabi kelajakdagi takomillashtirishlar foydalanuvchi tajribasini yanada oshirishi va
biznes o‘sishini rag‘batlantirishi mumkin. Bundan tashqari, texnologiya sohasidan
tashqari,   bizning   urinishlarimiz   rivojlanish   jarayonida   hamkorlik,   aloqa   va
moslashuvchanlikning   muhimligini   ta'kidladi.   Bir   jamoa   bo'lib   ishlash   va   tezkor
metodologiyalarni   qo'llash   orqali   biz   to'siqlarni   engib   o'tdik   va   maqsadlarimizga
erishdik.   Yutuqlarimiz   haqida   mulohaza   yuritar   ekanmiz,   texnologiya   jamiyatga
katta   ta’sir   ko‘rsatishi,   yashash,   ishlash   va   atrofimizdagi   dunyo   bilan
munosabatimizni   o‘zgartirishi   mumkinligini   esga   olamiz.   Oziq-ovqat   yetkazib
berish bo'yicha dasturlarda bizning platformamiz nafaqat ochlikni qondiradi, balki
aloqalarni mustahkamlaydi.
Java-dan   foydalangan   holda   oziq-ovqat   yetkazib   berish   dasturini   ishlab
chiqish bo'yicha sayohatimiz nafaqat kod qatorlarini yaratish, balki foydalanuvchi
xatti-harakatlari,   restoran   operatsiyalari   va   etkazib   berish   logistikasining   nozik
33 tomonlarini   tushunishga   qaratilgan.   Ushbu   kurs   ishi   orqali   biz   raqamli
innovatsiyalar   va   real   dunyo   tajribasi   o'rtasidagi   tafovutni   bartaraf   etadigan
dasturiy   echimlarni   yaratishning   murakkabliklari   haqida   qimmatli   tushunchalarga
ega   bo'ldik.   Ushbu   loyihani   yakunlar   ekanmiz,   texnologiyaning   uzluksiz
evolyutsiyasi   va   iste'molchilarning   xohish-istaklarining   dinamik   xususiyatini   tan
olishimiz   kerak.   Bizning   ilovamiz   bizning   moslashuvchanligimiz   va   oziq-ovqat
yetkazib   berish   sanoatidagi   texnologik   yutuqlarning   oldingi   saflarida   qolish
majburiyatimizdan   dalolat   beradi.   Oldinga   qarab,   ilovamizni   yanada
takomillashtirish va takomillashtirish imkoniyatlari cheksizdir. Biz sun'iy intellekt
asosidagi shaxsiylashtirish, kengaytirilgan reallik menyusini ko'rib chiqish va aqlli
uy   qurilmalari   bilan   uzluksiz   integratsiya   kabi   ilg'or   xususiyatlarni   o'zida
mujassamlashtirgan   holda,   chinakam   immersiv   va   qulay   oziq-ovqat   buyurtma
qilish   tajribasini   yaratishni   nazarda   tutamiz.   Bundan   tashqari,   biz   texnologik
harakatlarimizda   barqarorlik   va   ijtimoiy   mas'uliyat   muhimligini   tan   olamiz.
Optimallashtirilgan   yetkazib   berish   yo llari   orqali   uglerod   chiqindilariniʻ
kamaytirish   yo llarini   o rganish,   ekologik   toza   qadoqlash   imkoniyatlarini   ilgari	
ʻ ʻ
surish   va   mahalliy   fermerlar   va   korxonalarni   qo llab-quvvatlash   orqali   biz	
ʻ
platformamizni   kengroq   ijtimoiy   maqsadlar   va   qadriyatlarga   moslashtira   olamiz.
Xulosa   qilib   aytganda,   biz   ushbu   sayohat   davomida   bizni   qo'llab-quvvatlagan
barchaga   -   o'qituvchilarimiz   va   tengdoshlarimizdan   tortib,   bebaho   fikr-mulohaza
va   dalda   bergan   foydalanuvchilar   va   manfaatdor   tomonlarga   o'z
minnatdorchiligimizni   bildiramiz.   Biz   birgalikda   innovatsiyalar   yaratish   va
texnologiya orqali  ijobiy o‘zgarishlarni  ilhomlantirish bo‘yicha muhim  bosqichga
erishdik.
Xulosa   qilib   aytganda,   biz   ushbu   loyihaga   o'zlarining   tajribalari,   qo'llab-
quvvatlashlari   yoki   fikr-mulohazalari   orqali   hissa   qo'shgan   barchaga   o'z
minnatdorchiligimizni  bildiramiz. Mustahkam  poydevor va innovatsiya ruhi bizni
oldinga olib boradi.
34 FOYDALANILGAN ADABIYOTLAR
1. Bloch, Joshua  (2018). "Samarali  Java:  dasturlash tili bo'yicha qo'llanma"
(uchinchi nashr). Addison-Uesli. ISBN 978-0134685991.
2. Farivar,   Kir   (2018   yil   27   mart).   “Google’ning   Java   API   paketlaridan
foydalanishi   adolatli   emas   edi”,   deb   apellyatsiya   sudining   qarori”.   Ars   Technica.
2019-yil 24-sentabrda asl nusxadan arxivlangan. Olingan. 2019-yil 6-avgust.
3. Gosling,   Jeyms;   Quvonch,   Bill;   Stil,   Guy;   Bracha,   Gilad;   Bakli,   Aleks
(2014).   Java®   til   spetsifikatsiyasi   (PDF)   (Java   SE   8   nashri).   Asl   nusxadan
arxivlangan (PDF) 2014-yil 21-oktabr. Olingan 2014-yil 18-noyabr.
4. Gosling, Jeyms; Quvonch, Bill; Stil, kichik Guy L.; Bracha, Gilad (2005).
Java tili spetsifikatsiyasi (3-nashr). Addison-Uesli. ISBN 0-321-24678-0. 2012-yil
14-fevralda asl nusxadan arxivlangan. Olingan. 2019-yil 8-fevral.
5. Li,   Timoti   (2019   yil   23   aprel).   "Google   Oliy   suddan   API   mualliflik
huquqlari  bo'yicha halokatli qarorni  bekor qilishni  so'raydi". Ars Technica. 2019-
yil 23-aprelda asl nusxadan arxivlangan. Olingan. 2019-yil 23-aprel.
6. Lindholm,   Tim;   Yelin,   Frank   (1999).   Java   virtual   mashinasi
spetsifikatsiyasi   (2-nashr).   Addison-Uesli.   ISBN   0-201-43294-3.   2011-yil   25-
sentabrda asl nusxadan arxivlangan. Olingan. 2019-yil 8-fevral.
7. Mullin,   Jo   (2012   yil   31-may).   "Google   muhim   API   qarorida   g'alaba
qozondi,   Oracle   ishi   barham   topdi".   Ars   Technica.   2017-yil   12-martda   asl
nusxadan arxivlangan. Olingan. 2012-yil 1-iyun.
8. Mullin,   Jo   (2012   yil   7-may).   "Google   Oracle   sud   jarayonidagi
huquqbuzarlikda aybdor; kelajakdagi huquqiy bosh og'riqlar". Ars Technica. 2012-
yil 8-mayda asl nusxadan arxivlangan. 2012-yil 8-mayda olingan.
9. Mullin, Jo (2016 yil 26-may). “Google Oracle’dan ustun keldi — Android
Java   API’laridan   “adolatli   foydalanadi”.   Ars   Technica.   2017-yil   20-yanvarda   asl
nusxadan arxivlangan. Olingan. 2016-yil 26-may.
35 10. Rosenblatt, Set  (2014 yil 9-may). "Sud Oracle bilan Android orqali  Java
patentiga   murojaat   qilishda   tarafdor".   CNET.   2014-yil   10-mayda   asl   nusxadan
arxivlangan. Olingan. 2014-yil 10-may.
36

Mavzu: “ Dron express ” mavzusida

MUNDARIJA: KIRISH ...................................................................................................................... 3 I BOB. ILOVA YARATISHDA QO’LLANILADIGAN DASTURIY VOSITALARNING O’RNI ...................................................................................... 6 1.1. Java dasturlash tili va mobil dasturlashda foydalanish ................................... 6 1.2. Samaradorlikni oshiruvchi dasturlash algoritmlari: Matching algoritmi .. . . . 12 II BOB. DRON EXPRESS DASTURINI TASHKIL ETISHNING ZARURIY VOSITALARI ......................................................................................................... 16 2.1. Foydalanuvchilar bilan o’zaro muloqot integratsiyasini ta’minlash ............ 16 2.2. Android Studioda loyiha qurilishini tashkil qilish ........................................ 23 XULOSA ................................................................................................................. 33 FOYDALANILGAN ADABIYOTLAR ................................................................. 35 2

KIRISH Oziq-ovqat yetkazib berish ilovalari odamlarning taomlarga buyurtma berish va lazzatlanish usullarini inqilob qilib, qulaylik va tanlovni barmoq uchida taqdim etdi. Raqamli transformatsiya davrida ushbu ilovalar ajralmas bo'lib qoldi, ular smartfon yoki kompyuterlariga bir necha marta bosish orqali mijozlarni sevimli restoran va oshxonalari bilan bog'laydi. Oziq-ovqat yetkazib berish xizmatlariga talabning o'sishi, ayniqsa global pandemiya sharoitida, iste'molchilar va biznesning o'zgaruvchan ehtiyojlarini qondirish uchun mustahkam va samarali platformalarni ishlab chiqish muhimligini ta'kidlaydi. Ushbu kurs ishi o'zining kengaytirilishi, ishonchliligi va platformadan mustaqilligi bilan mashhur bo'lgan ko'p qirrali va kuchli dasturlash tili bo'lgan Java-dan foydalangan holda oziq-ovqat yetkazib berish dasturini yaratish yo'lini boshlaydi. Java imkoniyatlaridan foydalangan holda biz foydalanuvchilar, restoranlar va yetkazib berish xodimlari o‘rtasida uzluksiz o‘zaro aloqalarni osonlashtiradigan, xavfsizlik, unumdorlik va qulaylikni ta’minlovchi funksiyalarga boy ilova yaratishni maqsad qilganmiz. Ushbu urinish orqali biz talablarni tahlil qilish va tizimni loyihalashdan tortib, amalga oshirish, sinovdan o'tkazish va joylashtirishgacha bo'lgan dasturiy ta'minotni ishlab chiqishning nozik tomonlarini o'rganishga intilamiz. Eng ilg‘or tajribalarga rioya qilgan holda va zamonaviy rivojlanish metodologiyalaridan foydalangan holda, biz nafaqat bevosita maqsadlarga javob beradigan, balki oziq-ovqat yetkazib berish texnologiyasi sohasida kelajakdagi takomillashtirish va innovatsiyalar uchun zamin yaratadigan yechim ishlab chiqishga intilamiz. Keyingi bo'limlarda biz talablarni har tomonlama tahlil qilishdan boshlanib, oziq-ovqat yetkazib berish bo'yicha to'liq funktsional dasturni ishga tushirish bilan yakunlangan rivojlanish jarayonining turli qirralarini ko'rib chiqamiz. Yo'lda biz qiyinchiliklarga duch kelamiz, muhim qarorlar qabul qilamiz va oxir-oqibat texnologiya va gastronomiya o'rtasidagi sinergiyaga misol bo'ladigan aniq mahsulot bilan chiqamiz. 3

Kurs ishining dolzarbligi . Bugungi raqamli asrda oziq-ovqat yetkazib berish ilovalari band odamlarning ehtiyojlarini qondirishda muhim rol o'ynaydi, ularning ovqatlanish tajribasida qulaylik va tanlov taklif qiladi. Shu sababli, Java-dan foydalangan holda oziq-ovqat yetkazib berish dasturini ishlab chiqish juda dolzarbdir, chunki u talabalarga real dunyo muammolari va iste'molchilar talablariga javob beradigan echimlarni yaratishda amaliy tajriba beradi. Kurs ishining ahamiyati . Talabalarni dasturiy ta'minotni ishlab chiqish, ma'lumotlar bazasini boshqarish va foydalanuvchi interfeysi dizayni bo'yicha qimmatli ko'nikmalar bilan ta'minlaydi, bularning barchasi texnologiya sanoatida talab qilinadi. Bundan tashqari, u har qanday professional sohada muvaffaqiyatga erishish uchun muhim xususiyatlar bo'lgan tanqidiy fikrlash, muammolarni hal qilish va hamkorlikni rag'batlantiradi. Kurs ishining maqsadi . Java-dan foydalangan holda oziq-ovqat yetkazib berish dasturini ishlab chiqish bo'yicha amaliy tajriba bilan ta'minlash va shu bilan ularning texnik malakasini oshirish va dasturiy ta'minot muhandisligi tamoyillarini tushunishdan iborat. Ushbu loyiha ustida ishlash orqali talabalar turli manfaatdor tomonlarning ehtiyojlarini qondiradigan kengaytiriladigan, ishonchli va foydalanuvchilarga qulay ilovalarni yaratishning murakkabliklari haqida tushunchaga ega bo'ladilar. Kurs ishining vazifasi . Tahlil qilish, tizim arxitekturasini loyihalash, funktsiyalarni amalga oshirish, funksionallikni sinab ko'rish va dasturni joylashtirishni o'z ichiga oladi. Talabalarga kod yozish, foydalanuvchi interfeyslarini yaratish va oziq-ovqat yetkazib berish platformasini ishlab chiqish uchun backend xizmatlarini integratsiya qilish topshirilgan. Kurs ishining metodi. Tahlil qilishdan boshlab, joylashtirish va texnik xizmat ko'rsatish bilan yakunlangan tizimli yondashuvga amal qiladi. Talabalar loyihani yakunlash uchun Java dasturlash tili, ma'lumotlar bazalari, ishlab chiqish muhitlari va sinov tizimlarini o'z ichiga olgan turli xil vositalar va texnologiyalardan foydalanadilar. 4

Kurs ishining natijalari va xulosalari . Kurs ishi natijalari Java-da ishlab chiqilgan, belgilangan talablarga javob beradigan va dasturiy ta'minotni ishlab chiqish tamoyillari bo'yicha malakasini ko'rsatadigan to'liq funktsional oziq-ovqat yetkazib berish dasturini o'z ichiga oladi. Qattiq sinov va baholash orqali har qanday xato yoki muammolar aniqlanadi va hal qilinadi, bu esa ilovaning ishonchliligi va qulayligini ta'minlaydi. Kurs ishidan olingan xulosalar dasturiy ta'minotni ishlab chiqish jarayonlarida hamkorlik, innovatsiyalar va doimiy takomillashtirish muhimligini ta'kidlaydi. Kurs ishi yuzasidan ishlab chiqilgan taklif va mulohazalar . Yaxshilash bo'yicha takliflar qo'shimcha funktsiyalarni o'z ichiga olishi, foydalanuvchi tajribasini yaxshilash, ish faoliyatini optimallashtirish va foydalanuvchi interfeysi dizaynini yaxshilashni o'z ichiga olishi mumkin. Bundan tashqari, ilovaning kuchli va zaif tomonlari, olingan saboqlar va kelajakdagi tadqiqot va ishlanmalar uchun yo'nalishlar bo'yicha sharhlar keyingi takrorlash va takomillashtirishga yo'naltirilgan. Umuman olganda, kurs ishi talabalarni dasturiy ta'minot muhandisligi va texnologiyasi bo'yicha martaba uchun tayyorlaydigan qimmatli o'quv tajribasi bo'lib xizmat qiladi. 5