Programiranje

S Vikipedije, slobodne enciklopedije

Izgled programskog okruženja eklips.

Programiranje je termin pod kojim se najčešće podrazumeva kreiranje računarskih programa, što uključuje detaljnu teorijsku razradu problema, nalaženje konceptualnog rešenja i implementaciju korišćenjem nekog od programskih jezika. Programer je specijalista za programiranje, odnosno kreiranje računarskih programa.[1] Pojam programiranje, međutim, obuhvata i sve ostale procese čiji je cilj automatizovanje rešavanja određenog tipa problema, pa tako postoji programiranje za televizijske uređaje, veš-mašine, mobilne telefone, kao i matematičko programiranje i dr. U najopštijem smislu programiranje znači definisanje niza koraka koji se obavljaju jedan za drugim u cilju izvršenja određenog zadatka.

Računarsko programiranje je postupak dizajniranja i izgradnje izvršnog računarskog programa za postizanje određenog računarskog rezultata ili za izvršavanje određenog zadatka. Programiranje uključuje zadatke kao što su: analiza, generisanje algoritama, profilisanje algoritamske tačnosti i potrošnje resursa, i implementacija algoritama na izabranom programskom jeziku (obično se naziva kodiranje).[2][3] Izvorni kod programa napisan je na jednom ili više jezika koji su programerima razumljivi, a ne na mašinskom kodu, koji direktno izvršava centralna procesorska jedinica. Svrha programiranja je da se pronađe niz uputstava koja će automatizovati izvođenje zadatka (koji može biti složen kao operativni sistem) na računaru, često za rešavanje datog problema. Vešto programiranje stoga često zahteva stručnost iz nekoliko različitih predmeta, uključujući znanje iz aplikacionog domena, specijalizovane algoritme i formalnu logiku.

Zadaci koji prate i odnose se na programiranje uključuju: testiranje, otklanjanje grešaka, održavanje izvornog koda, implementaciju sistema izgradnje i upravljanje izvedenim artefaktima, kao što je mašinski kod računarskih programa. Oni se mogu smatrati delom procesa programiranja, ali često se termin razvoj softvera koristi za ovaj širi proces, a termin programiranje, implementacija ili kodiranje rezervisan je za stvarno pisanje koda. Softverski inženjering kombinuje inženjerske tehnike sa praksama razvoja softvera. Reverzni inženjering je srodni proces koji koriste dizajneri, analitičari i programeri da bi razumeli i ponovo kreirali/ponovo primenili program.[4]

Računarsko programiranje[uredi | uredi izvor]

U manjim razvojnim projektima faze kreiranja programa nisu odvojene i izvode se sinhrono - realizacija zavisi od koncepcije i obratno. U većim razvojnim projektima su te faze jasno odvojene. Faza izrade koncepta se u tim slučajevima naziva dizajn, a realizacije implementacija. Programerima se tada, kada su ciljevi i metode realizacije u prethodnoj fazi (dizajnu i specifikaciji) precizno određeni, daje manje slobode pri implementaciji i njegova kreativnost se zasniva prvenstveno na pronalaženju najboljih i najefikasnijih algoritama i metoda realizacije pojedinih zadataka (izrade komponenti), kao i optimizaciji rada tih komponenti.

Program se obično realizuje u jednom programskom jeziku. U njemu programer formuliše algoritme. Pri tome ga sve više podržavaju generatori koda koji na bazi modela (proizvod faze koncepcije) automatski proizvode izvorni kod.

Kriterijumi kvaliteta[uredi | uredi izvor]

Kvalitetno programiranje se odlikuje efikasnim iskorištavanjem mogućnosti programskog okruženja. Prvenstveno se teži ka upotrebi već urađenih (i proverenih) softverskih komponenti (biblioteka) a ne iznalaženju već postojećih rešenja. Dobar programer se ističe podrobnim znanjem datog programskog okruženja (sve komponente potrebne pri radu i izradi programa), brzim nalaženjem potrebnih funkcija pri realizovanju datog projekta kao i sposobnošću apstraktne analize zadatih problema i njihovim predstavljanjem u obliku modela ili algoritama.

Programski jezici[uredi | uredi izvor]

Svaki programer piše programski kod u nekom programskom jeziku. Različiti programski jezici podržavaju različite stilove programiranja (programska paradigma). Različiti programski jezici zahtevaju različite nivoe znanja, umeća i detalja koje programer treba da poseduje.

Jedini programski jezik koji računar može direktno izvršavati je mašinski jezik (mašinski kod ili binarni kod). U počecima računarstva programeri su pisali u mašinskom kodu, što je bilo vrlo komplikovano i zamorno. Sledeći korak u razvoju računarskog programiranja ogleda se u upotrebi simboličkih jezika, poznatih pod zajedničkim nazivom asembler. Asemblerski jezici sastoje se od jednostavnih instrukcija koje se direktno i jednoznačno mogu prevesti u mašinski kod koji se direktno izvršava. Iako mnogo pogodnije i od mašinskog programiranja, asemblersko programiranje karakteriše velika količina posla koju programer mora obaviti, zbog činjenice da su operacije i dalje elementarne. Zbog toga su stručnjaci stvorili programske jezike višeg nivoa pomoću kojih se piše izvorni kod koji se u mašinski kod prevodi posredstvom specijalnih programa - prevodilaca čiji je zadatak da prevede kod višeg programskog jezika u mašinski kod tzv. interpreter i kompajler.

