[go: up one dir, main page]

0% found this document useful (0 votes)
126 views80 pages

Program Skis Ve

The document is a lecture on programming languages. It covers topics like lower-level vs higher-level languages, factors that influenced language development like application domains and computer architectures, fundamental concepts of languages like abstractions and paradigms, and criteria for evaluating languages like readability and learnability. The document provides definitions and examples to explain key programming language concepts in detail.

Uploaded by

darkmint
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
126 views80 pages

Program Skis Ve

The document is a lecture on programming languages. It covers topics like lower-level vs higher-level languages, factors that influenced language development like application domains and computer architectures, fundamental concepts of languages like abstractions and paradigms, and criteria for evaluating languages like readability and learnability. The document provides definitions and examples to explain key programming language concepts in detail.

Uploaded by

darkmint
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 80

By LadyBrune

Skripta iz predmeta
Programski Jezici
By LadyBrune

Sadraj :
1. Uvod u programske jezike ..1
2. Sintaksa programskih jezika7
3. Bazne apstrakcije Prvi deo...12
4. Bazne apstrakcije Drugi deo.16
5. Bazne apstrakcije Trei deo.......22
6. Proceduralne apstrakcije26
7. Implementacija progamskih jezika ...30
8. Apstrakcija podataka Prvi deo ..40
9. Apstrakcija podataka Drugi deo...42
10.Uvod u markup jezike .47
11. Procesiranje XML dokumenata ..54
12.MS implementacija W3C XML standarda..60
13.Jezike paradigme ...62.
14.Rad sa XML dokumentima u .NET okruzenju 66
15. .NET Framework 73
By LadyBrune

1. Uvod u programske jezike

Nii i vii programski jezici

Nii (mainski zavisni jezici)


o Mainski kod je efikasan, ali izuzetno teak sa itanje, pisanje i modifikovanje
o Nije portabilan
Vii (mainski nezavisni jezici)
o Kod viih PJ kod je razumljiv i lak za itanje i pisanje ; programiranje postaje
produktivnije
o Skrivanje detalja stvarne maine
o Prvi VPJ zasnovan na kompajleru razvijen je polovinom pedetih godina prolog veka

Uvod

Znaajni uticaji na razvoj razliitih programskih jezika

I. Aplikacioni domeni
II. Metode programiranja
III. Kompjuterske arhitekture

I ) Aplikacioni domeni PJ : Razvijen veliki broj vrlo razliitih jezika za razliite aplikacione domene. Svaki
aplikacioni domen ima specifine potrebe

Inenjerski domen
o Proste strukture podataka (nizovi i matrice), ali se zato zahteva veliki broj preciznih
numerikih raunanja : FORTRAN-projektovan za precizna numerika izraunavanja
Poslovni domen
o Prvi vii programski jezik projektovan za poslovnu obradu podataka bio je COBOL :
Kasnije su razvijeni sistemi za upravljanje bazama podataka
Vetaka inteligencija
o Korienje simbola (umesto numerikih raunanja), logiki I funkcionalni jezici
Sistemsko programiranje
o Koristi se za sistemski softver
o Zahteva se efikasnost u izvravanju, zbog neprekidnog korienja ove vrste softvera
o Operativni sistem UNIX napisan u programskom jeziku C
Internet i WEB(domensko-specifini jezici) veoma aktuelan domen; ovo distribuirano I
heterogeno okruenje uticalo je na razvoj novih specifinih jezika koji su posebno pogodni za
njega

1
By LadyBrune

o WEB script jezici (JavaScript, PHP, CSS)


o Markup jezici (HTML, XML)

II) Metode programiranja

Od 1950 do sredine 60tih godina prolog veka : NEPOSTOJANJE METODA PROGRAMIRANJA


o Proste aplikacije
o Glavna briga efikasnot koda
o Stariji programski jezici: FORTRAN, COBOL
Kraj 60tih I poetak 70tih
o Reducirana cena hardvera, cena razvoja softvera u porastu, efikasnost programera
postaje veoma vana
o Glavna briga produktivnost u programiranju (brzo I )
Strukturno programiranje PRVA METODA PROGRAMIRANJA
o Sistematian pristup razvoju razumljivih I korektnih programa: Poveana razumljivost
I itljivost programa, adekvatnije konzolne strukture
o Razvijen programski jezik Pascal za podrku koncepata strukturnog programiranja
o Proceduralno-orjentisano projektovanje programa
Kraj 70tih: Pomeranje od proceduralno-orjentisanog projektovanja ka projektovanju
zasnovanom na podacima
o Apstrakcija podataka- inkapsulira obradu sa podacima (Apstraktni tip podatka)
o Programski jezik Simula za podrku koncepta apstrakcije podatka
Sredina 80tih: Objektno-orjentisano programiranje
o Apstraktni tip podatka + nasleivanje+polimorfizam
o Smalltalk, C++, Java, C#

III. Kompjuterske arhitekture

Imperativni programski jezici apstrahuju Von-Neumann-ovu arhitekturu

Promenljive reprezentuju memoriju (model memorijskih lokacija)


Instrukcija dodeljivanja za promenu memorijskih vrednosti
Sekvencijalno izvravanje instrukcija

2
By LadyBrune

Fundamentalni koncepti programskih jezika

I. Apstrakcije u viim PJ
a. Bazne apstrakcije
b. Strukturne apstrakcije
c. Proceduralne apstrakcije
d. Apstrakcije podataka
II. Jezike paradigme
III. Specifikacija I implemetacija PJ

Bazne apstrakcije:
o Apstrahovanje memorijskih elija,
o Apstrahovanje interne reprezentacije primitivnih tipova podataka
o I Apstrahovanje implementacije operacija nad vrednostima takvih tipova
Strukturne apstrakcije
o Struktuirani tipovi podataka (apstrahovanje kolekcija meusobno povezanih podataka
niz, zapis, lista)
o Kontrolne strukture (sekvenca, selekcija, iteracija)
Proceduralne apstrakcije
o Sakrivanje sloenog koda sa prostim interfejsom
o Proceduralne apstrakcije u viim PJ podrane su potprogramima
Apstrakcije podataka
o Sakrivanje interne reprezentacije korisnikih tipova podataka pomou skupa operacija
(javni interfejs) preko kojih se stanja objekata tipa jedino mogu menjati
o Koncept se u savremenim viim PJ implementira preko klase

II) Vrste jezika (jezike paradigme)

Razlike izmeu pojedinih vrsta programskih jezika baziraju sa na modelu, tj, paradigmi koju
podravaju.

Vrste jezika :

a) Imperativni (FORTRAN, COBOL, Pascal, C)


b) Objektno-orjentisani (Smalltalk, C++, Java, C#)
c) Funkcionalni (LISP, Scheme, Haskell)
d) Logiki (Prolog)
e) Domensko-specifini
Web domen: markup jezici, script jezici
Domen relacione baze baze podataka: SQL-Structured Query Language
Domen matematike: MATLAB
Domen sintakse jezika: BNF-Backus-Naur-Form

III) Specifikacija I implementacije programskih jezika

i. Specifikacija
Sintaksa: forma (struktura) programa
Semantika: znaenje programa

3
By LadyBrune

ii. Implementacija
Implementacioni modeli:
Kompajleri
Interpreter
Hibridni implementacioni sistemi

Znaaj izuavanja koncepata programskih jezika i kriterijumi za njihovu evaluaciju

I. Znaaj izuavanja koncepata programskih jezika:


Lake i bre uenje novih jezika
Bolji izbor odgovarajueg jezika za odreeni problem
Novi naini razmiljanja u reavanju odreenog problema
Bolje razumevanje implementacije programskog jezika
Razvoj i implementacija novih jezika
II. Kriterijumi za evaluaciju programskih jezika
itljivost
Lakoa uenja i pisanja
Pouzdanost
Cena

itljivost: je mera koliko je lako itanje i razumevanje programa napisanog u nekom programskom
jeziku. Znaajni faktori koji utiu na lako itanje i razumevanje programa:

Jednostavnost PJ veoma utie na njegovu itljivost. Sledei faktori smanjuju itljivost:


o Veliki broj baznih komponenti jezika (oteano uenje i razumevanje i za autora i sa
itaoca programa)
o Jezik dozvoljava alternativne naine za realizaciju neke konstrukcije : na primer u C++
postoje 4 naina za inkrementiranje celobrojne promenljive, y++, ++y, y+=1 ; y=y+1
Ortogonalnost u programskom jezik znai da se relativno mali broj baznih koncepata mogu
kombinovati pomou konzistentnog skupa pravila
o Nedostatak ortogonalnosti u pj manifestuje se kao veliki broj specijalnih sluajeva
(pravila izuzetaka). Na primer u programskom jeziku C postoji vei broj pravila
izuzetaka, na primer funkcija moe da vraa zapise (structs) ali ne i nizove (arrays),
element zapisa moe da bude bilo kog tipa osim void ili zapisa istog tipa, itd.
o Ortogonalnost je povezana sa jednostavnou jezika. Vea ortogonalnost
podrazumeva i mali broj pravila izuzetaka to ini jezik itljivim i razumljivim
Kontrolne strukture
o Metoda strukturnog programiranja koja se pojavila 1970. bila je reakcija na lou
itljivost uzrokovanu neadekvatnim kontrolnim strukturama (na primer goto
instrukcija) u tadanjim programskim jezicima.
o Danas su kontrolne strukture manje vaan faktor za itljivost jer veina programskih
jezika podrava adekvatne kontrolne strukture
Tipovi i strukture podataka Postojanje adekvatnih mogunosti za definisanje tipova i struktura
podataka u jeziku poveavaju itljivost programa
o Na primer neki jezici koji ne podravaju logiki tip (boolean), umesto njega koriste
celobrojni tip, tj (0,1) vrednosti umesto logikih vrednosti (true, false)
krajListe =1, znaenje nejasno
krajListe=true znaenje je veoma jasno u jezicima koji podravaju logiki tip

4
By LadyBrune

Sintaksa jezika ili struktura elemenata jezika ima znaajan uticaj na itljivost programa.
prosta i nedvosmislena sintaksa: forma koda jasna

Lako uenje i pisanje programa u PJ

Pisanje programa je mera koliko se lako programski jezik moe koristiti za kreiranje programa u
odreenom aplikacionom domenu. Faktori koji utiu na lako uenje i pisanje programa:

Jednostavnost i ortogonalnost jezika


Podrka apstrakcijama. Apstrakcija oznaava mogunost definisanja i korienja
komplikovanih struktura ili operacija na nain koji dozvoljava skrivanje mnogih detalja

Pouzdanost programa: Program je pouzdan ako se izvrava u skladu sa njegovim specifikacijama pod
svim uslovima. Sledee karakteristike imaju znaajan uticaj na pouzdanost programa u datom
programskom jeziku:

Provera tipa (Type checking)


o Provera tipa je testiranje tipa u datom programu, u vreme kompilacije ili za vreme
izvrenja
o Prednost se daje otkrivanju greaka tipa za vreme kompajliranja programa
Obrada greaka (Exception handling)
o Hvatanje greaka u vreme izvravanja programa, preduzimanje korektivnih mera i
nastavljanje izvravanja
o Jezici C++, Java, C# podravaju exception handling
Ograniavanje alijasa (Aliasing)
o Postojanje dve ili vie referenci na istu memorijsku lokaciju.
o Zbog poznate injenice da je aliasing opasna pojava u programskim jezicima i da loe
utie na pouzdanost, ograniava se mogunost korienja alijasa u njima.
itljivost; lakoa uenja i pisanja Programi napisani u jeziku koji ne dozvoljava kriterijume
itljivosti i pisanja programa, reduciraju pouzdanost

Cena

Ukupna cena projektovanja i realizacije programa u neko programskom jeziku je funkcija vie njegovih
karakteristika:

Obuka programera za korienje jezika


o Ovo je funkcija jednostavnosti i ortogonalnosti jezika i iskustva programera
Vreme pisanja programa u datom jeziku
o Ovo je funkcija lakoe pisanja programa u datom jeziku. Cena obuke programera i
pisanja programa moe se znaajno reducirati pomou dobrog programerskog
okruenja
Kompajliranje programa

5
By LadyBrune

Izvravanje programa
Implementacioni sistem jezika
o Jezik iji je implementacioni sistem skup, ima manje anse za ire prihvatanje i
korienje
Pouzdanost
o Loa pouzdanost softvera izuzetno utie na poveanje cene
Odravanje
o Odravanje obuhvata korekcije i modifikacije softvera koji se ve koristi. Primarni uticaj
na cenu odravanja softvera ima itljivost programa.

Programerska okruenja

Programersko okruenje je kolekcija alata koji se koristi u razvoju softvera

Kolekcija moe da sadri samo tekst-editor, linker i kompajler


Ili to moe da bude kolekcija integrisanih alata, tako da se svakom pristupa preko uniformnog
korisnikog interfejsa

Programerska okruenja:

UNIX starije programersko okruenje; grafiki korisniki interfejs bio je glavni nedostatak
JBuilder, Eclipse programerska okruenja koja ukluuju kolekciju integrisanih alata za razvoj
Java aplikacija; pristup alatima preko GUI-a
Microsoft Visual Studio .NET novije softversko razvojno okruenje. Koristi se za razvoj softvera
u jednom od sledeih .NET jezika: C#, Visual BASIC.NET, Jscript, F#, managed C++

6
By LadyBrune

2. Sintaksa programskih jezika

Uvod u sintaksu programskih jezika

Jezik (prirodni ili vetaki) sastoji se od skupa stringova definisanim nad nekim alfabetom
Alfabet je konaan skup karaktera
Alfabet dekadnih cifara: (0,1,2,3,4,5,6,7,8,9,10)
Alfabet malij engleskih slova: (a,b,c,d,...w,x,y,z)
Alfabet programskih jezika: kod veine programskih jezika alfabet ine karakteri iz
ASCII skupa, savremeni jezici kao to su Java i C# koriste UNICODE

