Transcript
Page 1: Temeljni Pojmovi Iz Programiranja

Programiranje 1

Temeljni pojmovi iz programiranja

Page 2: Temeljni Pojmovi Iz Programiranja

Programiranje – temeljni pojmovi• Programiranje, programska podrška

– Sistemska– Aplikacijska

• Program, instrukcija• Programski jezici

– strojni– asembleri– programski jezici visoke razine– programski jezici visoke razine

• Programi prevoditelji– Kompilatori– Interpretatori

doc.dr.sc. Ani Grubišić – PMF, Split 2

Page 3: Temeljni Pojmovi Iz Programiranja

Programiranje• Programiranje je postupak kojim se problem kojeg treba riješiti

oblikuje tako da ga se može računalno obraditi. • Oblikovanje ovdje podrazumijeva stvaranje slijeda instrukcija

prema kojima računalo izvodi aritmetičke i logičke operacije.

• Programiranje na najvišoj razini se dijeli na:– Definiranje problema (utvrđivanje načina rješavanja i pogodnosti za

računalnu obradu)računalnu obradu)– Rješavanje problema i njegovo oblikovanje u najprikladnijem

programskom jeziku– Provjeravanje ispravnosti programa.

doc.dr.sc. Ani Grubišić – PMF, Split 3

Page 4: Temeljni Pojmovi Iz Programiranja

• Da bi računalo riješilo zadatak, treba ga pretvoriti u oblik koji uključuje samo pamćenje, logičko rasuđivanje.

• Da bi si olakšao pretvorbu zadataka iz svijeta koji ga okružuje u oblik prihvatljiv računalu, čovjek se služi mnogim pomoćnim postupcima.

• Što je zadatak složeniji, to je u načelu potrebno više pomoćnih • Što je zadatak složeniji, to je u načelu potrebno više pomoćnih postupaka.

• Konačni će rezultat svih tih postupaka biti računalni program

doc.dr.sc. Ani Grubišić – PMF, Split 4

Page 5: Temeljni Pojmovi Iz Programiranja

Program - Instrukcija• Želimo li da računalo nešto uradi, moramo mu potanko

obrazložiti što hoćemo – problem je točno izraziti svoje “želje”. Računalo nam može pomoći u traženju rješenja, ali samo ako ga pravilno uputimo

• Za svaku zadaću moramo dati detaljne i točne upute kako računalo ne bi bilo u nedoumici što uraditi. Upute koje računalo razumije zovu se program– Program je, dakle, organizirani skup instrukcija koje se izvode – Program je, dakle, organizirani skup instrukcija koje se izvode

određenim redoslijedom i s određenim ciljem. – Bez programa računalo ne može ništa učiniti.

• Program se sastoji se od liste varijabli i liste instrukcija koje kažu računalu što učiniti s varijablama. – Instrukcija (instrukcija, uputa) je iskaz s kojim se kaže računalu da

nešto učini. Sastoji se od operacije koju treba izvesti.– Svaka instrukcija obavi djelić postavljenog zadatka.

doc.dr.sc. Ani Grubišić – PMF, Split 5

Page 6: Temeljni Pojmovi Iz Programiranja

• Računalo može riješiti postavljeni zadatak samo ako dobije uputstvo (niz instrukcija) kako to učiniti.– Kombinacijom instrukcija nastaje program.

• Program je skup instrukcija nanizanih strogo utvrđenim redoslijedom, čijim se izvršenjem obavlja željeni posao

• Čovjek koji piše program naziva se programer , a postupak • Čovjek koji piše program naziva se programer , a postupak nastanka programa naziva se programiranje ili kodiranje– Programer pišući program niže instrukcije u smislenom redoslijedu.

• Instrukcije moraju biti u obliku u kojem će ih računalo razumjeti.

doc.dr.sc. Ani Grubišić – PMF, Split 6

Page 7: Temeljni Pojmovi Iz Programiranja

• Vic:– Poslala žena programera u trgovinu: “Kupi mi margarin, a ako bude

jaja, kupi 10”

– Poslije pola sata, vraća se programer s 10 paketića margarina i govori ženi: “Bilo je jaja”10 paketića margarina i govori ženi: “Bilo je jaja”

doc.dr.sc. Ani Grubišić – PMF, Split 7

Page 8: Temeljni Pojmovi Iz Programiranja

Faze programiranja• Planiranje

– Planiranjem se određuje tko će, kada i što raditi.– Planiranjem se predviđaju i raspoređuju pojedine faze izrade programa.

• Analiza zadatka i specifikacija– Analiza zadatka je raščlamba i potpuno razumijevanje zadatka i željenih

rezultata. – Rezultat analize je specifikacija zadatka.– Specifikacija je dokument koji sadrži opis zadatka i željenih rezultata. – Specifikacija nije prijedlog kako riješiti zadatak nego opis onoga što je na

raspolaganju i željenog rezultata.

• Pisanje programa– Programski jezik računala je jedini jezik koji računalo razumije.– Zato naputak za rješavanje zadatka treba zapisati instrukcijama

odabranog programskog jezika.

doc.dr.sc. Ani Grubišić – PMF, Split 8

Page 9: Temeljni Pojmovi Iz Programiranja

• Provjera programa– Program je uporabno koristan, samo ako je logički ispravan.– Za otkrivanje logičkih pogrešaka potrebno je provjeravati (testirati)

program. – Program provjerava autor programa, više ljudi kod proizvođača programa

ili neovisni ispitivači.

• Održavanje programa– Održavanje programa je postupak mijenjanja programa tijekom njegovog

“životnog” vijeka i poduka korisnika o uporabi programa. • Izravno: ugovor o održavanju.• Neizravno: izdavanje novih inačica i ispravaka programa za programe koji se

prodaju u velikim količinama

• Izrada dokumentacije– uputa za instaliranje programa, priručnika za korisnike, tehničkog opisa

