You are on page 1of 65

PROGRAMSKI

JEZICI

Uvod
u
programske jezike

Dr Milica Vučković
Fakultet organizacionih nauka,
Beograd, 2007.
Broj programskih jezika
Veliki broj različitih programskih jezika je
razvijen i implentiran (preko 8000
programskih jezika - podatak iz 2006 )

Fortran, Cobol, Simula, Pascal, Algol, Modula-


2, PHP, Visual Basic, Lisp, Prolog, Smalltalk,
Java, JavaScript, C, C++, C# , ... ...

Fakultet organizacionih nauka,


Beograd, 2007.
Značajni uticaji na razvoj
programskih jezika

• Apstraktni nivoi jezika


• Aplikacioni domeni
• Komjuterske arhitekture
• Jezičke paradigme
• Implementacioni modeli

Fakultet organizacionih nauka,


Beograd, 2007.
Apstraktni nivoi programskih jezika
class
classTrougao
Trougao{{
viši programski jezik ......
float
floatp()
p()
return
return b*h/2;
b*h/2;
}}

LOAD
LOADr1,br1,b
niži programski jezik LOAD
LOADr2,hr2,h
(asemblerski jezik) MUL
MULr1,r2
r1,r2
DIV
DIV r1,#2
r1,#2
RET
RET
0001001001000101001001001
0001001001000101001001001
izvršni mašinski kod 110110010101101001 ...
110110010101101001...

Fakultet organizacionih nauka,


Beograd, 2007.
Apstrakcije u višim programskim
jezicima
• Bazne apstrakcije

• Strukturne apstrakcije

• Proceduralne apstrakcije

• Apstrakcije podataka

Fakultet organizacionih nauka,


Beograd, 2007.
Apstrakcije u programskim jezicima

• Bazne apstrakcije
apstrahovanje memorijskih ćelija, interne reperezentacije
primirtivnih tipova podataka i implementacije operacija nad
vrednostima tipova

• Strukturne apstrakcije
- Struktuirani tipovi podataka (apstrahovanje kolekcija
međusobno povezanih podataka – niz, zapis, lista)
- Kontrolne strukture (sekvenca, selekcija, iteracija)

Fakultet organizacionih nauka,


Beograd, 2007.
Apstrakcije u programskim jezicima
• Proceduralne apstrakcije
Sakrivanje složenog koda sa prostim interfejsom
proceduralne apstrakcije u višim PJ podržane su potprogramima
i proceudrama

• Apstrakcije podataka
sakrivanje interne reprezentacije korisničkih tipova podataka
pomoću skupa operacija (javni interfejs) preko kojih se stanja
objekata tipa jedino mogu menjati
koncept se u savremenim višim PJ implementira preko klase

Fakultet organizacionih nauka,


Beograd, 2007.
Aplikacioni domeni PJ

Razvijen veliki broj vrlo različitih


programskih jezika za različite aplikacione
domene.
domene

Aplikacioni domeni imaju karakteristične


potrebe

Fakultet organizacionih nauka,


Beograd, 2007.
Aplikacioni domeni PJ
• Poslovni domen
COBOL - projektovan za poslovnu obradu podataka
SUBP (sistemi za upravljanje bazama podataka)
• Inžinjerski domen
FORTRAN - projektovan za precizna numerička
računanja

• Veštačka inteligencija
logički i funkcionalni jezici

Fakultet organizacionih nauka,


Beograd, 2007.
Aplikacioni domeni PJ

• Sistemsko programiranje
operativni sistem UNIX napisan u C

• Internet i Web
veoma aktuelan domen; ovo distribuirano i
heterogeno okruženje uticalo je na razvoj
novih jezika koji su posebno pogodni za
njega
primer: XML (eXtensible Markup Language)
Fakultet organizacionih nauka,
Beograd, 2007.
von Neumann-ova komjuterska
arhitektura
Impertivni jezici baziraju se na von Neumann-ovom modelu

Primer:Pascal
a := b + c
Asembler
LOAD r1, b
LOAD r2, c
ADD r1, r2
STORE a, r1

Fakultet organizacionih nauka,


Beograd, 2007.
von Neumann-ova komjuterska
arhitektura
Glavne karakteristike imperativnih jezika:

• Promenljive: model memorijskih


lokacija
• Instrukcija dodeljivanja: promena
memorijskih vrednosti
• Program je niz instukcija:
sekvencijalno izvršavanje instrukcija