String (re) je niz znakova iz nekog alfabeta

Brojevi 1990 i 2013 su rei nad alfabetom dekadnih cifara


Rei begin i end su rei nad engleskim alfabetom malih slova

Rei su osnovni, nedeljivi elementi prirodnih jezika. Postoje:

Razliite vrste rei (imenice, glagoli, ...)


Razliiti oblici rei (padei, pridevi)

Slino vai i u programskim jezicima. Token je najmanja sintaksna jedinica u programu koja ima
znaenje. Tokeni u PJ se klasifikuju kao:

Identifikatori
Rezervisane rei
Operatori
Numerike konstante
Specijalni znaci (zagrade, separatori, ...)

Kako moemo precizno da definiemo stringove (rei) tako da su u jeziku?

Jedan nain je pomou renika jezika koji sadri listu svih rei (stringova) jezika
Drugi nain je pomou skupa pravila za formiranje stringova koji pripadaju nekom jeziku

Na koji nain kombinovati osnovne jezike elemente u ispravne sloenije jezike konstrukcije (reenice)?
Izuavanje programskih jezika, slino izuavanju priprodnih jezika, moe se podeliti na izuavanje:

1. Sintakse, opisuje strukturu (formu) programa u jeziku

7
By LadyBrune

2. Semantike, opisuje znaenje programskih konstrukcija

Postoje dve komponente sintakse programskih jezika:

o Leksika struktura odreuje kako se nizovi karaktera u tekstu programa izdvajaju i


kategoriu u tokene
o Sintaksna struktura odreuje kako se tokeni grupiu u sloenije strukture. esto se
referencira kao gramatika

Formalne metode za opis sintakse programskih jezika


Za opis sintakse programskih jezika koriste se FORMALNE metode specifikacije koje omoguavaju da
se sintaksa definie jasno i nedvosmisleno. Formalne specifikacije su posebno pogodne za
implementaciju programskih jezika. Sintaksa jezika moe se opisati pomou formalizma koji se zove
GRAMATIKA.

Gramatike predstavljaju meta-jezik baziran na formalnoj teoriji koju je razvio lingvista Noam
Chomski, polovinom pedesetih godina prolog veka. Zapravo on je razvio gramatike za etiri vrste
jezika, od kojih se samo dve koriste za opis sintakse programskih jezika:

o Regularne
Najjednostavnija klasa gramatika prema hijerarhiji omskog
Koriste se za opis leksike strukture (tokena) jezika
Regularne gramatike mogu se koristiti za konstrukciju leksikog analizatora
(skenera). Postoje alati za automatsko generisanje skenera na osnovu
regularnih izraza
Regularne gramatike su znaajno slabije u svojim mogunostima u odnosu na
konteksno slobodne gramatike
o Konteksno slobodne gramatike

Regularni izrazi
- leksika specifikacija zadaje se u formalnoj notaciji preko regularnih izraza
- regularni izrazi su abloni (pattern) za prepoznavanje osnovnih leksikih elemenata jezika
(tokena)
- obezbeuju fleksibilne naine za pretraivanje i manipulaciju teksta, koji se baziraju na
ablonima
- prvi put su realizovani u UNIX okruenju
- notacija regularnih izraza prvi put ugraena u tekstualne editore (QED- Quick EDitor), a
kasnije se regularni izrazi iroko koriste i u veem broju UNIX pomonih programa (GREP
Globally search a Regular Expression and Print, expr, vi, lex)
- regularni izrazi koriste se u tekstualnim editorima, alatima za pretraivanje teksta i
programskim jezicima

8
By LadyBrune

- Prost regularni izraz je jedan od sledeih:

* Karakter iz alfabeta je prost regularni izraz koji prepoznaje takav karakter


*prazan string je regularni izraz i oznaava se sa
Sloeniji regularni izrazi formiraju se iz prostijih korienjem operatora:

Ako je R regularni izraz:


o R* prepoznaje nula ili vie ponovljenih R izrara
o R+ prepoznaje jedan ili vie ponovljenih izraza
Ako su R i S regularni izrazi
o RS prepoznaje R iza koga sledi S (konkatenacija)
o R|S prepoznaje ili R ili s (alternativa)

Leksika analiza je faza u procesu translacije programa.

Leksiki analizator (skener) prevodi tekst programa u niz tokena (tj prepoznaje tokene u ulaznom
tekstu, na osnovu zadatih leksikih specifikacija regularnih izraza)

Softverski alati za generisanje leksikog analizatora (skenera):


o Lex (lexical analyser)
o Flex (Fast lexical analyser generator)
o JLex (A lexical analyser generator for Java)

9
By LadyBrune

2) Konteksno slobodne gramatike

Sintaksna struktura jezika opisuje se pomou gramatike koja definie pravila za pisanje
korektnih programa u nekom programskom jeziku
Konteksno-slobodne gramatike (CFG- Contex-free grammars) se koriste za formalni opis
sintakse PJ
CFG obino se zapisuju u BNF (Backus Naur Form) notaciji. To je
o Formalna notacija za opis sintakse jezika
o BNF je meta jezik za programske jezike
o BNF prvi put korien za opis sintakse programskog jezika ALGOL 60

Sintaksa u BNF notaciji se specificira korienjem:

Skupa terminala (tokena)


Skupa netermimala
Skupa produkcionih pravila
Startni simbol (mora da vude neterminal)

Derivacije
Provera da li je ulazni niz tokena u skladu sa zadatom gramatikom moe se realizovati na sledei nain:

Da se polazei od startnog simbola gramatike izvede, u skladu sa gramatikim pravilima, niz


terminala koji je identian ulaznom nizu tokena (derivacija). Navedeni pristup odgovara
silaznom (top-down) parsiranju. Derivacije mogu biti:
o S leva (leftmost) u svakom koraku krajnji levi neterminal u produkcionom pravilu
zamenjuje se sa pravilom koje ga definie (ili jednim od svojih alternativnih pravila)
o S desna (rightmost) u svakom koraku krajnji desni neterminal u produkcionom
pravilu zamenjuje se sa pravilom koje ga definie (ili jednim od svojih alternativnih
pravila)

10
By LadyBrune

Parsna stabla: Drugi nain da se pokae da odreena sintaksna konstrukcija pripada jeziku definisanom
BNF gramatikom je opis izvoenje preko parsnog stabla. Svakom koraku izvoenja odgovara novo
podstablo. Kod silaznog parsiranja parser u toku izvoenja formira niz izvoenja koja se mogu prikazati
u obliku parsnog stabla (parse tree). Atraktivna karakteristika gramatika je da opisuju hijerarhijsku
sintaksnu strukturu jezika. Takve hijerarhijske strukture nazivaju se parsnim stablima.

Primer: derivacija instrukcije dodeljivanja a=b*(a+b) (dat gore)

Sintaksna analiza je faza u procesu translacije u kojoj se proverava da li je program napisan u skladu
sa gramatikom jezika

11
By LadyBrune

Parser (sintaksni analizator) je program koji proverava da li je ulazni niz tokena u skladu sa zadatom
gramatikom ; generie parsno stablo koje reprezentuje sintaksnu strukturu programa

Softverski alati za generisanje parsera :

Yacc (Yet aAnother Compiler-Compiler)


Bison
ANTLR (Another Tool For Language Recognition)-ANTLRWorks razvojno okruenje

3. Bazne apstrakcije u programskim jezicima Prvi deo

Koncept apstrakcije

Koncept apstrakcije je fundamentalan u programiranju i razvoju softvera.


Intelektualni alat koji koristimo u savlaivanju sloenosti i realnih sistema i softverskih
sistema.
Svesno zanemarivanje detalja na nekom nivou apstrakcije kako bi se broj koncepata
redukovao na nivo savladive sloenosti

Apstrakcije koje podravaju programski jezici mogu se klasifikovati u sledee apstraktne nivoe:

I. Bazne apstrakcije
II. Strukturne apstrakcije
III. Proceduralne apstracije
IV. Apstracije podataka

I) Bazne apstrakcije apstrahovanje

Memorijskih elija (promenljive)


Interne reprezentacije primitivnih tipova podataka i implementacije operacija nad
vrednostima takvih tipova (deklaracija promenljive)
Proces raunanja i memorisanje sraunate vrednosti (instrukcija dodeljivanja)

II) Strukturne apstrakcije

Strukture podataka metod za apstrahovanje kolekcije meusobno povezanih podataka

Kontrolne strukture: sekvenca, iteracija, selekcija

12
By LadyBrune

III) Proceduralne apstrakcije

Sakrivanje sloenog koda sa prostim interfejsom


Proceduralne apstrakcije u viim PJ podrane su potprogramima (procedurama i funkcijama)

IV) Apstrakcije podataka

Sakrivanje interne reprezentacije korisnikih tipova podataka pomou skupa operacija (javni
interfejs) preko kojih se stanja objekata tipa jedino mogu menjati
Koncept s eu savremenim viim PJ implementira preko klase

Uvod u bazne apstrakcije

Imperativni jezici apstrahuju Von-Neumann arhitekturu


Jezike apstrakcije za memorijske elije su promenljive

Promenljiva je apstrakcija memorijske elija (memorijskih elija).


Fizika & apstraktna memorijska elija:

Vrednost floating-point tipa zauzina 4by


Na jezikom nivou, to je jedna apstraktna memorijska elija

Atributi promenljive, koji je definiu su:

Identifikatori su korisniki definisana imena