programa, itd.

doc.dr.sc. Ani Grubišić – PMF, Split 9

Page 10: Temeljni Pojmovi Iz Programiranja

Računalo• Programibilni stroj – uređaj.

• Dvije su temeljne značajke računala:– Dobro definiranom skupu instrukcija odgovara dobrim “ponašanjem”.– Može izvršiti unaprijed zapisanu listu instrukcija (program).

doc.dr.sc. Ani Grubišić – PMF, Split 10

Page 11: Temeljni Pojmovi Iz Programiranja

Programska podrška• Programska podrška (eng. software) je termin za sve

programe koje računalo može izvršiti kao i podaci s kojima ovi programi mogu izvršiti različite operacije.

• Programska se podrška dijeli u dvije osnovne grupe:– sistemska programska podrška (eng. system software)

• proizvođač računalne opreme je isporučuje korisniku zajedno sa sustavom tehničke podrške, te je ona prilagođena njegovoj konfiguracijiprilagođena njegovoj konfiguraciji

– aplikacijska programska podrška (eng. application software)

• odabire korisnik u skladu sa zadacima i poslovima koje želi obaviti pomoću računala i zbog čega je, konačno, i izvršio nabavku računalne opreme.

doc.dr.sc. Ani Grubišić – PMF, Split 11

Page 12: Temeljni Pojmovi Iz Programiranja

Sistemska programska podrška• Sistemska programska podrška obuhvaća:

– operacijski sustav,– programske jezike (jezi čke procesore, programe prevoditelje) i – pomoćne (servisne, uslužne) programe.

doc.dr.sc. Ani Grubišić – PMF, Split 12

Page 13: Temeljni Pojmovi Iz Programiranja

Programski jezici• Programski jezik računala je jezik koji računalo razumije i to su

jezici kojima se pišu računalni programi, tj. to je skup sintaktičkih i semantičkih pravila koja definiraju računalni program.

• Postoji mnogo programskih jezika, a svaki od njih ima područje primjene, prednosti i nedostatke.

• Svaki programski jezik ima vlastiti ograničeni skup riječi koje imaju posebna značenja. – Takve se riječi nazivaju klju čnim rije čima .

• Za svaki su programski jezik propisana pravila slaganja ključnih • Za svaki su programski jezik propisana pravila slaganja ključnih riječi u instrukcije. – Takva se pravila nazivaju sintaksa . – Ako se ne zadovolji propisana sintaksa, program će biti neispravan

i neće se moći izvršiti.• Programski jezici se mogu podijeliti na:

– strojne jezike,– simboličke jezike niske razine,– simboličke jezike visoke razine.

doc.dr.sc. Ani Grubišić – PMF, Split 13

Page 14: Temeljni Pojmovi Iz Programiranja

Programski jezici - od strojnog jezika do programskog jezika visoke razine -

doc.dr.sc. Ani Grubišić – PMF, Split 14

Page 15: Temeljni Pojmovi Iz Programiranja

Strojni jezik - Machine language – 1GL

• programski jezik I. generacije nastao u ranim 50-tim godinama 20.st.

• Strojni jezik (eng. machine language) je binarni prikaz programa za računalo.

• to je jedini oblik programa koji računalo doslovno "razumije“ (nema potrebe ni za kakvim prevođenjem)

• najniža razina programskog jezika• najniža razina programskog jezika• iskazan je skupovima binarnih brojeva koji

sadrže direktne instrukcije za izvođenje operacija na računalu

• ti skupovi brojeva se nalaze i u memoriji za vrijeme njegovog izvođenja

• stroj razumije takav jezik bez ikakvih tumačenja i točno izvršava takve instrukcije

doc.dr.sc. Ani Grubišić – PMF, Split 15

Page 16: Temeljni Pojmovi Iz Programiranja

• Pisanje programa strojnim jezikom je složeno i zahtijeva dobro poznavanje građe računala te se njime bave usko specijalizirani stručnjaci. – Pri programiranju je potrebna izuzetna pažnja, velike su

mogućnosti pogrešaka i pisanje programa traje vrlo dugo

• Strojni je jezik vezan uz građu računala, odnosno ovisan je o središnjoj jedinici za obradu. središnjoj jedinici za obradu. – Svaki procesor ima sebi svojstven strojni jezik i ne može se koristiti

na drugom procesoru, čak ni na različitim procesorima istog proizvođača.

– rad u strojnom jeziku zahtjeva dobro poznavanje strukture tehničke podrške računala

doc.dr.sc. Ani Grubišić – PMF, Split 16

Page 17: Temeljni Pojmovi Iz Programiranja

Asembler – Assembly language – 2GL

• Simboli čki jezici su nastali kako bi ljudima olakšali programiranje jer ljudi lakše pamte simbole nego binarne brojeve.

• Programi pisani simboličkim jezikom su čovjeku čitljiviji i lakši za razumijevanje od binarnog zapisa.

• programski jezik II. generacije nastao polovicom 50-tih godina 20.st.

• asembler (eng. assembly language ) je simbolički jezik u kome je svaka binarna instrukcija strojnog jezika predočena odgovarajućim simbolom (kraticom).simbolom (kraticom).– kratice (simbole) engleskih riječi označavaju operacije– memorijske adrese su također dobile simbolička imena, obično prema

značenju podatka koji se u njima smještaju (umjesto binarnog načina pisanja)

• LOAD VAR1• ADD VAR2• STORE VAR3

• takvi se simboli lakše pamte i pisanje programa postalo je lakše, brže i sigurnije - mnemonici

doc.dr.sc. Ani Grubišić – PMF, Split 17

Page 18: Temeljni Pojmovi Iz Programiranja

• asembler ima istu strukturu i skup instrukcija kao i strojni jezik, ali on dopušta programeru da koristi nazive instrukcija umjesto njihovih brojčanih specifikacija– svaka instrukcija na strojnom jeziku ima svoj par u asembleru

