PR 2012_Programski jezici

Download Report

Transcript PR 2012_Programski jezici

Programski jezici
Pregled i osnovne karakteristike
1
Algoritam
• Algoritam je niz nedvosmislenih koraka
koji se mogu izvršiti i koji definišu proces
koji se može završiti – neformalna definicja
• Ne postoji formalna definicija
• Čerčova teza – neformalna definicija
poklapa se sa formalnom
2
Primjeri algoritama
• Naći zapreminu valjka
• Ako je R poluprečnik osnove i
H visina, tada je zapremina
valjka jednaka
• V=R*R*H*PI, gdje je PI=3.14
Ludolfov broj
• Na stolu je N listova papira, na
svakom listu po jedan broj.
Naći najmanji broj.
• U lijevu ruku uzmimo jedan list
(označimo ga sa L), a desnom
rukom uzimamo redom listove
sa stola (označimo ih sa D) i
upoređujemo L i D.
• Ako je D<L, prebacujemo ga u
lijevu ruku, a papir koji je tamo
bio odlažemo. Ako nije D<L,
odlažemo papir iz desne ruke i
nastavljamo upoređivanje.
• Poslije upoređivanja sa svim
elementima, u lijevoj ruci je
najmanji broj.
3
Primjeri algoritama II
• Ako je u banku uloženo x eura
sa godišnjom kamatom od y
procenata, odrediti niz čiji je i-ti
element iznos na računu na
kraju i-te godine, i=1,...,10.
• Prvi element niza a[1] je
x+x*y/100
• Ponavljaj devet puta radnju,
redom za i=1,2,...,9: a[i+1] =
a[i]+a[i]*y/100
• Drugo rješenje: ponavljaj deset
puta, redom za i=1,2,...,10: a[i]
= x(1+y/100)i
• Naći najmanji element niza sa
N elemenata
• Neka je M najmanji element i
neka je jednak prvom elementu
niza;
• Neka i označava tekući element
niza, i=2,...,n; ako je i-ti
element niza manji od M, tada
M dobija vrijednost i-tog
elementa; ako i-ti element niza
nije manji od M, preći na
sledeći element
• Poslije upoređivanja sa svim
elementima, M je najmanji
element niza
4
Primjer: procedura swap koja zamjenjuje dvije
uzastopne vrijednosti v[k] i v[k+1] u nizu v
Algoritamska šema ili pseudo kod
t v[k]
v[k] v[k+1]
v[k+1] t
5
Pseudo kod procedure Swap
/* Zadatak: Zameniti vrijednosti ulaznih
argumenata procedure. */
PROCEDURA Swap(UI Arg1  Def_Tip,
UI Arg2  Def_Tip)
Argp  Def_Tip
// Pomoćna promenljiva za zamenu
POČETAK PROCEDURE Swap
Argp  Arg1
Arg1  Arg2
Arg2  Argp
KRAJ PROCEDURE Swap
6
Šta se dešava?
7
Logička šema računara
8
9
10
11
12
13
14
Zadaci kontrolne jedinice
• Mogućnost dohvatanja podataka iz
memorije
• Logika za nizanje (ređanje) instrukcija
• Logika za generisanje signala koji
kontrolišu protok informacija između
različitih komponenti datapath-a
• Logika za kontrolu koje operacije mogu
izvršavati funcionalne jedinice datapath-a
15
Zadaci datapath-a
• Posjeduje funcionalne jedinice (na primjer
sabirač) i memorijske lokacije (registre);
• Veze između komponenti tako da se mogu
odraditi pojedine funkcije
• Mogućnost učitavanja podataka iz memorije
i smještanja podataka u memoriju
16
17
18
19
20
Istorijat
• Mašinski jezik
• Primjer: sabiranje dvije vrijednosti koje su
smještene u memoriji
• (1) učitaj prvu vrijednost iz memorije u
registar; (2) učitaj drugu vrijednost iz
memorije u drugi registar; (3) aktiviraj kolo
za sabiranje tako da ulazi budu dati registri,
a izlaz neki treći registar. (4) Smjesti
rezultat u neku memorijsku lokaciju. (5)
21
Stop.
Primjer mašinskog koda
• binarni i heksadecimalni zapis datog
algoritma:
• 0001010101101100
156C
• 0001110011001110
166D
• 0101000001010110
5056
• 0011000001101111
306E
• 1100000000000000
C000
22
Asemblerski jezik
• Deskriptivna imena za memorijske lokacije,
registre i kodove operacija - mnemonici
• Primjer: LD – Load, ST – Store, HLT -Halt
LD R5, Price
LD R6, Tax
ADDI R0, R5 R6
ST R0, Total
HLT
23
Asembler
• Program koji prevodi programe napisane u
mnemoničkoj formi u mašinski jezik je
asembler
• Jezici druge generacije
• Mane: konstrukcije su i dalje na niskom
nivou, razvoj programa se mora zasnivati na
sitnim koracima mašinskog jezika,
mašinska zavisnost
24
Treća generacija
• Elementarne konstrukcije (primitivi)
od kojih treba izgraditi program nisu
obavezno i konstrukcije pomoću kojih
se može dizajnirati program
• Konstrukcije su višeg nivoa i nisu
mašinski zavisne
25
• Konstruisanje programskog jezika – izbor
konstrukcija od kojih se može izgraditi
program. Svaka takva konstrukcija je
dizajnirana tako da se može izraziti kao niz
konstrukcija nižeg nivoa (npr. mašinskog
jezika)
• assign Total the value Price + Tax – ne
zavisi od mašine
• assign Promjenljiva the value Izraz
26
• Programski prevodioci: prevođenje
programa iz konstrukcija višeg nivoa u
programe na mašinskom jeziku
• Kompajleri (Grace Hopper)
• Interpreteri – instrukcije se izvršavaju
istovremeno sa prevođenjem
27
Paradigme programiranja
evolucija
28
Paradigme programiranja
• Impertivna (proceduralna) - niz instrukcija
koje obrađuju podatke tj. program je
implementacija algoritma koji rješava
problem
• Primjeri jezika: Pascal, Cobol, C, Fortran,
Algol, APL, itd.
29
Opšтi oblik imperativnog programa
30
Deklarativno programiranje
• Primjena generalnog algoritma za
rješavanje problema; prevođenje problema
u formu koja je dostupna algoritmu;
osnovni nedostatak: razvoj opšteg
algoritma; većina jezika su usko
specijalizovani
• Primjer jezika: Prolog, Goedel
31
Funkcionalno programiranje
• Program se sastoji od funkcija, koje su
izgrađene od elementarnih funkcija
• Primjer: LISP - aritmetička sredina
• (Divide (Sum Numbers) (Count Numbers))
• Najmanji element liste: (First (Sort List))
32
Funkcionalno programiranje
33
• Funkcionalna paradigma – modularan
pristup projektovanju
• Prirodan pristup izgradnji programa - od već
postojećih cjelina
• Primjeri jezika: LISP, Haskell, Scheme, ML
• Često se koristi za matematičke sisteme,
npr. dokazivače teorema i logičke sisteme
34
Objektno-orijentisano
programiranje
• Jednice programa su “aktivni objekti”
• Posljedica modularnog pristupa – svaki
objekat je definisan u posebnoj zaokruženoj
jedinici i može se kasnije koristiti
• Objekti komuniciraju predajom poruka –
“message passing”
• Trenutno dominantna paradigma
programiranja i uopšte razvoja softvera
35
• Primjer: lista je “pasivan objekat” u
proceduralnim jezicima, jer se kontroliše
pomoću programa;
• U OO paradigmi, lista je objekat koji se
satoji od same liste i kolekcije procedura za
manipulaciju listom (dodavanje elementa,
brisanje, sortiranje, detektovanje da li je
lista prazna); program koji pristupa listi ne
mora da sadrži navedene procedure
• Primjer: C++, SmallTalk, Eiffel, Java
36