o Koristi se za identifikovanje nekog programskog entiteta (promenljive, tipovi, formalni
parametri, potprogrami, klase, metode, itd)
o U veini programskih jezika imaju slian oblik: string koji sadri slova, cifre i simbole
konektore
o Postoje neke razlike u formi identifikatora
Duina
Konektori
underscore (_) karakter se kao konektor u imenu promenljive iroko
koristio tokom 1970 i 1980; primer: max_ceo_broj
u programskim jezicima C, C++, Java, C# zamenjen je sa tzv
Camel notacijom (maxCeoBroj)
Case Sensivity: u nekim programskim jezicima u identifikatoru se razlikuju mala i
velika slova, tako da su identifikatori u tim jezicima case sensitive
Imena promenljibih MaxBroj, maxbroj i MAXBROJ u jewicima koji su case
sensitive su razliita (C, C++, Java i C# su case sensitive)

13
By LadyBrune

Nedostatak: loa itljivost, imena koja izgledaju vrlo slino zapravo su


razliita, jer identifikuju razliite programske entitete

Rezervisane i kljune rei (reserved words) REZERVISANA RE je specijalna re


koja se u programu NE MOE koristiti kao identifikator
Float u C-u koriste se za deklarciju promenljive, ali ne i kao ime
promenljive

KLJUNA RE (keyword) re koja je specijalna samo u odreenom


kontekstu.

Sve promenljive nemaju ime (anonymous)

Adresa je memorijska adresa sa kojom se promenljiva povezuje


o Isto ime promenljive moe da bude povezano sa razliitim memorisjkim adresama, ako se
takvo ime nalazi na razliitim mestima u programu
o Isto ime promenljive moe da se povezuje sa razliitim adresama u razliitim vremenima
izvrenja programa
Alijasi (aliases) dve ili vie promenljivih koje pristupaju istoj memorijskoj lokaciji. Alijasi se
kreiraju preko pointera i referentnih promenljivih
o Loa itljivost
o Problem Dangling reference
Vrednost je sadraj memorijske lokacije sa kojom je promenljiva povezana

Pointer je promenljiva ija vrednost (r-value) je adresa (l-value) druge promenljive ()


Tip definie skup vrednosti koje promenljiva moe da uzima i skup operacija za manipulisanje
vrednostima datog tipa. Tip odreuje veliinu memorije koja e biti alocirana

14
By LadyBrune

Jezici obino ukljuuju predefinisane tipove (boolean, integer, float, character), ali
omoguavaju programeru da
definie i nove tipove korisniki
definisane tipove

ivotni vek
Doseg

Koncept povezivanja (Binding)

Povezivanje (binding) povezivanje atributa sa programskim entitetom (npr, atributi identifikator,


tip, vrednost povezuju se sa promenljivom kao entitetom)
Vreme povezivanja (Binding Time) vreme uspostavljanja (kreiranja) povezivanja

Povezivanja i vremena povezivanja su vani koncepti za razumevanje semantike programskih jezika.


Vreme i nain na koji se promenljiva povezuje sa svojim atributima je klju za ponaanje
/implementaciju jezika.

Povezivanje se moe javiti u:

Vreme definisanja jezika. Primer: povezivanje operatora-simbola sa odgovarajuom operacijom


(definie znaenje operatora)
Vreme implementacije jezika Primer: povezivanje primitivnih tipova sa njihovom internom
reprezentacijom
Vreme kompajliranja Primeri:
o Povezivanje promenljive sa tipom (u imperativnim i objektno-orjentisanim j.)
o Odreivanje mehanizama alociranja memorije za promenljivu
Vreme linkovanja (Link time) Primer: povezivanje poziva bibliotekih funkcija sa njihovim izvrnim
kodom
Vreme punjenja (Load time) Primer: povezivanje statikih promenljivih (globalne promenljive, C
static promenljive) sa memorijskom lokacijom
Vreme izvrenja (Run time) Primer: povezivanje dinamikih promenljivih sa memorijskom
lokacijom

Povezivanje moe biti:

STATIKO (Static binding, Early bindings times) povezivanje se deava pre izvrenja i ostaje
nepromenjeno do kraja izvravanja programa
o Obezbeuje se vea efikasnost
DINAMIKO (Dynamic binding, Late binding times) povezivanje se deava u vreme izvrenja i moe
se menjati za vreme izvrenja programa
o Obezbeuje se vea fleksibilnost

Povezivanje TIPA sa promenljivom: STATIKO i DINAMIKO

Vrsta povezivanja tipa utie na implementaciju jezika:

Statiko kompilacija

Deava se u vreme kompajliranja


Zahteva se deklaracija tipa promenljive
Statiki tip tip promenljive se ne menja nakon same deklaracije

15
By LadyBrune

Deklaracija tipa u imperativnim i objektnim jezicima moe biti:


o Eksplicitna deklaracija je programski izraz koji se koristi za deklaraciju tipa promenljive u
veini imperativnih i objektno-orjentisanih programskih jezika

o Implicitna deklaracija je default mehanizam za specifikaciju tipa promenljive


Inicijalno projektovana u FORTRAN-u
Imena promenljivih koja poinju slovima I-N su celobrojnog tipa, inae su realnog
Karakteristika starijih programskih jezika (FORTRAN, PL/I, BASIC)

Dinamiko interpretacija

Deava se u vreme izvrenja programa


Ne zahteva se deklaracija tipa promenljive
Dinamiki tip tip promenljive se moe menjati u toku izvrenja programa
Promenljiva se povezuje sa tipom u trenutku izvravanja instrukcije dodeljivanja (dodeljivanje
vrednosti tipa promenljivoj)

Prednost:
o Fleksibilnost
Nedostaci:
o Visoka cena implementacije
Dinamika provera tipa
Zahtevaju se dodatne informacije o tekuem tipu promenljive
Promenljiva memorie vrednosti razliitih tipova u razliitim vremenima
izvravanja programa (zahtevaju se razliite veliine memorije)
Vreme interpretacije
o Loa detekcija greaka tipa

4. Bazne apstrakcije u programskim jezicima Drugi deo

Provera tipa (type checking)

Provera tipa je aktivnost koja obezbeuje primenu operatora na operande kompatibilnih tipova

Operandi: promenljive, izrazi, parametri


Operatori: dodeljivanje, aritmetiki i relacioni operatori, funkcije

Kompatibilan tip je onaj koji je ili

Legalan za operator ili


Se konvertuje (implicitno ili eksplicitno) u legalan tip

16
By LadyBrune

Eksplicitna konverzija izmeu razliitih tipova mora biti specificirana

Greka tipa (type error): primena operatora na operand nekompatibilnog tipa (desna slika)

Statika provera tipa ako su sva povezivanja promenljivih sa tipovima u nekom jeziku statika.

Tipovi svih promenljivih poznati su u vreme kompajliranja i sve greke tipa detektuju se u vreme
kompajliranja
Efikasnost izvrnog koda
U veini savremenih programskih jezika akcenat je na statikoj proveri tipa

Statika provera tipa je oteana kada jezik dozvoljava da se u jednoj promenljivoj memoriu vrednosti
razliitih tipova u razliitim vremenima izvrenja

Primeri jezika u kojima nije mogue sve greke tipa otkriti pomou statike tipa: unija (union) u C i
C++, variant records u Pascal-u

Svrha unije je da postoji samo jedna promenljiva (u datom primeru u) koja moe da sadri vrednosti
razliitih tipova (u primeru to su tipovi string, float, int).

Dinamika provera tipa dinamiko povezivanje sa promenljivom zahteva proveru tipa u vreme izvrenja,
tzv dinamiku proveru tipa

Tipovi promenljivih poznati su samo u vreme izvravanja programa i provera tipa se vri u vreme
izvravanja (run-time) pre svake primene operacija dodeljivanja
Dodatna memorija za informacije o tekuem tipu promenljive
Vreme interpretacije (neefikasnost)
Fleksibilnost

Jezici koji zahtevaju dinamiku proveru tipa: script jezici (Perl, PHP, JavaScript), funkcionalni jezici

ivotni vek promenljive i memorijsko povezivanje

ivotni vek promenljive vreme vezivanja promenljive za odreenu memorijsku lokaciju

Vreme vezivanja je vreme izmeu alokacije i dealokacije memorijske lokacije

Kategorije promenljivih:

Statika
Stack-Dinamika
Eksplicitna heap-dinamika

17
By LadyBrune

Implicitna heap-dinamika

Heap je memorijski segment u kojem se memorijski blokovi mogu alocirati i dealocirati u


proizvoljnim vremenima

Statika promenljiva

Povezivanje promenljive sa memorijskom lokacijom pre poetka izvranje i


Promenljiva ostaje vezana za istu memorijsku lokaciju do kraja programa
Statiko povezivanje promenljive sa tipom
Statika alokacija memorije (promenljiva se jednom alocira)
ivotni vek promenljive = vreme izvrenja programa
Vrednost promenljive je perzistentna od poziva do poziva potprograma (funkcije, procedure,
metode)

Statike promenljive u PJ:

U starijim programskim jezicima (npr FORTRAN ) sve promenljive se statiki alociraju


Static lokalne promenljive u funkcijama C i C++ programskih jezika

18
By LadyBrune

Static promenljive u Java i C#


Prednost: efikasnost (direktno adresiranje)
Nedostaci: smanjena fleksibilnost (nije podrana rekurzija)

Stack-dinamika promenljiva

Za stack-dinamiku promenljivu memorijsko povezivanje (tj povezivanje promenljive sa


memorijskom adresom) kreira se po pozivu funkcije (metode) i prepoznavanju deklaracije
promenljive date u definiciji funkcije (metode)
Memorijsko povezivanje stack-dinamike promenljive uspostavlja se u vreme izvrenja
programa
Povezivanje promenljive sa tipom je statiko
Memorija za promenljivu alocira se na run-time stack-u
o LIFO (last-in, first-out) alokacija/dealokacija
o Alokacija se dogaa uvek kada se pozove funkcija (metoda), a dealokacija kada funkcija
zavri izvravanje
ivotni vek stack-dinamike promenljive = vreme izvrenja funkcije (metode)
Vrednost promenljive nije perzistentna; reinicijalizuje se pri svakom pozivu funkcije (metode)

Prednosti:
o Podrana rekurzija
o Ponovno korienje memorije
Stack-dinamike promenljive u PJ:
o Lokalne promenljive deklarisane u metodama u Java i C#
o Lokalne promenljive deklarisane u C i C++ funkcijama

Heap-dinamika promenljiva

Eksplicitna heap-dinamika promenljiva

Alokacija i dealokacija memorije se vri za vreme izvravanja programa na osnovu eksplicitnih


direktiva, koje specificira programer
o Statiko povezivanje sa tipom, dinamiko sa memorijskom lokacijom
Dinamike promenljive alociraju se i dealociraju na heap-u i referenciraju se samo preko pointera
ili referentnih promenljivih

19
By LadyBrune

Koriste se za implementaciju dinamikih struktura podataka:

Liste
Stabla
Grafovi

Problem Dangling reference (dangling pointer) pointer koji sadri adresu heap-dinamike
promenljive koja je alocirana

Problem Dangling reference javlja se u jezicima u kojima se eksplicitno zahteva dealokacija heap-
dinamike promenljive
Problem Lost heap-dinamika promenljiva alocirana promenljiva kojoj se ne moe pristupiti
(tzv garbage promenljiva)
o Ovaj problem dele jezici u kojima se zahteva eksplicitna dealokacija heap-dinamike
promenljive

Java
o Java objekti su heap-dinamiki i pristupa im se preko referentnih promenljivih
o Dealokacija dinamikih promenljivih je implicitna (automatska)(garbage collection)
C#
o Referentne promenljive, implicitna dealokacija
o Pointeri (interoperabilnost sa C i C++ kodom)

20
By LadyBrune

Karakteristike:

Alocira se na heap-u; alokacija se deava svaki put kada se promenljiva kreira


Vredmost promenljive je prezistentna od poziva do poziva metode
ivotni vek promenljive je vreme izmeu alokacije i dealokacije heap-dinamike promenljive
Prednosti: dinamiko upravljanje memorijom
Nedostaci
o Poveavaju sloenost programiranja
o Dangling reference problem
o Grabage promenljiva u sluaju eksplicitne dealokacije
o Problemi dangling reference i garbage promenljive javljaju se u jezicima u kojima se
eksplicitno zahteva dealokacija heap-dinamike promenljive

Implicitna heap-dinamika promenljiva

Implicitna alokacija i dealokacija uzrokovavana operacijom dodeljivanja (u vreme izvrenja


programa)
Dinamiko povezivanje promenljive sa tipom i memorijskom lokacijom (programski jezici: PERL,
JavaScript, PHP)
Prednosti:
o Velika fleksibilnost
o Transparentna za korisnika (reduciranje sloenosti programiranja)
Nedostaci:
o Neefikasnost, (svi atributi se dinamiki povezuju)
o Loa detekcija greaka tipa

21
By LadyBrune

5. Bazne apstrakcije u programskim jezicima Trei deo


Koncept dosega promenljive (SCOPE)
Doseg promenljive je segment koda programa u kome je promenljiva poznata i moe se koristiti.
Pravila dosega jezika odreuju kako se pojavljivanja imena promenljivih u programu povezuju sa
deklaracijama promenljivih.
Lokalna promenljiva, vidljiva u dosegu u kome je i deklarisana
Nelokalna promenljiva, vidljiva u dosegu u kome nije deklarisana

Doseg je prostorna osobina promenljive. Promenljiva se povezuke sa dosegom:

Statiki
Dinamiki

Statiki doseg (leksiki doseg) bazira se na tekstu programa i definie se u terminima leksike
strukture programa. Doseg promenljive se statiki odreuje, pre izvrenja programa (vreme
kompajliranja). Postoje dve kategorije programskih jezika, koje odreuje metoda za kreiranje statikog
dosega:

PJ u kojima je dozvoljeno ugnjedavanje potprograma (Pascal, Ada, JavaScript)


PJ u kojima se ugnjedenu dosezi kreiraju samo pomou ugnedavanja definicija klasa i blokova
(C++, Java, C#)

Ugnjedavanje potprograma u ovoj


metodi povezivanje promenljive sa
deklaracijom vri se tako to kompajler
pronalazi deklaraciju promenljive

Blok: metoda za kreiranje statikog


dosega u programskom unit-u. Blok je
sekcija koda u kojoj se lokalne
promenljive alociraju/dealociraju na
poetku/kraju bloka
ALGOL 60 inicijalno uveden
blok

22
By LadyBrune

Napredna reenja za problem organizovanja sloenih programa su inkapsulacione konstrukcije


o Klasa
o Packages (Java)
o Namespaces (C++, C#, XML)
Imenovana inkapsulacija koristi se za kreiranje novog dosega za promenljivu

Dinamiki doseg definie doseg promenljive u terminima izvravanja programa.


APL (A Programming Language), Snobol (StriNg Oriented and symBOlic Language), Perl (Practical
Extraction and Report Language)
Dinamiki doseg se zasniva na sekvenci poziva potprograma
o za povezivanje promenljivih sa njihovim deklaracijama pretrauje se sekvenca poziva
potprograma;
o pretaivanje poinje od poslednjeg pozvanog potprograma (princip stack-a)
Programi napisani u jezicima sa dinamikim dosegom imaju lou itljivost i teko ih je odravati

ivotni vek i doseg promenljive


esto povezani, ali razliiti koncepti
Doseg prom. x i z je od deklaracije do kraja bloka funkcije
ivotni vek promenljive x= vreme izvrenja programa
ivotni vek promenljive y= vreme izvrenja funkcije

Elementarni tipovi podataka


Primitivni tipovi
Prosti korisniki definisani tipovi

Primitivni tipovi

Nisu definisani u terminima drugih tipova


Predefinisani naziv tipa
Predefinisani skup vrednost
Predefinisani skup operacija

23
By LadyBrune

Primitivni tipovi:
o Celobrojni tip (Integer type)
Podskup skupa celih brojeva
Interna reprezentacija: binarna, hardverski podrana
Programski jezici podravaju razliite duine celih brojeva i u nekim PJ se
mogu oznaiti kao unsigned ili signed
Java podrava 4 razliite duine signed celih brojeva
Byte (8 bitova)
Short (16 bitova)
Int (32 bitova)
Long (64 bitova)
Celobrojni tip u C#
Sbyte
Byte
Short
Ushort
Int
Uint
Long
ulong
o Realni tip (Floating point data type)
Model realnih brojeva, ali reprezentacije su samo aproksimacije za realne
vrednosti
Veina programskih jezika obino podravaju dve vrste realnih brojeva
Float (realni broj sa jednostrukom tanou, 4by)
Double (realni broj sa dvostrukom tanou, 8by)
Interna reprezentacija realnih vrednosti preko mantise i eksponenta
veina novih raunara koristi IEEE Floating-
Point Standard format za prezentovanje
realnih brojeva

o Logiki tip (Boolean type)


Samo 2 vrednosti tipa: true i false
Svi jezici ne podravaju logiki tip (npr Perl i C)
Logiki tip je prvi put uveden u programskom jeziku ALGOL 60
Interna reprezentacija: tipina implemetacija logike vrednosti je jedan
byte
itljivost
o Znakovni tip (Character type)
Konaan i ureen skup znakova

24
By LadyBrune

Interna reprezentacija: karakteri se reprezentuju kombinacijom bitova u


binarni kod (Binary code)
BDC
ASCII
UNICODE
BCD code (Bynary coded decimal) 4bitni kod.
ASCII code (Americam standard code for informaion interchange) 8-bitni kod (256 razliitih znakova),
koristi se u veini pj
UNICODE 16-bitni kod: Java, JavaScript, C#

Prosti korisniki definisani tipovi


Nabrajajui tip (enumeration type)
Podintervalni tip (subrange type)

Nabrajajui tip definie ureeni skup vrednosti, koje su imenovane konstante. Obezbeuje nain za
organizovanje i grupisanje imenovanih konstanti. Imenovanim konstantama implicitno se dodeljuju
celobrojne vrednosti (0, 1, ), ali mogua su i eksplicitna dodeljivanja.

Pascal type colortype=(red, blue, green, yellow, black) ;


var color:colortype;
color:=blue,
C++ enum colors (red, blue, green. Yellow, black;)
colors myColors=blue;
C# enum colors {red, blue, green. Yellow, black;}
colors a=colors.blue;
Podintervalni tip definie podintervalne vrednosti drugog primitivnog ili nabrajajueg tipa. Definie se
pomou gornje i donje granice. Prvi put uveden u programskom jeziku Pascal, korien u pj Ada
type pozitivan=0 ..MAXINT;

25
By LadyBrune

6. Proceduralne apstrakcije
Uvod u proceduralne apstrakcije
Dve vane vrste apstrakcija koje podravaju programski jezici su:
Proceduralne apstrakcije
Apstrakcije podataka

Stariji koncept od koncepta apstakcije podataka. Proceduralne apstrakcije sakrivaju sloenost koda sa
prostim interfejsom. Koncept je podran u gotovo svim viim programskim jezicima preko
potprograma.

Poziv potprograma eksplicitan zahtev za izvrenje potprograma.

Potprogram

Inkapsulira algoritam i lokalne promenljive


o Inkapsulacija: odvajanje specifikacije potprograma od njegove implementacije
Korisnik koristi potprogram preko interfejsa potprograma bez poznavanja detalja kako je
potprogram implementiram ()skrivanje informacija
Potprogam je mehanizam koji omoguava viestuko korienje jednom napisanog i
kompajliranog koda (code reuse)
Podrava modularnost
Definicija potprograma
o Zaglavlje potprograma opisuje interfejs potprograma
o Telo potprograma sadri deklaracije lokalnih promenljivih i algoritam

Zaglavlje (header) potprograma specificira

Vrstu potprograma
Ime potprograma
Listu parametara (opciono)

Signatura potprograma definie broj i tipove formalnih parametara, obino i redosled (formalni
paranetar sintaksno je tzv dummy promenljiva)

Stvarni parametri (argumenti) reprezentuju vrednosti ili adrese koje se koriste i izrazu za poziv
potprograma

Potprogram na dva naina pristupa podacima:

Direktan pristup nelokalnim promenljivama (koje su vidljive i u potprogramu i u programu


pozivaocu)
Prenos parametara u i/ili iz pozvanog potprograma (fleksibilniji)

Generalno postoje dve vrste potprograma:

Procedure
Funkcije

Procedure su kolekcija instrukcija koje definiu parametrizovana sraunanja.

26
By LadyBrune

Funkcije semantiki modeli matematikih funkcija

Ako je funkcija taan model matematike funkcije, ona n eproizvodi boni efekat (side
effects), ve samo vraa rezultujuu vrednost kao svoj jedini efekat
U praksi funkcije stvaraju boni efekat

Povezivanje formalnih i stvarnih paranetara


u vreme poziva potprograma realizuje se na
osnovu:

Pozicije parametara
Imena parametara
default vredosti za parametar

Povezivanje zasnovano na poziciji parametara

U veini PJ parametri su pozicioni


Redosled povezivanja je bitan (prvi argument
povezuje se sa prvim, itd)

Povezivanje bazirano na imenu parametara

Redosled irelevantan
Ime formalnog parametra povezuje sa
imenom argumenta
Programski jezik ADA

Povezivanja bazirana na default vrednost parametra

Ada, C++

Semantiki modeli za prenos parametara


Tri razliita semantika modela za prenos parametara u i/ili iz pozvanog potprograma:
In mode formalni paramatar prima vrednost odgovarajueg argumenata
Out mode vrednost formalnog parametra prenosi se u odgovarajui argument
Inout mode sadri oba prethodna semantika modela

27
By LadyBrune

Postoje dva naina kako se vri transfer podataka preko prenosa parametara:
Kopiraju se vrednosti (prethodna slika ilustruje samoovaj nain)
Vrednostima se pristupa preko referenci

Implementacioni modeli prenosa parametara

Pass-by-value (in)
Pass-by-result (out)
Pass-by-value-result (in out)
Pass-by-reference (in out)

Metode prenosa parametara

Pass-by-value (in) vrednost argumenta kopira se u formalni parametar (inicijalizacija formalnog


parametra). Formalni parametar posmatra se kao lokalna promenljiva za sve svreme izvravanja
potprograma

Implementira se pomou kopiranja vrednosti


o Cena operacija kopiranja i memorisanja u sluaju kada je parametar velikih dimenzija
(npr niz sa velikim brojem elemenata)
Jednostavna metoda, koristi se u velikom broju programskih jezika: C, Pascal, Modula-2, C++,
Java, C#

Pass-by-result (out) Kada program zavri sa radom, vrednost formalnog parametra prenosi se (kopira)
u odgovarajui argument. Parametar se tretira u potprogramu ako lokalna promenljiva i mena
inicijalizacije preko vrednosti argumenta. Metoda je uvedena u programskom jeziku ALGOL 60, OUT
parametar u C#

28
By LadyBrune

Pass-by-value-result (in out) Kombinacija metoda pass-by-value i pass-by-result. Zahteva dve operacije
kopiranja. Korien u ALGOL-W, kasnijim verzijama FORTRAN-a, Ada

Pass-by-Reference Adresa argumenta prenosi se u formalni parametar. Formalni parametar i


referenca na argument su alijasi

Efikasnot (prosta implementacija, nema dupliciranja memorije i kopiranja)


Sporiji pristup (u odnosu na metodu pass-by-value)
Formalni parametri i reference na argumente su alijasi
C++, Pascal, Modula-2, C# (parametar ref)

29
By LadyBrune

7. Implementacija programskih jezika


Implementacione metode
Kompajleri
Interpreteri
Hibridni implementacioni sistemi

Kompajleri

Kompajler je program koji prevodi program napisan na vieprogramskom jeziku (izvorni kd), u
izvrni kd. Proces prevoenja zove se kompajliranje (eng compilation). Karakteristike:

- izuzetno brzo izvravanje


- spora obrada greaka koje se javljaju u toku izvrenja,
spor razvoj programa

30
By LadyBrune

Faze u procesu kompajliranja

Leksika analiza U ovoj fazi koristi se leksiki analizator (skener) koji prevodi tekst programa
u niz tokena.

Tablica simbola Leksiki analizator generie tablisu simbola u koju smeta atribute relevantne za
identifikovane tokena. Tablica simbola se koristi/aurira i u ostalim fazama procesa kompilacije.
Svakom tokenu pridruuje se vrsta tokena (identifikator, numerika konstanta, relacioni operatori,
specijalni znaci, itd.). Nekim tokenima kao to si identifikatori i numerike konstante pridruuju se i
drugi atributi. Na primer, numerikoj konstanti pridruuju se i atributi: tip (type integer ili type real) i
vrednost numerike konstante.

Sintaksna analiza U ovoj fazi zadatak parsera je da proita niz tokena koje mu alje skener i da
konstruie parsno stablo prema zadatim pravilima gramatike
Semantika analiza Provera statike semantike. U ovoj fazi vri se provera tipova, tj proverava
se da li su:
o Sve promenljive u programu deklarisane pre korienja
o Operandi svakog operatora su odgovarajueg tipa
o Broj i tip argumenata funkcije odgovara broju i tipu parametara u pozivu funkcije
Optimizacija meukda
Generisanje kda

Semantika analiza

Atributska gramatika (attribute grammar) je formalizam za opis semantike programskih jezika.


Atributska gramatika je anotirana konteksno-slobodna gramatika u kojoj se anotacije koriste za opis
znaenja (semantike) veza izmeu gramatikih simbola (terminala i neterminala).

Osnovna ideja:

Svakom simbolu (terminalu i neterminalu) u gramtici pridruuju se atributi (npr: tip i


vrednost proenljive, vrednost izraza)
Svakom produkcionom pravilu pridruuju se semantika pravila (akcije) koja se koriste za
izraunavanje vrednosti atributa
Proces evaluacije atributa korienjem semantikih akcija naziva se syntax-directed
translation.

Postoji dve vrste atributa:

Sintetizovani stributi (Synthesized attributes) - Zavisi od vrednosti atributa dece

Nasleeni atributi (Inherited attributes) Zavisi od vrednosti atributa suseda i oca

31
By LadyBrune

Anotirano parsno stablo Parsno stablo anotirano sa vrednostima atributa na svakom voru. Proces
evaluacije atributa naziva se anotacija parsnog stabla. Sintetizovani atributi evaluiraju se korienjem
semantikih akcija u bottom-up (postorder) redosledu obilaska parsnog stabla.

32
By LadyBrune

S-attributed grammar, gramatika koja koristi samo sintetizovane atribute


Atributi u S-atributed gramatikama mogu se evaluirati korienjem postupka bottom-up
obilaska parsnog stabla
Yacc/Bison podravaju
S-attributed gramatike

33
By LadyBrune

L-attributed grammar, gramatika koja za izraunavanje nasleenog atributa simbola koristi


atribute njegovog oca-neterminala i atribute simbola suseda, sa njegove leve strane, u
produkcionom pravilu. Atributi i L-attributed graatikama mogu se evaluirati korienjem
postupka obilaska parsnog stabla po dubini (eng depth-first). L-attributed gramatika je
specijalizacija S-attributed graatike. LL parseri, ANTLR

AST (Abstract Syntax tree) jedan od moguih oblika meukda. Prostija struktura u odnosu na
parsno stablo, pogodnija za sledee faze kompilacije. AST je kondenzovano parsno stablo.

Optimizacija meukda U ovoj fazim (koja je opciona) vri se optimizacija meukda u


smislu brzine izvravanja i/ili smanjenja veliine programa
Generisanje kda generator kda prevodi meukd u izvrni kd (mainski jezik)

U toku procesa kopajliranja, kompajler prijavljuje ako postoje, greke u izvornom programu.
Greke se mogu javiti u razliitim fazama procesa kompajliranja tako da se mogu podeliti na:

o Leksike
o Sintaksne
o Semantike

o Logike greke javljaju se u fazi izvrenja


!!---------------------------------------------------------------------------------gotove faze kompajliranja------------------------------------------------------------------
-!!

Leksiki analizator

Leksiki analizator (skener, lekser) je program koji se koristi u leksikoj analizi za skeniranje ulaznog
teksta. Skener ita ulazni tekst i prepoznaje rei na osnovu zadatih ablona; prpoznatu re izdvaja i
klasifikuje u token. Zadatak skenera je da iz ulaznog niza znakova prepozna i izdvoji tokene. Pred
osnovne uloge, (prepoznavanje tokena), leksiki analizator obavlja i zadatak izbacivanja iz ulaznog
niza znakova delova koji nisu znaajni zasintaksnu analizu, (komentari, praznine-blanko znaci, tab i
newline simbole).

34
By LadyBrune

Skener se moe konstruisati:

runo ili
Korienjem gotovih alata za generisanje skenera

Najee korieni softverski alati za generisanje skenera:

Lex (lexical analyzer) generie C kd


Flex (fast lexical analyzer generator) generie C, C++ kd
JLex(A lexical analyzer generator for java) generie Java kd

Flex specifikacija sadri regularne izraze koji opisuju rei koje skener treba da
prepozna
U specifikaciji, svakom regularnom izrazu moe se pridruiti akcija koja se
izvrava kada se u ulaznom tekstu prozna string opisan regularnim izrazom.
Akcije se piu u C kdu i kopiraju se u datoteku koja sadri generisani skener u
obliku
C

funkcije yylex()

Svakom regularnom izrazu pridruene su akcije koje se izvravaju kada se prepozna token. U primeru,
parser poziva skener, pa su koriene akcije prosleivanja.

U globalnu promenljivu yylval smeta se vrednost tokena (ako vrsta tokena ima vrednosti).
Promenljiva yylval je tipa union, tako da moe memorisati vrednosti razliitih tipova.

Sintaksni analizator (parser)

Zadatak parsera: provera da li je ulazni niz tokena, dobijen od skenera, u skladu sa zadatom
gramatikom. Ova provera moe se realizovati na dva naina:

Da se polazei od startnog simbola gramatike izvede, u skladu sa gramtikim pravilima, niz


tokena identian ulaznom nizu tokena ILI
Da se ulazni niz tokena redukuje po gramatikim pravilima u njen startni simbol

35
By LadyBrune

Vrste parsera (prema metodama koje koriste za generisanje parsnog stabla):

Top-down grade parsno stablo od korena prema listovima


o LL parseri Left-to-right, Leftmost derivation
Bottom-up grade parsno stablo od listova prema korenu
o LR parseri (tzv shift-reduce) Left-to-right, Rightmost derivation

Kod top-down parsiranja parser u toku izvoenja formira parsno stablo. Izvoenja mogu biti:

S leva (lefmost): u svakom koraku izvoenja krajnji levi neterminal sa desne strane
produkcionog pravila zamenjuje se sa pravilom koje ga definie, (ili jednim od svojih
alternativnih pravila),
S desna (rightmost); us vakom koraku se zamenjuje krajnji desni neterminal

Parser na svakom koraku izvoenja preuzima s leva (left to right) jedan token iz ulaznog niza
tokena i proverava d ali gramatika predvia pojavu preuzetog tokena u tom koraku. Za top-down
parsiranje najee se primenjuje izvoenje s leva jer se tada simboli sa ulaza preuzimaju u
prirodnom redosledu (LL parseri)

Postupak redukcije kod bottom-up parsiranja je inverzan (suprotan) postupku izvoenja kod top-
down parsiranja. U praksi je prihvaen postupak redukcije koji se inverzan postupku izvoenja s
desna (desna derivacija). Postupak redukcije podrazumeva reduciranje nekog ulaznog stringa prema
startnom simbolu date gramatike.

Kod bottom-up parsiranja parser na svakom koraku:

S leva preuzima token iz ulaznog stringa


Dodaje ga na kraj prethodno formiranog niza neterminala i/ili terminala
Proverava d ali je novoformirani niz (ili njegov podniz) jednak desnoj strani nekog pravila
date gramatike
Ako jeste, parser redukuje (zamenjuje) novoformirani niz (ili njegov podniz) sa neterminalom
sa leve strane pravila
treba naglasiti, da svi koraci
redukcije ne vode do startnog
simbola. Na primer, ako posle
koraka 7. Ba u primeru sa slike,
izaberemo u sledeem koraku

redukciju:
oigledno da redukcija ne vodi do
startnog simbola date gramatike.

36
By LadyBrune

ANTLR (Another tool for language recognition) je generator parsera (compiler-compiler)


Na osnovu zadate specifikacije jezika u EBNF-like sintaksi ANTLR generie kd u Java, C, C++, C#,
JavaScript, Python, ..., za
Skener
Parser (LL parser)
Tree parser (tree walker)- tree walker koristi se za procesiranje AST

ANTLR je implementiran u Java programskom jeziku (Terence Parr, University of Sam Francisco).
ANTLRWorks je raznojno okruenje, jednostavno za korienje.

Terence Parr: The definitive ANTLR Reference: Building domain-Specific Languages. ANTLR
website:http//www.antlr.org/

Razlikuje tri faze kompilacije: Leksika analiza, sintaksna analiza i opciono jednu ili vie tree walking
faza.

Softverski alati za generisanje LR parsera:

YACC (zet another Compiler-compiler)- generie C kd za LR parser


Bison, bison++ - generie C kd, odnosno C++ kd, za LR parser

Korienje bison generatora za generisanje LR parsera

Specifikacija za parser daje se u BNF notaciji (datoteka sa ekstenzijom .y). Svakom pravilu mogue
je pridruiti semantike akcije (u C kdu) koje se izvravaju kada parser prepozna dato pravilo. Na
osnovu specifikacije bison generie parser u C kdu (smeten u datoteci y.tab.c), tj. U obliku C
funkcije: int yyparse(). Parser u C kdu alje se C kompajleru da vi se kao izlaz dobio program a.out,
koji predstavlja izvrni parser za proveru sintakse ispravnosti ulaznog teksta.

37
By LadyBrune

Bison podrazumeva da svaki neterminal i terminal iz pravila poseduju vrednost

Vrednsot terminala odreuje skener, a


Vrednost neterminala odreuju parser

Za rad sa ovim vrednostima Bison predvia posebnu notaciju:

Vrednost neterminala s leve strane pravila


oznaava sa $$
Vrednost neterminala i terminala sa desne
strane pravila oznaava sa $i (i je redni broj
neterminala ili terminala na desnoj strani
pravila, s leva u desno)

Interpreteri

Interpreter: program napisan u izvornom kdu interpretira se pomou drugog programa


interpretera (softverska simulacija maine)

Brz razvoj programa i laka obrada greaka koje se


javljaju u toku izvravanja programa
Sporo izvavanje
LISP, APL, SNOBOL,
Web script jezici: JavaScript. PHP

38
By LadyBrune

Hibridni implementacioni sistemi prevode programe napisane u izvornom kdu u meukd


(intermediate code) koji se moe lako interpretirati
Java byte code Java kompajler kompajlira Java izvorni kd
u meukd koji se naziva Java byte code. Interpretacija
pomou virtuelne maine tzv Java Virtual Machine (JVM)
MSIL (MS Intermediate Language) Kompajleri .NET jezika
(C#, VB.NET, F#, ...) kompajliraju izvorni kd takvih jezika u
meukd CIL (Common Intermediate Language). delovi IL
kda koji treba da s eizvre, pre izvrenja kompajliraju se u
mainski kd (Just-in-tie kompajliranje)

39
By LadyBrune

8. Apstrakcija podataka Prvi deo


Koncept apstraktnog tipa podataka
Dve fundamentalne vrste apstrakcija koje podravaju programski jezici su:
Proceduralne apstrakcije
Apstrakcije podataka

Tip je apstraktan, ako su klijentima (programima koji koriste definisani tip) vidljivi samo:

Skup opoeracija preko kojih se stanja objekata tipa jedino mogu menjati javni interfejs ATP
Naziv tipa Klijenti mogu da kreiraju instance (objekte) definisanig ATP

Primitivni tipovi podataka kao apstraktni tipovi

Interna reprezentacija tipa i implementacija operacija tipa su skrivene za korisnika


Za korisnike primitivmog tipa vidljivi su: ime tipa i skup operacija za manipulisanje
vrednostima tipa;
U korisnikim programima deklarie se promenljiva odreenog primitivnog tipa (npr int,
float, ...)

Apstraktni tip podatka je korisniki definisan tip ije su kljune karakteristike:

INKAPSULACIJA (Encapsulation)
Skrivanje informacija (Information hiding)

Inkapsulacija: odvajanje specifikacije ATP od njegove implementacije.

Deklaracija tipa i operacija nad obljektima tipa specificiraju se u jednom sintaksnom unit-u
Reprezentacija tipa i implementacija njegovih operacija mogu biti u istom ili posebnom
sintaksnom unit-u
U oba sluaja mora biti skrivena za klijente

Prednosti inkapsulacije:

Pakovanje deklaracije tipa i njegovih operacija u jedan sintaksni unit, i pakovanje


reprezentacije tipa i implementacije njegovih operacija u zaseban sintaksni unit je dobar
nain za razdvajanje specifikacije od implementacije
Ako su i deklaracija i implementacija tipa i njegovih operacija u sito sintaksnom unit-u, onda
mora postojati neki nain za sakrivanje implementacije tipa i implementacije operacija od
klijenta

Skrivanje informacija: omoguava korienje interfejsa ATP bez poznavanja njegove implementacije.

Prednosti skrivanje informacija

Promena implementacionih detalja ATP, ima samo lokalni


efekat (ne zahtevaju se izmene u klijentskim programima)
Sigurnost klijenti ne mogu direktno da menjaju osnovnu
reprezentaciju objekata ATP

40
By LadyBrune

Programski jezik podrava ATP ako


obezbeuje:

Sintaksni unit za inkapsulaciju


implementacije ATP (reprezentaciju tipa i
implementaciju njegovih operacija)
Mehanizam koji treba da obezbedi
vidljivost (za klijente) javnog interfejsa ATP.
Interfejs omoguaca klijentu da kreira
instance ATP i da manipulie njihovim
vredostima

Primeri ATP u programskim jezicima : Ada, C++, Java, C#


ATP uprogramskom jeziku ADA
Inkapsulacija inkapsulacioni mehanizam je package koji se sastoji iz dva dela:
- Specification package obezbeuje javni interfejs
- Body packageobezbeuje implementaciju imenovanih entiteta u specifikaciji

- Mogu se odvojeno kompajlirati

Skrivanje informacija Specification package sastoji se iz dve sekcije (javne i privatne)

a) Jedne sekcije u kojoj su entiteti vidljivi za klijente,


b) A druga sakriva svoj sadraj od klijenta (koristi se klauzula private). Pomou klauzule private
skriva se (od klijenta) reprezentacija tipa

Reprezentacija tipa nije vidljiva za klijenta, ali mora biti vidljiva za kompajler (klauzula private
omoguava vidljivost reprenzentacije tipa za kompajler)

41
By LadyBrune

- klauzula with obezbeuje vidljivost


imena definisanih u eksternim Ada paketima
- Klauzula use eliminie eksplicitnu
kvalifikaciju referenci na imena definisana u
package (dato u primeru)

9. Apstrakcije podataka Drugi deo

ATP u programskom jeziku C++

Inkapsulacija

ATPse implementira korienjem klase


lanice klase su podaci i funkcije definisane u klasi
Instance klase mogu biti stack-dinamike i heap-dinamike

Funkcije klase se mogu definisati na dva razliita naina:


o Kompletna definicija (zaglavlje i implementacija) funkcija je data u klasi
o U klasi se definiu samo zaglavlja funkcija, a njihova implementacija je van klase

Skrivanje informacija

- Private klauzula : Entiteti u private klauzuli su vidljivi samo za lanice klase i prijateljske (friends)
klase ili funkcije
- Public klauzulu :Javni entiteti su u public ; ova klauzula opisuje javni interfejs
- Protected klauzula: Za nasleivanje

42
By LadyBrune

Razlika u podrci ATP C++ i Ada:

U C++, klijenti mogu pristupati nekoj od javnih lanica klase, ali samo preko instanci klase
Klijentski programi mogu da pristupe nekom od javnih entiteta Ada package pomou njegovog
imena

ATP u programskom jeziku Java

Inkapsulacija

- Svi korisniki definisani tipovi su klase


- Svi objekti su heap-dinamiki
- Kompletna definicija metoda mora biti u klasi
- Implicitna dealokacija

Skrivanje informacija Za svaku lanicu klase definie se vrsta pristupa; koriste se modifikatori pristupa
umesto klauzula

- Public
- Private
- Protected

Programski jezik Java koristi i package scope kao drugi mehanizam dosega (umesto prijateljskih
funkcija i klasa u C++). Svi entiteti u svim klasama koji nemaju modifikatore pristupa vidljivi su u celom
paketu.

43
By LadyBrune

ATP u programskom keziku C#

Inkapsulacija

- ATP se implemetira korienjem klase


- Sve instance klase su heap-dinamike;
- Implicitna dealokacija

Skrivanje informacija Za svaku lanicu klase definie se vrsta pristupa, pomou sledeih modifikakatora
pristupa:

- Public, private, protected, internal, protected internal


- Pristup privatnim lanicama-podacima klase: metode pristupa (getters i setters)
- C# obezbeuje properties kao nain za implementaciju metoda pristupa (set i get); ne zaheva
se eksplicitni poziv metoda

Sloeni inkapsulacioni mehanizmi


Veliki programi imaju dve specijalne potrebe:
- Neki nain za logiku organizaciju programa
- Neki nain za nezavismo kompajliranje manjih programskih unit-a

Reenje:

- Grupisanje manjih programskih unit-a koji su logiki povezani u jedan (kompilacioni) unit koji
se moe posebno kompajlirati
- Inkapsulacione konstrukcije obezbeuju nain za oraganizovanje programa u unit-e koji se
mogu, nezavisno jedan od drugih, kompajlirati
- Inkaspulacije se obino smetaju u biblioteke i raspoloive su za ponovno (reuse) korienje u
drugim programima

Inkapsulacione konstrukcije

Ugnjedavanje potprograma- Ada, Pascal, FORTRAN 95


- Programi se organizuju pomou ugnjedavanja definicija potprograma unutar veih
potprograma u kojima se koriste
- Ne prua punu podrku za inkapsulaciju
- Ovaj metod organizovanja programa koristi statiki doseg i nije primarna
inkapsulaciona konstrukcija koju koriste savremeni pj

44
By LadyBrune

Inkapsulacione konstrukcije u programskom jeziku C

- Ovaj pristup omoguava odvajanje specifikacije od


implementacije
- Ne prua strogu podrku za inkapsulaciju, ali se moe
simulirati
- Kolekcija povezanih funkcija i podataka smeta se u
implementacionu datoteku, koja se moe nezavisno
kompajlirati
- Interfejs implementacione datoteke se u posebnu
datotekum tzv header file (.h file). Header file sadri
zaglavlja funkcija i deklaracija tipova
- Header file se ukljuuje u klijentski kod (pomou
#include direktive) i referencira kompajliranu verziju
implementacione datoteke

Inkapsulacione konstrukcije u programskom jeziku C++

- Slino kao u C-u, sa header datotekama za


razdvajanje spcifikacije od implementacije, ili
- Se koriste klase za inkapsulaciju
- Prijateljske (friends) funkcije i klase u C++
obezbeuju nain za pristup privatnim lanicama
klase
- C++ dozvoljava da klase deklariu druge klase
ili funkcije kao friends
- friends funkcije i klase imaju pristup
privatnim lanicama klase u kojoj su deklarisane
kao friend
- Problem pristupa nekih funkcija objektima koji
su instance razliitih klasa

Inkapsulacione konstrukcije u programskom jeziku Ada

Inkapsulaciona konstrukcija package koji moe da sadri vie ATP-a

Inkapsulacione konstrukcije u programskom jeziku C#

- Assemblies, vea konstrukcija od klase i koristi se od strane svih .NET programskih jetika
- Assembly se kreira u procesu kompilacije programa napisanog u nekom .NET programskom
jeziku
- Assembly je kolekcija
datoteka koje mogu biti
DLL ili EXE
- DLL (Dynamic Link
Library) je kolekcija klasa i metoda koje se individualno povezuju sa izvrnim programom kada
je potrebno (na zahtev)

45
By LadyBrune

Assembly sadri

- Kd u formi MSIL instrukcija i


- Meta informacije u formi metapodataka (samoopisujui unit)
- Manifest metapodaci o assembly-u
- Metapodaci- opisuju tipove i metode u samom koda

lanice klase sa modifikatorom pristupa internal, vidljive su u svim


klasama u jednom assembly-u

Imenovane inkapsulacije druga vrsta inkaspulacija koja se koristi u konstruisanju velikih programa

- Druga vrsta inkapsulacija koja se koristi za definisanje dosega imena u velikim programima
- Veliki programi definiu veliki broj globalnih imena, pa mora postojati nain za organizovanje
takvih imena u logike grupe
- Imenovane inkasulacije su logike inkapsulacije i koriste se za definisanje dosega (namespace-
a) imena

Imenovana inkapsulacija u C++

Namespaces imenovana
inkaspulacija reprezentuje se preko
specifikacije namespace. Svaka
biblioteka ina sopstveni namespace,
a za njihovo korienje izvan
namespace-a koriste se
kvalifikovana imena sa imenom
namespace

Imenovana inkapsulacija u C#

- Imenovana inkapsulacija u C# je
namespace
- Namespace-ovi su programski
elementi projektovani
prvenstveno za organizovanje
programskog koda
- Mogu se organizovati u
hijerarhijsku strukturu, koja se
reprezentuje preko
ugnjedavanja namespace-ova
- lanice namespace mogu da
budu: klase, strukture,
enumeracije, delegati, interfejsi

46
By LadyBrune

Imenovana inkapsulacija u Java pj

- Imenovana inkaspulaciona konstrukcija je package koji moe da sadri vie definicija klsa
- lanice definisane u klasi koja je sadrana u package-u mogu biti private, public, protected ili
su bez modifikatora pristupa, pa su u tom sluaju vidljive za sve klase u paketu (package scope
by default)
- Deklaracija paketa: package myStack;
- Klijent package-a referencira imena definisana u package-u koristei ili
o Puno kvalifikovano ime myStack.top
o Ili deklaraciju import, koja dozvoljava skraene reference za imena definiana u
package-u
Import myStack.*;

Imenovana inkapsulacija u Ada pj

- Package se koristi kao imenovana inkapsulacija.


- Definie se hijerarhija paketa, koji se memoriu u odgovarajue hijerarhijske direktorijume

10. Uvod u markup jezike

Osnovni koncepti XML-a

XML eXtensible Markup Language

XML je danas postao defacto standard za opis sadraja i logike strukture (tekstualnih i multimedijalnih)
dokumenata i razmenu dokumenata na Web-u

Markup : oznake pomou kojih se dodaju posebna znaenja podatku. U XML-u koristi se tag za
predstavljanje markup-a

Extensible: proirljiv jezik, dozvoljava definisanje novih tag-ova

XML dokument se sastoji iz

Podataka (teksta) i
Tagova

XML dokument: samoopisujua, platformski nezavisna tekstualna datoteka. Informacije o podacima


sastavni su deo dokumenta sa podacima. Zbog toga je XML samoopisujui i veoma pogodan za razmenu
podataka.
Nesamoopisujui modeli (relacioni, obektno orjentisani):

47
By LadyBrune

Samoopisujui modeli (na primer XML):

Razdvajanje struktuiranog sadraja dokumenta od njegove prezntacije


HTML za formatiranje i prikazivanje dokumenata
XML za struktuiranje dokumenata

Korienje XML-a

XML je prvenstveno projektovan za distribuirano okruenje


o XML je veoma pogodan kao format za razmenu podataka izmeu heterogenih
aplikacija na Web-u
Samoopisujui
Tekstualni format (XML format)
Zajednika sintaksa
Razvijeni parseri
o XML kao format je dovoljno formalan za mainsko procesiranje i dovoljno razumljiv za
korisnike
Web servisi- nov standard za kreiranje interoperabilnih distribuiranih aplikacija
o Skup standarda zasnovani na XML-u:
SOAP=simple object Access protocol
WSDL=Web service definition Language
UDDI=Univerdal Description, Discoverz and Integration Protocol
Menorisanje XML podataka
o XML datoteke i XML baze
o Relacione baze
Transformacija XML dokumenta u relacione tabele
XML dokumenta memoriu se u kolone (iji je tip- XML type) relacionih tabela

Istorijski razvoj XML-a

W3C = World Wide Web Consortium (organizacija za standardizaciju Web tehnologija)


1996. W3C poela razvoj standarda za XML sa motivacijom da XML treba da kombinuje
o Fleksibilnost SGML (Standard Generalized Markup Language)
o Jednostavnost HTML (Hyper Text Markup Language)
U februaru 1998. definisan je XML 1.0 standard

SGML standard za definisanje i reprezentovanje strukture razliitih tipova elektronskih dokumenata,


(ISO standard 1985)

Veoma sloen jezik


Meta jezik standard za definisanje novih markup jezika
Proirljiv jezik, dozvoljava definisanje novih tagova
XML je podskup SGML (prilagoen potrebama Web-a)

48
By LadyBrune

HTML - poetkom 1990. HTML je definisan od W3C kao standard

Definisan u SGML
Koristi fiksni broj predefinisanih tagova
Prvenstveno projektovan za formatiranje i
prezentovanje dokumenata na Web-u

XML dokumenta su samoopisujue, platformski nezavisne tekstualne datoteke. XML dokument


sadri :

Tekst (sadraj dokumenta)


Tag-ove

Elementi su osnovni blokovi XML-a

Elementima se mogu pridruiti atributi. XML atributi obezbeuju dodatne informacije o elementima.

Imena XML tagova i imena atributa case sensitive

Struktura XML dokumenta

Hijerarhijska struktura (stablo) koja se sastoji iz elementata, atributa i znakovnih podataka. XML
dokument ima jedan i samo jedan koreni (root) element. Svi ostali elementi uu strukturi su elementi
deca korenog elementa. Dozvoljeno je viestruko ugnjedavanje elemenata.

49
By LadyBrune

XML deklaracija- svaki XML dokument mora da sadri XML deklaraciju, tj instrukciju obrade kojom se
dokument identifikuje kao XML dokument

Dobro-oformljen XML dokument

Postoji XML deklaracija


Dokument sadri jedan i samo jedan koreni element u kome su ugnjedeni svi ostal delementi
i njihovi sadraji
Svi elementi i atributi u dokumentu moraju da budu sintaksno ispravni

Provera sintaksne korektnosti XML dokumenta

XML parser verifikuje da li je XML dokumnt dobro-oformljen


XML parser ita dokument i konvertuje ga u memorijsku hijerarhijsku strukturu

Kreiranje XML dokumenta

50
By LadyBrune

Pregled XML dokumenata (source)


Pomou web browser-a koji podravaju XML (od IE 5.0)

Validni XML dokument


Dobro oformljen
Konzistentan sa strukturom definisamon u opisu tipa dokumenta

Definisanje tipova XML dokumenata W3C jeponudio dva standardnanaina za definisanje tipova
XML dokumenta, odnosno opisisivanje strukture XML dokumenta:

Document type definition (DTD)


XML Schema Definition (XSD)

DTD i XSD definiu:

Strukturu XML dokumenta


Ime i tip svakog XML elementa/atributa (DTD ograniene mogunosti za definisanje tipova)

DTD nasleen od SGML-a. Poseban jezik za opis strukture dokumenta. Vrlo ograniene mogunosti
za definisaje tipova

51
By LadyBrune

XML Schema- preporuka W3C od maja 2001. XML Schema je data preko XML sintakse (XML ema je
XML dokument). Podrava definicije prostih i sloenih tipova i poseduje napredne mehanizme za
grupisanje XML elemenata u XML dokumentu. Za konstrukciju svake XML eme koristi se:

Schema element (koreni element svake XML eme)


Deklaracije elemenata
Deklaracije atributa
Definicije prostih i sloenih tipova

Schema element ukazuje na definiciju XML eme u kojoj se


nalaze svi potrebni elementi za kreiranje XML eme

Deklaracija elemenata u XML emi - za svaki element u XML emi definie se naziv i tip (atributi name
i type)

Tip moe da bude:


o Korisniki definisan tip (pr ComplexType)
o Ili je u opsegu imena definicije XML eme (primer string)
Kardinalost elemenata moe se specificirati u njegovom ocu-elementu; inae po default-u,
kardinalnost elemenata je:
o minOccurs=1
o maxOccurs=1

Definisanje sloenih tipova sloeni tipovi se konstruiu od prostih i drugih sloenih tipova
korienjem konstruktora:

sequence definie ureenu grupu elemenata. Po default-u, svaki elemet je obavezan i


jednoznaan
choice definie grupu iz kojih s emogu izvlaiti pojedinani elementi
all definie grupu u kojoj se svi elementi mogu pojaviti maksimalmo jedanput

52
By LadyBrune

53
By LadyBrune

11. Procesiranje XML dokumenata

Modeli XML parsera

XML parser je softver koji ita XML dokument, analizira i ini dostupnim njegov sadraj i strukturu
aplikaciji preko API-a (Application Programming Interfaces).

Postoje dve vrste parsera:

1) XML parseri koji verifikuju samo sintaksnu ispravnost XML dokumenta (da li je XML dokument
dobro oformljen)
2) XML parseri koji vre validaciju XML dokumenta u skladu sa XML emom ili DTD

Dva osnovna modela XML parsera:

SAX model = Simple API for XML


DOM model= Document Object Model

Koraci obrade XML dokumenata:

1) Parsiranje XML dokumenata (korienjem XML parsera)