Fakultet organizacionih nauka,


Beograd, 2007.
Metode programiranja i njihov uticaj na
razvoj viših PJ

• Od 1950 do sredine 60-tih god. prošlog


veka: nepostojanje metoda programiranja

- proste aplikacije
- glavna briga efikasnost koda
- stariji programski jezici FORTRAN, COBOL)

Fakultet organizacionih nauka,


Beograd, 2007.
Metode programiranja i njihov uticaj na
razvoj viših PJ
• Kraj 60-tih i početak 70-tih god. prošlog
veka: glavna briga produktivnost u programiranju
(bzo i lako pisanje razumljivih programa)

- Strukturno programiranje
prva metoda programiranja, sistematičan pristup
razvoju razumljivih i korektnih programa
razvijen pj Pascal koji je u potpunosti podržavao
koncepte strukturnog programiranja
- Proceduralne apstrakcije

Fakultet organizacionih nauka,


Beograd, 2007.
Metode programiranja

• Kraj 70-tih:
Apstrakcija podatka (Apstraktni tip podatka)

• Sredina 80-tih:
Objektno-orjentisano programiranje

• 1995 do danas:
Web, Distribuirane aplikacije
Fakultet organizacionih nauka,
Beograd, 2007.
Vrste jezika (Jezičke paradigme)

Razlike između pojedinih vrsta


programskih jezika baziraju se na
modelu, tj. paradigmi koju
podržavaju

Fakultet organizacionih nauka,


Beograd, 2007.
Vrste jezika (Jezičke paradigme)

Četiri glavne vrste jezika:


• Imperativni
• Objektno-orjentisani
• Funkcionalni
• Logički

Fakultet organizacionih nauka,


Beograd, 2007.
Imperativni jezici
• Imperativni programski jezici apstrahuju
Von Neumann-ovu arhitekturu

• Program: sekvenca instrukcija

• Ključna opercija: dodeljivanje

Fakultet organizacionih nauka,


Beograd, 2007.
Imperativni jezici
• Podržava: bazne apstrakcije, strukturne
apstrakcije, proceduralne apstrakcije

• FORTRAN, COBOL, Pascal, C

Fakultet organizacionih nauka,


Beograd, 2007.
Funkcionalni jezici

• Funkcionalni jezici baziraju se na


matematičkim modelima (apstraktnoj
notaciji funkcija ), ali su implementirani
u von Neumann-ovoj arhitekturi

Fakultet organizacionih nauka,


Beograd, 2007.
Funkcionalni jezici
• Rad sa memorijom imlicitan (nema eksplicitne
deklaracije promenljivih)

