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:

Funksional Dasturlash



b. Obyektli dasturlash:

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:


Texnoman Jamoasi - Texnoman foydalanuvchisi

Muallif haqida

Texnoman Jamoasi Internetni rivojlantiramiz!


Blogdagi so‘nggi maqolalar:


Birinchi bo‘ling!

Iltimos, fikr bildirish uchun saytga kiring yoki ro‘yxatdan o‘ting!