a. Parser formira memorijsko stablo vorova (DOM)
b. Parser, za vreme parsiranja, alje dogaaje aplikaciji (SAX)
2) Obrada dokumenta
a. Aplikacija pristupa i menja vorove stabla korienjem interfejsa DOM API
b. Aplikacija obrauje poslate SAX dogaaje

DOM model - Standardni objektno orjentisani programski interfejs za obradu XML dokumenata.
W3C standard. W3C DOM specifikacija prua samo definiciju interfejsa za DOM biblioteke, a ne i detalje
njihove implementacije.

DOM model reprezentuje XML dokument kao memorijsko stablo vorova (DOM stablo) i omoguava,
(preko skupa svojih interfejsa), navigaciju i izmene dokumenta.

Preko ovog modela se iz softverskih aplikacija moe manipulisati s XML dokumentima i njihovim
elementima kao sa objektima.

a) Tipovi vorova u W3C specifikaciji:


Document
Element
Attribute
Character data
o Text
o Comment
b) Metode za pristup i modifikaciju vorova DOM stabla

54
By LadyBrune

Obrada XML dokumenta korienjem DOM parsera

- ita XML dokument od poeta do kraja


- Formira u memoriji strukturu stabla (DOM) stablo koja reprezentuje strukturu i sadraj
takvog dokumenta

