You are on page 1of 92

Programski jezici

i
prevodioci

Apstrakcije u programskim jezicima


Bazne apstrakcije

Milica Vučković

Programski jezici i prevodioci


Fakultet organizacionih nauka, 2005.
Sadržaj
 Bazne apstrakcije

 Strukturne apstrakcije

 Proceduralne apstrakcije

 Apstrakcije podataka
Programski jezici i prevodioci
Fakultet organizacionih nauka, 2005.
Bazne apstrakcije

 Promenljive

 Elementarni tipovi podataka

 Operacija dodeljivanja

Programski jezici i prevodioci


Fakultet organizacionih nauka, 2005.
Memorija i promenljive
Imena promenljivih

broj1 broj2
Vrednost
45 12
1652 2548

bin. reprez: bin. reprez:


101101 1100
Memorijske adrese

Programski jezici i prevodioci


Fakultet organizacionih nauka, 2005.
Promenljive
 Promenljiva je apstrakcija memorijske ćelije
(memorijskih ćelija)

int myVar;
myVar

 Fizička i apstraktna memomirjska ćelija


 vrednost floating-point tipa zauzima 4by
 jedna apstraktna mem. ćelija

Programski jezici i prevodioci


Fakultet organizacionih nauka, 2005.
Atributi promenljive

 Identifikator
 Adresa
 Vrednost
 Tip
 Životni vek (lifetime)
 Doseg (scope)

Programski jezici i prevodioci


Fakultet organizacionih nauka, 2005.
Identifikatori
 Identifikatori korisnički definisana
imena
 Identifikator se koristi za
identifikovanje nekog eniteta u
programu
 programski entiteti su: promenljive,
formalni parametri, potprogrami, klase,....

Programski jezici i prevodioci


Fakultet organizacionih nauka, 2005.
Identifikatori

Sve promenljive nemaju ime


(anonymous)
 Primer : heap-dinamičke promenljive
refernciraju se preko pointera ili referentnih
promenljivih

Programski jezici i prevodioci


Fakultet organizacionih nauka, 2005.
Oblici identifikatora

 Identifikatori u većini programskih


jezika imaju isti oblik:
string koji se sastoji iz niza karaktera:
slova, cifara i znakova-konektora ( pr.
_ “underscore” )

Programski jezici i prevodioci


Fakultet organizacionih nauka, 2005.
Oblici identifikatora

 Konektori
 Dužina
 Case Sensitive
 Ključne i rezervisane reči

Programski jezici i prevodioci


Fakultet organizacionih nauka, 2005.
Oblici identifikatora
 Konektori
 U prvim programskim jezicima identifikator
se sastojao samo iz velikih slova

 “underscore” karakter se kao konektor


široko koristio tokom 1970 i 1980; ( pr.
max_ceo_broj)

 “Mađarska” notacija (pr. maxCeoBroj )

Programski jezici i prevodioci


Fakultet organizacionih nauka, 2005.
Oblici identifikatora
 Dužina (length)
Primeri:
• COBOL: max 30 karaktera
• FORTRAN 90 i ANSI C: max 31
• Ada, Java, C#: nema ograničenja,
ali svi karakteri su značajni

Programski jezici i prevodioci


Fakultet organizacionih nauka, 2005.
Oblici identifikatora

 Case Sensitive
 MaxBroj = maxbroj ?
 Identifikatori u C, C++, Java i C# su
case sensitive

Programski jezici i prevodioci


Fakultet organizacionih nauka, 2005.
Oblici identifikatora
 Ključna reč (keyword): reč koja je
specijalna samo u određenom
kontekstu
Primer: u FORTRAN-u ključna reč REAL se
koristi za deklaraciju promenljive i kao ime
promenljive
REAL X (promenljiva X je tipa REAL)
INTEGER REAL ( promenljiva REAL je tipa
INTEGER )
REAL = 7 (dodeljivanje)

Programski jezici i prevodioci


Fakultet organizacionih nauka, 2005.
Oblici identifikatora
 Rezervisana reč: specijalna reč koja se u
