Програмирање

Процес који води од оригиналне формулације рачунарског проблема до извршних рачунарских програма

Програмирање је термин под којим се најчешће подразумева креирање рачунарских програма, што укључује детаљну теоријску разраду проблема, налажење концептуалног решења и имплементацију коришћењем неког од програмских језика. Програмер је специјалиста за програмирање, односно креирање рачунарских програма.[1] Појам програмирање, међутим, обухвата и све остале процесе чији је циљ аутоматизовање решавања одређеног типа проблема, па тако постоји програмирање за телевизијске уређаје, веш-машине, мобилне телефоне, као и математичко програмирање и др. У најопштијем смислу програмирање значи дефинисање низа корака који се обављају један за другим у циљу извршења одређеног задатка.

Изглед програмског окружења еклипс.

Рачунарско програмирање је поступак дизајнирања и изградње извршног рачунарског програма за постизање одређеног рачунарског резултата или за извршавање одређеног задатка. Програмирање укључује задатке као што су: анализа, генерисање алгоритама, профилисање алгоритамске тачности и потрошње ресурса, и имплементација алгоритама на изабраном програмском језику (обично се назива кодирање).[2][3] Изворни код програма написан је на једном или више језика који су програмерима разумљиви, а не на машинском коду, који директно извршава централна процесорска јединица. Сврха програмирања је да се пронађе низ упутстава која ће аутоматизовати извођење задатка (који може бити сложен као оперативни систем) на рачунару, често за решавање датог проблема. Вешто програмирање стога често захтева стручност из неколико различитих предмета, укључујући знање из апликационог домена, специјализоване алгоритме и формалну логику.

Задаци који прате и односе се на програмирање укључују: тестирање, отклањање грешака, одржавање изворног кода, имплементацију система изградње и управљање изведеним артефактима, као што је машински код рачунарских програма. Они се могу сматрати делом процеса програмирања, али често се термин развој софтвера користи за овај шири процес, а термин програмирање, имплементација или кодирање резервисан је за стварно писање кода. Софтверски инжењеринг комбинује инжењерске технике са праксама развоја софтвера. Реверзни инжењеринг је сродни процес који користе дизајнери, аналитичари и програмери да би разумели и поново креирали/поново применили програм.[4]

Рачунарско програмирање

уреди

У мањим развојним пројектима фазе креирања програма нису одвојене и изводе се синхроно - реализација зависи од концепције и обратно. У већим развојним пројектима су те фазе јасно одвојене. Фаза израде концепта се у тим случајевима назива дизајн, а реализације имплементација. Програмерима се тада, када су циљеви и методе реализације у претходној фази (дизајну и спецификацији) прецизно одређени, даје мање слободе при имплементацији и његова креативност се заснива првенствено на проналажењу најбољих и најефикаснијих алгоритама и метода реализације појединих задатака (израде компоненти), као и оптимизацији рада тих компоненти.

Програм се обично реализује у једном програмском језику. У њему програмер формулише алгоритме. При томе га све више подржавају генератори кода који на бази модела (производ фазе концепције) аутоматски производе изворни код.

Критеријуми квалитета

уреди

Квалитетно програмирање се одликује ефикасним искориштавањем могућности програмског окружења. Првенствено се тежи ка употреби већ урађених (и проверених) софтверских компоненти (библиотека) а не изналажењу већ постојећих решења. Добар програмер се истиче подробним знањем датог програмског окружења (све компоненте потребне при раду и изради програма), брзим налажењем потребних функција при реализовању датог пројекта као и способношћу апстрактне анализе задатих проблема и њиховим представљањем у облику модела или алгоритама.

Програмски језици

уреди

Сваки програмер пише програмски код у неком програмском језику. Различити програмски језици подржавају различите стилове програмирања (програмска парадигма). Различити програмски језици захтевају различите нивое знања, умећа и детаља које програмер треба да поседује.

Једини програмски језик који рачунар може директно извршавати је машински језик (машински код или бинарни код). У почецима рачунарства програмери су писали у машинском коду, што је било врло компликовано и заморно. Следећи корак у развоју рачунарског програмирања огледа се у употреби симболичких језика, познатих под заједничким називом асемблер. Асемблерски језици састоје се од једноставних инструкција које се директно и једнозначно могу превести у машински код који се директно извршава. Иако много погодније и од машинског програмирања, асемблерско програмирање карактерише велика количина посла коју програмер мора обавити, због чињенице да су операције и даље елементарне. Због тога су стручњаци створили програмске језике вишег нивоа помоћу којих се пише изворни код који се у машински код преводи посредством специјалних програма - преводилаца чији је задатак да преведе код вишег програмског језика у машински код тзв. интерпретер и компајлер.

Кораци у програмирању

уреди

При изради сваког програма потребно је проћи кроз 4 основне фазе или корака:

  1. Анализа проблема
  2. Креирање алгоритма (цртање дијаграма тока)
  3. Писање програмског кода
  4. Унос програмског кода у рачунар и покретање програма

Анализа проблема

уреди

