Monday, March 3, 2014

Funksiyalar bilan ishlash

Funksiyalar bilan ishlash

Funksiyalar biz uchun nega kerak? - Class biz uchun tip, funksiyalarni e`lon qilish maydoni, biror obyektni qayta ishlash uchun kerakligini bildik. Endi funksiya haqida, nima uchun foydalanishimiz kerakligi haqida bilib olamiz. Sizchi nima deb o`ylaysiz?

Demak, class ning vazifalari ichida mantiqiy yoki arifmetik amallar yo`q. Biz biror missiyani bajarishni xohlasak uning algoritmini qanday kiritamiz? Albatta funksiyaga. Funksiyalar ko`p bo`lishi mumkin ular bir classda yoki bir nechta class da bo`lishi ham mumkin. Eslab o`tamiz tashqaridan ko`rishimiz uchun bu funksiya albatta public bo`lishi lozim. Demak funksiyada dasturning mantig`i yoziladi, bu mantiq funksiyalarga, classlarga ma`nosi bo`yicha ajratib, tartiblab yoziladi. Kerak bo`lgan yerda shu qismni e`lon qilinadi, kerak bo`lgan yerda murojaat qilinaveradi. Bir nechta kichik dastur tuzmoqchi bo`lsangiz yoki bir nechta masalani ishlamoqchi bo`lsangiz har biriga alohida proyekt yaratib o`tirishni keragi yo`q, har bir masalani bittadan funksiyada bajarib, shu funksiyalarni asosiy funksiyadan chaqirib qo`yish kifoya. Son-sanoqsiz funksiyalar, classlar bo`lishi mumkin, ammo ular siz qachon murojaat qilsangizgina faoliyatni boshlaydilar. Bundan anglashiladiki, yozayotgan kodimi kattalashib ketmasligi uchun classlarga, funksiyalarga bo`lib tashlasak xotirani tejaymiz, murojaat qilsakgina ishlar ekanlar. Funksiyaga murojaat ham faqat funksiya ichidan bo`ladi, e`lon qilish esa faqat class ichida. Demak class da e`lon qilyapmiz, funksiyadan boshqa funksiyani chaqirayapmiz. Funksiyaga murojaat qilganda funksiya nomidan so`ng "(" belgisini qo`yamiz(qavsni yopmay turamiz) va bizga kiritishimiz shart bo`lgan kerakli parametrlar ko`rinadi. Demak ko`rindiki funksiyalardan foydalanish, e`lon qilish uchun maxsus bilim shart emas, tiplarni bilsak bo`ldi ekan. Tiplarni esa OOP ni o`rganishdan oldin misol yechish jarayonida yodlab, tushunib olamiz. Xulosa shuki biz uchun o`ylagan algoritmimizni funksiyani e`lon qilib uning ichida(tanasida) yozamiz.

Classlarga murojaat

Classlarga murojaat


Classlarga murojaat qilganda ma`lumot dinamik xotiraga tushadi. Chunki classni chaqirish C# va Java da deyarli bir xil. 


Bu yerda Tom -class, tom - obyekt. demak Tom tipidagi tom.(Mushuklar turiga kiruvchi bir hayvon yoki obyekt, ya`ni bir mushuk. E`tibor bering: Tom(Mushuk) bilan tom(mushuk) farq qilmoqda).

Static elementlar

Static elementlar

   Class, funksiya, obyekt yoki propertyni static(static) element sifatida e`lon qilish mumkin. Bundan ko`zlangan maqsad statik elementni xotiraning yuqori pog`onasiga chiqarib qo`yish va uni xotirada doim saqlash, kerak bo`lganda unga murojaat qilish. Statik bo`lmagan elementlar esa classga murojaat vaqtida ular ham yangidan xotiraga olinadi, classni ishlatishni to`xtatib block yopilganda esa u elementlar xotiradan tozalab tashlanadi. Undan tashqari class ni bir necha marta qayta-qayta murojaat etib chaqirib foydalanilganda shu class tipida bir nechta obyekt hosil bo`ladi, statik bo`lmagan elementlari har bir klassda alohida element qabul qiladi, statik bo`lsa shu obyektlarda hammasida ayni shu statik elementi bir xil qiymatga moslashib qoladi(bittasidagi statik element o`zgartirilsa hamma obyektlarda xuddi shu statik element bir xil yangi qiymatga o`zgarib qoladi).