Koraci u programiranju[uredi | uredi izvor]

Pri izradi svakog programa potrebno je proći kroz 4 osnovne faze ili koraka:

  1. Analiza problema
  2. Kreiranje algoritma (crtanje dijagrama toka)
  3. Pisanje programskog koda
  4. Unos programskog koda u računar i pokretanje programa

Analiza problema[uredi | uredi izvor]

Prvi korak u izradi računarskog programa je analiza potreba, razmatranje situacije i problem koji treba rešiti definisati preko jednačina, uslova i kroz tzv. pseudo algoritam. Programeru mora biti jasno kako će se dešavati promene, zavisnosti, uzroci i posledice, da bi sve to preneo i precizirao kroz programski kod. Sve mora biti matematički precizirano. Kod jednostavnijih programa ovaj deo je u domenu usmene analize, dok se kod složenijih programa ovaj deo radi u pisanoj i simboličkoj formi uz uredno dokumentiranje svih promena (ovaj deo spada u domen softverskog inženjerstva).

Kreiranje algoritma[uredi | uredi izvor]

Reč algoritam potiče od imena arapskog matematičara Džazirijaja koji se smatra tvorcem algoritma kao skupom precizno definisanih pravila za izvršavanje aritmetičkih operacija.[5][6] Algoritam je procedura (postupak) sa skupom jasno definisanih koraka koji nedvosmisleno vode ka rešenju problema. Svaki algoritam mora ispoštovati 5 osnovnih zakonitosti algoritma:

  • Definisanost (svi koraci moraju biti jasni i nedvosmisleni)
  • Konačnost (izvršenje algoritma se mora obaviti u određenom broju koraka)
  • Posedovanje ulaza i izlaza (moraju se definisati ulazi kojih može biti: ni jedan, jedan ili više i izlazi kojih mora biti bar jedan ili više)
  • Efikasnost (algoritam se izvršava u razumnom vremenskom intervalu)
  • Rezultativnost (algoritam mora dati rešenje problema, a ako nema rešenja onda poruku da rešenje ne postoji).

Pisanje programskog koda[uredi | uredi izvor]

Nakon završetka algoritma, pristupa se pisanju programskog koda na papiru. U ovom koraku se svaki korak algoritma prevodi u odgovarajuću komandu u programskom jeziku u kojem se piše.

Unos koda u računar i testiranje programa[uredi | uredi izvor]

Kada su izvršene sve (analitičke) pripreme i ručno ispisan kod potrebno ga je uneti u računar prilagođavajući programskom alatu u kojem će se program testirati i izvršavati. Svaki programski jezik ima svoj editor koji omogućuje unos programskog koda tzv. Izvorni kod uz kontrolu ispravnosti ispisa ključnih reči i sintakse uopće. Uz editor u svakom programskom alatu nalazi se i interpreter koji omogućava testiranje svake linije koda ili koda u celini kako bi se blagovremeno otklonile eventualne greške u sintaksi ili definisanim varijablama, dimenzionisanju varijabli i sl. Nakon unosa kompletnog programa u računar program se treba pokrenuti da bi se videlo da li radi. Program se treba više puta pokrenuti da bi se videlo da li program radi za različite ulazne vrednosti, a ovo podrazumeva i sve granične vrednosti.

Elementarne algoritamske strukture[uredi | uredi izvor]

Algoritamske strukture se dele u tri osnovne grupe:

  • Linijska (sekvencija)
  • Razgranata (selekcija)
  • Ciklična (iteracija)
Linijska struktura
Karakteristika linijske strukture je da se svi elementi izvršavaju samo jednom i koraci se odvijaju u nizu jedan za drugim bez ponavljanja ili „skretanja”.
Primer u Bejziku Primer u C-u
INPUT a, b
zbir = a + b
PRINT zbir
END
#include <stdio.h>

void main () {
    int a, b, zbir;

    printf("a,b? "); 
    scanf("%d%d", &a, &b);
    zbir = a + b;
    printf("a + b = %d\n", zbir);
}
Razgranata struktura:
Razgranata struktura će se pojaviti kod algoritma koji ima blok odlučivanja kao što su IF i CASE, pri čemu se vrši testiranje određenog uslova a prema rezultatu (obično TRUE ili FALSE) algoritam se grana i nastavlja tok jednom od grana- opcija. Primjer na slici je tipičan gdje se otklanja blokiranje programa provjerom da li je djelilac jednak nuli. Ako je djelilac različit od nule, daće rezultat dijeljenja, u suprotnom će dati samo poruku da dijeljenje nulom nema smisla i nastaviti dalje prema sledećoj proceduri ili kraju programa.
Primer u Bejziku Primer u C-u
INPUT a,b
IF b <> 0 THEN
PRINT a/b
ELSE
PRINT "Ne mogu dijeliti nulom"
END
#include<stdio.h>

