You are on page 1of 31

Programski jezici

Potprogrami
Potprogrami
 Funkcije
 Procedure
 Prenos argumenata
 Globalne promenljive kao parametri
potprograma
 Imena potprograma kao parametri
potprograma
 Rekurzivni potprogrami
 Implementacija potprograma
Koncept potprograma
 Potreba da se određeni deo programa više puta
ponovi u istom ili u različitim programima
 Izbegavanje multipliciranja istih sekvenci
naredbi u programu
 Sredstvo za struktuiranje programa
 Osnovno sredstvo apstrakcije u programiranju
 Koncept poznat od prvih viših programskih
jezika
 Definiše se skup izlaznih veličina u funkciji
ulaznih
Karakteristike potprograma
 Realizuju se kao programske celine koje se po
potrebi pozivaju
 Na mestu poziva potprograma bitno je samo šta
se u funkciji čega dobija, a ne i kako se to radi
 Realizacija zavisnosti definisana je lokalno u
okviru potprograma
 Svaki potprogram ima jednu ulaznu tačku
(izuzetak je FORTRAN, gde može biti
definisano više ulaza u potprogram)
Karakteristike potprograma
 Program koji poziva potprogram prekida svoju
aktivnost sve dok se ne završi potprogram, što
znači da se u jednom trenutku izvršava samo
jedan program
 Po završetku potprograma upravljanje se vraća
programu koji ga je pozvao
Osnovni elementi potprograma
 Ime potprograma
 Lista imena argumenata (fiktivni argumenti)
 Telo potprograma
 Sredina u kojoj je potprogram definisan

procedure ImePotprograma (Lista fiktivnih arg.);


Opisi lokalnih promenljivih;
Telo potprograma
end Ime_potprograma;
Osnovni elementi potprograma
 Ime potprograma je uvedena reč kojom se
potprogram imenuje i preko koje se vrši njegovo
pozivanje
 Fiktivnim argumentima definiše se skup ulazno-
izlaznih veličina potprograma, kod poziva se
fiktivni argumenti zamenjuju stvarnim
 Telo potprograma je sekvenca naredbi koja
realizuje potprogram
 Okolinu potprograma predstavljaju promenljive
okruženja koje se mogu koristiti u potprogramu
Funkcije
 Funkcijski potprogram po konceptu odgovara
matematičkim funkcijama
 Lista argumenata se sastoji samo od ulaznih
argumenata
 Ulazne vrednosti se ne menjaju u funkciji
 Za prenos vrednosti programu iz koga se
poziva koristi se promenljiva sa istim imenom
kao i funkcija
 Za opis ovakvih potprograma obično se koristi
ključna reč FUNCTION
Primeri funkcija
Fortran
Funkcije
 U novijim programskim jezicima postoji
naredba return kojom se eksplicitno navodi
vrednost koja se iz glavnog programa prenosi
u glavni program

int SUM (int n)


{
int POM=0, i;
for (i=0; i<n;i++)
POM=POM+i;
return POM;
}
Procedure
 Potprogrami opšteg tipa
 Može se realizovati svaki algoritam koji sam
za sebe ima određeni smisao
 U glavni program vraćaju jedan ili skup
rezultata

procedure ime_procedure (lista argumenata)


opisi lokalnih promenljivih;
telo procedure
end;
Procedure
 Opis procedure počinje ključnom reči kojom
se navodi da se definiše procedura
 procedure
 subroutine

 sub

 Ime procedure je uvedena reč kojom se


imenuje potprogram i pomoću koje se poziva
 Lista argumenata može da sadrži ulazne,
izlazne i ulazno-izlazne argumente
Procedure
 Obično se zahteva da se u listi argumenata
navede njihov tip i način prenosa vrednosti
 Primer procedure u Adi
Primeri procedura
 Algol 60 Fortran 77
Prenos argumenata
 Poziv funkcija i procedura iz glavnog programa
sa listom stvarnih argumenata
 Stvarni argumenti zamenjuju fiktivne
 Tri semantička modela za prenos argumenata
 in
 out
 inout

 Dva konceptualna modela za prenos argumenata


 Vrednosti parametara se fizički prebacuju
 Prenosi se podatak o memorijskoj lokaciji parametra
Prenos po vrednosti
 Obično se sreće kod funkcijskih potprograma
 Vrednosti stvarnih argumenata se kopiraju u pomoćne
memorijske lokacije fiktivnih argumenata
 Sve promene argumenata odvijaju se u lokacijama
potprograma, nedostupne su glavnom programu
 Koristi se samo za prenos ulaznih parametara