Prednosti:

- Dinamiki pristup i modifikacija vorova DOM stabla


- Efikasno pretraivanje koje se zaniva na strukturi stabla
- Isti interfejs za razliite programske jezike (C++, Java, C#)

Nedostaci:

- Moe da vude spor i zahteva dosta memotijskih resursa

Preporuke za korienje DOM parsera

- Kada se zahteva dinamiki pristup i zmene veine elemenata u XML dokumentu


- XML dokumenta sa sloenom strukturom

55
By LadyBrune

Implementacija DOM parsera

DOM parseri MS
o XmlDocument (.NET Framework)
o MSXML (Microsoft XML Parser ili Microsoft XML Core Services)
Je COM (Component Object Model) implementacija W3C DOM modela
Razliite verzije MSXML su ukljuene u razliite MS proizvode kao to su MS
Internet Explorer, MS Office, MS SQL Server
MSXML obezbeuje jo i sledee servise: XSD, XSLT 1:0, SAX, Xpath
Java
o JAXP (java API for XML Processing) obezbeuje sledee servise:
DOM
SAX
XSLT

SAX model- Event-based model (zasnovan na dogaajima). Razvijen o dstrane XML-DEV grupe.
Industrijski standard (Verzija 2.0 2000.)

Obrada XML dokumenta korienjem SAX parsera

SAX parser ita XML dokument kao stream XML tagova. Prilikom itanja XML dokumenta. SAX
parser generie dogaaje kad god otkrije element / atribut / tekst / instrukciju obrade i alje
aplikaciji
Aplikacija obrauje dogaaje generisane od strane parsera. Aplikacija implementira
odgovarajue hendlere koji sadre metode kojima se ti dogaaji obrauju

56
By LadyBrune

Prednosti : Efikasan (veoma brz, uteda memorije)


Nedostaci:
- Ne kreira se memorijsko stablo za reprezentovanje XML dokumenta
- Sekencijalni pristup kompomentama dokumenta
Preporuke za korienje
- Kada se ne zahteva dinamiki pristup i izmenaa elemenata XML dokunta
- Obrada dokumenta sa prostom strukturom koja sadre veliki obim podataka

SAX parseri:

- Oracle XML Parser


- Project X (Sun)
- XML4J (IBM)
- MSXML (Microsoft)

XSLT eXtensible Stylesheet Language Transformation. XSLT je deklarativni jezik koji se koristi za opis
pravila transformacija XML dokumenta u

- Drugi XML dokument


- HTML dokument
- Tekst

W3C strandard, XSLT verzije 1.0 i 2.0

XSLT stylesheet dokument je XML dokument. XSLT instrukcije se izraavaju kao XML elementi.

Elementi koji se koriste za konstruisanje stylesheet dokumenta definisani su preko XSLT namespace-a,
lokacija se specificira preko URL-a:

Osnovne karakteristke XSLT dokumenta

- Stylesheet element je koreni element

- Stylesheet element sadri skup teplejt pravila koja se deklariu sa <xsl:template> elementima
- Pravila opisuju kako se pojedini elementi u XML dokumentu transformiu u rezultujue
elemente u izlaznom dokumentu

Templejt pravilo sadri dva dela:

- Pattern identifikuje i izdvaja elemente ulaznog XML


dokumenta na koje e biti primenjena transformacija
- Akcija opisuje transformaciju koja se primenjuje

57
By LadyBrune

- Match atribut koristi se za povezivanje templejta sa nekim delom ulaznog XML dokumenta
- Vrednost match atributa je Xpath pattern

XPath (XML Path Language) je jezik koji omoguava


nabigaciju do delova (vorova) XML dokumenta (kao to su
elementi, atributi, njihove vrednosti). XPath je W3C
standard. U XSLT dokument XPath se koristi za izdvajanje
delova XML dokumenta na koje e biti primenjena
transformacija. XML dokument se ovde posmatra kao
stablo vorova sa definisanim vorom koji se naziva koren
dokumenta. Koren dokumenta je bezimeni vor ije je dete
koreni element XML dokumenta. vor se adresira preko tzv
izraza putanje niz od jednog ili vie lokacijskih koraka

Telo templejt pravila sastoji se iz:

- XSLT instrukcija
- I mogue elemenata koji specificiraku neki eljeni izlazni tekst koji XSLT procesor treba da ubaci
u izlazni dokument

58
By LadyBrune

XSLT procesori:

- Standalone XSLT procesori: Java XSLT procesor, SAXON, Oracle XSLT, Xalan (Apache projekat)
- Korienje Web Browser-a za XSLT transformacije
o MS Internet Explorer 5.5 i novije (XSLT procesor u IE je deo MSXML parsera)
o Netscape 6.0
o JavaScript
- Korienje Web servera za XSLT transformacije : 3 naina za izvravanje XSLT transformacija
o Java servleti
o ASP (Active Server Pages)
o JSP (Java server Pages)

59
By LadyBrune

12. MS implementacija W3C XML standarda

MS implementacija W3C XML u .NET Framework-u

Obrada XML dokumenata u .NET Framework-u- - Postoje dve opcije obrade XML dokumenata:

- Preko DOM-a korienjem XmlDocument klase


- Preko Pull modela korienjem XmlReader klase. Pull model je nov pristup za rad sa XML
dokumentima

Pull&Push modeli parsera

- Pull model ne formira za XML


dokument memorijsko stablo (slino
kao SAX)
- SAX je push model dostavlja
dogaaje aplikaciji koja ih obrauje
- Pull model omoguava da aplikacija
zahteva prolaenje kroz XML
dokument i zatim selektovanje i
pristup samo zahtevanim vorovima
- Pull model implemetiram preko
XmlReader klase

.NET XML klase. XmlReader klasa

XmlReader je apstraktna klasa. Reprezentuje pull


model XML parsera. Memorijski efikasan, forward-
onlz pristup XML podacima

- Provera da li je XML dokument dobro-


oformljen , ne proverava validnost
- XmlTextReader klasa ima razliite konstruktore za specifikaciju lokacije ulaznog XML
dokumenta: XML datoteka, Stream ili TextReader
- Read() metoda omoguava navigaciju kroz vorove XML dokumenta, obezbeuje nain za
itanje sadraja dokumenata, elemenata i atributa

60
By LadyBrune

.NET klase: XmlTextReader

Korienje XmlTextReader-a:

- Istanciranje XmlTextReader objekta


- itanje i obrada podataka parsira
XML dokument korienjem Read()
metode u while petlji

XmlValidatingReader&XmlNodeReader

- XmlValidatingReader obezbeuje podrku za validaciju XML dokumenta u skladu sa DTD ili


XSD
- XmlNodeReader omoguava itanje podstabla XML DOM stabla, ne podrava validaciju

.NET XML: klase: XmlWriter

Programsko generisanje XML dokumenata u datoteku,


stream, TextWriter. XmlWriter je apstraktna klasa.
Reprezentuje brzi, forward-only, memorijski efikasan
XML writer

Korienje XmlTextWriter-a :

1. Istanciranje XmlTextWriter-a (konstruktor)


2. Postavljanje propertz-a (na primer za formatiranje itd.)
3. Izvravanje Write metode za generisanje XML
4. Izvravanje close() metode

61
By LadyBrune

.NET XML klase: XmlDocument

XmlDocument obezbeuje podrku W3C DOM


modela. Reprezentuje XML dokument kao
memorijsku strukturu stabla.

Metode: Load(), Save(), ...

.NET klase: Xsltransform klasa

- System.Xml.Xsl namespace
- Transformie ulazni XML dokument
korienjem XSLT stylesheet-a
- Kljune metode
o Load
o Transform

13. Jezike paradigme


Jezike paradigme
Razlike izmeu pojedinih vrsta programskih jezika baziraju se na modelu, tj paradigmi koju
podravaju
Imperativni jezici (proceduralni) jezici pogodni za predstavljanje algoritama kako serijske
kompozicije koraka. Apstrahuju Von Neumann-ovu kompjutersku arkitekturu. Glavne karakteristike
su:
- Promenljive: model memorijskih lokacija
- Kluna operacija: dodeljivanje promena memorijskih vrednosti
- Program je niz instrukcija: sekvencijalno izvravanje instrukcija
Podravaju:
- Bazne apstrakcije
- Strukturne apstrakcije
- Proceduralne apstrakcije

FORTRAN, Algol, COBOL, Pascal, C

62
By LadyBrune

Boni efekti (side-effects) funkcija

Funkcionalni jezici Pripadaju klasi deklarativnih (neproceduralnih) programskih jezika. Ideja :


matematika funkcija. Baziraju se na lambda raunu (lambda calculus). Karakteristike :

- Osnovni koncept je matematika funkcija


- Nema eksplicitne naredbe dodeljivanja, posledica: nema bonog efekta npr uvek vai
f(a)+f(b)=f(b)+f(a)
- Rad sa memorijom implicitan, nema eksplicitne deklaracije promenljivih
- Program: se predstavlja funkcijom
- Kljuna operacija: primena funkcije
- Redosled izvravanja najee se kontrolie pomou rekurzije
- Implicitna dealokacija
- Implementacija: interpreteri

Obezbeuju:

- Skup primitivnih funkcija


- Funkcionalne forme za konstruisanje
sloenih funkcija
- Strukture za reprezentovanje podataka

Podravaju funkcionalne apstrakcije

Funkcionalna konstrukcija: funkcionalna forma koja uzima listu funkcija


kao parametre i vraa listu rezultsta koja se dobija primenom funkcija na
istu (zadatu) vrednost.

Funkcionalna kompozicija: je forma koja kao parametre uzima dve


funkcije f(x) i g(x) i vraa funkciju h(x) koja reprezentuje da je g(x)
ukljuena u f(x)

Funkcionalni jezici: LISP (LISt Processing- obrada listi), prvi funk pj


razvijen 1958, John McCarthy. LISP je netipiziran jezikm sadri
sanmo dva tipa: atome i liste.

- Prosta lista (A B C D)
- Ugnjedena lista koja sadri 4 elementa (A (B C) D (E(FG)))

63
By LadyBrune

Lambda notacija se koristi za specifikaciju


funkcija. Jednostavna i uniformna sintaksa
(ista sintaksna forma za specifikaciju
funkcija i podataka)

Primitivne funkcije za manipulisanje listama

Do danas razvijen je vei broj dijalekata LISP-a i drugih funkcionalnih jezika:

- Scheme (LISP like jezik, razvijen sredinom 1970, godine, edukacija)


- COMMON LISP (dijalekat LISP jezika, razvijen sredinom 1980. godine, ANSI standard, podrava
funkcionalnu, imperativnu i objektno-orjentisanu paradigmu)
- ML (Meta Language) (razvijen 1980., projektovan za verifikaciju programa, dozvoljava
deklaracije promenljivih)
- Haskell (prva verzija 1990. god, ist funkcionalni jezik)
- F# (F Sharp, razvijen 2005 od strane Microsoft-a, podrava funkcionalnu, imperativnu i
objekto-orjentisanu paradigmu)