programu ne može koristiti kao
identifikator
Primer:
float u C-u koristi se za deklaraciju
promenljive, ali ne i kao ime
promenljive

Programski jezici i prevodioci


Fakultet organizacionih nauka, 2005.
Adresa promenljive
 Adresa promenljive ukazuje na
memorijsku adresu

int myVar;
0x0010
myVar

 Ime promenljive je apstrakcija


memorijske adrese
Programski jezici i prevodioci
Fakultet organizacionih nauka, 2005.
Adresa promenljive
 Promenljiva može da ima različite
adrese na različitim mestima u
programu

Primer:
lokalna promenljiva X deklarisana u dva
različita potprograma

Programski jezici i prevodioci


Fakultet organizacionih nauka, 2005.
Adresa promenljive

 Promenljiva može da ima različite


adrese u različitim vremenima u toku
izvršenja programa
Primer:
• Promenljiva X , deklarisana u
potprogramu, kad god se pozove
potprogram alocira se na različitim
memorijskim adresam ( pr. rekurzivni
pozivi)
Programski jezici i prevodioci
Fakultet organizacionih nauka, 2005.
Adresa promenljive
 Alijasi (aliases): dve ili više
promenljivih koje pristupaju istoj
memorijskoj lokaciji
 Kako se kreiraju alijasi
 Pointeri
 Referentne promenljive
 tip unija (union) – C i C++
 Pascal - variant records

Programski jezici i prevodioci


Fakultet organizacionih nauka, 2005.
Vrednost promenljive

 Vrednost promenljive: sadržaj


lokacije sa kojom je promenljiva
povezana

int myVar = 40;


0x0010
myVar 40

Programski jezici i prevodioci


Fakultet organizacionih nauka, 2005.
Vrednost promenljive

 Promenljiva ima dve vrednosti:


 l-value adresa promenljive (l-left)
 r-value vrednost promenljive (r-right)

myVar = 40;
l-value r-value

Programski jezici i prevodioci


Fakultet organizacionih nauka, 2005.
Tip promenljive
 Tip promenljive definiše
skup vrednosti promenljive i
skup operacija za manipulisanje
vrednostima datog tipa.

 Tip određuje veličinu memorije koja će


biti alocirana

Programski jezici i prevodioci


Fakultet organizacionih nauka, 2005.
Tip promenljive

Primer

C# tip veličina mem. dozvoljene vrednosti

int 4 By [2147483648, 2147483647]

Aritmetičke operacije

Programski jezici i prevodioci


Fakultet organizacionih nauka, 2005.
Tip promenljive

 Jezici obično uključuju predefinisane


tipove
boolean, integer, floating point, character

 Jezici omogućavaju programeru da


definiše novi tip - korisnički definisani
tipovi

Programski jezici i prevodioci


Fakultet organizacionih nauka, 2005.
Koncept povezivanja (Binding)
 Povezivanje (binding)
povezivanje atributa sa nekim
programskim entitetom

 Vreme povezivanja (Binding Time)


vreme uspostavljanja povezivanja

Programski jezici i prevodioci


Fakultet organizacionih nauka, 2005.
Koncept povezivanja
 Vreme povezivanja se može javiti u različitim
fazama životnog ciklusa jezika/ programa:

 Vreme definisanja jezika


 Vreme implementacije jezika
 Vreme pisanja programa
 Vreme kompajliranja programa
 Vreme “linkovanja” (linking time)
 Vreme punjenja (load time)
 Vreme izvršenja (runtime)

Programski jezici i prevodioci


Fakultet organizacionih nauka, 2005.
Koncept povezivanja
 Vreme definisanja jezika
sintaksa i semantika jezika (pr. projektovanje
sintaksnih konstrukcija, povezivanje operatora-
simbola sa operacijom)
 Vreme implementacije jezika
pr. Numericka preciznost, povezivanje “ugradjenih”
tipova sa njihovom reprezentacijom ...
 Vreme pisanja programa
programer bira algoritam i strukture podataka

Programski jezici i prevodioci


Fakultet organizacionih nauka, 2005.
Koncept povezivanja

 Vreme kompajliranja
