Programmēšanas valodas

30
Programmēšanas valodas Datorzinātņu bakalaura programma LU Fizikas un matemātikas fakultāte 4.kurss Kārlis Čerāns, Dr. dat.

description

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: - PowerPoint PPT Presentation

Transcript of Programmēšanas valodas

Page 1: Programmēšanas valodas

Programmēšanas valodas

Datorzinātņu bakalaura programmaLU Fizikas un matemātikas fakultāte

4.kurss

Kārlis Čerāns, Dr. dat.

Page 2: Programmēšanas valodas

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.

Page 3: Programmēšanas valodas

Kontaktinformācija

Kārlis Čerāns, Dr. dat., asoc. prof.

email: [email protected]

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

Page 4: Programmēšanas valodas

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.

Page 5: Programmēšanas valodas

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).

Page 6: Programmēšanas valodas

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) ?

Page 7: Programmēšanas valodas

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?

Page 8: Programmēšanas valodas

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.

Page 9: Programmēšanas valodas

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ā.

Page 10: Programmēšanas valodas

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ā.

Page 11: Programmēšanas valodas

Datora uzbūves shēma (vienkāršota)

Fetch - decode - execute cikls:1. Ielādē nākamo instrukciju2. Nosaka (atkodē) instrukcijas tipu3. Atrod un ielādē vajadzīgajos reģistros

instrukcijas izmantotos datus4. Izpilda instrukciju

CPUGalven

ā atmiņa

Ārējā atmiņa

I / O iekārtas

Komunikācijas šina

Reģistri

Aritmētikas un

loģikas bloks

Vadības

bloks

- 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)?

Page 12: Programmēšanas valodas

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).

Page 13: Programmēšanas valodas

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)

Page 14: Programmēšanas valodas

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:=i Vadī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

Page 15: Programmēšanas valodas

von Neumann mašīnas programmas piemērs

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ļ

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

Page 16: Programmēšanas valodas

Datora uzbūves shēma (vienkāršota)

Fetch - decode - execute cikls:1. Ielādē nākamo instrukciju2. Nosaka (atkodē) instrukcijas tipu3. Atrod un ielādē vajadzīgajos reģistros

instrukcijas izmantotos datus4. Izpilda instrukciju

CPUGalven

ā atmiņa

Ārējā atmiņa

I / O iekārtas

Komunikācijas šina

Reģistri

Aritmētikas un

loģikas bloks

Vadības

bloks

- 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)?

Page 17: Programmēšanas valodas

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).

Page 18: Programmēšanas valodas

Programmēšanas valodu realizācijas shēmas

Interpretācija:

Kompilācija:

Hibrīdāimplementācij

a:

INTERPRETATORSIeejas dati

Programmas teksts

Rezultāts

Programmas teksts

Kompilators:Leksiskā analīze

Sintaktiskā analīzeStarpkoda ģenerēšana

OptimizācijaKoda ģenerēšana

Programmas kods

Programmas kods

Ieejas dati

Rezultāts

Ieejas dati

Preprocesors:Leksiskā analīze

Sintaktiskā analīzeStarpkoda ģenerēšana

Programmas teksts

Starpkods

Rezultāts

Interpretators

Page 19: Programmēšanas valodas

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).

Page 20: Programmēšanas valodas

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.

Page 21: Programmēšanas valodas

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.

Page 22: Programmēšanas valodas

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.

Page 23: Programmēšanas valodas

Vadības plūsmas abstrakcijasPamata 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.

Page 24: Programmēšanas valodas

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.

Page 25: Programmēšanas valodas

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ē, rekursija

fun 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.

Page 26: Programmēšanas valodas

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

Page 27: Programmēšanas valodas

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

Page 28: Programmēšanas valodas

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)

Page 29: Programmēšanas valodas

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ā

Page 30: Programmēšanas valodas

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.)

… … …