310 likes | 743 Vues
Programmēšanas valodas. Datorzinātņu bakalaura programma LU Fizikas un matemātikas fakultāte 4.kurss Kārlis Čerāns, Dr. dat. Programmēšanas valodas – kursa raksturojums. Kursa mērķis:
E N D
Programmēšanas valodas Datorzinātņu bakalaura programma LU Fizikas un matemātikas fakultāte 4.kurss Kārlis Čerāns, Dr. dat.
Programmēšanas valodas – kursa raksturojums Kursa mērķis: • Dot priekšstatu par programmēšanas valodu tipiskajām konstrukcijām un to realizāciju dažādās programmēšanas valodās. • Padziļināti iepazīt dažādus programmēšanas veidus (programmēšanas paradigmas) - imperatīvo, funkcionālo, loģisko, objekt-orientēto, paralēlo, u.taml. un tiem raksturīgos programmu veidošanas līdzekļus • Apgūt (atkārtot) pamata konstrukcijas konkrētās programmēšanas valodās, spēt tās lietot vienkāršu uzdevumu risināšanā. Metode: Lekcijas, atbalsta materiāli (t.sk. patstāvīgi apgūstami), pārbaudījumi, iespēja rakstīt referātu Pārbaudījumi: mājas darbi, kļūdu labojumi, eksāmens Izpilde uz datora: netiek pieprasīta, atsevišķām valodām var būt iespējama (mājas darbiem) Eksāmens: mājas darbu atbildēšana, kļūdu labojumi, teorijas jautājumi Literatūra: K.Louden, Programming Languages Principles and Practice, 2nd edition, u.c.
Kontaktinformācija Kārlis Čerāns, Dr. dat., asoc. prof. email: Karlis.Cerans@mii.lu.lv tel. 7 213 716 LU MII, Raiņa bulv. 29, 421. istaba Kursa e-informācija: Web CT vidē e-kurss “Programmēšanas valodas” - kursa administratīvā informācija (prasības, u.c.) - mājas darbu uzdevumi - papildmateriāli (lekciju slaidi (.ppt), citi materiāli) - norādes uz programmēšanas vidēm (atsevišķām valodām) Papildus resursi, t.sk. studentu referāti: http://www.ltn.lv/~karlisc/stud.htm
Kursa saturs (I) 1. Programmēšanas valodas jēdziens, abstrakcijas programmēšanas valodās. Valodas uzdošana (apraksts) un realizācija. Von-Neumann mašīnas. Programmēšanas veidi (paradigmas). 2. Programmēšanas valodu vēsture. Prasības programmēšanas valodām. 3. Programmēšanas valodu sintakses un semantikas jēdzieni. Abstraktā un konkrētā sintakse. Sintakses definīcija ar gramatiku. Formālas semantikas uzdošanas veidi. Vienkāršas imperatīvas valodas definējuma piemērs. 4. Praktiski semantikas jautājumi: vārdi, piesaiste, mainīgais, konstante, pointeris, aliass, u.c. 5. Imperatīvā programmēšana, valodas C elementi. 6. Datu tipi programmēšanas valodās. 7. Vadības struktūras programmēšanas valodās: izteiksmes, operatori, procedūras, parametru nodošana, atmiņas organizācija.
Kursa saturs (II) 8. Funkcionālā programmēšana. Lambda - rēķini. Valoda ML: pamati, augstākas kārtas funkcijas, datu tipi, tālākas konstrukcijas. 9. Funkcionālā programmēšana II: Valoda SCHEME. Aizturētās izpildes paradigma. Valoda HASKELL. 10. Loģiskā programmēšana. Valoda PROLOG: predikāti, unifikācija. Horna klauzulas, rezolūciju metode. PROLOG interpretatora darbība. 11. Abstrakto datu tipu un moduļu mehānismi programmēšanas valodās. Valodas ADA elementi. 12. Objektorientētā programmēšana. Valoda C++. Klases, objekti, atribūti, metodes. Mantošana, abstraktās klases, virtuālās funkcijas. OO konstrukcijas valodās JAVA un Eiffel. 13. Paralēlu sistēmu modelēšana. 14. Paralēlās programmēšanas konstrukcijas programmēšanas valodās (ADA, JAVA).
Programmēšanas valodas jēdziens Programma - datu apstrādes procesa (diskrētā procesa, algoritma) specifikācija (apraksts):- izpildāmība (uz dažādiem datoriem) - lasāmība: (1) lai cilvēks varētu strādāt ar tekstu (2) iespēja precīzi analizēt tekstu Programmēšanas valoda - līdzekļu, konstrukciju kopums (sistēma) programmu uzdošanai(diskrēto procesu aprakstam, …) (1) Iespēja programmas izpildīt uz datora, (2) Programmu lasāmība (cilvēkam) – principiālās prasības, kas izvirzītas katrai programmēšanas valodai Diskusija: vai var pastāvēt valoda, kurā kāda no šīm prasībām nav īstenota? (1) Programmēšana pseidokodos, valoda kā līdzeklis, lai apmainītos ar informāciju par algoritmiem (2) Reģistru mašīnas – ierobežota lasāmība Prasības: lasīt, rakstīt, izpildīt, modificēt, analizēt, izmantot programmas – kā grupējas attiecībā pret (1) un (2) ?
Programmēšanas valodas uzdošana (1) Programma - datu apstrādes procesa (diskrētā procesa, algoritma) specifikācija (apraksts) Programmēšanas valoda - līdzekļu, konstrukciju kopums (sistēma) programmu uzdošanai (diskrēto procesu aprakstam, …) Prasības: (1) ērta lasāmība, (2) efektīva izpildāmība uz datora Būtiskās programmēšanas valodas apraksta komponentes (1): Sintakse:Konstrukciju formēšanas un attēlošanas likumi Lai būtu iespējama izpilde uz datora: noteikti strikti likumi, kā uzdot programmas. Programmām jābūt uzdotām tādā formā, lai dators iespējami efektīvi varētu programmas tekstu pārvērst izpildāmā kodā. Struktūras nozīme programmēšanā: (1) svarīga lietotājam, (2) pirms izpildes uz datora programmā tiek identificēti strukturālie bloki. Programmēšanas valoda – formāla valoda (noteikti formēšanas likumi).Bet: programmēšanas valoda nav tikai “vārdu kopa” (kā automātu teorijā). Semantika:Asociācija: valodas konstrukcijas <-> datu apstrādes procesi Kāds diskrētais process, kāda instrukciju virkne tiek saistīta ar katru konkrētu dotajā valodā uzrakstītu programmu?
Programmēšanas valodas uzdošana (2) Programma - datu apstrādes procesa (diskrētā procesa, algoritma) specifikācija (apraksts) Programmēšanas valoda - līdzekļu, konstrukciju kopums (sistēma) programmu uzdošanai (diskrēto procesu aprakstam, …) Prasības: (1) ērta lasāmība, (2) efektīva izpildāmība uz datora Būtiskās programmēšanas valodas apraksta komponentes (2): Pragmatika:Kā valodas konstrukciju izmantot uzdevumu risināšanā? Izstrādes vide:būtiski programmu būves procesā. Programmēšanas valoda: vairs ne tikai programmu uzdošanas sistēma, bet daļa no programmatūras izstrādes vides, kas veicina un nosaka konkrētu programmatūras izstrādes metodoloģiju. Izstrādes vide: - iespēja rakstīt, izpildīt programmas dažādās valodās; - līdzekļi programmu failu manipulācijai, izmaiņu fiksēšanai un versiju pārvaldībai, - skaņošanas, testēšanas un analīzes līdzekļi. Programmēšanas valodas – būtiska programminženierijas priekšmeta komponente. Šajā kursā: aplūkosim programmēšanas valodu “valodniecisko”, konstrukciju aspektu.
Programmēšanas valodas: sintakses uzdošana Programmēšanas valoda: Sintakse, semantika, pragmatika, izstrādes vide Koncentrējamies uz valodas jautājumiem: būtiska precīza sintakses un semantikas uzdošana. Vai sintaksi var uzdot ar konkrētu kompilatoru: valodā L ietilpst tās uz tikai tās programmas, ko šis kompilators “atzīst” par derīgām? Vai cits kompilators arī atzīs par derīgām tieši šīs pašas programmas? Nepieciešams sintakses apraksts: • kas nav atkarīgs no konkrētas realizācijas, • kas ir lietotājam viegli uztverams. Bieži izmantots līdzeklis programmēšanas valodu sintakses uzdošanai – bezkonteksta gramatikas (context – free grammars). Sintakses uzdošana ar gramatiku palīdzību: līdz ar katras programmas tekstu tiek uzdota arī informācija par programmas struktūru. Sintakses uzdošana, konkrētā un abstraktā sintakse: sk. vēlāk kursā.
Programmēšanas valodas: semantikas uzdošana Programmēšanas valoda: Sintakse, semantika, pragmatika, izstrādes vide Koncentrējamies uz valodas jautājumiem: būtiska precīza sintakses un semantikas uzdošana. Sintakse: bezkonteksta gramatikas. Vai semantiku var uzdot ar konkrētu kompilatoru: programmai P atbilst tas ielādes modulis, ko šis kompilators sagatavo, saņemot P tekstu? Vai cits kompilators sagatavos ekvivalentu ielādes moduli? Kā lietotājam zināt, kādus rezultātus viņš var sagaidīt no šādas programmas P izpildes? Nepieciešams semantikas apraksts: • kas nav atkarīgs no konkrētas realizācijas, • kas ir lietotājam viegli uztverams. Semantikas uzdošana: bieži vien ar valodas “rokasgrāmatu” (reference manual), neformālā vai pusformālā tekstā aprakstot valodas konstrukciju nozīmi. Semantikas uzdošanas tekstiem tendence kļūt aizvien precīzākiem, formālākiem. Formāla semantikas uzdošana: operacionālā, denotacionālā, u.c. Nav vienkārša industriālām programmēšanas valodām. Plašāka informācija: vēlāk kursā.
CPU Galvenā atmiņa Ārējā atmiņa I / O iekārtas Komunikācijas šina Reģistri Vadības bloks Aritmētikas un loģikas bloks Datora uzbūves shēma (vienkāršota) Programmas izpilde uz datora: kādi līdzekļi pieejami (kāds ir dators)? Fetch - decode - execute cikls: 1. Ielādē nākamo instrukciju 2. Nosaka (atkodē) instrukcijas tipu 3. Atrod un ielādē vajadzīgajos reģistros instrukcijas izmantotos datus 4. Izpilda instrukciju - t.sk. instrukcijas reģistrs - t.sk. programmas skaitītājs
Von Neumann mašīna: programmēšana kodos 1936. Tjūringa mašīnas (teorētisks modelis): galīgs automāts: galīga vadības struktūra + bezgalīga lenta. Čerča tēze: ar TM var visu, ko vispār var algoritmiski. Universālā TM: dati un programma uz tās pašas lentas. 1948. Von-Neumann mašīna, praktiski uzbūvēta. Atmiņa sadalīta šūnās. Katrā šūnā: komanda vai datu vērtība. Komandas izpildās noteiktā secībā. Komanda var mainīt datu šūnas saturu (un arī programmas “tekstu”). Datori šodien:pēc tā paša principa! Imperatīvā programmēšana: Atmiņas šūnām piešķirti simboliski vārdi, atmiņas šūnas apvienotas struktūrās, komandu izpildes princips nav mainījies (komandu secība - virkne, iespēja mainīt datu šūnas saturu).
von Neumann mašīnas arhitektūra Vadības bloka reģistrā V - 10 biti, kārtējās komandas numurs (adrese) Aritmētiskā bloka reģistrā A - 20 biti Uz lentas (atmiņā) - 1024 šūnas, katra pa 20 bitiem Šūna, kas kodē komandu: 10 biti instrukcijai + 10 biti adresei Instrukcijas kods: “000000” + 4 bitu kods Datu ievads: šūnu vērtību uzstādīšana sākumā Datu izvads: šūnu vērtību nolasīšana beigās Komandas: LOAD, SAVE, ADD, SUB, u.c. Komanda MODIFY ciklu organizēšanai (saglabā šūnā adreses informāciju)
von Neumann mašīnas komandas LOAD i 0001 A:=M[i](M[i] - i-tā atmiņas šūna, i = 0..1023) SAVE i 0010 M[i]:=A ADD i 0011 A:=A+M[i] SUB i 0100 A:=A-M[i] SIGN 0101 A:=-A ABS 0110 A:=|A| JUMP i 0111 V:=iVadības pārvietošana uz i-to komandu COND i 1000 if A>=0 then V=i MODIFY i 1001 M[i]pēdējiem 10 bitiem piešķir aritmētiskā reģistra A pēdējos 10 bitus (adreses informāciju) STOP 1111 apstāties CONST i (i binārais pieraksts)mnemonisks apzīmējums datu vērtībai
von Neumann mašīnas programmas piemērs Uzdevums: No 801.-900. šūnās esošajām vērtībām lielāko ierakstīt 901. šūnā. 11 sub 19 atņemam 19. šūnas saturu - apskatāmo šūnu numuru cikla beigu vērtību 12 cond 16 Ja rezultāts ir lielāks vai vienāds par 0, 17. šūnas skaitlis ir lielāks vai vienāds par 19. šūnā ierakstīto; programma ir beigusi apskatīt visas paredzētās šūnas 13 load 17 atjauno reģistrā A kārtējās aplūkojamās šūnas numuru 14 modify 2 izmaina 2. komandas adresi atbilstoši reģistrā A esošajai vērtībai. 15 jump 2 uz nākamās šūnas apstrādi 16 stop programma ir izpildīta 17 const 802 kārtējās ielasāmās šūnas numurs (802, 803, …, 900, 901) 18 const 1 solis par kādu 1 cikla apgriezienā jāpalielina šūnas numurs 19 const 901 cikla indeksa beigu vērtība 0 load 801 ielādē 801. šūnas saturu 1 save 901 saglabā 901. šūnā. 901. šūnā glabā līdz katram brīdim atrasto lielāko skaitli 2 load 802 ielādē nākošās kārtējās šūnas saturu (vērtību maina programmas darba gaitā). 3 sub 901 atņem no ielasītā kārtējā skaitļa līdz šim atrasto lielāko skaitli 4 cond 6 Ja kārtējais ielasītais skaitlis ir bijis lielāks par līdz šim atrasto, pāriet uz 6. 5 jump 8 pāriet uz 8. komandu (ja 6. un 7. komandas nav jāizpilda). 6 add 901 pieskaita atpakaļ atņemto 7 save 901 saglabā jauno ielasīto skaitli 8 load 17 ielādē 17. šūnas saturu 9 add 18 pieskaita soli 10 save 17 jauno numuru saglabā atpakaļ
CPU Galvenā atmiņa Ārējā atmiņa I / O iekārtas Komunikācijas šina Reģistri Vadības bloks Aritmētikas un loģikas bloks Datora uzbūves shēma (vienkāršota) Programmas izpilde uz datora: kādi līdzekļi pieejami (kāds ir dators)? Fetch - decode - execute cikls: 1. Ielādē nākamo instrukciju 2. Nosaka (atkodē) instrukcijas tipu 3. Atrod un ielādē vajadzīgajos reģistros instrukcijas izmantotos datus 4. Izpilda instrukciju - t.sk. instrukcijas reģistrs - t.sk. programmas skaitītājs
Abstrakciju hierarhija datorā Varam skatīties uz datoru dažādos veidos. “Skatījumu” hierarhija, augstāks līmenis izmanto operācijas, kas realizētas zemākā līmenī. (a) Dators kā lietotāja tekstu un tabulu apstrādes līdzeklis, uz datora iespējams izpildīt lietojamas programmas (Word, Excel, u.c.) (b) Dators kā vide programmēšanai (valodā C++, PASCAL, PROLOG, u.c.) (c) Dators kā bināras simbolu virknes apstrādājoša iekārta (viss sastāv no 0 un 1, baits – 8 biti, Kbaits – 1024 baiti, u.tml.) (d) Dators kā fizikāli realizētu mikroshēmu sistēma, sastāv no diodēm, tranzistoriem, u.c. elementiem. Starp (b) un (c) vēl (nosacīti) 3 līmeņi: (b1) asemblera valoda (instrukcijas darbam ar reģistriem, atmiņas šūnām) (b2) operētājsistēmas kodols (vada uzdevumu plūsmu datorā) (b3) mikroprogrammas (procesora instrukciju realizācija loģisko operāciju līmenī). Lai strādātu augstākā līmenī, nav jāzina visas zemākā līmeņa detaļas (lai brauktu ar trolejbusu, nav jāzina tā dzinēja uzbūve).
Programmēšanas valodu realizācijas shēmas Ieejas dati INTERPRETATORS Rezultāts Programmas teksts Kompilators: Leksiskā analīze Sintaktiskā analīze Starpkoda ģenerēšana Optimizācija Koda ģenerēšana Interpretācija: Kompilācija: Hibrīdā implementācija: Programmas teksts Programmas kods Ieejas dati Programmas kods Rezultāts Preprocesors: Leksiskā analīze Sintaktiskā analīze Starpkoda ģenerēšana Starpkods Programmas teksts Rezultāts Interpretators Ieejas dati
Programmēšanas valodu realizācija: piezīmes Programmu struktūras nozīme realizācijā – lai programmu varētu “izpildīt” ir “jāatšifrē” tās struktūra. Viena programmēšanas valoda: iespējamas dažādas realizācijas (uz dažādiem datoriem, uz viena un tā paša datora). Interpretators un kompilators: interpretators darbosies lēnāk, var būt labi izmantot interpretatoru izstrādes fāzē, tad pāriet uz kompilētu kodu rūpnieciskās ekspluatācijas fāzē. Vienai un tai pašai valodai var pastāvēt vairāki interpretatori un kompilatori: Mašīnvaloda: katra tipa mašīnai sava, vajadzīgi dažādi kompilatori. Var tikt radīti jauni kompilatori, kas veido, piemēram, ātrāku kodu (optimizējoši kompilatori). Kā noteikt, vai vairāki kompilatori realizē vienu un to pašu valodu?Svarīgi definēt valodu neatkarīgi no tās realizācijas uz datora. Valodai nepieciešami standarti: sintakse un semantika. Teorētiski var būt iespējams pierādīt kompilatora atbilstību valodas definīcijai (ja valodas definīcija ir dota formāli).
Abstrakcijas: fizikā, programmēšanas valodās, … Programmēšanas valodu uzdošana .. Kas ir programmēšanas valoda? Abstrakcija: atteikšanās no aprakstāmā objekta otršķirīgām īpašībām, lai iegūtu skaidrāku priekšstatu par tā svarīgākajām īpašībām. Piemēri no fizikas:(1) debess mehānika apraksta planētas kā materiālus punktus, planētu izmēri netiek ņemti vērā;(2) ideālas gāzes vienādojumi termodinamikā: “ideālas gāzes” dabā nepastāv. Kas galvenā, kas otršķirīgā īpašība: abstrakcijas/modeļa veidotāja ziņā, radošais moments. Svarīgi, lai abstraktā līmenī varētu iegūt realitātei atbilstošus rezultātus. Programmēšanas valodās: lai aprakstītu programmas izpildi, varam atteikties no priekšstata par programmu izpildes vidi – datoru, kas fizikālā līmenī manipulē tikai 0 un 1. Varam atteikties arī no reģistru mašīnas priekšstata. Abstrakcija programmēšanas valodās: piedāvā jēdzienu sistēmu, kādā aprakstīt algoritmus. Būtisks šīs jēdzienu sistēmas aspekts: ērtība cilvēka lietošanai.
Abstrakcijas programmēšanas valodās Abstrakcija:jēdzienu sistēma algoritmu aprakstam. Kādi jēdzieni tiek izmantoti programmēšanas valodās? Abstrakciju veidi programmēšanas valodās: (1) Datu abstrakcija – informācija par datu vērtībām, datu tipiem, u.taml. (2) Vadības plūsmas abstrakcija – instrukciju izpildes secība programmā, u.taml. Abstrakciju līmeņi (nosacīts iedalījums): - pamata abstrakcijas: pamata pieejamās konstrukcijas, - struktūras abstrakcijas: programmas struktūra, - moduļu abstrakcijas: programmas moduļu organizācija. Apskatīsim detalizētāk datu un vadības plūsmas abstrakcijas dažādos līmeņos.
Datu abstrakcijas programmēšanas valodās Pamata līmenis:mainīgā un datu tipa jēdziens Abstrahējamies no konkrētā datu vērtību attēlojošā datora atmiņas apgabala satura. Operācijas ar datu vērtībām (piemēram, saskaitīšana, reizināšana, u.c.) pieejamas abstraktās izpratnes terminos. Katram mainīgajam tiek dots vārds. Mainīgajam ir datu tips, kas var tikt saistīts ar noteiktu matemātisku kopu (ir vēl klāt apjoma ierobežojumi). Struktūras līmenis:datu struktūras Ieraksti (vienāda vai dažāda tipa lauki grupēti kopā), masīvi. Lietotāja definēto tipu deklarācija: strukturētie tipi: typedef int Intarray[10]; Moduļa līmenis: datu enkapsulācija, informācijas paslēpšana, abstraktie datu tipi. Klase: var tikt klasificēta gan kā struktūras, gan moduļa līmeņa abstrakcija. Atkārtotas lietojamības (reuse) aspekts, komponenšu un konteineru bibliotēkas, saskarnes (interfeisa) standarti, t.sk. neatkarīgi no konkrētām valodām.
Vadības plūsmas abstrakcijas Pamata līmenis:piešķiršanas operators, pieejams daudzās programmēšanas valodās. GOTO operators (reģistru mašīnas JUMP operācijas abstrakcija). Mūsdienās GOTO tiek uzskatīta par pārāk zema līmeņa abstrakciju – GOTO neņem vērā programmas struktūru. Struktūras līmenis (1): zarošanās un cikla operatori. Zarošanās: If, case (PASCAL), switch (C). Cikli: while, for, do (C), repeat (PASCAL), loop (ADA) Būtiski: zarošanās un cikla operatori var tikt iekļauti viens otra iekšienē. Struktūras līmenis (2): apakšprogrammas, apakšprocedūras, funkcijas Procedūra vai funkcija tiek deklarēta (aprakstīta) atsevišķi, tā var tikt izsaukta (aktivēta) no citas vietas programmas tekstā. Procedūrai vai funkcijai ir argumenti – formālie parametri. Izsaukuma (aktivācijas) laikā tiek norādīti faktiskie parametri, kas stājas šo formālo parametru vietā. Dažādi parametru nodošanas mehānismi apakšprogrammām dažādās programmēšanas valodās. Funkcijas: procedūras paveids vai īpašs strukturizācijas līdzeklis (funkcionālajās programmēšanas valodās). Citi līmeņi: paralēlā programmēšana.
Paradigmas (1) – Imperatīvā programmēšana Imperatīvā programmēšana (PASCAL, BASIC, C, FORTRAN, PL/I, u.c.): • vēsturiski veidojies kā pirmais no programmēšanas veidiem, imitē datorā pieejamās operācijas, • atbilst datora arhitektoniskajai organizācijai: viens centrālais procesors pēc kārtas izpilda instrukcijas ar datiem, kas glabājas atmiņā (sk. von Neumann mašīna) • programmas modelis: apgabals datora atmiņā datu glabāšanai • vārdi mainīgajiem (datu apgabala komponentēm) • piešķiršana: darba gaitā maina “vērtību” mainīgajam • vadības plūsma: if-then-else, while, go to, ... • ievada / izvada operācijas kopējā operāciju secībā • apakšprogrammas, parametri Strikta secība instrukciju izpildei ierobežo iespējas norādīt, ka kādas darbības būtu veicamas paralēli (vienlaicīgi attiecībā uz vairākām datu komponentēm), vai arī kādu darbību izpildei secība nav svarīga. Iespēja mainīt “mainīgā” vērtību neļauj izmantot intuīciju par mainīgo, kas nāk no matemātikas, kur mainīgais apzīmē patvaļīgu, bet vienu un fiksētu vērtību.
Paradigmas (2) – Funkcionālā programmēšana Funkcionālā programmēšana (ML, LISP, SCHEME, HASKELL, MIRANDA, u.c.): • programma ir funkcija, izeja = f ( ieeja ); • programmas izpilde – dotas funkcijas pielietošana zināmai vērtībai; funkcionālas valodas – aplikatīvas valodas (angl. application) • valodas galvenais mehānisms – funkcijas izsaukums: parametru nodošana funkcijai, funkcijas vērtības aprēķināšana, rezultāta iegūšana no funkcijas • mainīgie (kā matemātikā), konstantes, operācijas • funkciju kompozīcija – pamata strukturizācijas mehānisms • zarošanās iespējas funkcijas izpildē, rekursijafun fac n = if n = 0 then 1 else fac (n-1) • augstākas kārtas funkcijas (funkcija, kuras arguments arī ir funkcija), funkcijas kā “pirmās šķiras objekti” programmēšanas valodā. • “blakus efekti” funkcijām (piemēram ievads / izvads) Funkcionālā programmēšana (tīrā veidā): nav piešķiršanas operatora, nav ciklu, utt. Pastāv iespējas programmēt funkcionālā stilā arī atsevišķās imperatīvās programmēšanas valodās.
Paradigmas (3) – Loģiskā programēšana Loģiskā programmēšana (PROLOG, arī CLP, OBJ3, u.c.): • Programma – zināšanu bāze, apgalvojumi par to, kas ir zināms par iegūstamo rezultātu (par problēmu apgabalu, kas ietver sevī ziņas par šo rezultātu). • tēvs(jānis, māris) “Jānis ir tēvs Mārim”tēvs(māris, juris) vectēvs(A,B) :- tēvs(A,C), tēvs(C,B) “A ir vectēvs B, ja A ir tēvs C un C ir tēvs B”?- vectēvs(jānis,X) “Kam Jānis ir vectēvs?”?- vectēvs(X,juris) “Kas ir vectēvs Jurim?” • PROLOG programma - zināšanu bāze(p1, p2, …, pn) un mērķa predikāts~q • PROLOG programmas uzdevums: atrast X vērtību (vērtības), ar kurām q(X) ir patiess • iespējama vienas programmas izpilde “dažādos virzienos” • PROLOG programmas izpilde: loģisko seku meklēšana no zināšanām dotajā bāzē, plus iespējas organizēt / ierobežot meklēšanas procesu, konstrukcijas, kas izskaidrojamas tikai meklēšanas stratēģijas terminos; • PROLOG interpretatora pamata mehānismi: termu salīdzināšana / unifikācija, rezolūciju metode (efektīva Horna klauzulu gadījumā) • Izmantota mākslīgā intelekta (AI) aplikācijās un prototipēšanā, kopumā tomēr ierobežoti lietojumi
Paradigmas(4) - Objektorientētā programmēšana Objektorientētā programmēšana (C++, Eiffel, Smalltalk, JAVA, u.c.): • Mūsdienās viena no visnozīmīgākajām, plašāk lietotajām programmēšanas paradigmām • Objekta jēdziens: datu (atmiņas šūnu) kopums strukturizēts kopā ar operācijām, kas var mainīt vērtības šajās šūnās • Klases jēdziens: objekti ar vienāda veida īpašībām tiek grupēti klasēs; īpašības: atribūti, metodes • Objekts – klases instance, iespēja dinamiski radīt objektu programmas izpildes gaitā • Klašu hierarhija: Mantošana, virtuālās funkcijas, u.c.; veicina programmatūras koda atkārtotas izmantošanas iespēju • Papildina iepriekš aplūkotās paradigmas
Paradigmas (5) – Paralēlā programmēšana Paralēlā programmēšana (valodas: ADA, JAVA, Concurrent ML u.c.; principi: CCS, CSP, LOTOS) • process – atsevišķa programmas (sistēmas) komponente ar savu vadības (darbību izpildes, aktivitāšu, u.taml.) plūsmu • paralēla programma – programma, kurā vienlaicīgi (paralēli) darbojas vairāki procesi (pavedieni): • vienā programmā vairāki procesi • procesu (programmas daļu) paralēla izpilde • informācijas apmaiņa (kopējs atmiņas apgabals / kopēji mainīgie, sinhronizācija, ziņojumu apmaiņa) • fiziskais un / vai loģiskais paralēlisms • ADA: Task-i, JAVA: pavedieni (threads)
Programmēšanas paradigmas – turpinājums Vizuālā programmēšana (Visual BASIC, Visual C++, C#, JavaBeans u.c.): • vizuālie objekti un to klases • lietotāja saskarne un datu ievads caur formām un vizuālām kontrolēm • procedūru izpilde, reaģējot uz notikumiem • saistītas ar konkrētām programmatūras izstrādes vidēm • var tikt aplūkotas sīkāk lietotāja saskarnes vai programmbūves kursā Skriptu programmēšana (Perl, JavaScript, Tcl, u.c.): • iekļauj programmās utilītas, bibliotēkas, operāciju sistēmas komandas • plaši lietotas tīmekļa aplikācijās Marķējuma valodas (HTML, XML, SGML, u.c.) • plaši lietotas tīmekļa lappušu nodrošināšanā • pieaugoši citi lietojumi • varētu būt speciāls šāds kurss par šīm valodām tīmekļa lapu veidošanas un tīmekļa programmēšanas kontekstā
Programmēšanas paradigmas: pārskats Imperatīvā programmēšana (PASCAL, BASIC, C, FORTRAN, PL/I, u.c.): Funkcionālā programmēšana (ML, LISP, SCHEME, HASKELL, MIRANDA, u.c.): Loģiskā programmēšana (PROLOG, arī CLP, OBJ3, u.c.): Objektorientētā programmēšana (C++, Eiffel, Smalltalk, JAVA, u.c.): Paralēlā programmēšana (valodas: ADA, JAVA, Concurrent ML u.c.; principi: CCS, CSP, LOTOS) Vizuālā programmēšana (Visual BASIC, Visual C++, C#, JavaBeans u.c.): Skriptu programmēšana (Perl, JavaScript, Tcl, u.c.): Marķējuma valodas (HTML, XML, SGML, u.c.) … … …