Programmēšanas valodas

Download Report

Transcript Programmēšanas valodas

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: [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
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ā.
Datora uzbūves shēma (vienkāršota)
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
Vadības
bloks
Aritmētikas
un loģikas
bloks
- t.sk. instrukcijas reģistrs
- t.sk. programmas skaitītājs
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
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]
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|
(M[i] - i-tā atmiņas šūna, i = 0..1023)
JUMP
i
0111
V:=i
COND
i
1000
if A>=0 then V=i
1001
M[i] pēdējiem 10 bitiem piešķir aritmētiskā reģistra A
pēdējos 10 bitus (adreses informāciju)
MODIFY i
STOP
CONST
1111
i
Vadības pārvietošana uz i-to komandu
apstāties
(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ā.
ielādē 801. šūnas saturu
0
load 801
1
save 901
saglabā 901. šūnā. 901. šūnā
glabā līdz katram brīdim atrasto lielāko skaitli
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
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
18 const 1
solis par kādu 1 cikla
apgriezienā jāpalielina šūnas numurs
jauno numuru saglabā atpakaļ
19 const 901
10 save 17
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)
cikla indeksa beigu vērtība
Datora uzbūves shēma (vienkāršota)
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
Vadības
bloks
Aritmētikas
un loģikas
bloks
- t.sk. instrukcijas reģistrs
- t.sk. programmas skaitītājs
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
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
Interpretācija:
Ieejas dati
INTERPRETATORS
Rezultāts
Programmas teksts
Kompilācija:
Kompilators:
Leksiskā analīze
Sintaktiskā analīze
Starpkoda ģenerēšana
Optimizācija
Koda ģenerēšana
Programmas
teksts
Ieejas dati
Programmas kods
Hibrīdā
Programmas
implementācija:
teksts
Ieejas dati
Preprocesors:
Leksiskā analīze
Sintaktiskā analīze
Starpkoda ģenerēšana
Programmas
kods
Rezultāts
Starpkods
Rezultāts
Interpretators
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ē, 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.
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)
tēvs(māris, juris)
vectēvs(A,B) :- tēvs(A,C), tēvs(C,B)
?- vectēvs(jānis,X)
?- vectēvs(X,juris)
“Jānis ir tēvs Mārim”
“A ir vectēvs B, ja A ir tēvs C un C ir tēvs B”
“Kam Jānis ir vectēvs?”
“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.)
………