pr. Povezivanje promenljive sa tipom
 Link time
pr. povezivanje poziva sa funkcijama biblioteka
 Load time
pr. povezivanje promenljive sa memoriskom celijom (
C static promenljiva)
 Vreme izvršenja
povezivanje dinamičkih promenljivih sa
memorijskom ćelijom
Programski jezici i prevodioci
Fakultet organizacionih nauka, 2005.
Koncept povezivanja
Dve vrste povezivanja:
 Statičko, ako se povezivanje
dogodilo pre izvršenja i ostaje
nepromenjeno do kraja izvršavanja
programa
 Dinamičko, ako se povezivanje
dogodilo u vreme izvršenja ili se
može menjati za vreme izvršenja
programa
Programski jezici i prevodioci
Fakultet organizacionih nauka, 2005.
Povezivanje tipa sa promenljivom

 Kako se tip specificira?

Eksplicitna / Implicitna deklaracija

 Kada je uspostavljeno povezivanje?

Kompilacija(Compile time) / Izvršenje (Runtime )

Programski jezici i prevodioci


Fakultet organizacionih nauka, 2005.
Povezivanje tipa sa promenljivom

 Vrsta povezivanja tipa utiče na


implementciju jezika
statičko  kompilacija
dinamičko  interpretacija

Programski jezici i prevodioci


Fakultet organizacionih nauka, 2005.
Statičko povezivanje tipa sa
promenljivom
 Ako je statičko povezivanje, tip
promenljive se specificira pomoću

eksplicitne / implicitne deklaracije

Programski jezici i prevodioci


Fakultet organizacionih nauka, 2005.
Statičko povezivanje tipa sa
promenljivom
 Eksplicitna deklaracija je programski
izraz koji se koristi za deklaraciju tipa
promenljive
Primer
x : integer; Pascal

int x; C++/Java/C#

Programski jezici i prevodioci


Fakultet organizacionih nauka, 2005.
Statičko povezivanje tipa sa
promenljivom
 Implicitna deklaracija je “default”
mehanizam za specifikaciju tipa
promenljive
 Inicijalno projektovana u FORTRAN-u
Imena promenljivih koja počinju slovima I-N
su celobrojnog tipa, inače su realnog tipa
 FORTRAN, PL/I, BASIC, PERL

Programski jezici i prevodioci


Fakultet organizacionih nauka, 2005.
Dinamičko povezivanje tipa sa
promenljivom
 Specificira se preko instrukcije
dodeljivanja ( i tip promenljive se može
menjati)
Primer: JavaScript
list = [2 4 6 8]; lista dužine 4

list = 17.3; float

 APL, SNOBOL, JavaScript


Programski jezici i prevodioci
Fakultet organizacionih nauka, 2005.
Dinamičko povezivanje tipa sa
promenljivom
 Prednost:
fleksibilnost (generički programski unit-i)

 Nedostaci:
 Visoka cena
• dinamička provera tipa
• za promenljivu koja memoriše vrednosti
različitih tipova zahtevaju se različite veličine
memorije
• vreme intrepretacije
 Loša detekcije grešaka tipa

Programski jezici i prevodioci


Fakultet organizacionih nauka, 2005.
Provera tipa (Type Checking)
 Provera tipa: aktivnost koja
obezbeđuje primenu operatora na
oprende kompatibilnih tipova

 Kompatibilan tip je onaj koji je ili


 legalan za operator ili
 se konvertuje (implicitno ili
eksplicitno) u legalan tip

Programski jezici i prevodioci


Fakultet organizacionih nauka, 2005.
Provera tipa
Primer u C#:
 Eksplicitna konverzija long u int:
long longValue = Int64.MaxValue;
int intValue = (int) longValue;
rezutat?
 Implicitna (automatska) konverzija int u
long:
int intValue = 123;
long longValue = intValue;
Programski jezici i prevodioci
Fakultet organizacionih nauka, 2005.
Provera tipa

 Greška tipa (type error) - primena operatora


na operand nekompatibilnog tipa
 Ako su promenljive statički povezane sa