Logiki jezici

Dve osnovne karakteristike logikog programiranja su: upotreba injenica i pravila, upotreba
(primena) dedukcije (izvoenja) za odgovaranje na pitanja.

Program: skup injenica i pravila

injenica tvrenje o nekoj osobini objekta ili vezi izmeu dva ili vie objekta. injenice se u programu
predstavljau predikatima oblika: P(X1, ...,Xn)

Primer: injenica otac (Petar, Milan) ima znaenje da su Petar i Milam u relaciji otac, tj Petar je
Milanov otac

Pravilo omoguava izvoenje o postojanju osobine ili veze, zasniva se na preduslovima. Pravilo se
zapisuje u obliku:

64
By LadyBrune

Kljuna operacija: unifikacija (izjednaavanje). Unifikacija proces povezivanja promenljive i


vrednosti.

Logiki jezici: Prolog (PROgramming in LOGic), Datalog deklarativni logiki upitni jezik (Prolog-like)

Objektno-orjentisani jezici

Javili su se kao odgovor na softversku krizu kao nain da se , grupisanjem objekata sa slinim osobinama
u klase (a ne uz aplikacije), dobije programski kod koji se moe ponovo upotrebiti. Ekstenzija
imperativne paradigme. Objektno-orjentisanu paradigmu karakteriu sledee osobine:

