OOP: Qora quti yoxud dasturlash mag’zi
Salom, hammaga. OOP seriasidagi darslarimizni boshlasak ham bo’ladi.
Deyarli barcha dastrurchilar va ko’pchilik dasturlashni o’rganayotganlar
uchun «OOP» degan atama tanish va uni tushunish, tasavvur etish
yetarlicha bilim hamda tajribani talab qiladi. Professional dasturchilar
uchun bu «ajoib narsa, dasturlash mag’zi» bo’lsa, dasturlashga endi
kirib kelayotganlar uchun esa «qora quti», talabalar uchun esa «domladan
boshqa hech kim tushunmaydigan keraksiz mavzu» sifatida qaraladi.
Aslida u nima?
Ushbu seriadagi darslar kimlar uchun?
OOP ni tushunishni
xohlagan va dasturlashdan boshlang’ich bilimlarga ega bo’lgan
o’rganuvchilar uchun. Professional dasturchilardan esa ajoib va mazmunli
fikrlarini kutib qolamiz :).
Foydasi bormi?
Umuman olganda bu blogda foydasiz narsalar
yozilmaydi, agar bu narsa sizni qiziqtirsa demak albatta foydasi
bo’ladi. Bo’lajak dasturchi sifatida OOP ni tushunmaslik go’yoki
velosiped turganda piyoda yurishdek gap.
Talablar?
Mavzuga aloqador dastur kodlari Java tilida berib
boriladi, shuning uchun undan ozgina xabardor bo’lish kerak. Bundan
tashqari ilova qilingan havolalarni ham o’qib chiqish koni foyda. Har
bir dastur kodini o’z kompyuteringizda ishlatib ko’ring, o’zgartiring,
qo’shimchalar kiriting: takrorlash, sinab ko’rish va mustaqil
o’rganishga hech qanday o’quv metodi teng kela olmaydi :). Asosiy
terminlarni ingliz tilidagi varianti ham quyuq va kursiv shriftda berib boriladi, ular haqida google amakidan so’rab o’qib ko’ring. Demak birinchi darsimizni boshladik.
OOP nima?
OOP — ingliz tilidagi Object Orientated Programming
atamasining qisqartmasi, o’zbek tilimizda «Obyektga yo’naltirilgan
dasturlash» deb tarjima qilinadi. Dasturchilar orasida «OOP» sifatida
juda mashxur. Tarixi, kelib chiqishi va boshqa-boshqalar bilan batafsil wikida
o’qib oling (mavzuni tugatganimizdan so’ng). Talabalik yillarimizida
deyarli tushunib yetmaganmiz, «Dasturlash texnologiyalari», «OYDT» kabi
fanlarda tushunishga va tushuntirilishga rosa «harakat qilingan» mavzu
:). Afsus o’sha paytlarda bizda self-studying kuchli bo’lmagan yoki fan
o’qituvchilari o’zi endi o’rganayotgan mavzu bo’lgan. Keyinchalik ish va
qo’shimcha o’qish jarayonida amallab tushunib olganmiz. OOP ni iloji
boricha erta tushunish va tasavvur qilish dasturchini dasturlashga
bo’lgan qiziqishi va qarashlarini to’g’ri shakillantirar ekan. Shu
sababdan bugungi talabalar kechi bilan bakalavrni tugatguncha, normal
holda 2-kursni tugatguncha bu narsa bilan «oshna-og’ayni» bo’lib
olishlari kerak.
Domla tili bilan aytganda: «OOP — dasturlash konsepsiyasi bo’lib,
bunda dasturlashdagi barcha narsa obyekt va obyektlar tizimi sifatida
talqin qilinadi va …«, dexqonchasiga esa: «OOP — obyektlarni obyektlar yordamida yaratish«, dasturchi tilida esa «OOP — klass, metod, obyekt, obyektlar«. Bu turlicha gaplarning mantig’i bitta fikr «OOP — dasturlashni obyektlar yordamida tashkil qilish usuli» desak menimcha hech kim hafa bo’lmaydi. Iltimos, ushbu abzatsni qayta qayta o’qib chiqing toki nimanidir tushungunizcha.
Endi «Obyekt» atamasi ortida aynan nima yashiringanligiga to’xtalsak.
Obyekt — bu jism. Uni keng ma’noda «jismlar», «jarayon»,
«tizim»(sistema) deb ham tushunsak bo’ladi. Jism bu real hayotdagi
narsa, mavjudod, buyum va hodisa. Demak bu terminlarni hammasini bitta
so’z bilan — «obyekt» deb atasak. Ixtiyoriy obyekt — bir nechta
obyektlardan tashkil topgan. Ixtiyoriy jarayon yoki voqelikda ham
ko’plab obyektlar qatnashadi. Shu o’rinda «tizim» — bir necha obyektdan
tashkil topgan murakkab obyekt ekanligini etiborga olsak ixtiyoriy
obyektni tizim sifatida yoki tizimni obyekt sifatida qarashimiz mumkin.
Masalan real hayotdagi mashina — bu obyekt. Avtomashina ko’plab
obyektlar (dvigatel, korpus, akkumlyator, g’ildirak va boshqa ichki
mexanizmlar) dan tashkil topgan. Demak mashinani tizim sifatida qarasak
ham bo’ladi. O’z navbatida dvigatel ham ko’plab obyektlar (tsilindr,
porshen, svecha)dan tashkil topgan. Va hakazo, shu kabi ixtiyoriy obyekt
yoki tizimni mayda qismlarga bo’lib tashlasak bo’ladi. Bu real
hayotdagi obyektlardir.
Endi dasturlashdagi obyekt nima, qanday tuzilgan, nima uchun
dasturlashga obyektni olib kirdik? Avval quyidagilarni aniqlashtirib
olsak:
Birinchidan, dasturlashning maqsadi nima? — Maqsad real
hayotdagi tizim yoki jarayonlarni kompyuterlashtirish ya’ni ularni
modellashtirish yoki dasturlashtirish, ularni boshqaruvchi virtual tizim
yaratish. Yaratganda ham real hayotdagi tizimlar bilan bir xil
ishlovchi, ularni vazifalarini aynan bajaruvchi va asosiysi oddiy
foydalanuvchilarga ko’plab qulayliklar yaratuvchi tizim bo’lishi kerak.
Masalan agar avtosalonlarda avtomobil xarid qilish va navbat olishning
elektron tizimini yaratadigan bo’lsak bu tizimda qatnashuvchi obyektlar:
mashina, avtosalon, haridor, navbat, buyurtma, to’lov, bank kabilar
bo’ladi. Bu obyektlarni har birini alohida mustaqil tizim deb qaraymiz,
chunki ularning har biri yana boshqa bir obyektlardan tashkil topgan.
Ana endi shu tizimni ishlab chiqsak (dasturlasak!) istalgan shaxs
kompyuter va internet tarmog’i orqali real mashina xarid qilish uchun
to’lov o’tqazishi, elektron navbatga turishi va vaqti kelganda mashinani
salondan olib ketishi mumkin. Bu holda yaratilgan ushbu tizim real
hayotdagi tizimlar bilan bir xil vazifa bajaradi, lekin ulardan qulay,
tez va samaradorligi bilan ajralib turadi. Mana, maqsadni aniqlab oldik.
Ikkinchidan, ushbu tizimni qanday ishlab chiqamiz? —
Tasavvur qiling yuqorida aytib o’tilgan tizimni yaratish — ya’ni uni
dasturlab chiqish talab etilsin. Ammo biz bir-ikki dasturlash tillari va
ular yordamida kvadrat tenglama, funksiya grafigi yoki shunga o’xshash
o’quv nazariyalaridan boshqa narsa bilmaymiz. Bularning o’zi yetarli
emasligi aniq! Bu ko’nikmalar o’quvchini faqatgina dasturlashga olib
kirish uchun kerak, amalda esa bundanda murakkab yoki yirik bilimlar
qo’llaniladi: yuqori darajali dasturlash tillari (high level programming languages), ma’lumotlar bazasi (DBMS),
klient-server texnologiyalari, foydalanuvchi interfeysi dizayni,
ma’lumotlarni himoyalash… va hakazo. Bularning har biri mustaqil
yo’nalish, bir dunyo bilim. Yo’q siz ushbu bilimlarni ish va o’qish
jarayonida birin-ketin o’rganib boraverasiz, asosiysi — bugungi mavzu,
ya’ni OOP va uning yuqorida qo’yilgan maqsad (mashina xarid qilishning
elektron tizimi)ni ishlab chiqishda dasturchiga beradigan yordami. Demak
ushbu tizimni yaratishda bizga OOP yordam beradi. Keling endi ozgina
nazaryaga o’tsak va aynan nima uchun murakkab tizimlarni loyihalash va
yaratishda OOP asosiy qurol ekanligini bilib olsak.
Umuman olganda dasturlash (programming) ning 2 ta uslubi (konsepsiyasi yoki usuli, paradigmi) bor:
1. Funksional dastrulash (Procedure Orientated Programming)
usuli: Dastur kodi ketma-ket bajaraladigan operatorlar, matematik
ifodalar, buyruqlar va funksiyalardan iborat. Eslagan bo’lsangiz
dasturlash asoslari yoki informatikada o’rgatilgan sodda masalalar
(kvadrat tenglama, aylana yuzasi, yoki funksiya grafigi)ni, Paskal,
Basic, C tillari yordamida dasturlab ko’rganmiz. Bu tillar quyi darajali
dasturlash tillari (low level programming languages)
hisoblanib murakkab va yirik tizimlarni dasturini ishlab chiqishda juda
ham noqulay hisoblanadi. Nega? Tasavvur qiling yuqoridagi qo’yilgan
vazifani Paskal yoki C da yozib chiqish uchun qancha ish qilinadi? Nari
borsa bir necha yuzlab funksiyalar va ular orasidagi o’zaro aloqadan
iborat bo’ladi. Agar siz juda ham aqilli va qobilyatli bo’lgan
taqdirizda ham minglab qator dastur kodini yozib chiqasiz, ishonaman
qurbingiz yetadi, lekin dastur kodini kerak paytda o’zgartirish,
yangilik va qo’shimcha kiritishga kelganda bosh qotadi, yoki siz yozgan
dastur kodini boshqa bir dasturchi hamkoringiz tushunmaydi. O’zingiz
yozgan kod o’ziz uchun boshog’rigi bo’ladi.
2. Obyektli dasturlash (Object Orientated Programming)
usuli: Dastur kodi obyektlardan va ular orasidagi o’zaro
bog’liqliklardan iborat. Bu qanday? Bu shundayki siz real hayotdagi
obyektlarni dasturlaysiz, qandaydir masala yoki topshiriqni emas! Dastur
bir nechta obyektlardan, obyektlar yordamida bajariladigan amallardan
va obyektlar orasidagi axborot almashishdan iborat bo’ladi. Obyektni
qanday dasturlaymiz, qanday qoidalari bor, obyektlarni qanday qilib
dastur kodiga yuklaymiz — bularning bari navbatdagi darslarda. Muhimi
hozircha biz yirik tizimlarni (umuman olganda ixtiyoriy sodda masalani
ham) dasturlashda obyektga yo’naltirilgan dasturlash usuli, ya’ni OOP
juda ham samarali ekanligini bilamiz. Quyidagi 2 ta grafik orqali
berilgan 2 ta uslubni yanada aniqroq tushunib olish mumkin.
a. Funksional dasturlash:
b. Obyektli dasturlash:
3. Google Orientated Programming — googleda qidirib topib dasturlash 🙂
4. Copy-Paste Orientated Programming — birovnikini ko’chirib dasturlash 🙂
Eee, uzr adashib ketdim, 3 bilan 4 bu menimcha yangi yo’nalishlar, asosiysi 1 bilan 2.
Real hayotdagi obyekt tushunchasiga yuqorida to’xtaldik, endi dasturchi obyektni qanday tushunadi?
Obyekt — bu o’zaro aloqador xususiyatlar (data, states, fields,
properties) va ular ustidagi amallar (functions, behaviours, methods,
events)dan iborat yaxlitlik. Demak obyektda 2 turli narsa bor ekan:
xususiyatlar va metodlar. Xususiyat deganda obyekt haqidagi har qanday
ma’lumot, yoki obyektning ma’lum bir boshqa tashkil etuvchi obyekti
tushuniladi. Metod deganda shu obyekt bajaradigan vazifa yoki shu obyekt
ustida bajariladigan malum bir amalni tushunamiz. Harakat qilamizki,
real obyektlar bilan dasturdagi obyektlarni ayanan o’xshash yaratishga.
Masalan plastik kartochka bu — real hayotda to’lovlarni naqd pulsiz
amalga oshirishga yordam beradigan obyekt.
Uning xususiyatlari:
- o’lchami (eni va balandligi)
- turi (onlayn yoki offlayn)
- banki (ipoteka, agrobank …)
- hisob raqami
- balansi
- valyuta turi (so’m, dollar, rubl)
- … kabilardir.
Uning metodlari:
- to’lov o’tqazish
- balansni tekshirish
- balansni to’ldirish
- pin kod qo’yish
- pin kodni tekshirish
- hisob raqamini belgilash
- … kabilar
Ko’rgan
bo’lsangiz bu juda ham oddiy, real hayotdagi obyektlarni dasturga olib
kirish uchun obyektni xususiyatlari va obyekt bajaradigan amallarni
ajratib chiqamiz. Bundan tashqari obyektlarni bir-biri bilan
bog’liqligini, obyekt qandaydir vazifa bajarishda boshqa bir obyektdan
qanday foydalanishini ham aniqlab chiqishimiz zarur. Masalan plastik
kartochkadan to’lov o’tqazish uchun bizga yana terminal degan obyekt
zarur… Bu degani, biror bir tizimni dasturlash uchun real hayotda shu
tizimda qo’llaniladigan barcha obyektlarni dasturda yaratib, ular
o’rtasidagi axborot oqimi (data flow)ni belgilab chiqishimiz zarur.
Shu o’rinda OOP — nafaqat dasturlash usuli, balki, dasturchining fikr
qilish usuli desak ham bo’ladi. Agar sizda OOP usulida fikrlash va
tasavvur qilish qobilyati shakillangan bo’lsa ixtiyoriy tizim yoki
masala dasturini yaratishda hech qanday qiyinchilik bo’lmaydi. Hech
kimda o’z-o’zidan OOP da tasavvur qilish qobilyati shakillanmaydi,
buning uchun OOP ning asosiy qoidalarini o’rganib chiqish, tushunish va
amalda qo’llab ko’rish zarur. Demak, sizlar bilan navbatdagi darsda OOP
ning asosiy qoidalari bilan tanishib chiqamiz.
Manba:
Umumiy Dasturlash
OOP: Qora quti yoxud dasturlash mag’zi