tipom, obično je provera tipa statička
 Detekcija grešaka tipa za vreme kompilacije -
manje košta, ali je i manje fleksibilna
 Statička provera tipa je otežana u slučaju kada
jezik dozvoljava da promenljiva memoriše
vrednost različitih tipova u različitim vremenima
izvršavanja ( pr. union u C i C++)

Programski jezici i prevodioci


Fakultet organizacionih nauka, 2005.
Provera tipa

 Dinamičko povezivanje tipa zahteva


dinamičku proveru tipa
 APL i JavaScript dozvoljavaju samo
dinamičku proveru tipa

Programski jezici i prevodioci


Fakultet organizacionih nauka, 2005.
Strogo tipizirani jezici
 Strogo tipiziran jezik - ako se greške
tipa uvek detektuju

 zahteva se detektovanje grešaka tipa ili u


vreme kompilacije ili u vreme izvršenja
 provera tipa se vrši u toku izvršenja
programa za promenljive koje mogu da
memorišu vrednosti više od jednog tipa

Programski jezici i prevodioci


Fakultet organizacionih nauka, 2005.
Životni vek promenljive i memorijsko
povezivanje
 Životni vek promenljive
vreme vezivanja promenljive za određenu
memorijsku ćeliju, u toku izvršavanja
programa Koliko dugo?
 Memorijsko povezivanje
povezivanje promenljive sa memorijskom
ćelijom
 Alokacija Kada?
 Dealokacija

Programski jezici i prevodioci


Fakultet organizacionih nauka, 2005.
Kategorije promenljivih (prema životnom
veku)
 Statička

 Stack-dinamička

 Eksplicitna heap-dinamička

 Implicitna heap-dinamička
Programski jezici i prevodioci
Fakultet organizacionih nauka, 2005.
Statička promenljiva
 Povezivanje promenljive sa memorijskom
ćelijom pre početka izvršenja i ostaje vezana
za istu memorijsku ćeliju do kraja izvršenja
programa

 Statičko povezivanje promenljive sa tipom i


memorijskom lokacijom

Programski jezici i prevodioci


Fakultet organizacionih nauka, 2005.
Statička promenljiva

Primer: static promenljive u C i C++


funkcijama

void fun() {
static int x;
int y = 0;

}

Životni vek prom x = vreme izvršenja programa

Programski jezici i prevodioci


Fakultet organizacionih nauka, 2005.
Statička promenljiva

 Prednost:
 efikasnost (direktno adresiranje)
 Nedostaci:
 nefleksibilnost (nije podžana rekurzija)
 memorija nije deljiva između promenljivih

Programski jezici i prevodioci


Fakultet organizacionih nauka, 2005.
Stack-dinamička promenljiva
 Memorijsko povezivanje se kreira za stack-
dinamičku promenljivu kada je elaborirana
deklaracija promenljive (vreme izvršenja )

 U C++, Java i C# promenljive koje su


deklarisane u metodama su po “default”-u
stack-dinamičke;
 lokalne promenljive deklarisane u C i C++
funkcijama su stack-dinamičke

Programski jezici i prevodioci


Fakultet organizacionih nauka, 2005.
Stack-dinamička promenljiva

 životni vek stack-dinamičke promenljive =


vreme izvršenja funkcije (metode)

 Povezivanje promenljive sa tipom je statičko,


sa mem. lokacijom dinamičko

 Meorija za promenljivu alocira se na run-time


stack-u
LIFO (last-in, first-out) alokacija/dealokacija
Programski jezici i prevodioci
Fakultet organizacionih nauka, 2005.
Dinamička memorija: Run-time stack

program main( ) a( ) b( ) c( )
code segments

activation
record for c()
constants
activation record
for b()
heap
activation
record for a()

activation record for


main()

stack

Programski jezici i prevodioci


Fakultet organizacionih nauka, 2005.
Stack-dinamička promenljiva
 Prednosti:
 Podržana rekurzija
 Ponovno korišćenje memorije

 Nedostaci:
 Neefikasno referenciranje (indirektno
adresiranje)

Programski jezici i prevodioci