Osnovni koncept: objekat


Objekti se krupiu u klase
Objekat je izvrna instanca klase

Program: objekti izmeu sebe komuniciraju porukama. Porukom se od objekta koji ih prima zahteva
da izvri neku od operacija definisanih u klasi kojoj pripada.

Kljuna operacija: prenoenje poruka

Skrivanje informacija objektu se moe pristupiti samo preko poruka tj metoda koje su
definisane za klasu kojoj objekat pripada
Uaurenje podataka i operacija u celinu (objekat)
Nasleivanje- nova klasa moe se definisati kao izvedena klasa (podklasa) ve definisane klase
(osnovne klase ili nadklase)
Polimorfizam

Zakljuak: O-O paradigma podrava:

Apstraktne tipove podataka


Nasleivanje
Polimorfizam

O-O jezici: Simula, SmallTalk, C++, Java, C#

65
By LadyBrune

Domensko-specifini jezici

To je jezik koji je prilagoen nekom specifinom domenu, tj relevantni koncepti, semantika i


ogranienja specifinog domena ukljueni su u sam jezik. Domensko-specifini jezici u kontekstru
specifinog domena nude znaajne prednosti u poreenju s aprogramskim jezicima opte namene;
jedna od prednosti je: izraajnost i jednostavno korienje DSJ (razumljivost, itljivost, odravanje,
komunikacija). Popularni DSJ definisani i implementirani za specifine domene:

Web domen:
o Markup jezici. HTML, XML
o Script jezici: JavaScript, PHP, CSS (cascading style sheet)
Domen relacione baze podataka
o SQL
Domen matematike
o MATLAB
DSJ se mogu izraavati u tekstualnoj i grafikoj notaciji. Sa aspekta implementacije, DSJ se mogu
klasifikovati na: interne (DSJ implementira se u jeziku domainu (host language)) i eksterne .
Za razvoj i implementaciju eksternih DSJ koriste se softverski alati:
Alati zasnovani na generatorima parsera u kojima se specificirani jeziki model zasniva na
gramatikama
Napredni alati (jezika okruenja) u kojima se specifikacija eksternog modela bazira na
metamodelu

14. Rad sa XML dokumentima i .NET okruenju

XML parseri

XML parser, je u sutini, softver koji ita XML datoteku i ini dostupnim podatke koji se u njoj nalaze.
Postoje dva razliita pristupa implementaciji XML parsera:

Parser zasnovan na dogaajima obrauje XML dokument sekvencijalno, tretirajui


komponentu po komponentu (SAX pristup)
Parser zasnovan na stablu predstavlja ceo dokument u obliku stabla i obezbeuje pristup
pojedinanim vorovima stabla (DOM pristup)

Implementacija XML parsera

DOM i SAX su nezavisni API-ji koji su podrani u razliitim jezicima.

W3C DOM specifikacija prua samo definiciju interfejsa za DOM biblioteke, a ne i detalje
njihove implementacije
SAX nije W3C preporuka ve industrijski standard

Ne mogu se koristiti za parsiranje dokumenata ve je potreban parser koji implementira interfejse


definisane datim specifikacijama. Parser konkretna implementacija SAX-a ili DOM-a razvijena za
odgovarajuu softversku i harversku platformu. Razvijen je itav niz XML parsera za razliite softverske
i hardverske platforme koji podravaju i SAX i DOM pristup.

66
By LadyBrune

Microsoft MSXML
Java- Xerces2, XML4J, Porject X. JDOM
C Expat

Microsoft-ova tehnologija za parsiranje XML dokumenata

Microsoft je razvio XML parser tehnologiju koja omoguava programski pristup XML podacima. Ivaj
parser se naziva Microsoft XML Parser (kada su upitanju verzija 3.0 i prethodne verzije) odnosno,
Microsoft XML Core Services (za verziju 4.0). Za oba se koristi skraenica MSXML. MSXML omoguava
korisnicima da razviju aplikacije zasnovane na XML-u. Meu osnovnim servisima koje MSXML prua
alazi se i podrka projektantima za:

Document Object Model (DOM), standardna biblioteka interfejsa aplikacionih programa (API)
za pristup XML dokumentima
Simple API for XML (SAX2), programska alternativa obradi zasnovanoj na DOM-u

XML parseri u .NET okruenju

.NET Framework prua dva naina parsiranja XML dokumenata:

Pull-model parser (XmlReader klasa i klase koje su sa njom povezane)


DOM-model parser (XmlDocument klase i klase koje su sa njom povezane)

SAX nije implementiran u .NET Frameworku iako se moe formirati korienjem XmlReader klase.

Pull model parser

67
By LadyBrune

DOM Parser

Document Object Model (DOM) je objektni model (stablo), kojim se prikazuje struktura i sadraj XML
dokumenta. Ovim modelom upravlja MSXML parser.

Kada MSXML parser uita XML dokument u DOM, on prvo ita


