OOP (Object Oriented Programming) – Obyektga yo’naltirilgan dasturlash degan tushunchaga dasturlashni o’rganish davomida duch kelamiz. OOP bo’yicha to’liq tanishib chiqamiz.
Obyektga yo‘naltirilgan dasturlash atamasi dastlab 60-yillarning o‘rtalarida, Simula-67 dasturlash tilida paydo bo‘lgan. Ammo, bu til FORTRAN, ALGOL, PL/1 kabi tillarga nisbatan o‘zining imkoniyatlari past bo‘lganligi hamda shu davrda yechish talab qilingan masalalar uchun yetarli vositalarni taklif qila olmagani uchun dasturchilar orasida keng ommalasha olmadi. Keyinchalik obyektga yo‘naltirilgan dasturlash tillari Smalltalk, Object Pascal, C++, A da, hozirda esa C# kabi yuqori darajali dasturlash tillarining topologiyasi asosida rivojlandi va ommalashdi.
Obyektga yo‘naltirilgan dasturlash – bu dasturlashning shunday yo‘nalishiki, dasturiy tizimda o‘zaro aloqada bo‘lgan obyektlar majmuasi sifatida qaraladi va har bir obyektni ma’lum bir sinfga mansub hamda har bir sinf qandaydir shajarani hosil qiladi deb hisoblanadi. Alohida olingan sinf ma’lumotlar to‘plami va ular ustida bajariladigan amallarning to‘plami sifatida qaraladi. Bu sinfning elementlariga faqat shu sinfda aniqlangan amallar orqali murojaat qilish mumkin. Dasturdagi ma’lumotlar va ular ustida bajariladigan amallar o‘rtasidagi o‘zaro bog‘liqlik an’anaviy dasturlash tillariga nisbatan dasturiy tizimlarning ishonchliligini ta’minlaydi. Obyektga yo‘naltirilgan dasturlashning eng asosiy tushunchasi obyekt va sinf hisoblanadi.
Obyektni oshxonangizdagi mustaqil elektr qurilmasi deb hisoblash mumkin. Chovgum suvni qaynatadi, pechka qiziydi, blender maydalaydi, go'sht maydalagich qiyma tayyorlaydi. Har bir qurilmaning ichida bir nechta narsalar bor: motorlar, kontrollerlar, tugmalar va boshqalar, lekin siz ular haqida o'ylamaysiz. Siz har bir paneldagi tugmachalarni bosasiz va u kutilgan vazifani bajaradi va bu qurilmalarning kombinatsiyasi tufayli siz kechki ovqatga ega bo'lasiz.
Obyektga yo’naltirilgan dasturlash quyidagi prinsiplarga asoslanadi:
- Polimorfizm. Obyektlar xatti-harakatlarni almashish uchun mo’ljallangan va ular bir nechta shaklga ega bo’lishi mumkin. Dastur ota sinfdan ushbu obyektning har bir bajarilishi uchun qaysi maydon yoki funksiya foydalanish zarurligini aniqlaydi va kodni takrorlash zaruratini kamaytiradi. Keyin ota sinfning funksionalligini kengaytiradigan bolalar sinfi yaratiladi. Polimorfizm har xil turdagi obyektlarning bir xil interfeys orqali o’tishiga imkon beradi.
- Inkapsulatsiya. Ushbu tamoyil barcha muhim ma’lumotlar obyekt ichida joylashganligini va faqat tanlangan ma’lumotlarning ochiqligini bildiradi. Har bir obyektning amalga oshirilishi va holati belgilangan sinf ichida shaxsiy saqlanadi. Boshqa obyektlarda ushbu sinfga kirish yoki o’zgartirishlar kiritish huquqi yo’q. Ma’lumotlarni yashirishning bu xususiyati dasturning katta xavfsizligini ta’minlaydi va ma’lumotlarning kutilmagan buzilishlarini oldini oladi.
- Abstraksiya. Obyektlar faqat boshqa obyektlardan foydalanish uchun tegishli bo’lgan ichki mexanizmlarni ochib beradi, keraksiz amalga oshirish kodini yashiradi. Olingan sinf o’zining funksional imkoniyatlariga ega bo’lishi mumkin. Ushbu kontseptsiya ishlab chiquvchilarga vaqt o’tishi bilan qo’shimcha o’zgartirishlar yoki qo’shimchalar kiritishga yordam beradi.
- Meros. Sinflar boshqa sinflardagi kodlarni qayta ishlatishi mumkin. Obyektlar o’rtasidagi munosabatlar va pastki sinflar tayinlanishi mumkin, bu esa ishlab chiquvchilarga yagona ierarxiyani saqlab qolgan holda umumiy mantiqni qayta ishlatishga imkon beradi. OOP ning bu xususiyati ma’lumotlarni chuqurroq tahlil qilishga majbur qiladi, ishlab chiqish vaqtini qisqartiradi va yuqori darajadagi aniqlikni ta’minlaydi.
Obyektga asoslangan dasturlashning ko'p afzalliklari bor, shuning uchun ko'pchilik zamonaviy dasturchilar bu yondashuvdan foydalanadilar.
- Kod vizual jihatdan sodda va o'qish osonroq. Hamma narsa obyektlarga bo'linib, ular aniq qoidalar to'plamiga ega bo'lganda, siz har bir obyekt nima uchun javobgar ekanligini va nimadan iboratligini darhol tushunishingiz mumkin.
- Kamroq bir xil kod. Agar oddiy dasturlashda bitta funksiya bir o'lchovli massivda, ikkinchisi ikki o'lchovli massivda takrorlanadigan belgilarni hisoblasa, ularning kodlarining aksariyati bir xil bo'ladi. OYD da bu meros orqali hal qilinadi.
- Murakkab dasturlarni yozish osonroq. Har bir katta dasturni bir nechta bloklarga ajratish mumkin, uni minimal to'ldirishga aylantirish, so'ngra har bir blokni qayta-qayta batafsil to'ldirish mumkin.
- Yozish tezligi oshadi. Dastlab, siz minimal ishchi prototipini olish uchun dastur ichida kerakli komponentlarni tezda yaratishingiz mumkin.
Kamchiliklari:
- Buni tushunish va boshlash qiyin. OYD yondashuvi oddiy protsedurali dasturlashdan ko'ra ancha murakkab - bitta satr kod yozilishidan oldin siz ko'p nazariyalarni bilishingiz kerak.
- Ko'proq xotira talab qilinadi. OYD obyektlari ma'lumotlar, interfeyslar, usullar va boshqalardan iborat bo'lib, bu oddiy o'zgaruvchiga qaraganda ancha ko'p xotirani oladi.
- Ba'zida kodning ishlashi past bo'ladi. Yondashuvning o'ziga xos xususiyatlaridan kelib chiqqan holda, ba'zi narsalarni amalga oshirish qiyinroq bo'lishi mumkin. Shunday qilib, OYD dasturi protsedurali dasturga qaraganda sekinroq ishlaydi (garchi zamonaviy protsessor imkoniyatlari keng bo'lsa ham, bu ham kichik muammolarni keltirib chiqaradi).
OYD (obyektga yo'naltirilgan dasturlash) ko'plab zamonaviy loyihalarni ishlab chiqishning ajralmas qismiga aylandi. Obyektga yo'naltirilgan g’oya obyektning xatti-harakatlarini uning ma'lumotlari bilan bog'lash va real dunyo obyektlarini va biznes jarayonlarini dastur kodiga loyihalashtirishga urinish sifatida ishlab chiqilgan. Odamga bunday kodni o'qish va tushunish osonroq deb o'ylashdi, chunki odamlar o'zlarini atrofidagi dunyoni ma'lum tasnifga mos keladigan o'zaro ta'sir qiladigan obyektlar majmuasi sifatida qabul qilishga moyil. Ushbu g’oyani ilgari surganlar maqsadga erisha oldimi, degan savolga aniq javob berish qiyin, lekin aslida bizda dasturchidan OYD talab qilinadigan ko'plab loyihalar mavjud.