(odnos 1:1)

• Program napisan u asembleru mora biti preveden u binarni oblik da bi ga središnja jedinica za obradu razumjela.– operaciju prevođenja izvršava poseban program prevoditelj eng. – operaciju prevođenja izvršava poseban program prevoditelj eng.

Assembler

• Programi pisani u asembleru su nešto čitljiviji i lakši za razumijevanje od binarnog zapisa, ali ih je još uvijek vrlo teško pisati i ispravljati.

• I oni ovise o vrsti i unutarnjoj građi računala (procesoru) pa se u načelu mogu izvršavati samo na procesoru za koji su pisani.– Asembler je niži simbolički jezik programiranja orijentiran stroju (tj.

prilagođen radu stroja)

doc.dr.sc. Ani Grubišić – PMF, Split 18

Page 19: Temeljni Pojmovi Iz Programiranja

doc.dr.sc. Ani Grubišić – PMF, Split 19

Page 20: Temeljni Pojmovi Iz Programiranja

Programski jezici visoke razine – High Level Languages – 3GL

• Da bi se još više olakšalo programiranje i da bi se isti program mogao izvršavati na različitim računalima (procesorima) stvoren je niz simboličkih jezika visoke razine.

• Simboli čki jezici visoke razine ili imperativnim jezici su svi oni programski jezici kod kojih se veći ili manji skup naredaba strojnog jezika nadomješta jednom instrukcijom višeg programskog jezika.

• Simbolički jezici visoke razine mogu biti jezici opće namjene ili jezici prilagođeni određenoj vrsti problema.jezici prilagođeni određenoj vrsti problema.

doc.dr.sc. Ani Grubišić – PMF, Split 20

• Instrukcije ovih jezika mnogo su više nalik govornom jeziku, lakše su za pamćenje i upotrebu.

• programski jezici III. generacije nastali oko 1960.g.

• Npr. FORTRAN, COBOL, BASIC, PASCAL, programski jezik C i mnogi drugi.

Page 21: Temeljni Pojmovi Iz Programiranja

• Prednosti:– nezavisnost jezika o stroju (program se može izvoditi na različitim

strojevima)– lakoća i razumljivost: čitanja, pisanja i održavanja.– instrukcije su čovjeku lagane za razumijevanje– slično kodirani engleskom jeziku

• Program napisan simboličkim programskim jezikom visoke razine zove se izvorni program (eng. source code). razine zove se izvorni program (eng. source code).

• Izvorne programe treba prevesti u strojni jezik. • Prevode ih programi koji se nazivaju jezični prevoditelji . • Jezični prevoditelji se međusobno razlikuju složenošću i

djelotvornošću, a načelno se mogu podijeliti u dvije skupine: – interpreteri (interpretatori, eng. interpreter), – kompajleri (kompilatori, eng. compiler).

doc.dr.sc. Ani Grubišić – PMF, Split 21

Page 22: Temeljni Pojmovi Iz Programiranja

Programski jezici IV. generacije – 4GL

• programski jezici IV. generacije nastali su početkom 80-tih godina 20.st. – objektno-orijentirani i događajima vođeni

• to su zapravo generatori aplikacija - ekspertni sustavi za programiranje

• ne treba toliko poznavati programski kôd, ali treba jako dobro poznavati procese

• važno je utvrditi što se traži, kakva informacija ili pregled• stroju se prepušta da sam utvrdi kako će doći do željenog rezultata• stroju se prepušta da sam utvrdi kako će doći do željenog rezultata• jednostavni ili složeni upitni jezici za traženje ili mijenjanje podataka

doc.dr.sc. Ani Grubišić – PMF, Split 22

Page 23: Temeljni Pojmovi Iz Programiranja

• generatori izvještaja koji oblikuju različite iskaze ili slike na ekranu kao rezultat obrade, grafički jezici koji omogućuju prikazivanje rezultata u obliku pravaca, krivulja, kružnica, stupova i sl.

• jezici za podršku u odlučivanju koji pružaju pomoć pri donošenju poslovnih odluka; generatori aplikacija koji omogućuju definiranje različitih uvjeta pojedine aplikacije

• CLIPPER• CLIPPER

doc.dr.sc. Ani Grubišić – PMF, Split 23

Page 24: Temeljni Pojmovi Iz Programiranja

Programski jezici V. generacije – 5GL

• programski jezici V. generacije nastali su početkom 90-tih godina 20.st. – logički jezici

• ekspertni sustavi, sustavi baza znanja, strojno odlučivanje, procesiranje prirodnih jezika, umjetna inteligencija, neuronske mreže

• imitiranje funkcioniranja ljudskog mozga u cilju rješavanja vrlo složenih problema

• PROLOG, LISP, LOGO• PROLOG, LISP, LOGO

doc.dr.sc. Ani Grubišić – PMF, Split 24

Page 25: Temeljni Pojmovi Iz Programiranja

Razine apstrakcije – programski jezik• Programski jezik visoke razine

• Asembler

s w ap (in t v [], in t k )

{in t tem p ; tem p = v[k]; v[k ] = v [k+ 1 ]; v[k+ 1 ] = tem p; }

s w ap : m u li $2 , $ 5,4

a dd $ 2 , $ 4 ,$ 2

lw $1 5, 0($ 2)

lw $1 6, 4($ 2)

sw $1 6 , 0($2 )

C c om p iler

A sse m b ly

lan g ua ge

pro gra m

(fo r M IP S )

H ig h-leve l lan g ua ge

pro gra m

(in C )

• Strojni jezik

doc.dr.sc. Ani Grubišić – PMF, Split

sw $1 5 , 4($2 )

jr $3 1

0 00 0 00 00 10 10 00 01 00 0 00 00 00 00 11 00 0

