9-lekciya_paradigma_qq
.pdf9-lekciya. Deklarativ programmalastırıw. Deklarativ programmalastırıw tilleri.
Jobası:
1.Deklarativ programmalastırıwdıń mánisi hám imperativ usıldan ayırmashılıǵı.
2.Deklarativ paradigmanıń tiykarǵı baǵdarları: Funkcionallıq hám Logikalıq tiller.
3.Maǵlıwmatlar bazası hám domen-arnawlı tiller (SQL, HTML).
4.Deklarativ usıldıń artıqmashılıqları: Parallelizm hám kodtıń ıqshamlıǵı.
Deklarativ paradigmanıń tiykarǵı koncepciyası
Deklarativ programmalastırıw – bul programmalastırıwdıń sonday usılı, bunda programmist máseleni sheshiw ushın algoritmdi (izbe-iz qádemlerdi) jazbastan, tek kútiletuǵın nátiyjeniń táriypin beredi. Eger imperativ programmalastırıw "Qalay islew kerek?" (How) degen sorawǵa juwap berse, deklarativ programmalastırıw "Ne islew kerek?" (What) degen sorawǵa itibar qaratadı. Bul paradigmada programmist kompyuterge basqarıw aǵımın (cikller, shártli ótiwler) túsindirip otırmaydı, al tek logika hám sheklewlerdi jazadı. Algoritmdi tańlaw hám orınlaw wazıypası tildiń interpretatorına yamasa kompilyatorına júklenedi. Bul paradigmanı túsiniw ushın ápiwayı ómirlik mısaldı keltiriwge boladı. Imperativ usıl – bul taksi aydawshısına jol kórsetiwge uqsaydı: "Tuwrıǵa júr, svetafordan ońǵa burıl, 100 metrden keyin toqta". Al deklarativ usıl
– bul taksige tek manzildi aytıw: "Men aeroportqa barıwım kerek". Siz aydawshınıń qaysı kóshe menen júriwine, gazdı qashan basıwına aralaspaysız, sizge tek nátiyje (aeroportta bolıw) qızıqlı. Deklarativ programmalastırıw programmistti mayda detallardı basqarıwdan azat etip, mashqalanıń mánisine tereńirek úńiliwge imkaniyat beredi.
Texnikalıq jaqtan alǵanda, deklarativ kod – bul kompyuter orınlawı tiyis bolǵan komandalar dizbegi emes, al matematikalıq teńlemeler, logikalıq baylanıslar yamasa maǵlıwmatlar qásiyetleriniń jıyındısı bolıp tabıladı. Bul jerde dástúrli mánistegi "ózgeriwshiler" (mısalı, x = x + 1) túsinigi joq yamasa basqasha isleydi. Deklarativ paradigmada ózgeriwshiler kóbinese ózgermeytuǵın (immutable) bolıp keledi. Yaǵnıy, bir márte mánis berilgennen keyin, onıń mánisi programma jumısı dawamında ózgertilmeydi. Bul "sırtqı tásirler" (side effects) mashqalasınan qutılıwǵa járdem beredi.
Deklarativ programmalastırıwdıń eń úlken jeńisi – bul abstrakciyanıń eń joqarı dárejesi. Programmist yadtı basqarıw, cikllerdi shólkemlestiriw hám processor registrleri menen islesiw sıyaqlı tómen dárejeli jumıslardan tolıq azat etiledi. Mısalı, deklarativ tilde massiv ishindegi elementlerdi filtrlew ushın uzın for ciklin jazıwdıń kerek joq, tek "maǵan 5 ten úlken sanlardı ber" degen mánistegi
qısqa ańlatpa jazıw jetkilikli. Qalǵan jumıstı tildiń ishki mexanizmleri eń optimal jol menen orınlaydı.
Deklarativ tillerdiń túrleri hám qollanılıwı
Deklarativ paradigma bir neshe tarmaqlarǵa bólinedi, olardıń eń áhmiyetlileri – Funkcionallıq programmalastırıw (Functional Programming) hám Logikalıq programmalastırıw (Logical Programming). Funkcionallıq programmalastırıw (Lisp, Haskell, Erlang, F#) matematikalıq funkciyalar teoriyasına tiykarlanǵan. Bunda programma funkciyalardıń kompoziciyası (birigiwi) retinde qaraladı. Mısalı, Haskell tilinde kod jazıw – bul matematikalıq formulalardı jazıwǵa júdá uqsas. Ol kóbinese ilimiy esaplawlarda, telekommunikaciya sistemalarında hám joqarı isenimlilikti talap etetuǵın finanslıq sektorlarda qollanıladı.
Logikalıq programmalastırıw bolsa, formal logikaǵa hám faktlerge tiykarlanǵan. Onıń eń ayqın wákili – Prolog tili. Prologta programmist "Algoritm" jazbaydı, kerisinshe "Bilimler bazasın" jaratadı. Oǵan faktler (mısalı, "Sokrat – adam") hám qaǵıydalar (mısalı, "Barlıq adamlar jasawshı") kiritiledi. Keyin paydalanıwshı soraw bergende (mısalı, "Sokrat jasawshı ma?"), Prolog arnawlı juwmaq shıǵarıw mexanizmi (inference engine) arqalı juwaptı ózi tabadı. Bul usıl jasalma intellekt, ekspert sistemalar hám tábiyiy tildi qayta islew (NLP) máselelerinde teńsiz qural bolıp esaplanadı.
Deklarativ paradigmanıń eń keń tarqalǵan, biraq kóbinese programmalastırıw tili dep tolıq moyınlanbaytuǵın túri – bul Maǵlıwmatlar bazasın soraw tilleri (Query Languages), atap aytqanda SQL. SQL tilinde biz SELECT *
FROM Users WHERE age > 18 dep jazamız. Bul taza deklarativ buyrıq. Biz kompyuterge fayldı qalay ashıw kerekligin, jazıwlardı qalay oqıw kerekligin yamasa qanday izlew algoritmin (binar izlew me, izbe-iz izlew me) qollanıw kerekligin aytpadıq. Biz tek "erjetken paydalanıwshılar kerek" degen nátiyjeni soradıq, al maǵlıwmatlar bazasın basqarıw sisteması (MBBS) bunı qalay orınlawdı ózi sheshedi. Sonıń menen birge, veb-texnologiyalardaǵı HTML hám CSS te deklarativ tillerge jatadı. HTML bettiń strukturasın súwretleydi (bul – bas bet, bul
– paragraf), al CSS onıń sırtqı kórinisin súwretleydi (reńi qızıl, shrifti úlken). Brauzer bul deklaraciyalardı oqıp, ekranda súwretti payda etedi. Programmist pikselme-piksel súwret salmaydı, ol tek "Mına jerde túyme (button) bolsın" dep járiyalaydı. Bul mısallar deklarativ usıldıń zamanagóy IT tarawınıń barlıq qatlamlarına sińip ketkenin kórsetedi.
Artıqmashılıqları, kemshilikleri hám keleshegi
Deklarativ programmalastırıwdıń eń úlken artıqmashılıǵı – bul "Parallel esaplawlar"ǵa (Parallel computing) oǵada beyimligi. Imperativ tillerde kodtı parallel orınlaw qıyın, sebebi bir waqıtta bir neshe aǵım (thread) bir ózgeriwshini ózgertpekshi bolsa, qáteler kelip shıǵadı. Al deklarativ (ásirese funkcionallıq) tillerde ózgeriwshilerdiń mánisi turaqlı (immutable) bolǵanlıqtan hám funkciyalarda "sırtqı tásir" (side effect) bolmaǵanlıqtan, kodtı bólek-bólek processorlarǵa bólistiriw qáwipsiz hám ańsat. Kóp yadrolı processorlar hám bultlı
esaplawlar (Cloud computing) dáwirinde bul qásiyet deklarativ tillerdiń mánisin aytarlıqtay arttırdı. Ekinshi artıqmashılıǵı – kodtıń "Íqshamlıǵı" hám "Oqılıwı". Deklarativ kod ádette imperativ kodqa qaraǵanda bir neshe ese qısqa boladı. Qısqa kodta qáte jiberiw itimalı az hám onı ońlaw (debug) ańsatıraq. Kod "ne islew kerekligin" anıq aytıp turǵanlıqtan, basqa programmistler ushın onı túsiniw hám qollap-quwatlaw jeńil keledi. Bul iri korporativ sistemalarda, kodtıń sapası hám isenimliligi birinshi orında turatuǵın proektlerde úlken áhmiyetke iye.
Degen menen, deklarativ programmalastırıwdıń da ózine tán kemshilikleri bar. Birinshisi – úyreniw bosaǵasınıń joqarılıǵı. Mektep hám universitetlerde kóbinese imperativ oylaw (C++, Python) úyretilgenlikten, studentlerge rekursiya, lambda-esaplawlar hám taza funkciyalar sıyaqlı túsiniklerdi qabıllaw qıyınshılıq tuwdıradı. Ekinshisi – geybir jaǵdaylardaǵı ónimlilik (performance) máselesi. Yadtı basqarıw hám algoritmdi optimallastırıw tolıǵı menen kompilyatorǵa júklengenlikten, tájiriybeli programmisttiń qol menen jazǵan (C yamasa Assemblerdegi) optimallastırılǵan kodına qaraǵanda deklarativ kod sál ástelew islewi múmkin (biraq házirgi kompilyatorlar bul ayırmashılıqtı azaytpaqta).
Búgingi kúnde "Multiparadigmalıq" tendenciyası kúsheymekte. Tazadan jaratılıp atırǵan tiller hám freymvorklar deklarativ stilge qaray barmaqta. Mısalı, Java 8-den baslap "Stream API" qosıldı, JavaScript-te "React" kitapxanası interfeysti deklarativ usılda qurıwdı standartqa aylandırdı, al mobil qosımshalarda "Flutter" hám "SwiftUI" tolıǵı menen deklarativ UI-ǵa ótpekte. Demek, deklarativ programmalastırıw – bul tek teoriyalıq koncepciya emes, al keleshektiń eń perspektivalı hám ámeliy quralı bolıp tabıladı.
BAQLAW SORAWLARÍ:
1.Deklarativ hám imperativ programmalastırıw arasındaǵı "What" (Ne) hám "How" (Qalay) ayırmashılıǵın túsindirip beriń.
2.SQL tili ne ushın deklarativ til dep esaplanadı? Mısal keltiriń.
3.Logikalıq programmalastırıw tili Prologtıń islew principi qanday?
4."Sırtqı tásir" (Side effect) degende neni túsinesiz hám nege deklarativ tiller onnan qashıwǵa háreket etedi?
5.Ne sebepten deklarativ (funkcionallıq) tiller parallel esaplawlar ushın qolaylı dep esaplanadı?