potprograma
 U programskim jezicima se obično implicitno ili
eksplicitno navodi da se radi o prenosu argumenata
po vrednosti
Nedostaci
 Fiktivni parametri potprograma zauzimaju
memorijski prostor
 Operacija kopiranja stvarnih u fiktivne
parametre može uticati na efikasnost
 Nedostaci dolaze do izražaja kada se prenose
strukture podataka, veliki vektori i matrice
Prenos po rezultatu
 Koristi se za prenos izlaznih parametara
 Nema prenosa vrednosti iz glavnog programa
u potprogram
 Vrednosti se računaju u memorijskim
lokacijama fiktivnih argumenata
 Pre vraćanja kontrole glavnom programu
kopiraju se u lokacije stvarnih argumenata
 Stvarni argumenti moraju biti promenljive
Nedostaci
 Za fiktivne argumente rezerviše se memorijski
prostor u potprogramu
 Mogućnost kolizije stvarnih argumenata u
slučaju da se potprogram poziva tako da isti
stvarni argument zamenjuje više fiktivnih
Prenos po vrednosti i rezultatu
 Koristi se za prenos ulazno-izlaznih parametara
 Kombinacija prenosa po vrednosti i rezultatu
 Vrednosti stvarnih argumenata se kopiraju u
memorijske lokacije fiktivnih argumenata
 Sve izmene nad argumentima pamte se u
lokalnim memorijskim lokacijama potprograma
 Prije vraćanja kontrole glavnom programu vrši
se kopiranje u lokacije stvarnih argumenata
 Nedostaci isti kao u prethodnim slučajevima
Prenos po referenci
 Nema kopiranja vrednosti iz glavnog
programa u potprogram i obrnuto
 Prenosi se samo referenca memorijske lokacije
u kojoj je vrednost stvarnog argumenta
 Reference stvarnih argumenata se preslikavaju
u reference fiktivnih
 Potprogram pristupa istim memorijskim
lokacijama kao i glavni program
 Nema rezervisanja memorije za fiktivne
argumente
Prenos po referenci
 Sve promene nad argumentima u potprogramu
vidljive su i u glavnom programu
 Koristi se za prenos ulazno-izlaznih
argumenata
 Osnovni način prenosa u mnogim
programskim jezicima i koristi se implicitno
Prednosti
 Efikasnost u pogledu vremena i memorijskog
prostora
 Nema dupliranja memorijskog prostora
 Ne gubi se vreme u kopiranju stvarnih u
fiktivne argumente
Nedostaci
 Moguće kolizije između stvarnih argumenata
 Mogućnost kolizije pri radu sa nizovima i
elementima nizova
 Mogućnost kolizije između elemenata
programa koji se prenose kao stvarni
argumenti potprograma i onih koji se prenose
kao globalni parametri
Prenos po imenu
 Način prenosa ulazno-izlaznih parametara
 Nema ni kopiranja ni prenosa reference
 Pri pozivu se imena stvarnih argumenata
ubacuju u tekst potprograma umesto imena
fiktivnih argumenata
 Potprogram se izvršava kao da se radi o kodu
napisanom sa imenima stvarnih argumenata
 Implementacija zavisi od toga šta se prenosi
kao stvarni argument
Globalne promenljive kao
parametri potprograma
 Potprogram se u odnosu na programski modul
u kome je napisan tretira kao blok u bloku
 Sve promenljive definisane u okruženju u
kome je definisan potprogram mogu se
koristiti u potprogramu po konceptu globalnih
promenljivih
 Potprogram može biti bez liste fiktivnih
argumenata, a da sve veze sa okruženjem
izvodi pomoću globalnih promenljivih
Rekurzivni potprogrami
 Poziv potprograma u telu samog potprograma
 Pogodni za rešavanje problema koji su
rekurzivno definisani
 Tipičan primer je izračunavanje faktorijela
Primer rekurzije

 Rešenje bez rekurzije


Implementacija potprograma
 Planiranje memorijskog prostora pri
prevođenju
 Rezerviše se memorijski prostor za smeštaj
koda programa i podataka koji se obrađuju u
njemu
 Za svaki potprogram generiše se aktivacioni
slog u koji se smeštaju podaci koji se
preuzimaju od glavnog programa, lokalni
podaci potprograma i privremene promenljive
Struktura aktivacionog sloga
Rezultati koje vraća potprogram
Stvarni parametri
Upravljački linkovi (opciono)
Linkovi za pristup podacima
(opciono)
Podaci o statusu
Lokalni podaci
Temporalne promenljive
Pitanja

???

You might also like