0 00 0 00 00 10 00 11 10 00 0 11 00 00 01 00 00 1

1 00 0 11 00 01 10 00 10 00 0 00 00 00 00 00 00 0

1 00 0 11 00 11 11 00 10 00 0 00 00 00 00 00 10 0

1 01 0 11 00 11 11 00 10 00 0 00 00 00 00 00 00 0

1 01 0 11 00 01 10 00 10 00 0 00 00 00 00 00 10 0

0 00 0 00 11 11 10 00 00 00 0 00 00 00 00 01 00 0

B in ary m a ch in e

lan g ua ge

pro gra m

(fo r M IP S )

A sse m b le r

25

Page 26: Temeljni Pojmovi Iz Programiranja

• Somebody left a glass of milk next to the keyboard.

• Here are some reactions:– Optimist:The glass is half full.– Pessimist:The glass is half empty.– Futurist:The milk's in the wrong half of the glass.– Pascal Programmers:Well, what TYPE of milk is it?– C Programmers:No thanks; I drink straight from the jug.– Assembly Programmers:No thanks; I drink straight from the cow.– BASIC Programmers:No thanks; I'm still breast feeding.– BASIC Programmers:No thanks; I'm still breast feeding.– COBOL Programmers:I'LL DRINK IT IF YOU CAN GIVE ME UNTIL NEXT YEAR.– Logicians:I may or may not have drunk some part of that milk.– Pentium users:I drank Glass*.49999999 ... but don't hold me to that.– Windows users:Where's my straw?– Mac Users:Where's my pump?– Shareware game author:That glass is free. The next one you have to pay for.– Copy protection crazies:Someone drank half of my milk and didn't pay for it!

http://www.pleacher.com/chumor/humor/milk.html

doc.dr.sc. Ani Grubišić – PMF, Split 26

Page 27: Temeljni Pojmovi Iz Programiranja

Zašto postoje prevoditelji?• Što ako osoba koja govori samo hrvatskim jezikom želi komunicirati s

osobom koja govori samo engleskim jezikom? Postoje dva moguća rješenja problema:

1. Osoba koja govori hrvatskim jezikom zapiše (na hrvatskom) ono što želi reći. Zatim prevoditelj cijeli dokument prevede na engleski jezik i isporuči osobi koja govori engleskim jezikom. Uočimo u ovoj situaciji dvije bitne činjenice:

• Postoji malo kašnjenje na početku jer hrvatski dokument se u cijelosti mora prevesti prije čitanja na engleskom jeziku.

• Prevedeni dokument se može čitati bilo kada nakon toga.• Prevedeni dokument se može čitati bilo kada nakon toga.2. Osoba koja govori hrvatskim jezikom zaposli prevoditelja koji će prevesti

rečenice s hrvatskog jezika u rečenice na engleskom jeziku čim se izgovore . Prevođenje ide sporo zbog pauza između rečenica, originalnih i prevedenih. Uočimo u ovoj situaciji dvije bitne činjenice:

• Ne postoji kopija prijevoda.• Ako se iste rečenice žele ponovno kazati, prevođenje se mora ponoviti.

• Primijenite analogiju na sljedeće: hrvatski jezik = IZVORNI KOD, engleski jezik = STROJNI KOD

doc.dr.sc. Ani Grubišić – PMF, Split 27

Page 28: Temeljni Pojmovi Iz Programiranja

Programi prevoditelji• Čovjeku je stran jezik kojega "razumije" računalo. Zbog toga je

bilo potrebno razviti stanovite posredničke mehanizme koji bi bili most između prirodnog jezika čovjeka i jezika računala.

• Najčešće se određenim posredničkim mehanizmima prirodni jezik čovjeka prevodi u odgovarajući jezik računala.

• Jezik računala za razliku od čovjekovog prirodnog jezika jest predstavljen binarnim brojevnim sustavom koji poznaje samo znamenke 0 i 1.znamenke 0 i 1.

• Posrednički mehanizam ili mehanizmi koji obavljaju pretvorbu prirodnog jezika (čovjeku razumljivog) u strojni jezik (računalu razumljiv) globalno mogu biti:– kompilatori (eng. compilers)– interpretatori (eng. interpreters)

doc.dr.sc. Ani Grubišić – PMF, Split 28

Page 29: Temeljni Pojmovi Iz Programiranja

Compiler – Prevoditelj kompilator• Kompilator je program koji prevodi izvorni kôd programa zapisanog u

jednom jeziku visoke razine u ekvivalentni strojni program – program zapisan u strojnom ili objektnom kodu .

– Kompilator prevodi izvorni program tako da analizira i prevede cjelokupni izvorni program odjednom.

– Ako pronađe pogreške (eng. compile-time error ), ispisuje poruke i upozorenja o njima.

• Objektni kôd (datoteka s ekstenzijom .obj) nije izvršni program i ne može • Objektni kôd (datoteka s ekstenzijom .obj) nije izvršni program i ne može se izravno izvršiti na računalu.

– Objektni kod je međukorak do izvršnog koda i uz ostalo omogućava uključivanje gotovih dijelova programa iz drugih datoteka.

• Otkrivene pogreške treba ispraviti pa ponovo pokrenuti program za prevođenje.

doc.dr.sc. Ani Grubišić – PMF, Split 29

Page 30: Temeljni Pojmovi Iz Programiranja

• Objektni kôd je strojni kôd kojeg računalo može izvršiti, ali da bi postao program mora proći kroz linker (povezivač) - program koji povezuje objektnu datoteku s bibliotekama i drugim potrebnim datotekama

– Programi se mogu izvršiti na računalu samo ako su u binarnom obliku.– Takav se oblik programa naziva izvršni oblik (eng. executable - datoteka s

ekstenzijom .exe) ili izvršni program .– Linker uzima jedan ili više objektnih kodova i elemenata iz biblioteke te ih spaja

