16-lekciya_paradigma_qq
.pdf16-lekciya. Obyektke baǵdarlanǵan programmalastırıwdıń funkcionallıq modeli.
Jobası:
1.OBP hám Funkcionallıq paradigmalardıń integraciyası: Gibrid programmalastırıw.
2.Lambda ańlatpaları hám anonim funkciyalardıń obyektler menen islesiwi.
3.Ózgermeytuǵın obyektler (Immutability) hám taza funkciyalar koncepciyası.
4.Aǵımlar (Streams) API: Kollekciyalardı funkcionallıq usılda qayta islew.
Paradigmalardıń birigiwi hám gibrid model
Kóp jıllar dawamında Obyektke Baǵdarlanǵan Programmalastırıw (OBP) hám Funkcionallıq Programmalastırıw (FP) bir-birine qarama-qarsı eki polyus retinde qaralıp kelindi. OBP maǵlıwmatlardı (state) hám olardı ózgertiwshi metodlardı saqlawǵa itibar qaratqan bolsa, FP maǵlıwmatlardı ózgertpesten, taza funkciyalar arqalı transformaciyalawǵa tiykarlanǵan edi. Biraq, programmalıq sistemalardıń quramalısıwı hám parallel esaplawlarǵa bolǵan talaptıń artıwı nátiyjesinde, bul eki paradigmanıń "gibridlesiwi" júz berdi. Obyektke baǵdarlanǵan programmalastırıwdıń funkcionallıq modeli degende, klasslar hám obyektler strukturası saqlanıp, metodlardıń ishinde funkcionallıq usıllardıń (lambda, stream, map/reduce) qollanılıwı túsiniledi. Bul modeldiń payda bolıwına tiykarǵı sebep – OBP-daǵı "ózgeriwsheń halat" (mutable state) mashqalası boldı. Dástúrli OBP-da obyektlerdiń atributları hár qıylı metodlar tárepinen ózgertile beredi, bul bolsa kóp aǵımlı (multi-threading) sistemalarda qátelerge alıp keledi. Funkcionallıq model bolsa, obyektlerdiń ishki halatın turaqlı (immutable) saqlap, metodlardı matematikalıq funkciyalar sıyaqlı "sırtqı tásirsiz" islewge úyretedi. Bul jerde OBP programmanıń "arxitekturasın" (klasslar, moduller) quraydı, al FP bolsa sol arxitekturanıń ishinde maǵlıwmatlardıń "logikalıq aǵımın" támiyinleydi.
Zamanagóy programmalastırıw tilleri (Java 8+, C#, Kotlin, Swift, Python) usı funkcionallıq modeldi tolıq qollap-quwatlaydı. Mısalı, Java tilinde burın tek klasslar hám interfeysler bar bolǵan bolsa, házirgi waqıtta funkciyalardı (metodlardı) basqa metodlarǵa argument retinde beriw múmkin. Bul OBP tillerinde "Birinshi dárejeli funkciyalar" (First-class functions) koncepciyasınıń payda bolıwına alıp keldi. Endi obyekt tek ǵana maǵlıwmat saqlawshı konteyner emes, al háreketlerdi (algoritmlerdi) de tasıwshı hám uzatıwshı quralǵa aylandı.
Funkcionallıq model kodtıń oqılıwın hám ıqshamlıǵın arttıradı. Dástúrli OBP-da massivler menen islesiw ushın biz for cikllerin hám if shártlerin jazatuǵın edik, bul imperativ usıl bolıp esaplanadı. Funkcionallıq modelde bolsa, biz deklarativ usıldı qollanamız: "dizimdi al, filtrle, ózgert hám jıyna". Bul jerdegi hárbir operaciya obyekt metodı sıpatında kóringeni menen, onıń ishki tábiyatı taza funkcionallıq principke súyenedi. Bul baǵdarlamashıǵa "qalay islew kerek" degen texnikalıq detallardan góre, "ne islew kerek" degen biznes-logikaǵa kóbirek itibar qaratıwǵa imkaniyat beredi.
Lambda ańlatpaları hám Ózgermeytuǵınlıq (Immutability)
OBP-nıń funkcionallıq modelindegi eń áhmiyetli qural – bul "Lambda ańlatpaları". OBP-da dástúr boyınsha hár qanday háreket qanday da bir klastıń metodı bolıwı kerek edi. Eger bizge kishkene ǵana bir retlik funkciya kerek bolsa da, biz onıń ushın bólek klass yamasa interfeys jaratıwǵa májbúr edik (mısalı, Java-daǵı Anonymous Inner Classes). Lambda ańlatpaları bul byurokratiyanı alıp tasladı. Olar bizge funkciyanı (kod blogın) atamasız hám klassız, tikkeley qollanıw ornında jaratıwǵa hám basqa metodlarǵa argument retinde uzatıwǵa imkaniyat beredi. Bul OBP strukturasın buzbay, onıń ishine funkcionallıq iykemlilikti alıp kirdi.
Ekinshi tiykarǵı koncepciya – bul "Ózgermeytuǵınlıq" (Immutability). Funkcionallıq modelde klasslar sonday etip proektlestiriledi, olar jaratılǵannan keyin óz halatın ózgerte almaydı. Mısalı, String klassı Java-da ózgermeytuǵın obyektke mısal bola aladı. Eger biz String obyektine ózgeris kirgizsek, ol eskisin ózgertpeydi, al jańa obyekt jaratadı. OBP-da bul princip "Final" yamasa "Readonly" atributlar arqalı ámelge asırıladı. Ózgermeytuǵın obyektlerdi parallel aǵımlarda (threads) qollanıw qáwipsiz, sebebi hesh kim onıń mánisin kútilmegen jerden ózgerte almaydı.
Bul modelde "Funkcionallıq interfeysler" (Functional Interfaces) degen jańa túsinik payda boldı. Bul – tek ǵana bir abstrakt metodqa iye bolǵan interfeysler. Olar OBP menen FP arasındaǵı kópir wazıypasın atqaradı. Mısalı, Predicate<T> interfeysi obyektti tekseriw (true/false) ushın, al Function<T, R> interfeysi obyektti transformaciya etiw ushın qollanıladı. Biz klass metodlarında usı interfeyslerdi parametr retinde qabıllaymız, al orınlaw waqtında olarǵa lambda ańlatpaların beremiz. Bul "Strategiya" (Strategy pattern) proektlestiriw úlgisin júdá ápiwayı hám ıqsham túrde ámelge asırıwǵa járdem beredi.
Sonıń menen birge, funkcionallıq model "Taza funkciyalar"dı (Pure Functions) statikalıq metodlar túrinde klasslarǵa kirgiziwdi xoshametleydi. Taza metod klass maǵlıwmatlarına (state) ǵárezli bolmaydı hám tek kirisiw argumentlerine súyenedi. Mısalı, Math.max(a, b) metodı taza funkciya bolıp tabıladı. OBP proektlerinde biznes-logikanı múmkinshiligi bolǵansha taza metodlarǵa ajıratıw, programmanı testlewdi (Unit testing) ańsatlastıradı. Sebebi bunday metodlardı tekseriw ushın pútin bir obyektti jaratıw yamasa bazanı tayarlaw shárt emes.
Aǵımlar (Streams) hám reaktiv programmalastırıw
OBP-nıń funkcionallıq modeli "Aǵımlar" (Streams API) túsinigi arqalı eń joqarı shıńına jetti. Aǵım – bul maǵlıwmatlar strukturası (massiv yamasa kollekciya) emes, al sol maǵlıwmatlar ústinde orınlanatuǵın operaciyalar izbeizligi. Biz obyektler jıyındısın (List<Student>) aǵımǵa aylandıramız hám onı konveyerlentadan ótkizgen sıyaqlı qayta isleymiz. Aǵımlar map (túrlendiriw), filter (saralaw), reduce (jıynaw) sıyaqlı funkcionallıq operaciyalardı qollap-quwatlaydı. Eń áhmiyetlisi, aǵımlar "jalqaw" (lazy) bolıp tabıladı – yaǵnıy, nátiyje soralmaǵansha, aralıq operaciyalar orınlanbaydı.
Aǵımlardı qollanıw OBP kodın deklarativ stilge ótkizedi. Mısalı, "Jas 20 dan úlken barlıq studentlerdiń atların alıp, alfavitlik tártipte sortlap ber" degen tapsırmanı orınlaw ushın, biz endi uzın cikller hám waqıtsha dizimlerdi jazbaymız.
Biz students.stream().filter(s -> s.age > 20).map(s -> s.name).sorted().collect(toList()) dep jazamız. Bul kod adam tiline júdá jaqın bolıp, ol obyektlerdiń ishki strukturasına aralaspay-aq, olardı qayta islew logikasın anıq kórsetedi. Bul model "Parallelizm" (Concurrency) máselesin sheshiwde revolyuciya isledi. Imperativ OBP-da cikldi parallel orınlaw ushın biz aǵımlardı (threads) qol menen basqarıwımız, sinxronizaciyanı (locks) qadaǵalawımız kerek edi. Al funkcionallıq modelde stream().parallel() dep jazıw jetkilikli. Kitapxana ózi maǵlıwmatlardı bólekleydi, hár qıylı processorlarǵa tarqatadı hám nátiyjeni jıynaydı. Obyektler ózgermeytuǵın (immutable) hám funkciyalar taza (pure) bolǵanlıqtan, parallel orınlaw heshqanday "side effect"siz, qáwipsiz ámelge asadı.
Juwmaqlap aytqanda, Obyektke baǵdarlanǵan programmalastırıwdıń funkcionallıq modeli – bul zamanagóy programmalastırıwdıń "altın ortalıǵı". Ol bizge OBP-nıń kúshli strukturalıq imkaniyatların (modullilik, miyrasxorlıq, kapsulyaciya) hám FP-nıń matematikalıq anıqlıǵın (qısqalıq, qáwipsizlik, parallelizm) bir waqıtta qollanıwǵa imkaniyat beredi. Búgingi kúni professional baǵdarlamashı bolıw ushın tek klasslardı biliw jetkiliksiz, klasslardı funkcionallıq stil menen bayıtıw kónlikpesi zárúr bolıp tabıladı.
BAQLAW SORAWLARÍ:
1.OBP hám Funkcionallıq paradigmalardıń gibridlesiwi neni ańlatadı hám ol qanday mashqalanı sheshedi?
2.Lambda ańlatpaları OBP-daǵı anonim klasslardan nesi menen ózgeshelenedi hám qanday qolaylıq beredi?
3."Ózgermeytuǵınlıq" (Immutability) OBP obyektlerinde qanday áhmiyetke iye?
4.Streams API (Aǵımlar) imperativ cikllerden (for/while) qanday ayırmashılıqqa iye?
5.Funkcionallıq model parallel programmalastırıwdı qalay ańsatlastıradı?
