# Programavimas

**Programavimas** bendrąja prasme gali būti apibrėžiamas ir kaip veiksmų, kuriuos norima atlikti, apibrėžimas (panašiai kaip Planavimas).

Jeigu norima, kad veiksmus atliktų kompiuteris tuomet *Programavimas* – kompiuterių programų kūrimo proceso dalis, kai algoritmas užrašomas kuria nors programavimo kalba. Programavimas apima meno, mokslo, matematikos bei inžinerijos elementus.

## Programavimo kalbos

|  |
| --- |
| `if bReikia then begin    vykdyti() end.` |

Kiekviena programa rašoma viena ar kita programavimo kalba, kuri vėliau verčiama mašininiu kodu, suprantamu kompiuteriui. Nors įmanoma tiesiogiai programuoti mašininiu kodu, aukšto lygio programavimo kalbos žymiai supaprastina kūrimo procesą.

Programavimo kalbų yra daug skirtingų tipų bei skirtingų sudėtingumo lygių, todėl kiekviena kalba labiau tinka tam tikros paskirties uždaviniams spręsti.

## Programų kūrimas

Programų kūrimas – sudėtingas procesas ir programavimas tėra nedidelė šio proceso dalis. Pagrindinės ir dažniausiai pasitaikančios kūrimo dalys:

1. Reikalavimų surinkimas bei analizė
2. Projektavimas ir įrankių (programavimo kalbos, platformos, duomenų lapu ir pan.), tinkamiausių problemai spręsti, parinkimas.
3. Programos rašymas pasirinkta programavimo kalba.
4. Testavimas. Jei testavimo metu paaiškėja, kad nepasiektas norimas kokybės lygis, taisomos problemos (grįžti į 1 žingsnį)
5. Dokumentavimas, jei reikia – vertimas į kitas kalbas
6. Palaikymas
7. Diegimas

## Programavimo stilius

Pagal tai, kokiais principais remiantis kuriamos programos, skiriami programavimo stiliai:

### Imperatyvusis programavimas

Pagrindinis šio stiliaus principas: programa – tai komandų, kurias reikia vykdyti, rinkinys. Komandos keičia programos būseną. Kadangi beveik visa aparatinė įranga dirba šiuo principu, tai didžioji dalis programų yra parašyta būtent šiuo stiliumi. Skiriamos tokios šio stiliaus atšakos:

nuoseklusis programavimasTai programavimas *be jokių taisyklių*. Priimtinas nedidelėse programose. Jei intensyviai naudojamos goto komandos, gaunamas sunkiai valdomas kodas, dar vadinamas *spaghetti kodu*. Realizuojančios kalbos: Basic (pradinė versija), Assembler (jei nesilaikoma disciplinos), kitos pirmosios programavimo kalbos.
struktūrinis (procedūrinis) programavimasStruktūrinis programavimas uždeda apribojimus, kad visa programa turi būti suskaidyta į kaip įmanoma mažiau viena nuo kitos priklausomus modulius (gali būti kelių lygių: procedūros, modulio, bibliotekos). Kiekviena tokia dalis gali turėti tik joje matomus kintamuosius. Realizuojančios kalbos: Algol ir iš jo išsivysčiusios, Pascal, C.
objektinis programavimasobjektiškai kuriamos programos struktūra suskirstoma į klases, kurios aprašo duomenis ir su jais susijusį funkcionalumą.
### Deklaratyvusis programavimas

Deklaratyviojo programavimo principas: programa aprašo kokias sąlygas sprendinys turi tenkinti, tačiau neapibrėžia sprendinio ieškojimo algoritmo. Šį algoritmą kiekviena realizacija gali turėti savo. Skiriamos tokios deklaratyviojo programavimo stiliaus atšakos:

Funkcinis programavimasFunkciniame programavime sprendinio sąlygoms aprašyti naudojamos funkcijos, neturinčios vidinių būsenų. Dėl šios savybės jos negalinti turėti šalutinių poveikių. Realizuojančios kalbos: Lisp.
Loginis programavimasLoginiame programavime sprendinio sąlygas aprašo duomenys, su kuriais reikia dirbti ir taisyklės, kaip tie duomenys yra vieni su kitais susįję. Realizuojančios kalbos: Prolog, SQL.
## Taip pat skaitykite

Vikižodynas
* Dinaminis programavimas