u jednu izvršnu datoteku.– Biblioteka (eng. library) gotove dijelove programa i podatke kojima pruža

usluge nezavisnim programima.usluge nezavisnim programima.– Takvi se gotovi dijelovi programa mogu rabiti u drugim programima.

• Kada se koriste biblioteke više nije potrebno uvijek iznova zapisivati radnje (funkcije) koje se često koriste.

– Takve se radnje u program uključuju iz postojećih biblioteka.– Npr. može postojati biblioteka formula za izračunavanje površina geometrijskih

likova čije formule mogu koristiti drugi programi.

doc.dr.sc. Ani Grubišić – PMF, Split 30

Page 31: Temeljni Pojmovi Iz Programiranja

• Ako se pri povezivanju pojavi pogreška (eng. link-time error ), bit će ispisana poruka o tome.

– Pogrešku valja ispraviti pa ponovno pokrenuti prevođenje i povezivanje.

• Rezultat uspješnog povezivanja je izvršni program (*.exe).

• Kod kompajlera su izvorni program i izvršni program potpuno odvojeni i pri izvođenju neovisni.

– Izvršni program se može izvršavati bez postojanja izvornog programa.– Izvršni program se može izvršavati bez postojanja izvornog programa.

doc.dr.sc. Ani Grubišić – PMF, Split 31

Page 32: Temeljni Pojmovi Iz Programiranja

• Korisniku se najčešće predaje samo izvršna inačica programa jer joj nisu potrebni nikakvi dodaci pa se može izvršavati i bez izvornog programa, objektnih datoteka, prevoditelja, povezivača itd.

• Pošto je taj oblik za čovjeka nečitljiv i nerazumljiv, tako se način tako štiti trud programera od neovlaštenih prepravaka ili krađe dijelova programa.

• Izvršna datoteka je oblik programa i može se izravno izvršiti na • Izvršna datoteka je oblik programa i može se izravno izvršiti na računalu za koji je prevedena.

– Objektni kôd je ovisan o računalu jer se “kompajlirani” program može izvršiti samo na računalu za koje je “kompajliran”.

– Npr. program “kompajliran” u okruženju Windows-a neće raditi na Linux-u

doc.dr.sc. Ani Grubišić – PMF, Split 32

Page 33: Temeljni Pojmovi Iz Programiranja

Program zapisanu izvornom kodu

Program zapisanu objektom koduCompiler

Poruke o pogreškama

doc.dr.sc. Ani Grubišić – PMF, Split 33

Page 34: Temeljni Pojmovi Iz Programiranja

• Nastanak programa može se podijeliti na:– pisanje izvornog koda ,– prevo đenje izvornog koda,– povezivanje u izvršni kod ,– provjeravanje programa.

• Kombinacijom instrukcija programskog jezika nastaje izvorni kod• Izvorni je kod moguće pisati u bilo kojem programu za • Izvorni je kod moguće pisati u bilo kojem programu za

uređivanje teksta (engl. text editor).

• Danas se uglavnom programi za pisanje izvornog koda objedinjuju u cjelinu sa prevodiocem i povezivačem (integrirana razvojna okolina , IDE).

doc.dr.sc. Ani Grubišić – PMF, Split 34

Page 35: Temeljni Pojmovi Iz Programiranja

PROCES “KOMPAJLIRANJA” PROGRAMA1. unos programa – izvorni program2. ispitivanje postojanja formalnih tj. pravopisnih

(sintaktičkih) grešaka3. gruba logička kontrola ispravnosti programa4. prevo đenje se odvija zamjenom svake linije jednom ili

čitavim nizom strojnih instrukciji5. prevođenje rezultira objektnim kodom (uz prethodno

javljanje pogrešaka) u binarnom obliku6. povezivanje : objektni kod je ulaz u linker - sistemski

program, koji ima zadatak da objektni kod programa, program, koji ima zadatak da objektni kod programa, objektne kodove iz sistemske biblioteke, kao i ranije prevedene programe poveže u izvršni program, koji računalo može izvršiti

7. izvršni program se pokreće instrukcijom operacijskog sustava, prihvaća ga punja č (eng. loader) koji ga smješta u radnu memoriju, rezervira resurse računala i predaje izvršni program operacijskom sustavu pod čijom kontrolom i ostaje

8. ako program u toku izvođenja ne daje željene rezultate (logičke pogreške), potrebno je ispraviti izvorni program i ponovno izvršiti prevođenje i povezivanje

doc.dr.sc. Ani Grubišić – PMF, Split 35

Page 36: Temeljni Pojmovi Iz Programiranja

LibraryCode

SourceCode Compiler

ObjectProgram

doc.dr.sc. Ani Grubišić – PMF, Split 36

CodeLine 1Line 2

Compiler Program101101

High Level Language

Machine Code

Page 37: Temeljni Pojmovi Iz Programiranja

• Struktura programa kompilatora:– Leksička analiza – eng. Lexical Analysis– Sintaktička analiza - analiziranje sintakse - Parsing– Semantička analiza – eng. Semantic Analysis– Generiranje koda – eng. Code generation

doc.dr.sc. Ani Grubišić – PMF, Split 37

Page 38: Temeljni Pojmovi Iz Programiranja

• Leksi čka analiza je prvi korak u stvaranju programskog jezika.– To je proces raščlanjivanja znakova prilikom učitavanja izvornog

koda računalnog programa, s ciljem da se proizvede izlaz kao niz simbola koji se zovu leksičke oznake (eng. lexical tokens) ili skraćeno oznake - tokeni.

– Izvorni kod se prvo raščlanjuje u utvrđene jedinice ili lekseme(lexems). Učitavaju se ulazni znakovi i dijele se na posebne kategorije, koje zavise o programskom jeziku, na primjer: prepoznavanje varijabli, brojeva, znakovnih skupova, posebnih prepoznavanje varijabli, brojeva, znakovnih skupova, posebnih riječi - instrukcije