Први корак у изради рачунарског програма је анализа потреба, разматрање ситуације и проблем који треба решити дефинисати преко једначина, услова и кроз тзв. псеудо алгоритам. Програмеру мора бити јасно како ће се дешавати промене, зависности, узроци и последице, да би све то пренео и прецизирао кроз програмски код. Све мора бити математички прецизирано. Код једноставнијих програма овај део је у домену усмене анализе, док се код сложенијих програма овај део ради у писаној и симболичкој форми уз уредно документирање свих промена (овај део спада у домен софтверског инжењерства).

Креирање алгоритма

уреди

Реч алгоритам потиче од имена арапског математичара Џазиријаја који се сматра творцем алгоритма као скупом прецизно дефинисаних правила за извршавање аритметичких операција.[5][6] Алгоритам је процедура (поступак) са скупом јасно дефинисаних корака који недвосмислено воде ка решењу проблема. Сваки алгоритам мора испоштовати 5 основних законитости алгоритма:

  • Дефинисаност (сви кораци морају бити јасни и недвосмислени)
  • Коначност (извршење алгоритма се мора обавити у одређеном броју корака)
  • Поседовање улаза и излаза (морају се дефинисати улази којих може бити: ни један, један или више и излази којих мора бити бар један или више)
  • Ефикасност (алгоритам се извршава у разумном временском интервалу)
  • Резултативност (алгоритам мора дати решење проблема, а ако нема решења онда поруку да решење не постоји).

Писање програмског кода

уреди

Након завршетка алгоритма, приступа се писању програмског кода на папиру. У овом кораку се сваки корак алгоритма преводи у одговарајућу команду у програмском језику у којем се пише.

Унос кода у рачунар и тестирање програма

уреди

Када су извршене све (аналитичке) припреме и ручно исписан код потребно га је унети у рачунар прилагођавајући програмском алату у којем ће се програм тестирати и извршавати. Сваки програмски језик има свој едитор који омогућује унос програмског кода тзв. Изворни код уз контролу исправности исписа кључних речи и синтаксе уопће. Уз едитор у сваком програмском алату налази се и интерпретер који омогућава тестирање сваке линије кода или кода у целини како би се благовремено отклониле евентуалне грешке у синтакси или дефинисаним варијаблама, димензионисању варијабли и сл. Након уноса комплетног програма у рачунар програм се треба покренути да би се видело да ли ради. Програм се треба више пута покренути да би се видело да ли програм ради за различите улазне вредности, а ово подразумева и све граничне вредности.

Елементарне алгоритамске структуре

уреди

Алгоритамске структуре се деле у три основне групе:

  • Линијска (секвенција)
  • Разграната (селекција)
  • Циклична (итерација)
Линијска структура
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”.
Пример у Бејзику Пример у Ц-у
 
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 ć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.
Пример у Бејзику Пример у Ц-у
 
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);
    }
}
Циклична структура
Циклични алгоритам ће се појавити када треба исти посао урадити више пута. Постоји више варијанти ове сртуктуре а две основне поделе су:
  • Број итерација (понављања) јесте унапред познат. Пример ове петље је на слици и ту се обично користи петља FOR.
  • Итерација се врши док се не задовољи одређен услов. Користе се петље типа WHILE..DO.

Код итерације са провере истинитости услова (да ли је услов задовољен). Постоје варијанте с провером услова на улазу у петљу, односно на крају петље. Разлика између ове две варијанте је што код провере истинитости услова на крају петље програм мора проћи бар једном кроз петљу.

Пример у Бејзику Пример у Ц-у
 
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);
}
Пример алгоритма када није познат коначан број итерација са провером на почетку петље
Пример у Бејзику Пример у Ц-у
Код провере истинитости на улазу у петљу постоји могућност да се не изврши ни једно понављање. Разлог је једноставан, ако услов није испуњен одмах се „прескаче” на следећу линију изван петље. За ову врсту петље у већини програма се користи кључна реч „WHILE” прилагођена синтакси програмског језика.
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);
}
Пример алгоритма када није познат коначан број итерација са провером на крају петље
Пример у Бејзику Пример у Ц-у
Код провере истинитости на крају петље, не постоји могућност да се не изврши ни једно понављање. Разлог је једноставан, провера се врши у последњем реду блока изворног кода, те се мора проћи барем једанпут кроз читав блок. За ову врсту петље у већини програма се користи кључна реч „DO..WHILE” прилагођена синтакси програмског језика.
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);
}

Економским концептима се даље бави софтверско инжењерство.

Развој софтвера

уреди

Стварање неког програма укључује:

  • Анализу потреба
  • Технички опис
  • Дизајн и архитектуру
  • Кодирање
  • Превођење
  • Испробавање
  • Документацију
  • Одржавање

Види још

уреди

Референце

уреди
  1. ^ „Шта треба да знате да бисте радили као програмер”. 
  2. ^ Bebbington, Shaun (2014). „What is coding”. Tumblr. Архивирано из оригинала 2020-04-29. г. Приступљено 2014-03-03. 
  3. ^ Bebbington, Shaun (2014). „What is programming”. Tumblr. Архивирано из оригинала 2020-04-29. г. Приступљено 2014-03-03. 
  4. ^ Eilam, Eldad (2005). Reversing: secrets of reverseengineering. John Wiley & Sons. стр. 3. ISBN 978-0-7645-7481-8. 
  5. ^ Fowler, Charles B. (октобар 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

Литература

уреди

Спољашње везе

уреди