dati dokument, parsirajui njegov sadraj na taj nain to ga
razbija na pojedinane delove: elemente, atribute,
komentare, ... . Zatim kreira (u memoriji ) konceptualnu
reprezentaciju u vidu stabla vorova.

vorovima se dakle predstavlja struktura i sadraj dokumenta.

Prilikom kreiranja, svakom voru pridruuje se i tip u skladu sa


W3C specifikacijom tipova vorova u DOM-u. Tip vora odreuje
karakteristike i funkcionalnost datog vora. Za veinu
dokumenata najei tipovi vorova su: element, atribut i tekst.
Dakle vorovi zadravaju i dodatne metapodatke o sebi kao to
su njihovi tipovi i vrednosti. Kada se zavri parsiranje dokumenta vorovi se mogu pretraivati u bilo
kom smeru tj nisu ogranieni ma sekvencijalnu obradu.

Dom tretira XML podatke kao standardni skup objekata. System.Xml namespace prua programsku
reprezentaciju XML dokumenata i vorova. Zasnovan je na W3C DOM Level Core i DOM Level Core 2
preporukama. Koncepti koje prua System.Xml namespace:

- XmlDocument
- XmlNode
- XmlNodeList
- XmlAttribute
- XmlAttributeCollection
- ChildNodes ...

Dakle kao rezultat parsiranja dobija se XmlDocument klasa i klase koje su sa njom povezane.

68
By LadyBrune

XmlNode klasa izvedene klase:

- XmlDocument
- XmlDocumentFragment
- XmlAttribute
- XmlEntity
- XmlLinkedNode
- XmlNotation
XmlNode klasa prua skup metoda i svojstava
pomou kojih se moe uzeti ceo vor, kao i
informacije koje taj vor sadri (npr tekst).

XmlDocument klasa

XmlDocument objekat prestavlja konkretan XML dokument i sadri sve informacije o njemu. Sam
dokument s eposmatra kao jedan vor koji predstavlja vrh stabla i sadri sve ostale vorove ukljuujui
i vor koji predstavlja koreni element dokumenta, koji daljesadri sve vorove u dokumentu: element,
atribute.

Kada postoji referenca na dokument mogue je kretanje po hijerarhiji. Preko XmlDocument objekta
moe se pristupiti ChildNodes svojstvu, koji prua mogunost pristupa svim vorovima u dokumentu,
sa vrha na dole. vorovi se pojavljuju u istom redosledu u kome su se malazili u XML datoteci.
ChildNodes svojstvo imaju i svi ostali vorovi u hijerarhiji.

69
By LadyBrune

Uitavanje/koreni element dokumenta/obrada


(redosled)

70
By LadyBrune

Obrada/izmena/novi XML dokument (redosled)

XML Schema (XSD)

ema je XML dokument koji definie klasu XML dokumenata specificiranjem njihove strukture. ema
definie dozvoljeni sadraj XML dokumenta odnosno opisuje gramatiku koje dokumenti moraju da se
pridravaju da bi se smatrali validnim u odnosu na datu emu. ema definie strukturu, sadraj i
semantiku XML dokumenta.

Schema Object Model (SOM)

.NET Framework omoguava I manipulisanje XML emama pomou SOM-a. Omoguava itanje,
izmenu i validaciju XML ema programskim putem. SOM radi sa XML emama na sliam nain kao to
DOM radi sa konkretnim XML doumentima.

71
By LadyBrune

72
By LadyBrune

15.NET Framework

.NET nije operativni sistem.


.NET je softver koji povezuje informacije, ljude, sisteme i ureaje.

.NET Vision N Vision


svi ureaji su meusobno povezani na globalnoj mrei
softveri kao usluge dostupni na globalnoj mrei

.NET Framework
osnova za ispunjenje vizije
servisi i nove tehnologije koje omoguavaju razvoj distribuiranih aplikacija

.NET Enterprise Servers


SQL Server 2000, BizTalk 2000, Commerce Server 2000, ... koriste ih .NET Framework aplikacije

.NET platform

Hardver
Serveri, radne stanice, personalni raunari i neraunarski ureaji kao to su mobilni telefoni, pejderi, ...

Operativni sistem
Windows Server 2003,Windows XP, Windows 2000, Windows CE, BSD Unix, Linux, ...

.NET Enterprise Servers


Application Center,BizTalk Server 2000, Commerce Server 2000, Exchange Server 2000, Host Integration Server 2000,
Internet Securitz and Acceleration Server 2000, SQL Server 2000

.NET Framework - nova razvojno-izvrna infrastruktura za kreiranje distribuiranih aplikacija.

.NET Building Block Services


paradigma softver kao servis
XML Web Services (Internet servisi) - komponente koje su dostupne na Internetu i koje se mogu koristiti prilikom
razvijanja sopstvenih aplikacija
.NET My Services (HailStorm) - skup Microsoft-ovih korisniki orijentisanih Internet servisa kao to su paso,

73
By LadyBrune

podsetnik, skladite, eMail, ...

Visual Studio .NET


alat za razvoj softvera
integrisano okruenje za kreiranje distribuiranih aplikacija (IDE for RAD)Najvaniji deo .NET platforme je .NET Framework

.NET Framework

Nova platforma za razvoj softvera.


Sistemska aplikacija koja omoguava
razvoj (projektovanje, kodiranje, uklanjanje greaka, instalacija, odravanje) i
izvrenje distribuiranih aplikacija

Obezbeuje
komponentnu infrastrukturu (Component infrastructure)
integraciju programskih jezika (Language integration)
internet interoperabilnost (Internet interoperability)
jednostavan razvoj (Simple Development)
jednostavnu instalaciju (Simple Deployment)
pouzdanost (Reliability)
bezbednost (Security)

Arhitektura .NET Framework-a

Common Language Runtime - CLR


Najvaniji deo .NET Framework-a. Nadlean za aktiviranje objekata, izvravanje bezbednosnih provera nad njima,
njihovo smetanje u memoriju, izvravanje i uklanjanje iz memorije.

Base Class Libraries - BCL


Biblioteke tipova koje nudi .NET Framework. Sastoji se iz klasa, interfejsa i vrednosnih tipova koji omoguavaju
korienje funkcija sistema.

Class Libraries Data and XML classes


Specijalizovane biblioteke tipova. Zasniva se na tipovima datim u BCL-u.

Tehnologije za razvoj aplikacija


Web Service, Web Forms, Windows Forms, Console Applications. Interfejsne i neinterfejsne aplikacije.

74
By LadyBrune

Common Type System - CTS


Skup pravila koje prevodioci .NET jezika moraju da potuju. Njime su dati predefinisani tipovi podataka.

Common Language Specification - CLS


Specifikacija minimalnih zahteva koje svaki .NET jezik mora da podri u cilju postizanja integracije jezika.

.NET jezici
C# (C Sharp) nov jezik razvijen posebno za .NET Framework. Postojei jezici su ili redizajnirani ili proireni (VB.NET,
managed C++, ...)

Common Language Runtime (CLR)


Common Language Runtime = .NET
Najvaniji deo .NET Framework-a, predstavlja izvrno okruenje .NET Framework-a, nadlean je za aktiviranje objekata,
izvravanje bezbednosnih provera nad njima. Njihovo smetanje u memoriju, izvravanje i uklanjanje iz memorije ono
to je Java Virtual Machine (JVM) za Java platformu, to CLR za .NET Framework. I JVM i CLR omoguavaju izvravanje
aplikacija na razliitim platformama (nezavisno od hardvera i operativnog sistema) dok JVM podrava jedino programski jezik
Java, CLR podrava MS programski jezici: C#, VB.NET, C++.NET, JScript.NET programski jezici drugih proizvoaa:
COBOL, Eiffel, Perl, Python, SmallTalk, ...
CLR podrava sve programske jezike koji se mogu prevesti u Microsoft Intermediate Language (MSIL)

Proces prevoenja izvornog u mainski kod odvija se u


dva koraka
izvorni kod se prevodi u Microsoft Intermediate
Language MSIL
prevoenje MSIL koda u konkretan platformski
kod koji izvrava CLR

Microsoft Intermediate Language (MSIL)


Jezik nieg nivoa sa jednostavnom sintaksom, koji se vrlo brzo prevodi u mainski kod podrava sve osobine objektno
orijentisanih jezika ukljuujui apstrakciju podataka, nasleivanje, polimorfizam i korisne koncepte kao to su izuzeci i
dogaaji uvoenjem ovog meujezika omoguena je:
platformska nezavisnost
kod napisan na bilo kom .NET jeziku moe se izvriti na bilo kojoj platformi
Java - bytecode ; .NET - MSIL
poboljanje performansi

75
By LadyBrune

dok se Java kod interpretira, MSIL se uvek prevodi (ne postoji gubitak performansi koji je neminovan prilikom
interpretacije)
ne prevodi se cela aplikacija odjednom, ve samo deo koji se pozove
prevedeni kod se uva sve dok se aplikacija ne zavri
jezika interoperabilnost
kod dobijen prevoenjem iz jednog programskog jezika u MSIL, je interoperabilan sa kodom koji je na isti nain
dobijen iz nekog sasvim drugog programskog jezika

Microsoft Intermediate Language (MSIL)


osnovne karakteristike
objektna orijentisanost i korienje interfejsa
razlikovanje vrednosnih i referentnih tipova
stroga tipiziranost podataka
upravljanje grekama putem izuzetaka
korienje atributa

Karakteristike MSIL-a
Objektna orijentisanost i korienje interfejsa
podrava sve osobine objektno orijentisanih jezika ukljuujui apstrakciju podataka, nasleivanje, polimorfizam i
korisne koncepte kao to su izuzeci i dogaaji
podrava jednostruko nasleivanje klasa
klase koje implementiraju dati interfejs moraju da obezbede implementaciju metoda i svojstava naznaenih
konkretnim interfejsom

Razlikovanje vrednosnih i referentnihtipova


vrednosni tipovi
promenljiva direktno uva svoje podatke
uvaju se na steku
referentni tipovi
promenljiva sadri adresu na kojoj se nalaze odgovarajui podaci
uvaju se u delu memorije koji se naziva kontrolisani hip

stroga tipiziranost
svaka promenljiva pripada odreenom, konkretnom tipu podataka
nisu dozvoljene operacije koje ostavljaju mogunost dvosmislenog tumaenja na koju vrstu podataka se njihov
rezultat odnosi (Variant u VB-u)

ta je omogueno ?
jezika interoperabilnost
automatsko upravljanje memorijom
bezbednost
aplikacioni domeni

Jezika interoperabilnost
klase napisane u jednom jeziku mogu direktno da komuniciraju sa klasama koje su napisane u drugom jeziku,
odnosno:
klasa napisana u jednom jeziku moe da nasledi klasu napisanu u drugom jeziku
klasa moe da sadri primerke drugih klasa koje su realizovane korienjem razliitih jezika
76
By LadyBrune

objekat moe direktno da pozove metodu drugog objekta koja je napisana u drugom jeziku
objekti se mogu slobodno prenositi izmeu metoda

klasa B mora da razume sve tipove podataka koje klasa A koristi


razliiti jezici razliite kljune rei za iste tipove
32-bitni oznaeni celobrojni tip
u jeziku VB.NET definisan kao integer
u jeziku C# definisan kao int

Common Type System


Zajedniki sistem tipova definie skup pravila, koje prevodioci .NET
jezika moraju da potuju da bi definisali, referencirali i smestili i
referentne i vrednosne tipove.
CTS definie predefinisane tipove podataka koji su dostupni u MSIL-u,
tako da svi jezici .NET Framework-a proizvode MSIL kod koji se
zasniva na ovim tipovima. (VB.NET integer, C# int, MSIL
System.int32)
CTS tipovi imaju istu semantiku, bez obzira u kojem su jeziku
definisani

Hijerarhijska struktura CTS-a

Common Language Specification CLS


specifikacija zajednikog jezika predstavlja skup minimalnih zahteva koje svaki .NET jezik mora da podri, u cilju
postizanja interoperabilnosti.
jedan od zahteva koji namee CLS je da nije dozvoljeno korienje identifikatora koji se razlikuju samo po veliini
slova za razliku od VB.NET-a, C# pravi razliku izmeu velikih i malih slova
nisu sve klase .NET Frameworka u saglasnosti sa CLS-om na primer, uint je definisan u C#-u, a nije u VB.NET-u
ova specifikacija se odnosi samo na javne i zatiene lanove klasa i javne klase (privatni delovi nisu dostupni)
77
By LadyBrune

CTS & CLS

Automatsko upravljanje memorijom


komponenta za sakupljanje otpadaka (garbage collector)
objekti na hipu do kojih ne vodi ni jedna referenca se automatski oslobaaju
spreava se curenje memorije (memory leak), a isto tako spreavaju situacije gde memorija ostaje zauzeta ak i
posle zavretka procesa
napomena: vreme kada e upotrebljena memorija biti osloboena nije tano odreena
posledica: oslobaanje resursa ne treba da se radi u destruktoru clase

Sklop (assembly)
Sklop je kolekcija koja se sastoji od jedne ili vie
datoteka, pri emu jedna od njih sadri
metapodatke poznate pod nazivom manifest
sklopa
manifest sklopa definie ta sve ulazi u sastav
sklopa, verzije, autora sklopa, kakve su
bezbednosne dozvole potrebne da bi sklop radio
IL kod + metapodaci kojima se opisuju tipovi i
definisane metode u kodu
sklop je u potpunosti samoopisujua logika
jedinica

dve vrste
privatni sklopovi
zero impact installation
moe ih koristiti samo njihov softverski paket
deljeni sklopovi
instaliraju se u poseban direktorijum globalni ke
sklopa
deljena biblioteka moe ih koristiti bilo koja druga
aplikacija

78

You might also like