– Primjerice promotrimo sljedeće:• Ovo je rečenica.• Gdje je:

– Veliko O početak iskaza– Razmaknica “ “ odvaja riječi– “.” je simbol za završetak iskaza.

doc.dr.sc. Ani Grubišić – PMF, Split 38

Page 39: Temeljni Pojmovi Iz Programiranja

– Leksička analiza dijeli tekst programa u riječi ili “tokens”If x = y then z = 1; else z = 2

– Što su dijelovi ovog teksta?• Dijelovi – jedinice ovog teksta su:

Ifx = Y thenz= 1;Elsez =2

doc.dr.sc. Ani Grubišić – PMF, Split 39

Page 40: Temeljni Pojmovi Iz Programiranja

• Sintakti čka analiza - analiziranje sintakse – “parsiranje ” (eng. parsing)– Prepoznavanje osnovne strukture programskog jezika: petlja,

procedura,... – Postupak provjeravanja i odlučivanja o tome da li je niz ulaznih

znakova programskog jezika ispravan.– Promotrimo prethodni primjer, ali sada s ciljem provođenja sintaktičke

analize.If x = y then z = 1; else z = 2x = y z = 1 z = 2 x = y z = 1 z = 2

Relacija PridruživanjePridruživanjePredikat Then iskaz Else iskaz

If - then - elese

doc.dr.sc. Ani Grubišić – PMF, Split 40

Page 41: Temeljni Pojmovi Iz Programiranja

• Semanti čka analiza je analiza jezika usmjerena na značenje riječi.– Semantička analiza omogućava utvrđivanje semantičkih pogrešaka

u iskazima programskog jezika.

• Generiranje koda - Code generation• Generiranje koda - Code generation– Pretvara prijelazni oblik izvornog koda u oblik strojnog koda koji je

spreman za izvođenje

doc.dr.sc. Ani Grubišić – PMF, Split 41

Page 42: Temeljni Pojmovi Iz Programiranja

• Kod kompilatora su izvorni program i prevedeni program potpuno odvojeni i pri izvođenju neovisni. Ako se izmjeni izvorni program, to se neće automatski odraziti na izvedbenom programu, nego ga je potrebno ponovno “kompajlirati”.

• Izvršni se program može izvršavati bez postojanja izvornog programa pa se korisniku najčešće i predaje samo izvršna inačica programa. Takva inačica programa ima oznaku .exe.

• Prednosti kompilatora: – brži rad – zaštićen izvorni program– uočavanje sintaksnih pogrešaka tijekom “kompajliranja”

• Nedostaci kompilatora: – odvojenost prevedenog i izvornog programa.

doc.dr.sc. Ani Grubišić – PMF, Split 42

Page 43: Temeljni Pojmovi Iz Programiranja

Podjela kompilatora• Jednoprolazni kompilator (engl. one pass compiler)

– “kompajlira” u jednom prolazu tj. jednom parsiranju. Brži je od višeprolaznog. Većina kompilatora je jednoprolazna.

• Višeprolazni kompilator (engl. multi-pass compiler) – “kompajlira” u više prolaza, tj. svaki prolaz analizira kod s drugog

aspekta. Omogućava provođenje sofisticirane optimizacije potrebne za dobivanje visokokvalitetnog koda. Trebaju više vremena i memorije.

• Istorodni kompilator (engl. native compiler) – kompilator i prevedeni program su na istoj vrsti računala i na istoj

vrsti operacijskog sustava

• Križni kompilator (engl. cross compiler) – kompilator i prevedeni program su na različitoj vrsti računala i na

različitoj vrsti operacijskog sustava

• Optimiziraju ći kompilator (engl. optimising compiler) – nastoji prevedeni program učiniti što kraćim i bržim pri izvođenju.

doc.dr.sc. Ani Grubišić – PMF, Split 43

Page 44: Temeljni Pojmovi Iz Programiranja

Interpreter – prevoditelj interpretator• Interpretator svaku instrukciju izvornog programa prevodi u

strojni oblik u trenutku izvođenja programa, instrukciju po instrukciju. – Simbolička instrukcija se prevodi u jednu ili više instrukciji strojnog

jezika i zatim se izvrši. – Nakon toga se prevede sljedeća simbolička instrukcija i izvrši, i tako

redom.

• Prevođenje instrukciju po instrukciju omogućava trenutno otkrivanje određene vrste pogrešaka i interaktivno ispravljanje.

• Nedostaci su relativno sporiji rad i nužnost isporuke izvornoga kôda programa korisniku.

• Izvorni program je moguće izvršiti samo ako je na računalu prisutan i interpreter.

doc.dr.sc. Ani Grubišić – PMF, Split 44

Page 45: Temeljni Pojmovi Iz Programiranja

• “interpretirani” program ne ovisi o računalu jer je ono što ovisi o računalu sami interpretator (svaki interpretator je napravljen za pojedino računalo)

• Problem riješen uz pomoć programskog jezika visoke razine interpretator izvodi sporije od istog programa zapisanog programskim jezikom kompilatorskog tipa.

doc.dr.sc. Ani Grubišić – PMF, Split 45

Line 2

SourceCodeLine 1Line 2

InterpreterInterpreter

High Level Language

Output

Page 46: Temeljni Pojmovi Iz Programiranja

• Interpretatori prevode i odmah izvršavaju svaku instrukciju višeg programskog jezika. Prevodi se pri svakom izvođenju programa.

• Treba uočiti da je izvorni program moguće izvršiti samo ako je na računalu prisutan i interpretator koji prevodi instrukcije u strojni oblik.

• Prednosti interpretatora : – Prevođenje instrukciju po instrukciju omogućava trenutačno otkrivanje i

ispravljanje grešaka. – Ne troši se vrijeme na “kompajliranje”, odmah se može pokrenuti – Ne troši se vrijeme na “kompajliranje”, odmah se može pokrenuti