• Jezik je netipiziran (nema eksplicitnih tipova,


provera tipova vrši se tek u vreme izvršavanja
programa

• Nema eksplicitne naredbe dodeljivanja

• Osnovni koncept je funkcija

Fakultet organizacionih nauka,


Beograd, 2007.
Funkcionalni jezici

• Program: funkcija

• Sintaksa: P1(P2(P3 (X)))


Funkcija se predstavlja listom karaktera, brojeva,
drugih funkcija; lista se zapisuje u paru malih
zagrada.

• Ključna operacija: primena funkcije


(rekurzivno ili kompozitno)

Fakultet organizacionih nauka,


Beograd, 2007.
Funkcionalni jezici
Primer LISP programa
defun factorial (n)
(cond ((equal n 1) 1)
(* n (factorial (- n 1))) )

• Funkcionalni jezici:
LISP, Scheme, Haskell

Fakultet organizacionih nauka,


Beograd, 2007.
Logički jezici
• Program: skup činjenica i pravila

- Cinjenica tvrđenje o nekoj osobini objekta ili vezi


između dva ili više objekta

- Primer:
otac(Petar, Milan)
cinjenica ima značnje “Petar je Milanov otac”

Fakultet organizacionih nauka,


Beograd, 2007.
Logički jezici
- Pravilo omogućava izvođenje o postajanju
osobine ili veze, koje se zasniva na
preduslovima

- Primer:
roditelj(X, Y) :- otac(X,Y)
“Osoba X je roditelj osobe Y AKO je X otac
osobe Y”

Fakultet organizacionih nauka,


Beograd, 2007.
Logički jezici
Primer Prolog programa:
otac (petar,milan).
majka(vesna,milan).
roditelj(M,D):-majka(M,D).
roditelj(O,D):-otac(O,D).

Izvršavanje programa zahteva se zadavanjem pitanja


(predikata):

?- otac(petar,milan)
yes

?- otac(petar,X)
milan
Fakultet organizacionih nauka,
Beograd, 2007.
Logički jezici
• Ključna operacija: unifikacija (izjednačavanje)
Unifikacijom se izjednačavaju vrednosti
promenljivih odnosno konstanti na istoj poziciji
istog predikata.

?- otac(petar,X)
milan

Postoji predikat otac(petar, milan), pa se X


“unifikuje” sa milan
Fakultet organizacionih nauka,
Beograd, 2007.
Logički jezici

• Logički jezici:
Prolog (PROgramming in LOGic),
Datalog

Fakultet organizacionih nauka,


Beograd, 2007.
Objektno-orjentisani jezici

• Objektno-orjentisana paradigma

9 osnovni koncept: objekat


9 Objekti se grupišu u klase
9 Objekat je izvršna instanca klase
9 ekstenzija imperativne paradigme

Fakultet organizacionih nauka,


Beograd, 2007.
Objektno-orjentisani jezici
• Program: komunikacija porukama između grupe
objekata

• Ključna operacija: prenošenje poruka

• Ključne karakteristike: apstraktni tipovi


podataka, nasleđivanje, polimorfizam

• O-O jezici:
Simula, Smalltolk, C++, Java, C#
Fakultet organizacionih nauka,
Beograd, 2007.
Ostale vrste jezika
• “Script” jezici
• Najraniji: komandni jezici (shell)
• Web script jezici: JavaScript, PHP
• “Markup” jezici
• HTML (HyperText Markup Language)
• XML ( eXtensible Markup Language )
• Upitni jezici
• Jezici za specifikaciju i modelovanje
• UML (Unified Modeling Language)
Language

Fakultet organizacionih nauka,


Beograd, 2007.
Specifikacija programskih jezika

• Sintaksa

• Semantika

Fakultet organizacionih nauka,


Beograd, 2007.
Specifikacija programskih jezika

• Sintaksa
definiše pravila za pisanje korektnih
programa u programskom jeziku
sintaksa jezika se opisuje pomoću
gramatike

• Semantika
značenje jezika

Fakultet organizacionih nauka,


Beograd, 2007.
Specifikacija PJ: Sintaksa

• Leksička specifikacija

• Sintaksna specifikacija

Fakultet organizacionih nauka,


Beograd, 2007.
Leksička specifikacija
• Za opis atomskih sintaksnih jedinica
(tokena) koristi se leksička specifikacija
(tzv. regularni izrazi)

• Tokeni u PJ su:
9 Identifikatori
9 Ključne reči
9 Operatori
9 Numeričke konstante
9 Specijalni znaci (zagrade, separatori, ..)
. . .

Fakultet organizacionih nauka,


Beograd, 2007.
Primer prevođenja teksta programa u niz
tokena

if Ključna reč

if (x > 20) ( Otvorena zagrada


x Identifikator
break;
> Operator
20 Num. konstanta
) Zatvorena zagrada
break Ključna reč
; Separator
Fakultet organizacionih nauka,
Beograd, 2007.
Leksički analizator

• Leksički analizator (skener) prepoznaje


tokene u ulaznom tekstu

• Leksička analiza je faza u procesu


translacije programa

• LEX – softverski alat za generisanje


skenera

Fakultet organizacionih nauka,


Beograd, 2007.
Sintaksa specifikacija PJ
• Za formalni opis sintakse PJ koriste se
konteksno-slobodne gramatike (Contex
Free Grammars)

• BNF (Backus-Naur form)


9 CFG obično se zapisuju u BNF notaciji.
9 Formalna notacija za opis sintakse jezika.
9 BNF prvi put korišćenja za opis sintakse
programskogh jezika ALGOL 60.
Fakultet organizacionih nauka,
Beograd, 2007.
BNF notacija
• BNF je meta jezik za programske jezike
• Sintaksa se specificira korišćenjem:
9 Skupa terminala (tokena)
9 Skupa neterminala
9 Skupa produkcionih pravila
9 Startni simbol

Æ BNF koristi apstrakcije za sintaksne strukture koje


se često nazivaju neterminali
Fakultet organizacionih nauka,
Beograd, 2007.
BNF notacija

Produkciono pravilo u BNF notaciji:

N ::= α

N - neterminal
α - sekvenca terminala i neterminala

Fakultet organizacionih nauka,


Beograd, 2007.
BNF notacija
if-instrukcija u C može se opisati pomoću
sledećeg pravila

<if-instrukcija> -> if ( <logicki-izraz> ) <instrukcija>


[ else <instrukcija> ]

9 <if-instrukcija>: apstrakcija koja se definiše


9 Tekst desno od strelice: definicija pravila koje se sastoji
iz tokena i neterminala (refenci na druge apstrakcije)

Fakultet organizacionih nauka,


Beograd, 2007.
Parsna stabla

• Atraktivna karakteristika gramatika je da opisuju


hijerarhijsku sintaksnu strukturu jezika.

• Takve hijerarhijske strukture nazivaju se parsnim


stablima

• Parsno stablo reprezentuje sintaksnu strukturu


programa

Fakultet organizacionih nauka,


Beograd, 2007.
Primer parsnog stabla za
num ‘*’ ‘(‘ num ‘+’ num ‘)’
U prasnom stablu
svaki interni čvor je neterminal,
<expr>
njegova deca su desni deo
pravila za taj neterminal
<expr>
expr <op> <expr>
expr

num ( <expr>
expr )
*
<expr>
expr <op> <expr>
expr

num + num

Fakultet organizacionih nauka,


Beograd, 2007.
Sintaksni analizatori (parseri)

• Parser je program koji, na osnovu gramatike,


proverava da li je data sekvenca tokena
ispravna ili ne, i generiše parsno stablo

• Sintaksna analiza je faza u procesu translacije


u kojoj se provera da li je program napisan skaldu sa
gramatikom jezika

• Softverski alati za generisanje parsera - YACC

Fakultet organizacionih nauka,


Beograd, 2007.
Specifikacija PJ: Semantika

Semantiku ili značenje jezika je teško


precizno i formalno opisati, jer se može
opisati na više različitih načina
• Neformalni pristup
• Pristupi za fomalni opis semantike
9 Operaciona semantika
9 Translaciona semantika
9 Aksiomatska definicija jezika
9 Denotaciona semantika

Fakultet organizacionih nauka,


Beograd, 2007.
Implementacione metode

• Kompajleri

• Interpreteri

• Hibridni implementacioni sistemi

Fakultet organizacionih nauka,


Beograd, 2007.
Implementacione metode:
Kompajleri
• Kompajleri: programi koji prevode programe
napisane u izvornom kodu u izvršni kod

- brzo izvršavanje
- sporija obrada grešaka koje se javljaju u toku
izvršavanja programa
- FORTRAN, C, COBOL, ADA

Fakultet organizacionih nauka,


Beograd, 2007.
Implementacione metode: Struktura
kompajlera

Fakultet organizacionih nauka,


Beograd, 2007.
Implementacione metode:
Interpreteri
• Interpreter: program napisan u izvornom
kodu interpretira se pomoću drugog
programa – interpretera (softverska
simulacija mašine)

- sporo izvršavanje
- brz razvoj programa i laka obrada grešaka
koje se javljaju u toku izvršavanja programa
- LISP, APL, SNOBOL,
- Web script jezici: JavaScript, PHP

Fakultet organizacionih nauka,


Beograd, 2007.
Implementacione metode:
Interpreteri

Fakultet organizacionih nauka,


Beograd, 2007.
Implementacione metode:
Interpreteri
Web-Client
Database
Web-Server Server
HTML-Form
(+JavaScript) Submit Call PHP DBMS
Data interpreter LAN

PHP SQL
Web-Browser WWW Script commands
Response Response Database
Reply Output

Fakultet organizacionih nauka,


Beograd, 2007.
Implementacione metode: hibridni
implementacioni sistemi

• Hibridni: prevode programe napisane u


izvornom kodu u međukod (intermediate
code) koji omogućava laku interpretaciju

• Java byte code – međukod;


interpretacija na JVM (Java Virtual
Machine)

Fakultet organizacionih nauka,


Beograd, 2007.
Implementacione metode: hibridni
implementacioni sistem

Fakultet organizacionih nauka,


Beograd, 2007.
Implementacione metode: Just-in-time
sistemi
Compilation
Source
Source Language
Language MSIL
MSIL
Code
Code Compiler
Compiler Metadata
Metadata

Neki od .NET jezika (C#,


VB.NET, J#, …)

Execution
Native
Native JIT
JIT
Code
Code Compiler
Compiler

Just-in-time kompajler - prevodi MSIL (Microsoft


Intermediate language) u mašnski jezik
Fakultet organizacionih nauka,
Beograd, 2007.
Implementacione metode: .NET izvršni
model
Source code VB C# C++

Compiler Compiler Compiler

Managed Assembly Assembly Assembly


code IL Code IL Code IL Code

Common Language Runtime

JIT Compiler

Native Code

Operating System Services


Fakultet organizacionih nauka,
Beograd, 2007.
Programerska okruženja
Programersko okruženje je kolekcija alata
koja se koristi u razvoju softvera

– kolekcija može da sadrži samo tekst-editor,


linker i kompajler

– ili to može da bude kolekcija integrisanih


alata, tako da se svakom pristupa preko
uniformnog korisničkog interfejsa

Fakultet organizacionih nauka,


Beograd, 2007.
Programerska okruženja
Primeri:
• UNIX – starije prog. okruženje; grafički korisnički
interfejs bio je glavni nedostatak.
• JBuilder – prog. okruženje koje uključuje kolekciju
integrisnih alata za razvoj Java aplikacija; pristup
alatima preko grafičkog korisničkog interfejsa
• Microsoft Visual Studio .NET – najnovije
softversko razvojno okruženje
Koristi se za razvoj softvera u jednom od sledećih pet
.NET jezika: C#, Visual BASIC.NET, Jscript, J#,
managed C++
Fakultet organizacionih nauka,
Beograd, 2007.
.NET Framework – novo razvojno i izvršno
okruženje

C#.NET VB.NET C++.NET JScript.NET ...

Common Type System - CTS Common Language Specification - CLS

Tehnologija za razvoj aplikacija


(Web Service, Web Forms, Windows Forms, Console Applications)

Class Libraries – Data and XML classes


(ADO.NET, SQL, XSLT, XPath, XML, ...)
Base Class Libraries – BCL
(IO, string, net, Security, Threading, text, Reflection, Collection, ...)

Common Language Runtime – CLR


(compiling, debbuging, type checking, JIT compilers, execution, exception)

Fakultet organizacionih nauka,


Beograd, 2007.
Kriterijumi za ocenu PJ

• Čitljivost
• Lakoća učenja i pisanja
• Pouzdanost
• Cena

Fakultet organizacionih nauka,


Beograd, 2007.
Čitljivost i razumevanje programa
Faktori koji utiču na čitljivost:
• Jednostavnost
jasne jezičke konstrukcije, svaka sa jedinstvenim
značenjem

• Kontrolne strukture

• Tipovi i strukture podataka

Fakultet organizacionih nauka,


Beograd, 2007.
Lako učenje i pisanje programa u PJ

Faktori koji utiču na lakoću učenja i pisanja:


• Jednostavnost

• Podrška apstrakcija – koje omogućavaju


višestruko korišćenje već napisanog koda

• Programersko okruženje

Fakultet organizacionih nauka,


Beograd, 2007.
Pouzdanost programa

Faktori koji utiču na pouzdanost:


• Provera tipa (Type Checking)

• Obrada grešaka (Exception handling)

• Ograničavanje alijasa (Aliasing)

• Čitljivost; lakoća učenja i pisanja


Fakultet organizacionih nauka,
Beograd, 2007.
Cena
Ukupna cena projektovanja i implementacije
programa u pj je funkcija više faktora:
• Cena obuke programera
• Cena/vreme pisanja programa
• Kompilacija
• Izvršavanje
• Pouzdanost
• Održavanje

Fakultet organizacionih nauka,


Beograd, 2007.
Značaj izučavanja koncepata PJ

• Lakše i brže učenje novih jezika

• Bolji izbor odgovarajućeg jezika za određeni


problem

• Novi načini razmišljanja u rešavanju


problema

• Bolje razumevanje važnosti implementacije

Fakultet organizacionih nauka,


Beograd, 2007.
Značaj izučavanja koncepata PJ

• Definisanje i implementacija sopstvenih


programskih jezika

• Primena teorije o kompajlerima u


aplikativnom softveru (gde god se zahteva
obrada netrivijalnog ulaznog teksta )

Fakultet organizacionih nauka,


Beograd, 2007.

You might also like