— Salom, Amigo! Bugun men senga yangi va qiziqarli dunyoni ochib beraman. Bu dunyo OOP – obyektga yo'naltirilgan dasturlash deb nomlanadi. Sinf va obyektlar bilan tanishgansiz. Bugun ular haqida ko'proq, ancha ko'proq bilib olasiz.
OOPning to'rtta tamoyilidan boshlaymiz. Bu: abstraksiya, inkapsulyatsiya, meros va polimorfizm. (Ilgari uchtasi bor edi, keyinroq abstraksiyani qo'shishga qaror qilishdi)
1) Abstraksiya.
Haqiqiy hayotda abstraksiya uchun yaxshi misol kompaniya yoki tashkilotlarda lavozimlarni tasvirlashdir. Lavozim nomi bir narsa, ammo ushbu lavozimning har bir konkret majburiyati esa butunlay boshqa narsa.
Tasavvur qiling, siz kelajakdagi kompaniyangizning tuzilishini ishlab chiqmoqdasiz. Siz sekretarning vazifalarini bo'lib, ularni boshqa lavozimlar bo'yicha taqsimlashingiz mumkin. Ijrochi direktor lavozimini moliyaviy direktor, texnik direktor, marketing bo'yicha direktor, kadrlar bo'yicha direktor kabi bir necha mustaqil lavozimlarga bo'lishingiz mumkin. Yoki, masalan, ofis-menejer va rekruter lavozimlarini birlashtirishingiz mumkin.
Siz o'z firmangizdagi lavozim nomlarini o'ylab topasiz va keyin ushbu lavozimlar bo'yicha majburiyatlarni taqsimlaysiz. Bu abstraksiya - katta, monolit narsani ko'plab kichik tarkibiy qismlarga bo'lishdir.
Dasturlash nuqtai nazaridan, abstraksiya — bu, aytish mumkinki, dasturani to'g'ri obyektlarga bo'lishdir.
Odatda har qanday katta dasturni o'nlab usullar bilan o'zaro aloqadagi obyektlar ko'rinishida tasavvur qilish mumkin. Abstraksiya asosiy xususiyatlarni tanlash va ikkinchi darajali narsalarni kamaytirishga imkon beradi.
Abstraksiya - bu harbiy strategiyaga o'xshaydi. Yomon strategiya — va hech qanday ajoyib taktika vaziyatni to'g'irlay olmaydi.
2) Inkapsulyatsiya.
Inkapsulyatsiya maqsadi — narsalarning o'zaro aloqasini yaxshilash orqali ularni soddalashtirishdir.
Bir narsani soddalashtirishning eng yaxshi usuli — bu barcha murakkab narsalarni begonalardan yashirishdir. Masalan, agar sizni Boeing kabinasiga o'tkazishsa, qanday boshqarishni darrov tushunib olmaysiz:
Boshqa tomondan, samolyot yo'lovchilari uchun hamma narsa oddiyroq ko'rinadi: chipta sotib olish, samolyotga o'tirish, parvoz qilish va qo'nish. Siz faqat "chipta sotib olish" va "samolyotga o'tirish" ko'nikmalariga ega bo'lansiz, lekin qitadan qitaga ko'chib o'tishingiz mumkin. Uchishga tayyorgarlik, parvoz qilish, qo'nish va turli favqulodda vaziyatlar kabi barcha murakkabliklar bizdan yashirilgan. Sun'iy yo'ldoshning navigatsiyasi, avtomatik uchish va aeroportlar dispetcherlik markazlari haqida gapirmasa ham bo'ladi. Va bu hayotimizni osonlashtiradi.
Dasturlash nuqtai nazaridan, inkapsulyatsiya — bu "tadbiqni yashirishdir". Bu ta'rif menga yoqadi. Bizning sinfimiz yuzlab metodlarni o'z ichiga olishi va turli vaziyatlarda juda murakkab xulq-atvorni amalga oshirishi mumkin. Ammo, biz uning barcha metodlarini begonalardan yashirishimiz mumkin (private modifikatori bilan belgilang), va boshqa sinflar bilan o'zaro aloqada foydalanish uchun faqat bir necha metodni qoldiramiz (public modifikatori bilan belgilang). Keyin, dasturimizning barcha boshqa sinflari ushbu sinfda faqat uch metodni ko'radi, va aynan ularni chaqiradi. Va barcha murakkabliklar sinf ichida yashirin bo'ladi, xuddi baxtli yo'lovchilar uchun uchuvchilar kabinasi kabi.
3) Meros.
Merosning ikkita tomoni bor. Dasturlash tomoni va haqiqiy hayot tomoni. Dasturlash nuqtai nazardan, meros — bu ikki sinf orasidagi maxsus munosabatdir. Ammo, haqiqiy hayot nuqtai nazardan, meros nima ekanligi yanada qiziqarli.
Agar bizga haqiqiy hayotda biror narsani yaratish kerak bo'lsa, bizda ikkita yechim bor:
1) kerakli narsani noldan yaratish, ko'p vaqt va kuch sarflash.
2) kerakli narsani allaqachon mavjud bo'lgan narsalar asosida yaratish.
Eng maqbul strategiya quyidagicha ko'rinadi: mavjud bo'lgan yaxshi yechimni olamiz, uni ozgina ishlov beramiz, o'z ehtiyojlarimizga moslashtiramiz va foydalanamiz.
Agar insonning paydo bo'lish tarixini kuzatsak, sayyorada hayotning paydo bo'lishidan beri milliardlab yillar o'tgan bo'lar edi. Va agar inson maymundan (maymun asosida) kelib chiqqan deb hisoblansa, faqat bir necha million yil o'tgan. Noldan yaratilish — uzoqroq. Ancha uzoqroq.
Dasturlashda ham bir sinfni boshqasiga asoslanib yaratish imkoniyati mavjud. Yangi sinf allaqachon mavjud bo'lgan sinfning avlodi (merosxo'ri) bo'ladi. Bu juda foydali, agar bizda kerakli ma'lumotlar va metodlarning 80%-90% ni o'z ichiga olgan sinf mavjud bo'lsa. Biz shunchaki mos keladigan sinfni yangi sinfimizning ota sinfi deb e'lon qilamiz, va yangi sinfda avtomatik ravishda ota sinf ma'lumotlari va metodlari paydo bo'ladi. To'g'ri, qulay emasmi?
4) Polimorfizm.
Polimorfizm — bu dasturlash sohasi tushunchasi. Bu bitta interfeys ostida turli tadbiqlar yashirilgan vaziyatni tavsiflaydi. Agar uning haqiqiy hayotdagi analoglarini qidirishga harakat qilinsa, bir shunday analog avto boshqaruvi jarayoni bo'ladi.
Agar odam yuk mashinasini boshqara olsa, uni tez tibbiy yordam mashinasiga yoki sport mashinasiga o'zgartirib o'tqazish mumkin. Odam mashinani turlari qanday bo'lishidan qat'i nazar boshqarishi mumkin, chunki ularning barchasi boshqaruv interfeysi bir xil: rul, pedal va uzatmalar qutisi. Mashinalarning ichki tuzilishi turlicha, lekin ularning barchasi boshqaruv interfeysi bir xil.
Dasturlashga qaytadigan bo'lsak, polimorfizm turli sinflarning obyektlariga bir xil murojat qilish imkonini beradi (odatda umumiy avlodga ega bo'lgan) – bahosini o'tkazish qiyin bo'lgan narsa. Uning qiymati dastur kattalashgani sayin oshib boradi.
OOP – bu tamoyillar. Ichki qonunlar. Har biri bizni nimadadir cheklaydi, lekin ular evaziga katta imtiyozlar taqdim etadi, dastur ulkan o'lchamlarga yetganda. OOPning to'rtta tamoyili - bu stulning to'rtta oyoqchasi kabi. Kamida biri olib tashlansa, butun tizim barqaror bo'lmaydi.
GO TO FULL VERSION