Funksiyalar ham statik bo`lishlari mumkin. Bu qachon bo`ladi? Qachonki bir funksiyaning vazifasi o`zi joylashgan classdagi boshqa funksiyaga bog`liq bo`lmasa va uni asosan boshqa classlardan chaqirilsa shunda ishlatiladi.
Static elementlar class nomidan so`ng nuqta(.) qo`yib chaqiriladi
Masalan: Console.WriteLine("..."); System.out.println("...");

 bu yerda Console va System -class, WriteLine va println esa statik funksiyalar.

Funksiyaga murojaat

Funksiyaga murojaat - Funksiyani chaqirish, funksiyani ishlatish, funksiya ijro etish...

Funksiyaga murojaat etishda quyidagilarga e`tibor qaratish lozim:
1. Funksiya qiymat qaytaradimi? - agar qaytarsa demak undan biror natija olib boshqa o`zgaruvchiga berish mumkin.
2. Funksiyaning tipi qanaqa, ya`ni bizga qaytadigan qiymat qaysi tipda bo`ladi? - Agar yangi o`zgaruvchi e`lon qilib unga funksiyaning qiymatini berishni istasak, demak yangi o`zgaruvchining tipi funksiyaning tipini o`z ichiga olishi yoki u bilan bir xil bo`lishi shart.
3. Funksiya parametr oladimi? - agar parametr olsa, unga parametr kiritish kerak bo`ladi.
4. Parametrlari nechta va tiplari qanaqa? - parametrlarning o`rniga biror qiymat yoki boshqa bir o`zgaruvchi kiritish mumkin. Ketma-ketlik esa parametrlarning ketma-ketligi bilan bir xil va har bir kiritilayotgan parametrning tipi e`lon qilingan parametr o`zgaruvchisining tipi bilan bir xil bo`lishi kerak.
bular 4 ta bo`lgani bilan qiyin emas.
Ushbu shartlar qanoatlantirilsa funksiya ishlaydi va biror natija olish yoki shunchaki ishlatib yuborish mumkin.

Ko`rib turganimizdek funksiyalarning ichki qismida yana biz bilgan tizimli dasturlashning arifmetik amallaridan foydalaniladi. Shu sababli yosh dasturchilarga masala ishlatib, ularni ko`niktirib boriladi va Class tushunchasini qabul qilish ularga og`irlik qilmaydi. Sababi funksiyani e`lon qilish va chaqirishdan boshqa deyarli barcha narsalar arifmetik ifodalar bo`lmoqda...

Class lar haqida

Class  lar haqida

Class lar o`zida qiymat saqlovchi obyektlardan, funksiya va property(xususiyat) lardan tashkil topgan. Vazifa bir turga yaqin funksiyalarni bir joyga saqlash uchun biror bir klassning ichida e`lon qilinadi(joylashtiriladi) va biror nom bilan nomlanadi.
Funksiyalarni e`lon qilish - funksiyani biror class ning ichiga joylashtirib uning ichiga logikasini(bajaradigan missiyasini) yozish.
Funksiyani chaqirish(ishlatish) - E`lon qilingan funksiyani chaqirish mumkin, e`lon qilinmagan funksiya mavjud bo`lmaydi. Funksiyalar - kichik dasturchalar, ular parametr berib ishlatiladi va biror natijani qabul qilib olinadi.

funksiyalarni e`lon qilishda ham ma`lum bir type(Reference yoki Value) bilan e`lon qilinadi(yaratiladi deb ham yoziladi - bu e`lon qilish ma`nosida). Kirish parametrlari bir nechta bo`lsa ham natijaning qiymati bir dona bo`ladi(ya`ni bitta qiymat qaytadi).. Parametrlar ham natija ham biror type ga tegishli bo`ladi. Natija esa funksiyaning qiymati deb aytiladi.  Qiymat qaytarmaydigan funksiyalar ham bor, bular  Prosedura(Procedure) deyiladi. E`lon qilinishi xuddi funksiyalar bilan bir xil, faqat  funksiyaning tipi void deb belgilanadi. void- - bu maxsus tip, faqat funksiyalarda qo`yiladi, qachonki uni proseduraga aylantirish kerak bo`lgan vaqtlarda.


Return - ingliz tilida qaytarmoq, qaytarib bermoq, jo`natmoq yoki javob bermoq ma`nolarini beradi. Biz bu operatorni funksiyalarda qo`llaymiz. Shu funksiyaning natijasini qaytaruvchi operator. Dasturning biror qismidan kerakli funksiyani chaqirganimizda odatda undan biror natija kutamiz va kelgan natijani boshqa bir o`zgaruvchiga beramiz. Shu funksiyadan natija qaytishi uchun returndan foydalaniladi. Returndan keyingi operatsiyalar bajarilmaydi. Funksiyada qanday amallar bajarilganiga qaramay returnda nima berilgan bo`lsa shu qaytad(funksiyaning qiymati shunga teng bo`ladi).

Obyektga yo`naltirilgan dasturlash tillari (OOP)

Obyektga yo`naltirilgan dasturlash tillari (OOP)