Fakultet organizacionih nauka, 2005.
Eksplicitna heap-dinamička
promenljiva
 Alokacija i dealokacija memorije za ekplicitnu
heap-dinamičku promenljivu vrši se za vreme
izvrašavanja programa na osnovu eksplicitnih
direktiva, koje specificira programer
 Dinamičke promenljive alociraju se i
dealociraju na heap-u i referenciraju se samo
preko pointera ili referentnih promenljivih

pointer A

heap-dinamička promenljiva

Programski jezici i prevodioci


Fakultet organizacionih nauka, 2005.
Eksplicitna heap-dinamička
promenljiva
 Statičko povezivanje sa tipom,
dinamičko sa mem. Lokacijom

 Koriste se za implementaciju
dinamičkih struktura podataka
 liste,
 stabla,
 grafovi

Programski jezici i prevodioci


Fakultet organizacionih nauka, 2005.
Organizacija dinamičke heap memorije

Programski jezici i prevodioci


Fakultet organizacionih nauka, 2005.
Eksplicitna heap-dinamička
promenljiva
Primer heap-dinamičke promenljive u C++:

int *intcvor; /* Kreira se heap-dinamička


promenljiva tipa int; promenljiva se
intcvor = new int; referencira preko pointera intcvor */

delete intcvor; /* Dealokacija promenljive */

• Pointer ukazuje na memorijsku adresu


• Eksplicitna dealokacija heap-dinamičke
promenljive (operator delete)
Programski jezici i prevodioci
Fakultet organizacionih nauka, 2005.
Eksplicitna heap-dinamička promenljiva

int * ptr1 = new int;


*ptr1 = 99;

int * ptr2 = new int;


*ptr2 = 33;

delete ptr1;

Programski jezici i prevodioci


Fakultet organizacionih nauka, 2005.
Eksplicitna heap-dinamička
promenljiva
 Problem Dangling reference (dangling
pointer)
pointer koji sadrži adresu heap-dinamičke
promenljive koja je dealocirana

 Primer

A A B A null B

Programski jezici i prevodioci


Fakultet organizacionih nauka, 2005.
Eksplicitna heap-dinamička
promenljiva
 Problem “Lost” heap-dinamička promenljiva
alocirana promenljiva kojoj se ne može
pristupiti (tzv. garbage promenljiva)
 Ovaj problem dele jezici u kojima se zahteva
eksplicitna dealokacija heap-dinamičke
promenljive

 Primer
A A

Programski jezici i prevodioci


Fakultet organizacionih nauka, 2005.
Eksplicitna heap-dinamička
promenljiva
 Java
 Objekti su heap-dinamički i pristupa im se preko
referentnih promenljivih
 Implicitna dealokacija (garbage collection)

 C#
 Referentne promenljive, implicitna dealokacija
 Pointeri (interoperabilnost sa C i C++ kodom)

Programski jezici i prevodioci


Fakultet organizacionih nauka, 2005.
Eksplicitna heap-dinamička
promenljiva
Primer:
class Pravougaonik {
private int lokacijaX, lokacijaY, sirina, visina; // atritbuti

public Pravougaonik (int x, int y, int s, int v) // konstruktor


{ lokacijaX = x; lokacijaY; sirina = s; visina = h; }

public void Pomeri( int deltaX, int deltaY) // metoda


{ lokacijaX = lokacijaX + deltaX;
lokacijaY = lokacijaY + deltaY;
}
}

Programski jezici i prevodioci


Fakultet organizacionih nauka, 2005.
Alociranje heap-dinamičkih objekata
Pravougaonik p = new Pravougaonik( 10, 20, 5, 5);
Pravougaonik q = new Pravougaonik( 15, 25, 5, 8);

p
10
20
q 5
5

15 Class Pravougaonik
25 Pravougaonik constructor

5 Pomeri
metoda
8 ...

...

Programski jezici i prevodioci


Fakultet organizacionih nauka, 2005.
Eksplicitna heap-dinamička
promenljiva
• Prednosti
 dinamičko upravljanje memorijom
• Nedostaci
 Neefikasnot
 povećavaju složenost programiranja
