1. OOP prinsiplari bilan tanishuv
Bugun siz yangi va qiziqarli dunyo bilan tanishasiz. Bu dunyo OOP — obyektga yo'naltirilgan dasturlash deb ataladi. Avvalroq siz sinflar va obyektlar bilan tanishgansiz. Bugun siz ular haqida ko'proq bilib olasiz, juda ko'p ko'proq.
OOP dasturlar murakkabligini oshirishga javoban paydo bo'ldi. Birinchi dasturlarda o'zgaruvchilar va funksiyalar soni o'n minglab bo'lganda, biror narsa qilish kerakligi ayon bo'ldi. Yeimlardan biri ma'lumotlar va ular bilan ishlaydigan funksiyalarni alohida obyektlarga birlashtirish edi.
Endi dasturchilar obyektlar o'rtasida alohida aloqani va obyekt ichida sodir bo'ladigan harakatlarni alohida tasvirlashga majbur bo'lishdi. Bu dasturlarni tushunishni va yozishni juda osonlashtirdi. Biroq, har doim mavjud muammo qoldi: qanday funksiyalar obyektda bo'lishi kerak va qanday funksiyalar obyektlar o'rtasida bo'lishi kerak.
Ko'plab yondashuvlar sinovdan o'tkazildi va eng yaxshi amaliyotlar asosida OOP ning 4 prinsipi shakllantirildi. Bu: abstraktsiya, inkapsulyatsiya, meros va polimorfizm. Ilgari ularni faqat uchtasi bor edi, lekin keyinchalik abstraktsiyani ham qo'shishga qaror qilishdi.
2. Abstraktsiya
Runetda hanuzgacha OOP dagi abstraktsiya ta'rifi haqida bahslar olib boriladi. Muammo shundaki, barchasi noto'g'ri emas, balki shundaki, hamma to'g'ri. Dastur hajmi qanchalik kichik bo'lsa, abstraktsiya Java tiliga shunchalik yopishgan, dastur qanchalik katta bo'lsa, u real dunyo obyektlarini modellashtirish/soddalashtirishga shunchalik kuchliroq bog'lanadi.
Lekin go'yoki eng yaxshi aql egalari shunday xulosaga kelishdiki:
Abstraktsiya — bu dasturda ob'ekti yetarli darajada aniqlik bilan ifodalovchi faqatgina xarakteristikalarni foydalanishdir. Asosiy g'oya — ob'ektni minimal maydonlar va metodlar to'plami bilan ifodalash, shu bilan birgalikda yetarli aniqlik bilan yechimni taqdim etish.
Java dasturlash tilida abstraktsiya abstrakt sinflar va interfeyslar orqali amalga oshiriladi.
Real hayotdagi abstraktsiya
Real hayotdagi abstraktsiyaning yaxshi misoli kompaniya yoki tashkilotdagi lavozimlarni tavsiflashdir. Lavozimning nomi — bu bir narsa, lekin har bir aniq lavozimning vazifalari — bu boshqa narsa.
Kelajakdagi kompaniyangiz tuzilishini loyihalashtirayotganingizni tasavvur qiling. Siz kotibning vazifalarini bir necha boshqa lavozimlarga "tarqatishingiz" mumkin. Bosh direktorning lavozimini bir nechta mustaqil lavozimlarga ajratishingiz mumkin: moliyaviy direktor, texnik direktor, marketing direktori, personal direktori. Yoki, masalan, ofis menejeri va rekruterni bir lavozimda birlashtiring.
Siz o'z firmanizda lavozimlar nomini o'ylab topasiz, so'ngra vazifalarni ushbu lavozimlarga "tarqatishingiz" mumkin. Abstraktsiya — ob'ektning yaxlitligidan chalg'ish va bizga kerak bo'lgan uning asosiy xususiyatlari va tarkibiy qismlarini ajratishdir.

Dasturlash nuqtai nazaridan, abstraktsiya — bu, aytaylik, dasturani ob'ektlarga to'g'ri bo'linishi. Odatda har qanday katta dasturni bir nechta usulda o'zaro aloqadagi obyektlar shaklida tasvirlash mumkin. Abstraktsiya asosiy xususiyatlarni tanlashga va ikkinchi darajali xususiyatlarni chetga chiqarishga imkon beradi.
3. Inkapsulyatsiya
Inkapsulyatsiyaning maqsadi — narsalarning o'zaro aloqasini soddalashtirish orqali sifatini yaxshilash.

Soddalashtirishning eng yaxshi usuli — har qanday murakkab narsalarni begona ko'zlardan yashirishdir. Misol uchun, sizni Boeing samolyotining kabinasiga o'tirsangiz, uni qanday boshqarishni darrov anglay olmaysiz:

Boshqa tomondan, samolyot yo'lovchilari uchun hammasi oson ko'rinadi: chipta sotib oling, samolyotga o'tiring, u uchib ketadi va qo'nadi. Siz faqat "chipta sotib olish" va "samolyotga o'tirish" ko'nikmalari bilan qit'adan qit'aga osonlik bilan uchishingiz mumkin. Samolyotning parvozga tayyorlanishi, uchishi, qo'nishi va turli xil holatlar sizdan yashirilgan. Bu hayotni osonlashtiradi.
Dasturlash nuqtai nazaridan, inkapsulyatsiya — bu "amalga oshirishni yashirish". Men ushbu ta'rifni yoqtiraman. Bizning sinfimiz yuzlab metodlarni o'z ichiga olishi va turli vaziyatlarda juda murakkab xulq-atvorni amalga oshirishi mumkin. Lekin biz uning barcha metodlarini begona ko'zlardan yashirishimiz mumkin (ularni private modifikatori bilan belgilash orqali) va boshqa sinflar bilan o'zaro aloqada faqat bir necha metodlarni qoldirishimiz mumkin (ularni public modifikatori bilan belgilash orqali). Shu tarzda dasturimizdagi qolgan barcha sinflar ushbu sinfda faqat uchta metodni ko'rib, aynan ularni chaqiradi. Va barcha murakkabliklar sinf ichida yashiriladi, xuddi baxtiyor yo'lovchilar kabi uchuvchi kabinasi.
4. Meros
Merosning ikki tarafi bor. Dasturlash tomoni va real hayot tomoni. Dasturlash nuqtai nazaridan, meros — bu ikki sinf o'rtasidagi o'ziga xos munosabat. Ammo real hayot nuqtai nazaridan, meros nima ekanligi qiziqroq.
Agar real hayotda biror narsa yaratish kerak bo'lsa, bizda ikki yechim bor:
- Kerakli narsani noldan yaratib, ko'p vaqt va kuch sarflash.
- Kerakli narsani allaqachon mavjud narsaga asoslanib yaratish.
Eng optimal strategiya quyidagicha ko'rinadi: mavjud yaxshi yechimni olib, uni biroz takomillashtirib, ehtiyojlarimizga moslashtirib, undan foydalanamiz.
Agar inson paydo bo'lish tarixiga nazar tashlasak, sayyorada hayot paydo bo'lganidan beri milliardlab yillar o'tganligini ko'ramiz. Agar inson maymundan kelib chiqqan (maymunga asoslanib) deb tasavvur qilsak, faqat bir necha million yil o'tgan. Noldan yaratish esa uzoqroq. Ancha uzoqroq.
Dasturlashda ham bir sinfni boshqa sinf asosida yaratish imkoniyati mavjud. Yangi sinf mavjud eski sinfning avlodi (merosxo'r) bo'ladi. Bu juda foydali, agar bir sinf mavjud bo'lsa va u bizga kerakli ma'lumotlar va metodlarning 80%-90% ni o'z ichiga oladi. Biz shunchaki mos sinfni yangi sinfning ota-ona sinfi deb e'lon qilamiz va yangi sinfda avtomatik ravishda ota-ona sinfning barcha ma'lumotlari va metodlari paydo bo'ladi. To'g'ri qulaymi?
5. Polimorfizm
Polimorfizm — bu dasturlash sohasidagi tushuncha. U bitta interfeys bilan turli xil amalga oshirishlar yashiringan vaziyatni tavsiflaydi. Agar uni real hayotdagi analoglarini qidirishga harakat qilsak, ularning biri mashina boshqarish jarayoni bo'lishi mumkin.
Agar kishi yuk mashinasini boshqara olsa, uni tez yordam mashinasiga ham, sport mashinasiga ham o'tirishga ruxsat berish mumkin. Kishi mashinani qanday bo'lishidan qat'i nazar boshqara oladi, chunki ularning barchasi bir xil boshqaruv interfeysiga ega: rul, pedal va vites qo'li. Mashinalarning ichki tuzilishi turli, lekin ularning barchasi bir xil boshqaruv interfeysiga ega.
Agar dasturlashga qaytsak, polimorfizm turli sinflarning obyektlariga bir xil ravishda murojaat qilish imkonini beradi (odatda umumiy ota-bobosi bo'lgan). Bu juda qadrli, katta dasturlar uchun qanchalik qiymatli ekanini aytishga qiyin. Uning qiymati dastur qanchalik katta bo'lsa, shuncha baland.
OOP — bu prinsiplardir. Ichki qonunlar. Ularning har biri bizni bir narsa bilan chegaralaydi, lekin dastur katta o'lchamlarga yetganda katta afzalliklarni beradi. OOP ning to'rt printsipi — bu stulning to'rt oyoqlari kabidir. Hech bo'lmasa birini olib tashlang, va butun tizim beqaror bo'lib qoladi.
GO TO FULL VERSION