program. – Jednostavniji su. – Ne zauzimaju toliko prostora u memoriji za zapis kao kompilatori.

• Nedostaci interpretatora : – Prevođenje traje određeno vrijeme, čime se usporava izvršenje

programa, što za složenije i opsežne programe može biti primjetno. – Sporiji su jer se program svaki puta kada ga želimo izvršiti mora

ponovno prevesti interpretatorom.– Ne možemo dobiti program u strojnom jeziku.

doc.dr.sc. Ani Grubišić – PMF, Split 46

Page 47: Temeljni Pojmovi Iz Programiranja

Primjerci programskih jezika visoke razine

• BASIC (Beginner's All-purpose Symbolic Instruction Code) – Razvili su ga1964. John George Kemeny i Thomas Eugene Kurtz s Dartmouth College, New Hampshire, SAD da bi omogućili programiranje studentima koji nisu imali usmjerenje iz prirodnih znanosti.

• C – Razvijen je 1980. Operacijski sustav UNIX je napisan u C jeziku.• FORTRAN (FORmulaTRANslation) - Koristi se za znanstvene i

inženjerske primjene• COBOL (Common BussinesOriented Language) – Razvijen je 1960.

Zastupljen u primjenama za razvioj programske podrške na mini i Zastupljen u primjenama za razvioj programske podrške na mini i mainframe računalima.

• Java – Programski jezik za Web razvijen je 1995. u korporaciji Sun Microsystems.

• Pascal – prvu inačicu ovog jezika napisao je njmački znanstvenik Nikalus Wirth 1968. godine služeći se pri tom računalom CDC 6600. Pascal prevoditelj je napisan 1970. godine. Borland ga je komercijalizirao sa Turbo Pascal-om.

doc.dr.sc. Ani Grubišić – PMF, Split 47

Page 48: Temeljni Pojmovi Iz Programiranja

• Pascal programProgram calc;

Var

num1, num2, calc: real;

begin

writeln (‘Upiši prvi broj: ‘);

read (num1);

writeln (‘Upiši drugi broj: ‘);writeln (‘Upiši drugi broj: ‘);

read (num2);

calc := num1 + num2;

writeln ( num1, ‘ + ’, num2, ‘ = ‘, calc);

end.

doc.dr.sc. Ani Grubišić – PMF, Split 48

Page 49: Temeljni Pojmovi Iz Programiranja

• BASIC programDIM num1 AS INTEGER

DIM num2 AS INTEGER

DIM calc AS INTEGER

CLS

INPUT “Upiši prvi broj”,num1

INPUT “Upiši drugi broj”,num2

calc = num1 + num2calc = num1 + num2

PRINT num1; “ + “; num2; “ = “;calc

END

doc.dr.sc. Ani Grubišić – PMF, Split 49

Page 50: Temeljni Pojmovi Iz Programiranja

• C program#include <stdio.h>

main()

{

float num1, num2, calc;

printf(" Upiši prvi broj :");

scanf("%f",&num1);

printf(" Upiši drugi broj :");printf(" Upiši drugi broj :");

scanf("%f",&num2);

calc = num1 + num2;

printf("%3.2f + %3.2f = %3.2f\n",num1,num2,calc);

}

doc.dr.sc. Ani Grubišić – PMF, Split 50

Page 51: Temeljni Pojmovi Iz Programiranja

• COBOL programIDENTIFICATION DIVISION.PROGRAM-ID. ADDER.DATA DIVISION. WORKING-STORAGE SECTION.01 calc PIC 9(3).01 num1 PIC 9(3).01 num2 PIC 9(3).PROCEDURE DIVISION.

DISPLAY ERASE.DISPLAY ERASE.DISPLAY " Upiši prvi broj : " WITH NO ADVANCING.ACCEPT num1.DISPLAY " Upiši drugi broj : " WITH NO ADVANCING.ACCEPT num2.COMPUTE calc = num1 + num2.DISPLAY num1, " + ", num2, " = ", calc.STOP RUN.

doc.dr.sc. Ani Grubišić – PMF, Split 51

Page 52: Temeljni Pojmovi Iz Programiranja

Paradigme programiranja• Paradigme (ili metodologije) programiranja određuju metode

koncipiranja i izvršavanja programa• Programski jezici se dijele na:

– proceduralne i neproceduralne– strukturirane i nestrukturirane– funkcijske– logičke – objektno-orijentirane– objektno-orijentirane

• U proceduralni programskim jezicima slijed naredbi određuje KAKO nešto učiniti, a u neproceduralnim ŠTO treba učiniti

doc.dr.sc. Ani Grubišić – PMF, Split 52

Page 53: Temeljni Pojmovi Iz Programiranja

• Proceduralni jezici dodjeljuju vrijednosti varijablama i ispituju vrijednosti varijabli.

• Dodjeljivanje vrijednosti izvodi operaciju nad podacima u memoriji

• Vrijednosti varijabli se mijenjaju tijekom izvršavanja• Petlje ponavljaju niz naredbi određeni broj puta ili do promjene

određenog uvjeta• Uvjetno grananje omogućuje izvođenje bloka naredbi samo pod • Uvjetno grananje omogućuje izvođenje bloka naredbi samo pod

određenim uvjetima• Opisuju KAKO nešto treba napraviti – funkcija sustava• Koristi “top-down” pristup, odnosno dekompoziciju funkcija – što

koji modul sustava radi– fokusiranje na manje detalja istovremeno što smanjuje složenost

razvoja

doc.dr.sc. Ani Grubišić – PMF, Split 53

Page 54: Temeljni Pojmovi Iz Programiranja

• Funkcijski jezici promatraju računalni proces kao određivanje vrijednosti matematičkih funkcija

• Varijablama se samo jednom pridružuje vrijednost• Za određeni skup parametara, rezultat poziva funkcije je uvijek

isti bez obzira gdje ili kada je poziv funkcije izvršen• Ne postoje petlje, već se ponavljanje dijelova programskog koda

rješava primjenom rekurzije• Specificiraju ŠTO treba izračunati, a ne kako to treba izračunati• Specificiraju ŠTO treba izračunati, a ne kako to treba izračunati• Primjeri: Haskell, ML, Lisp

doc.dr.sc. Ani Grubišić – PMF, Split 54

Page 55: Temeljni Pojmovi Iz Programiranja

• Logi čki jezici omogućavaju stvaranje skupa relacija (činjenice i pravila) koje opisuju prostor rješenja

• Tijekom izvršavanja programa se znanje sadržano u skupu relacija upotrebljava na različite načine za rješavanje različitih “upita”

• Definira ŠTO treba napraviti• Primjena: umjetna inteligencija, baze podataka• Primjeri: Prolog, SQL• Primjeri: Prolog, SQL

doc.dr.sc. Ani Grubišić – PMF, Split 55

Page 56: Temeljni Pojmovi Iz Programiranja

• Objektno-orijentirani jezici kombiniraju podatke i naredbe koje manipuliraju podacima u jedinstven koncept koji se naziva objekt

• Modeliraju računalni program kao skup objekata koji komuniciraju zajedno da bi postigli cilj

• Koriste “bottom-up” pristup• Ponovno upotrebljiva programska rješenja

doc.dr.sc. Ani Grubišić – PMF, Split 56

Page 57: Temeljni Pojmovi Iz Programiranja

Monolitno programiranje• Programi su u početku bili vrlo jednostavni i upotrebljavali su se

uglavnom za matematičke proračune• Procedure i podaci su se međusobno kombinirali u programu

• Takav stil programiranja je monolitan (eng. monolithic programming) zbog toga što je po potrebi uključivao podatke iprocedure

doc.dr.sc. Ani Grubišić – PMF, Split 57

Page 58: Temeljni Pojmovi Iz Programiranja

Strukturno programiranje• Strukturno programiranje (eng. structured programing) skup je

programskih postupaka koji vode logičkoj organizaciji i čitljivosti programa– Logička organizacija programa olakšava pisanje, održavanje i

popravak programa

• Modularno programiranje je prva i najvažnija metoda strukturnog programiranjastrukturnog programiranja– Modularno programiranje sastoji se u podjeli programa u manje

cjeline, koje se mogu neovisno pisati i provjeravati, a po završetku ugraditi u glavni program

• Dakle, strukturno programiranje je postupak pisanja programa stvaranjem manjih, nezavisnih dijelova, tzv. modula, što omogućava lakše ispitivanje funkcionalnosti pojedinih dijelova programa kao i nadzor pri razvijanju programa

doc.dr.sc. Ani Grubišić – PMF, Split 58

Page 59: Temeljni Pojmovi Iz Programiranja

doc.dr.sc. Ani Grubišić – PMF, Split 59

Page 60: Temeljni Pojmovi Iz Programiranja

• Strukturno orijentirani jezici (npr. Pascal, dBase, Ada) prisiljavaju programera na strukturno programiranje, za razliku od nestrukturnih jezika (npr. BASIC, FOR-TRAN, COBOL) koji prepuštaju građu programa u potpunosti programeru

• Strukturno orijentirani jezici ograničavaju slobodu programera i tjeraju ga na programsku disciplinu i urednost, uzvraćajući mu uštedom truda pri dokumentiranju, održavanju i popravcima uštedom truda pri dokumentiranju, održavanju i popravcima programa

doc.dr.sc. Ani Grubišić – PMF, Split 60

Page 61: Temeljni Pojmovi Iz Programiranja

Objektno -orijentirano programiranje• Računalo se sastoji od mnogo komponenti. Pouzdanost i djelotvornost

računala ovisi o pouzdanosti i djelotvornosti svake od ugrađenih komponenata.

• Konstruktor računala rabi mnogo komponenata koje spaja u cjelinu i ne mora poznavati njihovu unutarnju građu. Dovoljno je da zna zadaćukoju komponenta obavlja i način njezina spajanja s ostalim dijelovima računala.

• Za unutarnju građu i pouzdanost svake komponente brine se njen proizvođač.proizvođač.

– Proizvođač pojedine komponente može se tehnološki specijalizirati za njezinu proizvodnju te tako proizvoditi komponente visoke kvalitete i pouzdanosti.

– Npr. postoje proizvođači koji su se specijalizirali za proizvodnju tvrdih diskova, tipkovnica, monitora itd.

– Komponente su normirane pa se mogu ugraditi u različite elektroničke uređaje što omogućava proizvodnju velikih serija i sniženje cijena.

doc.dr.sc. Ani Grubišić – PMF, Split 61

Page 62: Temeljni Pojmovi Iz Programiranja

• Zamisao uporabe gotovih komponenti pri gradnji složenih sustava primijenjena je i pri izradi programa

• Zadatak se dijeli na manje dijelove koji se mogu neovisno rješavati i provjeravati.

• Gotovi dijelovi programa (komponente) nazivaju se objekti(eng. object).

• Programi koji koriste objekte nazivaju se objektno orijentirani programi (eng. OOP, object oriented programs). programi (eng. OOP, object oriented programs).

• Objekti se mogu pisati i provjeravati odvojeno od cjeline i koristiti u različitim programima.

• Objektno – orijentirano programiranje je vrsta programiranja kod kojeg programeri, osim tipa i strukture podataka, definiraju i tipove operacija (funkcija), koje se primjenjuju na strukturu podataka

doc.dr.sc. Ani Grubišić – PMF, Split 62

Page 63: Temeljni Pojmovi Iz Programiranja

doc.dr.sc. Ani Grubišić – PMF, Split 63


Recommended