Programmēšanas paradigma

**Programmēšanas paradigma** ir programmēšanas stils jeb ideju un rekomendāciju kopums, kas nosaka programmu rakstīšanas veidu. Piemēram, objektorientētajā programmēšanā programmētājam jādomā par programmu, kas sastāv no savstarpēji saistītiem objektiem, kamēr funkcionālajā programmēšanā programma sastāv no secīgi izsaucamām funkcijām.

Paradigma ir virziens, veids vai pieeja plašā nozīmē. Populārākās programmēšanas valodu paradigmas ir imperatīvā, deklaratīvā, funkcionālā un objektorientētā.
Programmēšanā ir divas pamatparadigmas:
* imperatīvā
** strukturālā
** procedurālā
* deklaratīvā
** funkcionālā
** loģiskā

## Imperatīvā paradigma
**Imperatīvā paradigma** jeb *procedurālā paradigma*, ir tradicionāls veids, kā notiek programmēšanas process. Tā ietver komandu virknes, lai veiktu noteiktas operācijas. Imperatīvo paradigmu pārstāv dažādas programmēšanas valodas, tostarp mašīnkoda valodas, asambleri, kā arī populāras valodas, piemēram, Fortran, COBOL, BASIC, C un Pascal.

Imperatīvā programma ir komandu secība ( – *pavēles izteiksme*), kas jāizpilda, lai risinātu uzdevumu. Šī pieeja izmanto mainīgos, lai glabātu programmas tekošo stāvokli, un piešķiršanas komandas, lai mainītu šo stāvokli secīgi. Imperatīvā programmēšana prasa, lai dators izpildītu noteiktas darbības secīgi, sekojot algoritmam. Programma sastāv no komandām, kuras datoram ir jāizpilda secīgi, lai risinātu uzdevumu. Lai īstenotu nosacītas operācijas un ciklus, programmā var tikt izmantotas pārejas instrukcijas (goto), kas maina izpildīšanas secību. Šī pieeja ir bieži izmantota tradicionālās programmēšanas praksē.

### Strukturālā programmēšana
Strukturālā programmēšana ir imperatīvās paradigmas paveids, kuras pamatā ir programmas attēlojums kā ligzdotu bloku struktūra, neizmantojot goto operatoru. Saskaņā ar šo paradigmu jebkura programma sastāv no trim vadības struktūrām: secība, zarošana, cikls.

### Procedurālā programmēšana
Procedurālā programmēšana ir imperatīvās paradigmas paveids, kurā secīgi izpildāmie operatori tiek savākti apakšprogrammās, kas ir funkcionāli pabeigtās koda vienības.

## Deklaratīvā paradigma
Deklaratīvā pieejā nosaka uzdevuma aprakstu. Piemēram, kā un kur paņem datus, kā tā apstrādāt un ko darīt ar rezultātu. Deklaratīvās programmas neizmanto mainīgā jēdzienu un piešķiršanas operatoru. Atšķirībā no imperatīvās, nenosaka, kā izpildīt noteiktu uzdevumu, bet gan “kas ir problēma” vai “kā problēma varētu tikt reprezentēta”. Tipiskākais deklaratīvās programmēšanas pārstāvis ir Prolog, kas no tās realizācijas aspekta tiek saukta arī par **loģisko programmēšanas valodu**. Kaut kādā nozīmē pie deklaratīvās paradigmas pieder arī SQL pieprasījumu valoda.

### Funkcionālā paradigma un programmēšana
**Funkcionālās paradigmas** ietvaros programmēšanas process ir kā programmas konstruēšana no "melnajām kastēm", katra no kurām saņem noteiktus datus ievadā un izejā atgriež noteiktu rezultātu. Matemātikā tādas “melnās kastes” sauc par funkcijām. Šīs paradigmas pārstāvji ir Lisp un Haskell.

**Funkcionālā programmēšana** ir deklaratīvās paradigmas paveids, kurā uzdevums tiek aprakstīts kā funkciju izsaukšanas rezultāts no sākotnējiem datiem un citu funkciju rezultātiem, un tas ne uzņemas skaidru programmas stāvokļa saglabāšanu mainīgajos.

### Loģiskā programmēšana
Loģiskā programmēšana ir programmēšanas paradigma, kuras pamatā ir formāla loģika.
Loģiskā programmēšanas valodā rakstīta programma ir loģiskā veidā rakstītu teikumu kopa, kas izsaka faktus un noteikumus par kādu problēmu domēnu. Galvenās loģiskās programmēšanas valodu saimes ir Prolog, atbilžu kopas programmēšana (ASP) un Datalog.

## Objektorientētā programmēšana

Objektorientētajā programmēšanā programma tiek uztverta kā savstarpēji saistītu un mijiedarbojošu objektu kopums. Tāpat kā reāliem objektiem dabā, OOP objektiem arī ir savas individuālas īpašības, tie var veikt kādas darbības, kā arī nodot un saņemt informāciju no citiem objektiem. Objektorientētai programmēšanai ir īpašības, kas ir raksturīgas gan imperatīvajai gan deklaratīvajai paradigmām.

## Atsauces