void main () {
    float a, b;

    scanf("%f%f", &a, &b);
    if (b == 0) {
        printf("Ne mogu dijeliti nulom\n");
    } else {
        printf("a : b = %f\n", a / b);
    }
}
Ciklična struktura
Ciklični algoritam će se pojaviti kada treba isti posao uraditi više puta. Postoji više varijanti ove srtukture a dve osnovne podele su:
  • Broj iteracija (ponavljanja) jeste unapred poznat. Primer ove petlje je na slici i tu se obično koristi petlja FOR.
  • Iteracija se vrši dok se ne zadovolji određen uslov. Koriste se petlje tipa WHILE..DO.

Kod iteracije sa provere istinitosti uslova (da li je uslov zadovoljen). Postoje varijante s proverom uslova na ulazu u petlju, odnosno na kraju petlje. Razlika između ove dve varijante je što kod provere istinitosti uslova na kraju petlje program mora proći bar jednom kroz petlju.

Primer u Bejziku Primer u C-u
zbir = 0
INPUT b
FOR a = 1 TO b
zbir = zbir + a
NEXT a
PRINT zbir
END
#include <stdio.h>

void main() {
    int a, b, zbir = 0;

    scanf("%d", &b);
    for (a = 1; a <= b; a++) {
        zbir += a;
    }

    printf("%d\n", zbir);
}
Primer algoritma kada nije poznat konačan broj iteracija sa proverom na početku petlje
Primer u Bejziku Primer u C-u
Kod provere istinitosti na ulazu u petlju postoji mogućnost da se ne izvrši ni jedno ponavljanje. Razlog je jednostavan, ako uslov nije ispunjen odmah se „preskače” na sledeću liniju izvan petlje. Za ovu vrstu petlje u većini programa se koristi ključna reč „WHILE” prilagođena sintaksi programskog jezika.
zbir = 0
WHILE zbir < 200
INPUT a
zbir = zbir + a
WEND

PRINT zbir
END
#include <stdio.h>

void main() {
    int a, zbir = 0;

    while (zbir < 200) {
        scanf("%d", &a);
        zbir += a;
    }

    printf("%d\n", zbir);
}
Primer algoritma kada nije poznat konačan broj iteracija sa proverom na kraju petlje
Primer u Bejziku Primer u C-u
Kod provere istinitosti na kraju petlje, ne postoji mogućnost da se ne izvrši ni jedno ponavljanje. Razlog je jednostavan, provera se vrši u poslednjem redu bloka izvornog koda, te se mora proći barem jedanput kroz čitav blok. Za ovu vrstu petlje u većini programa se koristi ključna reč „DO..WHILE” prilagođena sintaksi programskog jezika.
zbir = 0
DO
INPUT a
zbir = zbir + a
WHILE (zbir < 200)
PRINT zbir
END
#include <stdio.h>

void main() {
    int a, zbir = 0;

    do {
        scanf("%d", &a);
        zbir += a;
    } while (zbir < 200);

    printf("%d\n", zbir);
}

Ekonomskim konceptima se dalje bavi softversko inženjerstvo.

Razvoj softvera[uredi | uredi izvor]

Stvaranje nekog programa uključuje:

  • Analizu potreba
  • Tehnički opis
  • Dizajn i arhitekturu
  • Kodiranje
  • Prevođenje
  • Isprobavanje
  • Dokumentaciju
  • Održavanje

Vidi još[uredi | uredi izvor]

Reference[uredi | uredi izvor]

  1. ^ „Šta treba da znate da biste radili kao programer”. 
  2. ^ Bebbington, Shaun (2014). „What is coding”. Tumblr. Arhivirano iz originala 2020-04-29. g. Pristupljeno 2014-03-03. 
  3. ^ Bebbington, Shaun (2014). „What is programming”. Tumblr. Arhivirano iz originala 2020-04-29. g. Pristupljeno 2014-03-03. 
  4. ^ Eilam, Eldad (2005). Reversing: secrets of reverseengineering. John Wiley & Sons. str. 3. ISBN 978-0-7645-7481-8. 
  5. ^ Fowler, Charles B. (oktobar 1967). „The Museum of Music: A History of Mechanical Instruments”. Music Educators Journal. 54 (2): 45—49. JSTOR 3391092. S2CID 190524140. doi:10.2307/3391092. 
  6. ^ Noel Sharkey (2007), A 13th Century Programmable Robot, University of Sheffield

Literatura[uredi | uredi izvor]

Spoljašnje veze[uredi | uredi izvor]