• dangling reference problem
• garbage promenljiva - u slučaju eksplicitne
dealokacije

Programski jezici i prevodioci


Fakultet organizacionih nauka, 2005.
Implicitna heap-dinamička
promenljiva
 Alokacija i dealokacija uzrokovane
operacijom dodeljivanja (run-time)

 Dinamičko povezivanje promenljive sa tipom i


memorijskom lokacijom

 Primer:
Svi stringovi i nizovi u PERL i JavaScript

Programski jezici i prevodioci


Fakultet organizacionih nauka, 2005.
Implicitna heap-dinamička
promenljiva
 Prednosti
 Velika fleksibilnost
 transparentni za korisnika (reduciraju
složenost programiranja)
 Nedostaci
 Neefikasnost, (svi atributi se dinamički
povezuju)
 Loša detekcija grešaka tipa

Programski jezici i prevodioci


Fakultet organizacionih nauka, 2005.
Doseg promenljive

 Doseg promenljive (scope)


segment koda programa u kome je
promenljiva poznata i može se
koristiti
 Promenljiva je vidljiva (visible) u svom
dosegu, a skrivena (hidden) izvan
dosega
 Doseg je prostorna osobina promenljive
Programski jezici i prevodioci
Fakultet organizacionih nauka, 2005.
Doseg promenljive
 Pravila dosega jezika određuju kako se
imena koja se javljaju u potprogramu
povezuju sa deklaracijama promenljivih koje
nisu date u tekućem izvršnom potprogramu
 Lokalna promenljiva
vidljiva u potprogramu ili bloku u kojem je
deklarisana
 Nelokalna promenljiva
vidljiva u potprogramu ili bloku u kome nije
deklarisana

Programski jezici i prevodioci


Fakultet organizacionih nauka, 2005.
Doseg promenljive

Promenljiva se povezuje sa
dosegom:
 Statički
 Dinamički

Programski jezici i prevodioci


Fakultet organizacionih nauka, 2005.
Statički doseg

Statički doseg se definiše u terminima


leksičke strukture programa
 Doseg promenljive se statički
određuje, pre izvršenja programa
(vreme kompajliranja)

Programski jezici i prevodioci


Fakultet organizacionih nauka, 2005.
Statički doseg
Dve kategorije programskih jezika (koje
određuje metoda za kreiranje statičkog
dosega):
 PJ u kojima je dozvoljeno ugnježdavanje
potprograma
(primer: Pascal, Ada, JavaScript)
 PJ u kojima se ugnježdeni dosezi kreiraju