Obyektlar orqali ma`lumotlarni qayta ishlash va amallar bajarishni ta`minlashda foydalaniladigan dasturlash tillari Obyektga yo`naltirilgan dasturlash tillaridir. OOP ham rivojlanish evaziga ehtiyoj sababli yuzaga kelgan.  OOP ning imkoniyatlari ba`zida bizning tasavvurimizdan ham kattaroq. Unda istalgan tipdagi obyektlarni qayta ishlashning imkoni bor. OOP dasturlarini tasavvur qilish tizimli dasturlarni tuza oladigan dasturchilar uchun qiyin emas, OOP - tizimli dasturlarning majmui. Istalgan dasturni tahlil qilsak - hech bir dastur yo`qki unda tizimli dasturlash tillaridagi amallar bajarilmasa, OOP da ham turli xil tiplar bo`lgani bilan ular ham oddiy tiplardan tuzilgan to`plamlardir, ular o`rtasida amal bajarganda ham shundoq o`zini emas ichidagi a`zolari o`rtasida amallar bajariladi. A`zolari esa o`sha biz bilgan oddiy tiplar hisoblanadi.
OOP ning 3 prinspi:
1. Inkaptsulyatsiya (incapsulation)(Class a`zolarining xavfsizligini ta`minlash)
2. Nasl olish(Abstraction-Inheritance)(Avlod classda ajdod classning xususiyatlaridan foydalanish)
3. Polimorfizm
Savol: Object nima? Object(obyekt) - xotirada saqlangan ma`lumotning e`lon qilingan nomi(o`zgaruvchisi).  O`zgaruvchi - ma`lumotni biror bir nom bilan e`lon qilish.
Savol: Struct nima? Struct(struktura) -obyekt tegishli bo`lgan to`plamning nomi. Bu to`plamni tip(type) deb ataladi. Struct tipidagi obyektda ichidagi barcha o`zgaruvchilar tashqaridan ko`rinib turadi.
Savol: Class nima? Class ham xuddi Struct kabi type, lekin undagi obyektning ba`zi xususiyatlari bor, ular bu obyektning tanasini yashirib turadi va boshqalar.. Shu sababli ham struct dan odatda juda kam foydalaniladi. Chunki Struct - bu public(ommaviy, ochiq, oshkora obyekt). Bundan tashqari Class lar kod yozishda ham muhim ahamiyatga ega. Dasturchi dastur tuzganda odatda har bir missiya uchun bir funksiya ochadi va funksiya nomini shu missiyaga mos qilib nomlaydi. Kodning matnini shu funksiyalarda yozadi. Funksiyani o`zini esa Class da yoziladi. Demak Classda kod matnini emas funksiya(method-metod), property(xususiyat) hamda o`zgaruvchilar yoziladi, funksiyaning ichida esa kodning matni yoziladi.(adashtirmaslik kerak). Ma`lum bir guruhga kiradigan missiyalar, mantiqlar to`plami bitta Class da tashkil etiladi va shu class nomini ham mantiqdan kelib chiqib nom beriladi. Agar bu class mantiqiy amallarni bajarish uchun emas, faqat to`plamning tipi(type) uchun yaratib vaqtincha shu tipdagi ma`lumotni saqlab turish uchun yaratilgan bo`lsa (ya`ni undan maqsad faqat ma`lumot saqlash va biror manzilga yo`naltirish) demak unda funksiyaning keragi yo`q.  

Masalan:


Bu class Tom obyektining qiymatini saqlash uchun e`lon qilingan. Tom-mushuk bir obyekt bo`lsa uning ismi va yoshini saqlab turadigan class. Demak bu to`plam yoki bir tip ki, unda mushuk haqida ma`lumotlar saqlanadi. Bu klass tipidagi obyektlar ko`pligi bizga bir nechta mushukning ma`lumotlari saqlanayotganligini bildiradi. Oydinlashadiki. biz OOP dasturlash tillarida o`zimiz xohlagancha tip e`lon qilib foydalana olishimiz mumkin ekan. Biz OOP orqali juda katta imkoniyatlarga erishamiz. Class lar birgalikda kutubxona(library-biblioteka) fayllarini tashkil etadi, bu kutubxonalar ham biror katta dasturlar tizimini tashkil etadi. Masalan: Windows OS ham kutubxonalardan tashkil topgan.

Public va Private nima? Class a`zolarining xavfsizligini ta`minlash(inkapsulyatsiya)-incapsulation) prinspining maxsus so`zlari. Public, Protected, Private turlari mavjud.
Public(umumiy) - ushbu elementni class tashqarisidan ko`rish, o`zgartirish mumkin yoki yo`qligini bildiradi
Protected(himoyalangan) - ushbu element shu class avlodlari(nasl olinganda) ichida va shu class ning ichida ko`rinishi, murojaat qilish mumkinligi va qiymatini o`zgartira olish huquqini beradi
Private(maxfiy) - mazkur element o`zi joylashgan class ichidagina ko`rinishi va qiymatlarini o`zgartira olinishi hamda murojaat huquqini beradi.
Bu bizga nima uchun zarur? Tasavvur qilishga oson bo`lishi uchun kompyuter klaviaturasidan foydalanamiz. Klavishlar public elementlar, uning ichki qismidagi sxemalar esa private. Bizga faqat foydalanishimiz kerak bo`lgan elementlar ko`rsatib qo`yilgan, qolgani esa biz uchun muhim emas va mavhum. Protectedni esa xotirada qolishi uchun foydalangan vaqtimizda tushuntirib o`tamiz.

Takrorlanish operatori ( for -parametrli sikl operatori)

Takrorlanish operatori ( for -parametrli sikl operatori)
Takrorlanish operatori ham muhim ahamiyatga ega. Qo`yilgan masalaning yechimi bir yoki bir-nechta arifmetik ifodaning N marta qayta-qayta hisoblanishi natijasida chiqadigan bo`lsa bundan foydalaniladi.