pr val 1

2,217 views

Published on

Published in: Technology
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
2,217
On SlideShare
0
From Embeds
0
Number of Embeds
5
Actions
Shares
0
Downloads
9
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

pr val 1

  1. 1. Programmēšanas valodas Datorzinātņu bakalaura programma LU Fizikas un matemātikas fakultāte 4.kurss Kārlis Čerāns, Dr. dat.
  2. 2. Programmēšanas valodas – kursa raksturojums <ul><li>Kursa mērķis: </li></ul><ul><li>Dot priekšstatu par programmēšanas valodu tipiskajām konstrukcijām un to realizāciju dažādās programmēšanas valodās. </li></ul><ul><li>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 </li></ul><ul><li>Apgūt (atkārtot) pamata konstrukcijas konkrētās programmēšanas valodās , spēt tās lietot vienkāršu uzdevumu risināšanā. </li></ul><ul><li>Metode: Lekcijas, atbalsta materiāli (t.sk. patstāvīgi apgūstami), pārbaudījumi, iespēja rakstīt referātu </li></ul><ul><li>Pārbaudījumi: mājas darbi, kļūdu labojumi, eksāmens </li></ul><ul><li>Izpilde uz datora: nepieciešama lielākajai daļai uzdevumu. </li></ul><ul><li>Eksāmens: mājas darbu atbildēšana, kļūdu labojumi, teorijas jautājumi </li></ul><ul><li>Literatūra: K.Louden, Programming Languages Principles and Practice, 2nd edition, konkrēto valodu dokumentācija, u.c. </li></ul>
  3. 3. Kontaktinformācija <ul><li>Lektors: Kārlis Čerāns , Dr. dat., a soc. prof. email: [email_address] tel. 6 7 213 716 LU MII, Raiņa bulv. 29, 421. istaba </li></ul><ul><li>Darbu labošana: Elīna Kalniņa , Mg. dat. email: [email_address] tel. 6 7 213 716 LU MII, Raiņa bulv. 29, 42 0 . istaba </li></ul><ul><li>Kursa e-informācija : </li></ul><ul><li>MOODLE vidē e-kurss “Programmēšanas valodas” </li></ul><ul><li>- kursa administratīv ā informācija (prasības, u.c.) </li></ul><ul><li>- mājas darbu uzdevumi </li></ul><ul><li>- papildmateriāli (lekciju slaidi (.ppt), citi materiāli) </li></ul><ul><li>- norādes uz programmēšanas vidēm (atsevišķām valodām) </li></ul><ul><li>Papildus resursi, t.sk. studentu referāti: </li></ul><ul><li>http://www.ltn.lv/~karlisc/stud.htm </li></ul>
  4. 4. Vērtēšana <ul><li>6 mājas darbi, no tiem obligāti 3., 4., 5. un divi no 1., 2., 6. </li></ul><ul><li>Par katru mājas darbu līdz 20p. Termiņos neiesniegtus darbus, kā arī kļūdu labojumus jāatrāda eksāmenā. </li></ul><ul><li>Ja kāds obligāts darbs nav izpildīts vismaz par 50%, tad mīnus 10p, zaudē tiesības uz vienu teorijas jautājumu, u.c. papildus punktiem. </li></ul><ul><li>Eksāmens: max 20p (divi teorijas jautājumi). </li></ul><ul><li>Papildus uzdevumi, referāti – neobligāti. </li></ul><ul><li>Atzīme “9” – 106p, “8” – 93p, “7” – 80p, “6” – 67p, “5” – 54p, “4” – 41p. </li></ul><ul><li>Sīkāka informācija – vērtēšanas sadaļā kursa lapā MOODLE vidē. </li></ul>
  5. 5. Plānotais kursa saturs <ul><li>1. Ievads. Programmēšanas valodas jēdziens. Realizācijas piezīmes. Programmēšanas paradigmas. Vēsturiskā attīstība. Īpašības. </li></ul><ul><li>2. Sintakse un semantika. </li></ul><ul><li>3. Imperatīvā programmēšana. C++ un C#. </li></ul><ul><li>4. Konstrukcijas programmēšanas valodās: Simbolu tabula. Mainīgie. Datu tipi. Vadības struktūras. Apakšprogrammas. Atmiņas organizācija. Izņēmuma situācijas. </li></ul><ul><li>5. Funkcionālā programmēšana (ML, SCHEME, HASKELL). </li></ul><ul><li>6. Loģiskā programmēšana, PROLOG. </li></ul><ul><li>7. Objektorientētā programmēšana. C# un EIFFEL. </li></ul><ul><li>8. Paralēlā programmēšana, ADA. </li></ul><ul><li>9. Jaunās programmēšanas valodas. </li></ul>
  6. 6. Programmēšanas valodas jēdziens <ul><li>Programma - datu apstrādes procesa (diskrētā procesa, algoritma) apraksts </li></ul><ul><li>Programma: - izpildāmība (uz dažādiem datoriem) - saprotamība (lasīt, rakstīt, modificēt, analizēt, ...) </li></ul><ul><li>Programmēšanas valoda - līdzekļu, konstrukciju kopums (sistēma) programmu uzdošanai (diskrēto procesu aprakstam, …) </li></ul><ul><li>Programmēšanas valoda – veids, kā cilvēkam “sazināties” ar datoru. </li></ul><ul><li>Nepieciešams nodrošināt programmu izpildāmības un saprotamības prasības. </li></ul><ul><li>Vēsturiskais aspekts: orientācija uz datoru  orientācija uz cilvēku. </li></ul><ul><li>Valoda programmu inženierijas procesā: abstrakcija, precizitāte, modularitāte, drošība pret kļūdām, ... </li></ul><ul><li>Dažādas programmēšanas valodas – dažādas konstrukciju sistēmas. Vēsturiskās tradīcijas, dažādi uzdevumi, dažādas gaumes, savstarpēja ietekmēšanās </li></ul><ul><li>Ne gluži (augsta līmeņa) programmēšanas valodas: </li></ul><ul><li>(1) Pseidokods, valoda kā līdzeklis, lai apmainītos ar informāciju par algoritmiem </li></ul><ul><li>(2) Reģistru mašīnas – ierobežota lasāmība </li></ul>
  7. 7. Programmēšanas valodas uzdošana <ul><li>Programmēšanas valodas apraksts: </li></ul><ul><li>(1) Sintakse: Konstrukciju formēšanas un attēlošanas likumi </li></ul><ul><li>Lai būtu iespējama izpilde uz datora: noteikti strikti likumi , kā uzdot programmas. </li></ul><ul><li>Programmēšanas valoda – formāla valoda (noteikti formēšanas likumi). Bet: programmēšanas valoda nav tikai “vārdu kopa” (kā automātu teorijā). </li></ul><ul><li>Nozīme ir arī programmas struktūrai: (1) struktūra ir svarīga lietotājam, (2) pirms izpildes uz datora programmā tiek identificēti strukturālie bloki. </li></ul><ul><li>(2) Semantika: Asociācija: valodas konstrukcijas <-> datu apstrādes procesi </li></ul><ul><li>Kāds diskrētais process, vai kādas šī procesa īpašības tiek saistītas ar katru konkrētu dotajā valodā uzrakstītu programmu? </li></ul><ul><li>Diskrētais process – “soļu virkne”, dažādi līdzekļi lai aprakstītu: (1) statisko izpildes laika struktūru un (2) tās dinamiku programmas izpildes laikā. </li></ul><ul><li>(3) Pragmatika: Kā valodas konstrukcijas izmantot uzdevumu risināšanā? </li></ul><ul><li>Piedāvātās bibliotēkas – nosaka konkrētu programmu veidošanas iespējas valodā. </li></ul><ul><li>(4) Izstrādes vide: atbalsta programmu izstrādes procesu (būtiski to nosaka) </li></ul>
  8. 8. Programmēšanas valodas šajā kursā <ul><li>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. </li></ul><ul><li>Izstrādes vide: - iespēja rakstīt, izpildīt programmas noteiktā valodā (vai arī var būt viena izstrādes vide, kas piedāvā iespēju strādāt ar dažādām valodām); - 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. </li></ul><ul><li>Programmu izstrādes līdzekļi – būtiska programminženierijas priekšmeta komponente. </li></ul><ul><li>Šajā kursā: aplūkosim programmēšanas valodu “valodniecisko”, konstrukciju aspektu . </li></ul><ul><li>Pamatā aplūkosim: semantika (konstrukciju nozīme), pragmatika (kā konstrukcijas lietot). </li></ul><ul><li>Sintakse – cik nepieciešams (uzdošanas principi, konkrētā sintakse konkrētām valodām). </li></ul><ul><li>Izstrādes vide – līdzeklis mājas darbu izpildei  </li></ul>
  9. 9. Vienkārša reģistru mašīna programmēšanas valodu pirmssākumi programmēt, kā “saprot” dators Programmēšanas valodas. Ievads.
  10. 10. Von Neumann mašīna: programmēšana kodos <ul><li>1936. Tjūringa mašīnas (teorētisks modelis): </li></ul><ul><li>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. </li></ul><ul><li>1948. Von-Neumann mašīna , praktiski uzbūvēta. </li></ul><ul><ul><li>Atmiņa sadalīta šūnās. Katrā šūnā: komanda vai datu vērtība. </li></ul></ul><ul><ul><li>Komandas izpildās noteiktā secībā . </li></ul></ul><ul><ul><li>Komanda var mainīt datu šūnas saturu (un arī programmas “tekstu”). </li></ul></ul><ul><li>Datori šodien: pēc tā paša principa! </li></ul><ul><li>Imperatīvā programmēšana: </li></ul><ul><ul><li>Atmiņas šūnām piešķirti simboliski vārdi, atmiņas šūnas apvienotas struktūrās, </li></ul></ul><ul><ul><li>komandu izpildes princips nav mainījies (komandu secība - virkne, iespēja mainīt datu šūnas saturu). </li></ul></ul>
  11. 11. von Neumann mašīnas arhitektūra <ul><li>Vadības bloka reģistrā V - 10 biti, kārtējās komandas numurs (adrese) </li></ul><ul><li>Aritmētiskā bloka reģistrā A - 20 biti </li></ul><ul><li>Uz lentas (atmiņā) - 1024 šūnas, katra pa 20 bitiem </li></ul><ul><li>Šūna, kas kodē komandu: 10 biti instrukcijai + 10 biti adresei </li></ul><ul><li>Instrukcijas kods: “000000” + 4 bitu kods </li></ul><ul><li>Datu ievads : šūnu vērtību uzstādīšana sākumā </li></ul><ul><li>Datu izvads : šūnu vērtību nolasīšana beigās </li></ul><ul><li>Komandas: LOAD, SAVE, ADD, SUB, u.c. </li></ul><ul><li>Komanda MODIFY ciklu organizēšanai (saglabā šūnā adreses informāciju) </li></ul>
  12. 12. von Neumann mašīnas komandas <ul><li>LOAD i 0001 A:=M[i] (M[i] - i-tā atmiņas šūna, i = 0..1023) </li></ul><ul><li>SAVE i 0010 M[i]:=A </li></ul><ul><li>ADD i 0011 A:=A+M[i] </li></ul><ul><li>SUB i 0100 A:=A-M[i] </li></ul><ul><li>SIGN 0101 A:=-A </li></ul><ul><li>ABS 0110 A:=|A| </li></ul><ul><li>JUMP i 0111 V:=i Vadības pārvietošana uz i-to komandu </li></ul><ul><li>COND i 1000 if A>=0 then V=i </li></ul><ul><li>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) </li></ul><ul><li>STOP 1111 apstāties </li></ul><ul><li>CONST i (i binārais pieraksts) mnemonisks apzīmējums datu vērtībai </li></ul>
  13. 13. von Neumann mašīnas programmas piemērs <ul><li>0 load 801 ielādē 801. šūnas saturu </li></ul><ul><li>1 save 901 saglabā 901. šūnā. 901. šūnā glabā līdz katram brīdim atrasto lielāko skaitli </li></ul><ul><li>2 load 802 ielādē nākošās kārtējās šūnas saturu (vērtību maina programmas darba gaitā). </li></ul><ul><li>3 sub 901 atņem no ielasītā kārtējā skaitļa līdz šim atrasto lielāko skaitli </li></ul><ul><li>4 cond 6 Ja kārtējais ielasītais skaitlis ir bijis lielāks par līdz šim atrasto, pāriet uz 6. </li></ul><ul><li>5 jump 8 pāriet uz 8. komandu (ja 6. un 7. komandas nav jāizpilda). </li></ul><ul><li>6 add 901 pieskaita atpakaļ atņemto </li></ul><ul><li>7 save 901 saglabā jauno ielasīto skaitli </li></ul><ul><li>8 load 17 ielādē 17. šūnas saturu </li></ul><ul><li>9 add 18 pieskaita soli </li></ul><ul><li>10 save 17 jauno numuru saglabā atpakaļ </li></ul>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
  14. 14. Von Neumann mašīna: vingrinājums <ul><li>Vingrinājums: cikla pa datu šūnām organizācija von Neumann mašīnās </li></ul><ul><li>Uzrakstīt programmu von Neumann mašīnai, kas ieraksta mašīnas 73. šūnā summu no tiem skaitļiem, kas programmas darba sākumā ierakstīti uz lentas no 401. līdz 700. šūnai (galu šūnas ieskaitot), un kas pēc absolūtās vērtības nepārsniedz 100. </li></ul><ul><li>Ņemt vērā, ka programma darbu sāk no šūnas ar numuru 0, tajā ir jābūt izpildāmai komandai. </li></ul><ul><li>Nav iesniedzams mājas darbs. </li></ul>
  15. 15. Jēdzieni (konstrukcijas) programmēšanas valodās Programmēšanas valodas. Ievads.
  16. 16. Jēdzienu sistēmas <ul><li>Jēdzienu (abstrakciju) sistēmas – izcelt būtiskās detaļas, atstāt otrā plānā pakārtotās . </li></ul><ul><li>Lai būtu ērti lietot . </li></ul><ul><li>Abstrakcijas – plaši izmantotas dabaszinātnēs (materiāls punkts, ideāla gāze, utt.) </li></ul><ul><li>Programmēšanas valodās : programmu aprakstam būtiskie jēdzieni otrā plānā: 0 un 1 manipulācija otrā plānā: reģistru mašīnas priekšstats </li></ul><ul><li>Dažādas valodas – dažādas jēdzienu sistēmas. Tomēr virkne kopēju iezīmju .. </li></ul>
  17. 17. Jēdzieni programmēšanas valodās <ul><li>Jēdzienu (abstrakciju) veidi: </li></ul><ul><li>(1) Datu jēdzieni: </li></ul><ul><ul><li>informācija par datu vērtībām, datu tipiem, u.tml. (statiskā programmas stāvokļa un komunikācijas ar ārējo vidi aprakstam) </li></ul></ul><ul><li>(2) Vadības plūsmas jēdzieni: </li></ul><ul><ul><li>instrukciju izpildes secība programmā, u.tml. (programmas izpildes dinamikas aprakstam) </li></ul></ul><ul><li>Jēdzienu (abstrakciju) līmeņi (nosacīts iedalījums): </li></ul><ul><li>- pamata jēdzieni: pamata konstrukcijas, </li></ul><ul><li>- struktūras jēdzieni: programmas struktūra, </li></ul><ul><li>- moduļu jēdzieni: moduļu organizācija. </li></ul>
  18. 18. Datu abstrakcijas programmēšanas valodās <ul><li>Pamata līmenis: mainīgā un datu tipa jēdziens </li></ul><ul><li>Abstrahējamies no konkrētā datu vērtību attēlojošā datora atmiņas apgabala satura. </li></ul><ul><li>Operācijas ar datu vērtībām (piemēram, saskaitīšana, reizināšana, u.c.) pieejamas abstraktās izpratnes terminos. </li></ul><ul><li>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). </li></ul><ul><li>Struktūras līmenis: datu struktūras </li></ul><ul><li>Ieraksti (vienāda vai dažāda tipa lauki grupēti kopā), masīvi. </li></ul><ul><li>Lietotāja definēto tipu deklarācija: strukturētie tipi: </li></ul><ul><li>typedef int Intarray[10]; </li></ul><ul><li>Moduļa līmenis: datu enkapsulācija, informācijas paslēpšana, abstraktie datu tipi. </li></ul><ul><li>Klase: var tikt klasificēta gan kā struktūras, gan moduļa līmeņa abstrakcija. </li></ul><ul><li>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. </li></ul>
  19. 19. Vadības plūsmas abstrakcijas <ul><li>Pamata līmenis: piešķiršanas operators , pieejams daudzās programmēšanas valodās. </li></ul><ul><li>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. </li></ul><ul><li>Struktūras līmenis (1): zarošanās un cikla operatori. </li></ul><ul><li>Zarošanās: If, case (PASCAL), switch (C). </li></ul><ul><li>Cikli: while, for, do (C), repeat (PASCAL), loop (ADA) </li></ul><ul><li>Būtiski: zarošanās un cikla operatori var tikt iekļauti viens otra iekšienē. </li></ul><ul><li>Struktūras līmenis (2): apakšprogrammas, apakšprocedūras, funkcijas </li></ul><ul><li>Procedūra vai funkcija tiek deklarēta (aprakstīta) atsevišķi, tā var tikt izsaukta (aktivēta) no citas vietas programmas tekstā. </li></ul><ul><li>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ā. </li></ul><ul><li>Dažādi parametru nodošanas mehānismi apakšprogrammām dažādās programmēšanas valodās. </li></ul><ul><li>Funkcijas: procedūras paveids vai īpašs strukturizācijas līdzeklis (funkcionālajās programmēšanas valodās). </li></ul><ul><li>Citi līmeņi: paralēlā programmēšana. </li></ul>
  20. 20. Kā tas var darboties? Ieskats realizācijā. Programmēšanas valodas. Ievads.
  21. 21. Datora uzbūves shēma (vienkāršota) <ul><li>Fetch - decode - execute cikls: </li></ul><ul><li>1. Ielādē nākamo instrukciju </li></ul><ul><li>2. Nosaka (atkodē) instrukcijas tipu </li></ul><ul><li>3. Atrod un ielādē vajadzīgajos reģistros instrukcijas izmantotos datus </li></ul><ul><li>4. Izpilda instrukciju </li></ul>- t.sk. instrukcijas reģistrs - t.sk. programmas skaitītājs Programmas izpilde uz datora: kādi līdzekļi pieejami (kāds ir dators)? CPU Galvenā atmiņa Ārējā atmiņa I / O iekārtas Komunikācijas šina Reģistri Aritmētikas un loģikas bloks Vadības bloks
  22. 22. Abstrakciju (jēdzienu sistēmu) hierarhija datorā <ul><li>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ī. </li></ul><ul><li>(a) Dators kā lietotāja tekstu un tabulu apstrādes līdzeklis, uz datora iespējams izpildīt lietojamas programmas (Word, Excel, u.c.) </li></ul><ul><li>(b) Dators kā vide programmēšanai (valodā C++, PASCAL, PROLOG, u.c.) </li></ul><ul><li>(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.) </li></ul><ul><li>(d) Dators kā fizikāli realizētu mikroshēmu sistēma , sastāv no diodēm, tranzistoriem, u.c. elementiem. </li></ul><ul><li>Starp (b) un (c) vēl (nosacīti) 3 līmeņi: </li></ul><ul><li>(b1) asemblera valoda (instrukcijas darbam ar reģistriem, atmiņas šūnām) </li></ul><ul><li>(b2) operētājsistēmas kodols (vada uzdevumu plūsmu datorā) </li></ul><ul><li>(b3) mikroprogrammas (procesora instrukciju realizācija loģisko operāciju līmenī). </li></ul><ul><li>Augstāks līmenis realizēts uz zemāka līmeņa primitīvu bāzes. </li></ul>
  23. 23. Programmēšanas valodu realizācija (klasika) <ul><li>Interpretācija: </li></ul><ul><li>Kompilācija: </li></ul>Programmas teksts KOMPILATORS: Leksiskā analīze Sintaktiskā analīze Starpkoda ģenerēšana Optimizācija Koda ģenerēšana Ielādes modulis Izpildāms kods Ieejas dati Rezultāts Saišu veidotājs Izpildāms kods Citi moduļi, sistēmas bibliotēkas INTERPRETATORS Ieejas dati Programmas teksts Rezultāts Kompilēti moduļi, bibliotēkas
  24. 24. PV realizācija, turpināts <ul><li>Hibrīdā </li></ul><ul><li>implementācija: </li></ul><ul><li>Hibrīdā </li></ul><ul><li>implementācija </li></ul><ul><li>ar JIT kompilāciju: </li></ul>Ieejas dati Preprocesors: Leksiskā analīze Sintaktiskā analīze Starpkoda ģenerēšana Programmas teksts Starpkods Rezultāts Interpretators (virtuālā mašīna) Citi moduļi (kods), sistēmas bibliotēkas Ieejas dati Preprocesors: Leksiskā analīze Sintaktiskā analīze Starpkoda ģenerēšana Programmas teksts Starpkods Rezultāts Virtuālā mašīna Citi moduļi (kods), sistēmas bibliotēkas JIT Kompilators Kods (fragments) Kods (fragments)
  25. 25. Programmēšanas valodu realizācija: piezīmes <ul><li>Realizācijai svarīga programmu struktūra: lai programmu varētu “izpildīt” ir “jāatšifrē” tās struktūra. </li></ul><ul><li>Viena valoda - dažādas realizācijas (interpretatori, kompilatori, u.c.). Kompilators – ātrāks kods. Interpretators – vieglāki servisi izstrādes laikā. Dažādi optimizācijas līmeņi kompilatoros. </li></ul><ul><li>Valodas definīcija – vēlams, no realizācijas neatkarīga </li></ul><ul><li>Standarti: sintakse un semantika. </li></ul><ul><li>Teorētiski var būt iespējams pierādīt kompilatora atbilstību valodas definīcijai (ja valodas definīcija ir dota formāli). </li></ul>
  26. 26. Programmēšanas paradigmas Programmēšanas valodas. Ievads.
  27. 27. Paradigmas (1) – Imperatīvā programmēšana <ul><li>Imperatīvā programmēšana (PASCAL, BASIC, C, FORTRAN, PL/I, u.c.): </li></ul><ul><li>vēsturiski pirmais programmēšanas veids , imitē datorā pieejamās operācijas, </li></ul><ul><li>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) </li></ul><ul><li>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 </li></ul><ul><li>vadības plūsma: if-then-else, while, go to, ... </li></ul><ul><li>ievada / izvada operācijas kopējā operāciju secībā </li></ul><ul><li>apakšprogrammas, parametri </li></ul><ul><li>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. </li></ul><ul><li>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. </li></ul>
  28. 28. Paradigmas (2) – Funkcionālā programmēšana <ul><li>Funkcionālā programmēšana (ML, LISP, SCHEME, HASKELL, MIRANDA, u.c.): </li></ul><ul><li>programma ir funkcija, izeja = f ( ieeja ) ; </li></ul><ul><li>programmas izpilde – funkcijas pielietošana vērtībai ; funkcionālas valodas – aplikatīvas valodas (angl. application ) </li></ul><ul><li>funkcijas izsaukums : parametru nodošana funkcijai, funkcijas vērtības aprēķināšana, rezultāta iegūšana no funkcijas </li></ul><ul><li>funkciju kompozīcija – pamata strukturizācijas mehānisms </li></ul><ul><li>mainīgie (kā matemātikā), konstantes, operācijas </li></ul><ul><li>zarošanās iespējas funkcijas izpildē, rekursija fun fac n = if n = 0 then 1 else n * fac (n-1) </li></ul><ul><li>augstākas kārtas funkcijas (funkcija, kuras arguments arī ir funkcija), funkcijas kā “pirmās šķiras objekti” programmēšanas valodā. </li></ul><ul><li>“ blakus efekti” funkcijām (piemēram ievads / izvads) </li></ul><ul><li>Funkcionālā programmēšana (tīrā veidā): nav piešķiršanas operatora, nav ciklu, utt. </li></ul><ul><li>Pastāv iespējas programmēt funkcionālā stilā arī atsevišķās imperatīvās programmēšanas valodās. </li></ul>
  29. 29. Paradigmas (3) – Loģiskā programēšana <ul><li>Loģiskā programmēšana (PROLOG, arī CLP, OBJ3, u.c.): </li></ul><ul><li>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). </li></ul><ul><li>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?” </li></ul><ul><li>PROLOG programma - zināšanu bāze (p1, p2, …, pn) un mērķa predikāts q </li></ul><ul><li>Programmas uzdevums: atrast X vērtību (vērtības), ar kurām q(X) ir patiess </li></ul><ul><li>Iespējama vienas programmas izpilde “dažādos virzienos” </li></ul><ul><li>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; </li></ul><ul><li>PROLOG interpretatora pamata mehānismi: termu salīdzināšana / unifikācija, rezolūciju metode (efektīva Horna klauzulu gadījumā) </li></ul><ul><li>Izmantota mākslīgā intelekta (AI) aplikācijās un prototipēšanā , kopumā tomēr ierobežoti lietojumi </li></ul>
  30. 30. P aradigmas (4) - Objektorientētā programmēšana <ul><li>Objektorientētā programmēšana (C++, JAVA, C#, Eiffel, Smalltalk, u.c.): </li></ul><ul><li>Mūsdienās viena no visnozīmīgākajām, plašāk lietotajām programmēšanas paradigmām </li></ul><ul><li>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 </li></ul><ul><li>Klases jēdziens : objekti ar vienāda veida īpašībām tiek grupēti klasēs; īpašības: atribūti, metodes </li></ul><ul><li>Objekts – klases instance , iespēja dinamiski radīt objektu programmas izpildes gaitā </li></ul><ul><li>Klašu hierarhija : Mantošana, virtuālās funkcijas , u.c.; veicina programmatūras koda atkārtotas izmantošanas iespēju </li></ul><ul><li>Papildina iepriekš aplūkotās paradigmas </li></ul>
  31. 31. Paradigmas (5) – Paralēlā programmēšana <ul><li>Paralēlā programmēšana (valodas: ADA, JAVA, Concurrent ML u.c.; principi: CCS, CSP, LOTOS) </li></ul><ul><li>process – atsevišķa programmas (sistēmas) komponente ar savu vadības (darbību izpildes, aktivitāšu, u.taml.) plūsmu </li></ul><ul><li>paralēla programma – programma, kurā vienlaicīgi (paralēli) darbojas vairāki procesi (pavedieni): </li></ul><ul><ul><li>vienā programmā vairāki procesi </li></ul></ul><ul><ul><li>procesu (programmas daļu) paralēla izpilde </li></ul></ul><ul><li>informācijas apmaiņa (kopējs atmiņas apgabals / kopēji mainīgie, sinhronizācija, ziņojumu apmaiņa) </li></ul><ul><li>fiziskais un / vai loģiskais paralēlisms </li></ul><ul><li>ADA: Task-i, JAVA: pavedieni ( threads ) </li></ul>
  32. 32. Programmēšanas paradigmas – turpinājums <ul><li>Vizuālā programmēšana (Visual BASIC, Visual C++, Visual C#, JavaBeans u.c.): </li></ul><ul><li>vizuālie objekti un to klases </li></ul><ul><li>lietotāja saskarne un datu ievads caur formām un vizuālām kontrolēm </li></ul><ul><li>procedūru izpilde, reaģējot uz notikumiem </li></ul><ul><li>saistītas ar konkrētām programmatūras izstrādes vidēm </li></ul><ul><li>var tikt aplūkotas sīkāk lietotāja saskarnes vai programmbūves kursā </li></ul><ul><li>Skriptu programmēšana (Perl, Ruby, JavaScript, Tcl, PHP, u.c.): </li></ul><ul><li>iekļauj programmās utilītas, bibliotēkas, operāciju sistēmas komandas </li></ul><ul><li>plaši lietotas tīmekļa aplikācijās </li></ul><ul><li>Marķējuma valodas (HTML, XML, SGML, u.c.) </li></ul><ul><li>plaši lietotas tīmekļa lappušu nodrošināšanā </li></ul><ul><li>pieaugoši citi lietojumi </li></ul><ul><li>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ā </li></ul>

×