samo pomoću ugnježdavanja definicija
klasa i blokova
( primer: C++, Java, C# )

Programski jezici i prevodioci


Fakultet organizacionih nauka, 2005.
Statički doseg(ugnježdavanje potprograma)

Za povezivanje imena sa promenljivom,


kompajler mora da nađe deklaraciju
promenljive
Statički sledbenici potp1
Statički otac potp2
potp3
Deklaracija se prvo pretražuje
lokalno, zatim u najbližem
dosegu sledbeniku (ocu) itd.

Programski jezici i prevodioci


Fakultet organizacionih nauka, 2005.
Statički doseg(ugnježdavanje potprograma -
primer)
program MAIN;
var a : integer;
procedure P1; MAIN
begin
writeln ( a );
end; { P1}
procedure P2;
var a : integer; P1 P2
begin
a := 0;
P1;
nd; {P2} Povezivanje nelokalnih promenljivih sa
begin deklaracijama zasniva se na leksičkoj
a := 7; strukturi programa.
P2;
Rezultat writeln 7
end. { MAIN}

Programski jezici i prevodioci


Fakultet organizacionih nauka, 2005.
Statički doseg (blok)

 Blok - metoda za kreiranje statičkog


dosega u programskom unit-u

 Blok je sekcija koda u kojoj se lokalne


promenljive alociraju/dealociraju na
početku/kraju bloka
 ALGOL 60 inicijalno uvodi blok

Programski jezici i prevodioci


Fakultet organizacionih nauka, 2005.
Statički doseg (blok)
Primeri ugnježdavanja blokova u C#:
{ int i ; { int i ; { int i ;
Greska u
{ { { C#, ali ne
i u C++ !
int j ; int j ; int i ;
} } }
} j = 25; }
} Greska!

for (int i = 0 ; i < 10 ; i = i + 1 ) {


Console.WriteLine ( "Hello") ;}

Programski jezici i prevodioci


Fakultet organizacionih nauka, 2005.
Statički doseg
Napredna rešenja za problem ogranizovanja
slozenih i velikih programa su inkapsulacione
konstrukcije:
 Klasa
 Packages (Java)
Imenovane
 Namespaces (C#, XML) inkapsulacije

Imenovana inkapsulacija koristi se za


kreiranje novog dosega za promenlji
Programski jezici i prevodioci
Fakultet organizacionih nauka, 2005.
Dinamički doseg
 Dinamički doseg definiše doseg
promenljive u terminima izvršavanja
programa
 Dinamički doseg se zasniva se na
sekvenci poziva potprograma
Za povezivanje imena sa deklracijama
promenljivih pretražuje se sekvenca poziva
potrograma;
pretraživanje počinje od poslednjeg
pozvanog potprograma (princip stack-a)

Programski jezici i prevodioci


Fakultet organizacionih nauka, 2005.
Dinamički doseg (primer)
program MAIN;
var a : integer;
procedure P1;
MAIN
begin
writeln ( a );
end; { P1} P2
procedure P2;
var a : integer;
begin
P1
a := 0;
P1;
nd; {P2} Povezivanje nelokalnih promenljivih sa
begin deklaracijam zasniva se na sekvenci
a := 7; poziva potprograma
P2;
end. { MAIN}
Rezultat writeln 0

Programski jezici i prevodioci


Fakultet organizacionih nauka, 2005.
Životni vek i doseg promenljive
 Često povezani, ali različiti koncepti
 Primer: static promenljiva u C i C++ funkciji
void fun() {
static int x = 0;
int y = 0;

}
 Doseg prom. x od deklaracije do kraja bloka
funkcije
 Životni vek prom. x = vreme izvršenja programa
 Životni vek prom. y = vreme izvršenja funkcije

Programski jezici i prevodioci


Fakultet organizacionih nauka, 2005.
Elementarni tipovi podataka

 Primitivnitipovi
 Prosti korisnički definisani tipovi

Programski jezici i prevodioci


Fakultet organizacionih nauka, 2005.
Primitivni tipovi

 Nisu definisani u terminima drugih tipova


 Predifinisani naziv tipa
 Predefinisani skup vrednosti
 Predefinisani skup operacija
 Celobrojni tip
 Realni tip
 Logički tip
 Znakovni tip

Programski jezici i prevodioci


Fakultet organizacionih nauka, 2005.
Celobrojni tip (Integer type)
 Podskup skupa celih brojeva

 Programski jezici podražavaju različite


dužine celih brojeva, na primer:
byte (8 bitova), short (16 bitova), int (32 bitova)
long (64 bitova)
i koji se mogu označiti kao unsigned ili signed

 Na primer, Java podržava četiri različite dužine


“signed” celih bojeva: byte, short, int i long.

Programski jezici i prevodioci


Fakultet organizacionih nauka, 2005.
Celobrojni tip
Celobrojni tipovi u C#:

 sbyte data type - 8-bit signed integer


 byte data type - 8-bit unsigned integer.
 short data type - 16-bit signed integer.
 ushort data type - 16-bit unsigned integer.
 int data type - 32-bit signed integer.
 uint - 32-bit unsigned integer.
 long data type - 64-bit signed integer.
 ulong - 64-bit unsigned integer.

Programski jezici i prevodioci


Fakultet organizacionih nauka, 2005.
Celobrojni tip (Integer type)

 Interna reprezentacija celobrojnih vrednosti


 binarna, hardverski podržana

– Korišćenjem sign bit-a

– One complement Sign bit Integer bits


– Two complement

Programski jezici i prevodioci


Fakultet organizacionih nauka, 2005.
Realni tip (Floating point data type)

 Model realnih brojeva, ali reprezentacije su


samo aproksimativne za većinu realnih
vrednosti

 Programski jezici obično podržavaju bar dva


tipa realnih brojeva
 Float (realni broj sa jednostrukom tačnošću)
 Double (realni broj sa dvostrukom tačnošću)

Programski jezici i prevodioci


Fakultet organizacionih nauka, 2005.
Realni tip (Floating point data type)

 Interna reprezentacija realnih vrednosti:


mantisa i eksponent
3E2 = 3x10 = 300
3E-2 = 3x10 = 0.03

Većina novih računara koristi IEEE Floating-


Point Standard format za reprezentovanje
realnih brojeva

Programski jezici i prevodioci


Fakultet organizacionih nauka, 2005.
Realni tip (Floating point data type)
IEEE Floating-point format: jednostruka i dvostruka
preciznost
8 bits 23 bits
exponent mantissa

sign bit

11 bits 52 bits
exponent mantissa

sign bit

Programski jezici i prevodioci


Fakultet organizacionih nauka, 2005.
Znakovni tip (Character type)

 Konačan i uređen skup znakova


 Interna reprezentacija:
Karakteri se reprezentuju kombinacijom
bitova u binarni kod (Binary code)

Programski jezici i prevodioci


Fakultet organizacionih nauka, 2005.
Znakovni tip (Character type)

 BCD code (Binary coded decimal)


4- bitni kod - koristi se za reprezentovanje
jedne decimalne cifre

BCD code se koristi se u poslovnim


(finansijskim) aplikacijama
(COBOL, Decimal Type u C#)

Programski jezici i prevodioci


Fakultet organizacionih nauka, 2005.
Znakovni tip (Character type)

 ASCII code (American Standard Code for


Information Interchange)
8-bitni kod (128 različitih znakova)

 Unicode
16- bitni kod (256 različitih znakova)
( Java, C# )

Programski jezici i prevodioci


Fakultet organizacionih nauka, 2005.
Logički tip (Boolean type)

 Samo dve vrednosti tipa: true i false


 Svi jezici ne podržavaju logički tip (na primer
Perl i C)
 Logički tip je prvi put uveden u programskom
jeziku ALGOL 60
 Hardverska implementacija
Tipična implementacija logičke vrednosti je jedan
byte.

Programski jezici i prevodioci


Fakultet organizacionih nauka, 2005.
Prosti korisnički definisani tipovi

 Nabrajući tip (Enumeration Type)

 Podintervalni tip (Subrange Type)

Programski jezici i prevodioci


Fakultet organizacionih nauka, 2005.
Nabrajajući tip (Enumeration Type)

 Nabrajajući tip definiše uređeni skup


vrednosti, koje su imenovane konstante

 Nabrajajući tip obezbeđuje način za


organizovanje i grupisanje imenovanih
konstanti

 Imenovanim konstantama implicitno se


dodeljuju celobrojne vrednosti (0, 1, …), ali
moguća su i ekplicitna dodeljivanja

Programski jezici i prevodioci


Fakultet organizacionih nauka, 2005.
Nabrajajući tip (Enumeration Type)
Primeri:
• Pascal
type colortype = (red, blue, green, yellow, black);
var color : colortype;

color := blue;
• C++
enum colors (red, blue, green, yellow, black);
colors myColor = blue;
• C#
enum colors {red, blue, green, yellow, black};
• Java - ne uključuje nabr. tip, ali obezbeđuje Enumeration interface
class colors {
public final int red = 0;
public final int blue = 1;
}

Programski jezici i prevodioci


Fakultet organizacionih nauka, 2005.
Podintervalni tip (Subrange Type)

 Podintervalni tip definiše podintervalne


vrednosti drugog primitivnog i nabarajajućeg
tipa
 Definiše se pomoću gornje i donje granice
 Prvi put uveden u programskom jeziku
Pascal
Primer: type pozitivan = 0 .. MAXINT;

Programski jezici i prevodioci


Fakultet organizacionih nauka, 2005.

You might also like