Professional Documents
Culture Documents
Odsjek za matematiku
UVOD U
KOMPJUTERSKE
NAUKE
Skripta
Pripremili:
doc. dr. Samir Ribiæ, Adnan Isajbegoviæ, Kemal Gu iæ, Edin Ajanoviæ, Zlatan Zametica,
Sanjin Ðogiæ, Maja imiæ, Jasmin Meru iæ, Sabina Karahod iæ, Valida Hamidoviæ, Edis
Heriæ, Azra Èau eviæ, Nedim enderoviæ, Imer Husejnoviæ, Adi Prijiæ, Sanela abanoviæ,
Faik Idrizbegoviæ, Ermin Hod iæ, Dino Èau eviæ, Emir Gegiæ
Sarajevo, maj 2010
1
Sadr aj
Programske paradigme............................................................
.......4
ièano programiranje................................................................
......8
Ma inski jezik....................................................................
...........................................................18
Asemblerski jezik...............................................................
...........................................................23
Stekovni jezici Forth i Postscript..............................................
..................................................30
Struktuirano programiranje......................................................
....59
Pascal..........................................................................
..................................................................62
Programski jezik C..............................................................
...........................................................65
Algol 60........................................................................
................................................................76
Algol 68........................................................................
................................................................77
PL/I............................................................................
...................................................................78
Ada.............................................................................
...................................................................80
Modula 2........................................................................
...............................................................81
XBASE...........................................................................
..............................................................82
BCPL............................................................................
................................................................83
Objektno-orijentisano programiranje..........................................85
C++.............................................................................
..................................................................87
Delphi..........................................................................
................................................................101
C#..............................................................................
..................................................................112
Python..........................................................................
...............................................................115
Ruby............................................................................
................................................................128
Deklarativno programiranje......................................................
..131
SQL.............................................................................
................................................................131
Funkcionalno programiranje......................................................
138
Lisp............................................................................
.................................................................143
ML..............................................................................
................................................................145
2
Miranda.........................................................................
..............................................................147
Haskell.........................................................................
...............................................................148
Logièko programiranje.............................................................
...150
Prolog..........................................................................
................................................................151
3
Programske paradigme
Prvi kompjuteri su bili programirani icama, tj. raznim kombinacijama, ice bi bile
spojene i
time bi bila obavljena operacija. Jedan od ranih primjera takvih kompjutera je I
BM 805 Test
Scoring Machine, iz 1936. godine, kojeg je napravio Reynold Johnson, srednjo kolsk
i
profesor, a koji je mogao obraditi testove na osnovu èitanja zaokru enih odgovora.
Prvi elektronski digitalni raèunar je Atanasoff-Berry
Computer (ABC) iz 1937. godine, koji je bio dizajniran
za rje avanje sistema linearnih jednaèina. Do 1973.
Godine se smatralo da je ENIAC bio prvi kompjuter, ali
je te godine poni ten patent u amerièkom patent
zavodu, i ABC je progla en prvim kompjuterom.
Tokom 2. svjetskog rata, Njemaèka se uveliko slu ila
ma inom za kodiranje nazvanom Enigma. Glavni cilj
Velike Britanije je bio razbijanje koda ove ma ine, ne bi
li time do li do vrijednih podataka za potrebe rata.
Razbijanje njenog koda ruènim putem nije bilo
moguæe, zbog glomaznosti, pa je tako u februaru 1944.
godine u Bletchley Parku pu ten u pogon Colossus,
prvi elektronski ureðaj kojeg je bilo moguæe
programirati.
Poslije su kompjuteri bili bazirani na binarnom kodu koji su predstavljali kontr
olne
sekvence u CPU. Gottfried Wilhelm Leibniz (1646-1716) je prvi razvio binarni kod
, te time
omoguæio osnovu za razvoj kompjuterskih nauka. Leibniz je poku ao razviti ma inu koja
bi
obavljala èetiri osnovne raèunske operacije. On je zami ljao ma inu koja bi radila na
principu kuglica smje tenim u bu enim karticama, a stanje da ima kuglice bi predstav
ljalo
stanje jedan, a ako nema kuglice, predstavlja stanje nula. Na ovom konceptu rade
dana nji raèunari, te se zbog toga èesto i smatra prvim nauènikom u oblasti informatike.
Da bi se programiranje olak alo, razvijeno je asemblersko programiranje. Ovo je za
mjenilo
ma insko programiranje. Asemblersko programiranje se smatra primitivnim jezikom, i
ako
je druga generacija, èak iako su tokom ezdesetih imali ogromne moguænosti, kao i
sofisticirane makroe. Takoðer, podr avali modularno-programerske opcije poput CALL
(pozivanje potprograma), eksterne varijable, operatore tipa READ/WRITE/GET/PUT,
itd.
Asembliranje se jo uvijek koristi u integrisanim sistemima.
Sljedeæi napredak je bio razvoj proceduralnih jezika. Ovo je treæa generacija jezika
, te
predstavljaju napredne jezike. Primjeri ovih jezika su COBOL (Common Business Or
iented
Language), FORTRAN (FORmula TRANslation), ALGOL (ALGOritmic Language), itd. koji
su uglavnom razvijeni za komercijalne i nauène potrebe, PL/1 (Programming language
1)
koji je razvijen kao hibrid za nauène i komercijalne potrebe, te BASIC (Beginners
All
Purpose Symbolic Instruction Code) namijenjen za iroku upotrebu. U ovim jezicima,
opisuje se korak po korak taèno kako procedura ide da bi se rije io problem. To znaèi
da je
brzina i efikasnost programa najvi e zavise od sposobnosti i iskustva programera.
Nakon toga, ranih 1980-ih je razvijeno objektno-orjentisani programiranje. Primj
eri su
Simula, Smalltalk, Eiffel, Java, C++, itd. Ovo je najuticajnija programska parad
igma u
komercijalnom razvoju softvera. U ovim jezicima, podaci i manipulacije podacima
se
predstavljaju kao objekat. Jedini naèin da korisnik pristupi ovim podacima je pute
m
podprograma. Radi ovoga, interni rad na objektima mo e biti promjenjen bez da se u
tièe
RekonstrukcijaColossusaiz 2006.godine
4
na bilo koji kod koji koristi taj objekat. U posljednje vrijeme su se èak nekim je
zicima koji
nisu klasièni objektno-orjentisane paradigme, dodavani objektno-orjentisani koncep
ti
(Visual Basic, Pascal, itd.)
Mnogi programeri i danas sumnjaju u efikasnost objektno-orjentisanih jezika u od
nosu na
proceduralne jezike. Jedna od glavni zamjerki jeste na mnogo bespotrebnih dodata
ka u
samom jeziku ili objektima, koji zauzimaju prostor, a èesto nisu ni potrebni ( Softw
are
bloat ). Kao moguæe rje enje razvijen je polimorfizam. Polimorfizam je osobina po kojo
j
objekat ima parametre razlièitih tipova, tj. jedan objekat odreðenog tipa se mo e kori
stiti
kao objekat drugog tipa. Recimo, ako se psu, zada funkcija govor(), onda on laje
, a ako se
zada maèki, onda mijauèe. Oboje naslijeðuje govor() od grupe ivotinje , ali njihove
podklasne metode prevladaju metode nadklase. Dodavanje medote hodanje grupi
ivotinje æe dati objektima maèkama i psima istu metodu hodanja. Nalijeðivanje
metodom polimorfizma omoguæuje klasi B da naslijedi metodu od klase A bez da mora
pruzeti sve osobine klase A. Primjer u C++:
#include <iostream>
#include <string>
using namespace std;
class Zivotinje
{
public:
Zivotinje(const string& name) : name(name) {}
virtual string talk() = 0;
const string name;
};
{
public:
Macka(const string& name) : Zivotinje(name) {}
virtual string talk() { return "Mijauu!"; }
};
{
public:
Pas(const string& name) : Zivotinje(name) {}
virtual string talk() { return "Vauu! Vauu!"; }
};
int main()
{
Zivotinje[] =
{
new Macka("Mica"),
new Macka("Macek"),
new Pas("Lesi")
};
delete zivotinje[i];
}
return 0;
5
Rezultat je sljedeci:
# Mica: Mijauu!
# Macek: Mijauu!
# Lesi: Vauu! Vauu!
push( hwString );
call stdout.puts;
end Pozdrav;
Èesto se HLA smatra ni im programskim jezikom, poput sliènih produkata tipa MASM
(Microsoft) ili TASM (Borland), to se zakljuèuje prilikom analize jednostavnijih pr
ograma
raðenim u njemu. HLA u sebi podr ava jednostavnije instrukcije ma inskog nivoa kao i
ostali x86 asembler, te se u njemu mo e pisati jednostavniji kod, sa ignorisanjem
HLL
(High Level Language) kontrolnih instrukcija.
Nezavisno od proceduralnih jezika, razvijene su deklarativne paradigme. U ovim j
ezicima,
kompjuteru se govori ta je problem, a ne kako ga rije iti. Program je struktuisan k
ao
kolekcija svojstava za pronala enje rezultata, a ne procedura koje treba slijediti
. Program
posjeduje bazu podataka, ili skup pravila, te na osnovu toga pronalazi rje enje ko
je sadr i
tra ena svojstva. Primjeri ovih jezika su SQL, te familije funkcionalih jezika (Sc
heme,
Erlang, Ocaml) i logièih programerskih jezika (ALF, Visual Prolog, XSB, Fril). Fun
kcionalni
jezici koriste blokove kodova koji se pona aju kao matematièke funkcije. Ovi jezici
se
uglavnom koriste u akademske svrhe. Primjeri gdje su ovi jezici iskori teni su
Mathematica, XSLT, itd.
Logièko programiranje se bazira na matematièkoj logici, tj. na logièkim formulama, a
program se izvr avaju kori tenjem suèelja sa setom pravila sve dok se ne pronaðe
odgovor na problem ili se komplet formula smatra nedosljednim. Zato se od progra
mera
oèekuje istinitost programa da bi funkcionisalo. Poèeci ovog tipa programiranja dati
ra iz
ranih 1960-tih, tokom debate o primjeni deklarativnih i proceduralnih jezika u r
azvoju
umjetne inteligencije. Danas se logièko-programski jezici koriste u rje avanju probl
ema u
civilnom in injerstvu, zraènoj kontroli, mehanici, itd.
6
7
O IÈENIANALOGNIDIGITALNI
DEKLARATIVNI IMPERATIVNI
FUNKCI-
ONALNI DOMENSKI LOGIÈKI NIZOVNI NISKOGNIVOA
VISOKOGNIVOA
MA INSKI STEKOVNIASEMB-
LERSKI NESTRUKTUIRANI STRUKTUIRANI
PROCEDURALNI OBJEKNI
OBJEKTNOORIJENTISANI OBJEKTNOBAZIRANI
S NASLJEÐIVANJEMKLASA S NASLJEÐIVANJEMOBJEKATA
ièano programiranje
Prvi raèunari su bili programirani direktno putem ica. Oni su bili povezani sa mnog
im
logièkim vezama; u poèetku izgraðeni pomoæu elektriènih releja, kasnije vakuum cijevi,
tranzistora i integriranih sklopova.
Relej je elektrièni pogon prekidaèa. Mnogi releji koriste elektromagnet za (pokretan
je)rad
mehanizma prekidaèa, ali i drugi principi se takoðer se koriste. Gornji sklop korist
i tri releja,
sa spiralom svakog od njih spojenih na jedan ulaz i uzemljenje. Stoga, releji æe s
e uvijek
aktivirati, kad god na njihove odgovarajuæe ulaze pustimo visoki napon.
Serijska veza prekidaèa osigurava da je uèinak AND kola (izlaza) pozitivan kada su s
vi
releji su aktivni. Krajnji rezultat je logièko AND kolo sa tri ulaza. Jaki pogon(e
nergija)
visoke vrijednosti na izlazu se intepretira kao logièka 1, a otvoreni (pokretni) k
ao logièka 0.
Donji sklop pokazuje odgovarajuæe NAND kolo s dva ulaza. Paralelni prikljuèak za rel
ejne
prekidaèe osigurava da æe izlaz biti logièka 1, dok najmanje jedan relej ostaje neakti
van.
8
Do sredine 1940-ih veæina raèunara su radije bili graðeni od vakuum cijevi nego od
prekidaèa i releja. Iako su vakuumske cijevi lomljive, skupe, i koriste puno energ
ije, one su
puno br e od releja (i puno ti e). Ako se zanemari Atanasoff ABC ma ina i Colossus, on
da
je prvi pravi (radni) opæe namjene, elektronièkih raèunala Electronic Numerical Integr
ator
And Computer (ENIAC) koji je konstruisan na Univerzitetu u Pensilvaniji izmeðu 194
3. i
1946.
Zamisao John William Mauchly (1907-1980) i J. Presper Eckert Jr. (1919-1995), EN
IAC
je bio èudovi te -bio je visok 10 stopa, zauzimao je 10002 stopa (podnog) prostora,
te ak
oko 30 tona, i koristi vi e od 70.000 otpornika, 10.000 kondenzatora, 6.000 prekid
aèa, i
18.000 vakuum cijevi. Konaèna ma ina je zahtijevala 150 kilovata snage, to je bilo
dovoljno da osvjetli mali grad.
Jedan od najveæih problema s raèunarima izgraðenim iz vakuum cijevi je pouzdanost;
90% ENIAC-a je izgubilo na vremenu propisanom za lociranje i zamjenu spaljenih c
ijevi.
Zapisi iz 1952. pokazuju da je oko 19.000 vakuum cijevi moralo biti zamijenjeno
samo u toj
godini, to je u prosjeku oko 50 cijevi na dan!
Analogni raèunar je forma raèunara koji stalno koristi promjenljive aspekte fizièkih p
ojava,
kao to su elektrièna, mehanièka ili hidraulièna velièina, da podesi problem iznala enja
rje enja. S druge strane, digitalni raèunari predstavljaju razlièite kolièine prirasta,
kao i
njihove brojèane promjene vrijednosti.
Mehanièko -analogni raèunari su bili vrlo va ni u kontroli obraèuna pi toljima u Drugom
svjetskom ratu i Korejskom ratu; proizvoðeni su u velikom broju.
Specifièno, razvoj tranzistora uèinio je elektronsko -analogne raèunare praktiènim, i pr
ije
nego to su se digitalni raèunari dovoljno razvili, oni (tranzistori) su se obièno kor
istili u
nauci i industriji.
Analogni raèunari mogu imati vrlo irok raspon slo enosti. Logaritmar ( iber)
9
nomogram[1] su najjednostavniji, dok su // (naval gun fire control computers and
large
hybrid digital/analogue computers) // bili meðu najslo enijim. Digitalni raèunari imaj
u
odreðeni minimalni (i relativno veliki) stupanj slo enosti koji je daleko veæi od
jednostavnijih analognih raèunara. Ta slo enost je potrebna za izvr avanje njihovih
pohranjenih programa, te u mnogim sluèajevima za kreiranje uèinka koji je direktno
pogodan za ljudsku upotrebu.
Postavljanje analognog raèunara iziskuje listu faktora da bude odluèeno; zajedno s
poèetnim uvjetima -tu je, startna cijena. Druga bitna stvar je kreiranje potrebne
mre e
povezivanja izmeðu elemenata za raèunanje. Ponekad je potrebno razmisliti o struktur
i
problema, tako da bi raèunar funkcionisao na zadovoljavajuæi naèin. Nijedna varijabla
ne bi
smjela prema iti raèunarske granice, a trebala bi se izbjeæi i diferencijacija, tipièno,
reorganiziranjem mre e meðusobnih veza kori tenjem integratora u drugaèijem smislu.
Pokretanje elektronskog analognog raèunara, pretpostavljajuæi da je pode en, poèinje
zadr avanjem raèunara sa nekim promjenljivim vezanim za njihove poèetne vrijednosti.
Aktiviranjem prekidaèa, on ili off pokreæemo program (zadatak)/raèunar. U nekim
sluèajevima raèunar se mo e, nakon pokretanja u odreðenom vremenskom intervalu, u
vi e navrata povratiti u poèetno stanje, ponoviti zadatak, i pokrenuti se opet.
Sliènost izmeðu linearno -mehanièkih komponenti, kao to su opruge i dashpots
(viskozno -fluidni amortizeri), i elektriènih komponenti, kao to su kondenzatori, i
nduktori, i
otpornici je upadljiva u smislu matematike. One mogu biti kreirane pomoæu jednad bi
koje
su u su tini istog oblika.
Kako god, razlika izmeðu ovih sistema je ono to èini analogno raèunanje korisno. Ako
se uzme u obzir jednostavan mno tvo opruga sistem, konstruisanje fizièkog sistema æe
zahtijevati pravljenje ili modificiranje opruga . Nakon toga bi uslijedilo njihovo
meðusobno
spajanje i postavljanje na odgovarajuæe mjesto, prikupljanje test - opreme s odgov
arajuæim
ulaznim rasponom, i na kraju, uzimanje mjera. U slo enijim sluèajevima, kao to su
amortizeri za trkaæe automobile, eksperimentalne konstrukcije, modifikacija, i tes
tiranje, to
nije tako jednostavno niti jeftino.
Elektrièni ekvivalent mo e biti konstruisan sa nekoliko operativnih pojaèala (OP pojaèal
a)
i nekih pasivnih linearnih komponenti; sva mjerenja se mogu direktno uzeti sa
osciloskopom. U sklopu, (simuliranog) 'èvrstina opruge ", na primjer, mo e se promij
eniti
pode avanjem potenciometra. Elektrièni sistem je analogija na fizièkom sistemu, otuda
ime, ali je manje skup za izgradnju, opæenit sigurniji i obièno je mnogo lak i za izmi
jeniti.
Takoðer, elektronski sklop u pravilu mo e raditi na vi im frekvencijama nego sistem ko
ji je
simuliran. To omoguæava da se simulacija pokreæe br e nego u stvarnom vremenu (koji bi
,
u nekim sluèajevima, bio u satima, sedmicama, ili du e). Iskusni korisnici analognih
elektronskih raèunara ka u da su oni ponudili relativno povjerljive kontrole, te
razumijevanje problema u odnosu na digitalne simulacije.
Nedostatak mehanièko-elektriène analogije je da je elektronika ogranièena rasponom nad
kojim varijable (promjenljive) mogu varirati (mijenjati vrijednosti). To se zove
dinamièki
raspon. Ona je takoðer ogranièena nivoom buke. Digitalni proraèuni pokretnim zarezom
imaju uporedivo ogroman dinamièki opseg (Dobro moderan priruèni, nauèni / in enjerski,
kalkulatori imaju eksponent 500.)
Ovi elektrièni sklopovi takoðer mogu lako izvesti niz razlièitih simulacija. Na primje
r,
napon mo e simulirati pritisak vode, a elektrièna struje mo e simulirati brzinu protok
a u
obliku kubiènih metara u sekundi. (U stvari, s obzirom na odgovarajuæi mjerni faktor
, sve
to je potrebno bi bio stabilan otpornik, u tom sluèaju.) S obzirom na protok i akum
ulirani
volumen tekuæine, jednostavan integrator kasni sa snadbijevanjem dok su obje varij
able
naponi. U praksi, struja je rijetko kori tena u elektroniènim analognim raèunalima, je
r je sa
10
preciznost
raèuna, a dok
je relativno
spor, pru a
praktièno bilo
koji stupanj
preciznosti
koji bi mogao
biti potreban.
// Poljski
Analogni raèunari
ELWAT //
Elektronski
naponom puno lak e raditi.
Analogna raèunala su posebno dobro namje tena da prikazuju situacije opisane
diferencijalnim jednad bama. Povremeno, oni (analog. raè.) su se koristili kada bi s
e
diferencijalna jednad ba pokazala vrlo te ka za rije iti standardnim sredstvima.
Digitalni elektronski sistem koristi dvije naponske razine da predstavi binarne
brojeve. U
mnogim sluèajevima, binarni brojevi su samo kodovi koji odgovaraju, na primjer, na
svjetlost primarnih boja, ili slova abecede (ili drugih simbola). Manipulacija t
ih binarnih
brojeva je naèin kako digitalni raèunari rade. Meðutim, elektronski analogni raèunar,
manipulira elektriènim naponom to odgovara dijelu va nosti u problemu koji se rije ava.
11
generatore, te analogne komparatore.
Induktori se nikada nisu koristili u tipiènim analognim elektronskim raèunarima, jer
je
njihovo odstupanje od idealnog pona anja preveliko za raèunanje bilo koje velike
preciznosti. Postavke analognog raèunara koje na prvi pogled zahtijevaju induktore
mogu
se preurediti i redefinirati za kori tenje kondenzatora. Kondenzatori i otpornici,
s druge
strane, mogu biti mnogo bli e idealnom nego induktori, to je razlog za to oni èine veæinu
pasivnih raèunalnih komponenti.
Upotreba elektriènih svojstava u analognim raèunarima znaèi da se izraèunavanja obièno
izvode u stvarnom vremenu (ili br e), brzinom odreðenom uglavnom frekvencijskim
odzivom operativnih pojaèala i ostalih raèunarskih elemenata. U povijesti elektronsk
ih
analognih raèunara, bilo nekih posebnih tipova visokih brzina.
Nelinearne funkcije i proraèuni mogu biti konstruisani sa ogranièenom precizno æu (tri i
li
èetiri_znamenke) dizajniranjem HYPERLINK
"http://en.wikipedia.org/wiki/Function_generator" funkcijonalnih generatora -pos
ebni
sklopovi razlièitih kombinacija otpornika i dioda za pru anje nelinearnosti. Obièno,
poveæanjem ulaznog napona, postupno se poveæava i broj provodivih dioda.
Kada se nadoknadi za temperaturu, prednji pad napona tranzistorske baze -emitera
,
mo e pru iti upotrebljivo taène eksponencijalne ili logaritmicke funkcije. Op pojaèala
podi u izlazni napon, tako da su iskoristiva u ostatku raèunara.
Bilo koji fizikalni proces koji vr i neko raèunanje mo e se tumaèiti kao analogni raèunar.
Neki primjeri, izmi ljeni u svrhu ilustriranja koncepta analognih raèunanja, ukljuèuju
kori tenje hrpe izolacijskih cijevi kao model za sortiranje brojeva; ploèa, skup nok
tiju, i
gumeni zavoj kao model za nala enje udubljene taèke u skupu taèaka (convex hull); i
nizovi vezani zajedno kao model pronala enja najkraæeg puta na mre i.
Analogni raèunari èesto imaju kompliciran okvir, ali u svojoj biti sadr e skup kljuènih
komponenti koje izvode kalkulacije; koji operator manipulira unutar okvira kompj
utera.
Kljuène hidrauliène komponente mogu ukljuèivati cijevi, ventile i spremnike.
Kljuène mehanièke komponente mogu ukljuèivati rotirajuæe osovine za pohranjivanje
podataka unutar raèunara, mitra (miter mo e znaèiti pored ostalog i klin) -zupèanik
diferencijala, disk / lopta / valjak integratora, kamere (2-D i 3-D), mehanièke rje a
vaèe
( resolvers) i multiplikatore i obrtne servo-e.
Kljuène elektriène / elektronske komponente mogu ukljuèivati:
Precizne otpornike i kondenzatore
operativna pojaèala
multiplikatore
mjeraèe napona
generatore odreðenih funkcija
Osnovne matematièke operacije kori tene u elektriènom analognom raèunaru su:
12
zbrajanje
integracija s obzirom na vrijeme
inverzija
mno enje
stepenovanje
logaritmiranje
dijeljenje, iako je mno enje mnogo preporuèljivije
Diferencijacija s obzirom na vrijeme ne koristi se èesto, a u praksi se izbjegava
redefiniranjem problema kada je to moguæe. Ona odgovara u frekvencijskoj domeni na
visoko-prolaznim (high pass filter, filter koji propusta visoke frekvencije i pr
opusta ih kao
niske frekvencije) filterima, to znaèi da se buke visoke frekvencije pojaèavaju, dok
je
diferencijacija isto rizièna za nestabilnosti.
Da bi se bolje razumio fizièki svijet, ponekad je potrebno koristiti matematièke mod
ele za
predviðanje reakcija razlièitih fizikalnih sistema, kao to je gibanje masa prikljuèenih
na
izvor, na vanjske podra aje, poput prisiljavanja. Kroz kori tenje diferencijalnih je
dnad bi,
postaje moguæe precizno modelirati pona anja takvih sistema No, ustvari je raèunski
kompleksno vidjeti grafièki prikaz rje enja ovih modela. Upalite analogni raèunar. Ana
logni
raèunari kroz kori tenje mno itelja, sabiraèa, i integratora mogu brzo i taèno predstavlja
ti
diferencijalne jednad be grafièki.
(Kako bi se modelirao prisilno, prigu eno titranje mase prièvr æene na oprugu,) mo emo
izgraditi analogni raèunar koristeæi sumatore i integratore. Kori tenjem diferencijaln
e
jednad be:
bili bismo u moguænosti odrediti odgovor sistema na sinus, trokut i kvadratne tala
se
frekvencija izmeðu 2 Hz i 2 MHz. U izgradnji na eg raèunara dizajnirali smo dva sklopa
.
Oba kruga predstavljaju iste diferencijalne jednad be, a druga se ispostavilo dale
ko
superiornija uodnosu na prvu.
Matematièka analiza:
Modeliranjem prigu enog kretanja, jaèina sistema mno tvo opruga je usmjerena na
diferencijalnu jednad bu:
13
gdje je M masa objekta prièvr æena na oprugu, Kd je konstanta prigu enja, Ks je
konstanta opruge, i F(t) je snaga funkcije. Da bi se rije ila ova diferencijalna j
ednad ba,
prvo se mora rije iti homogena jednad ba za dobivanje rje enja ovog sistema.
Rje avanjem homogene jednad be dobiva se rje enje oblika:
Dalje, za pojedina rje enja moramo rije iti originalnu jednad bu. Kori tenje Laplaceove
transformacije, mo emo transformirati jednad bu i rje enje za xL(s).
Zatim, pomoæu inverzne Laplaceove transformacije, mo emo rije iti za x (t). Rje avanje
ovog integrala æe nam dati rje enje diferencijalne jednad be koja je analogna modelu
raèunala.
Jednom kad imamo stabilan spoj dizajna, mo emo prijeæi na modeliranje jednad be sa
veæim sklopovima.
Dizajn na eg prvog analognog raèunala:
U na prvi sklop dizajna, poku ali smo direktno implementirati sklop, bez da ga se
umanjuje. Ovdje je originalni blok dijagram na eg jakog harmonièkog oscilatora.
14
I ovo je shema sklopa koji smo izgradili, zajedno sa otpornikom i vrijednosnim
kondenzatorom.
port (
IN1 : in std_logic;
IN2 : in std_logic;
end RTL;
Dok se primjer iznad mo e uciniti vrlo govorljivim (rjeèiv) za HDL poèetnike, treba imat
i
na umu da su mnogi dijelovi ili neobavezni ili trebaju biti napisani samo jednom
. I opæenito
jednostavne funkcije kao ova su dio veæeg modula djelovanja, umjesto da se ima odv
ojen
modul za ne to tako jednostavno. Osim toga, kori tenje elemenata poput tipa std_logi
c
mo e u poèetku biti overkill (preoptereæenje). Jedna mo e lako koristiti tip izgraðenih b
i izbjeæi uvoðenje biblioteke u poèetku. Meðutim, kori tenjem ovih 9 -logièkih vrijedosti (
U,X,0,1,Z,W,H,L,-) umjesto jednostavnih bitova ( 1 , 0 ) nudi vrlo opse ne simulac
ije i alat
za otkrivanje gre aka dizajnera koji trenutno ne postoji u bilo kojem HDL-u.
[1] je grafièki ureðaj za raèunanje, dvodimenzionalni dijagram dizajniran je da omoguæi
pribli no
grafièko izraèunavanje funkcije.
17
Programiranje u programskim jezicima niskog nivoa
Ma inski jezik
Od hardwarea pa prema softwareu
Raèunarski sistem sastoji se od hardvera i softvera. Hardver èine delovi raèunara, a
softver èine programi po kojima raèunar radi. Raèunar je ma ina bez inteligencije.
«Inteligencija raèunara nije ni ta veæa od inteligencije onog kontejnera pored fakulteta»*
.
Raèunar izvr ava samo ono to mu je zadato i to na naèin na koji mu je zadato.
Programom zadajemo raèunaru na koji naèin izvr ava poslove. Da bi re ili neki problem
kori æenjem raèunara, moramo raèunaru precizno opisati sve korake-instrukcije (naredbe)
koje on izvr ava redosledom koji mu je zadat. Skup instrukcija napisan za re avanje
nekog problema naziva se program, a pisanje instrukcija programiranje.
Za komunikaciju izmeðu ljudi koriste se jezici. Jezik je sredstvo za predstavljanj
e i
preno enje informacija, sredstvo za komunikaciju. Èovek mora na neki naèin da saop ti
raèunaru niz instrukcija koje on treba da izvr i. Programski jezik je sredstvo kojim
èovek
saop tava raèunaru program. Kori æenjem programskog jezika komuniciraju èovek i
raèunar. Prirodni jezici dopu taju nejednoznaènost i nepreciznost. Raèunar mo e
«razumeti» samo formalan zapis, ne toleri uæi ni najmanje nepreciznosti. Zbog toga je
do lo do razvoja programskih jezika koji omoguæavaju zapis niza instrukcija raèunaru k
oje
se ne mogu vi eznaèno protumaèiti. Jednoznaènost svake konstrukcije programskog
jezika je njegova najbitnija karakteristika. Programski jezik je skup pravila ko
jim se
predstavljaju instrukcije i opisuju podaci raèunaru.
Razlikujemo tri nivoa programskih jezika:
ma inski jezik
simbolièki jezik
jezici vi eg nivoa
Ma inski zavisni jezici
Najjednostavniji programski jezik je interni jezik raèunara ma inski jezik.
Najva niji delovi raèunara izgraðeni su od elektronskih i magnetnih komponenti, koje
karakteri u dva stabilna stanja (ima napona nema napona, teèe struja -ne teèe struja,
severni pol ju ni pol). Zbog tehnièke realizacija raèunara u raèunari se sve predstavlja
pomoæu dva simbola 0 i 1, binarnom azbukom. Jedan znak binarne azbuke predstavlja
bit
(binary digit). Sve informacije u raèunaru predstavljaju se nizom bitova grupisani
m u grupe
od 8, 16, 32, 64 bita. Grupa od 8 bitova naziva se bajt (byte).
Ma inski jezik je izgraðen nad binarnom azbukom. Sve operacije i svi podaci
predstavljeni su nizom bitova. U zavisnosti od arhitekture raèunara ti nizovi bito
va imaju
razlièita tumaèenja i razlièite su velièine.
Kako se ma inski program sastoji od niza nula i jedinica, i zahteva dobro
poznavanje naèina rada i arhitekture odreðenog raèunara, vrlo je te ko programirati na
njemu. Programi na prvim raèunarima bili su zapisani ma inskim jezikom, i to je uslo
vilo da
uzak krug ljudi pi e i odr ava programe.
**prof.dr. eljko Juriæ, sa predavanja.
18
Da bi se premostile pote koæe pisanja programa na ma inskom jeziku dolazi do
razvoja simbolièkih jezika. Umesto instrukcija pisanih nizom bitova uvedene su
mnemotehnièke skraæenice za operacije i simbolièke oznake podataka npr. naredbom
ADD a, b vr i se sabiranje podataka a i b. Na taj naèin proces programiranja je u zn
atnoj
meri olak an, ali i dalje zavisi od konkretnog procesora, tj. i dalje je potrebno
poznavati
tehnièke karakteristike konkretnog raèuna za koji pi emo program. Da bi se program
napisan na simbolièkom jeziku izvr avao na raèunaru mora se prethodno prevesti na
ma inski jezik. Kako svakoj naredbi simbolièkog jezika odgovara jedna naredba
ma inskog jezika, posao je automatizovan tako to je napisan program koji kao ulaz d
obija
program napisan u simbolièkom jeziku, a kao izlaz odgovarajuæi program na ma inskom
jeziku. Program koji vr i prevoðenje iz simbolièkog u ma inski jezik naziva se asembler
( translator). Po tom nazivu simbolièki jezik se èesto naziva asemblerski jezik ili
kraæe
asembler. Napomenimo da skup naredbi simbolièkog jezika zavisi od arhitekture raèuna
ra,
pa program napisan u simbolièkom jeziku za jedan raèunar ne mo e se koristiti za raèunar
druge arhitekture, veæ se mora ponovo pisati. Èesto za ma inske i simbolièke jezike
ka emo da su ma inski zavisni jezici. Va no je istaæi da pri programiranju na ma insko
zavisnim jezicima programer morao vrlo detaljno, u malim koracima opisati re avanj
e
problema. Mo emo to uporediti sa procesom gradnje kuæe pri èemu moramo voditi raèuna
o polo aju svake cigle, daske i slièno. Jasno je da pri gradnji kuæe u jednom momentu
moramo detaljno opisati polo aj svake cigle, tj. elemente kuæe predstavljati i na ta
j naèini,
ali pri izradi samog projekta lak e i razumljivije je govoriti o veæim jedinicama np
r. soba,
kuhinja, vrata, prozor i slièno. Kako to izgleda kada koristimo raèunare upoznajmo n
a
sledeæem primeru. Pretpostavimo da treba da saberemo èetri broja. U vi im programskim
jezicima to radimo kori æenjem jedne instrukcije (npr. x=a+b+c+d), kada koristimo
simbolièki jezik prva instrukcija alje prvi podatak u poseban registar (akumulator)
zatim
sledeæom instrukcijom dodajemo drugi broj sadr aju registra i tako dok ne dodamo i
poslednji broj, poslednja instrukcija je preme tanje konaènog rezultata iz registra
u
memoriju.
Maternji jezik raèunara
Veæina stonih raèunara, kako èesto ka emo, radi na bejziku. Ova tvrdnja je samo
delimièno taèna: stoni raèunari, sa gledi ta korisnika, rade na bejziku jer on kuca nard
be
na tom jeziku i na njemu dobija odgovore od raèunara. Sam raèunar ne "razume" bejzik
- u
njegov ROM je ugraðen vrlo slo en program koji naredbe bejzika prevodi na za raèunar
jedino razumljiv jezik -ma inski jezik ili mikrokod -koji se sastoji od velikih ni
zova nula i
jedinica. Maternji jezik raèunara se, dakle, ne odlikuje velikom koncizno æu i pregled
no æu
(razumljivosti da i ne govorimo), a ipak je bolji od bilo kog postojeæeg programsk
og jezika!
Èitavo ovo poglavlje posveæeno je onima koji, poznavajuæi blagodeti bejzika, ele da se
upuste u pisanje ma inskih programa. Zar ima takvih? Ima ih, i to mnogo -svaki ozb
iljan
vlasnik raèunara æe, pre ili posle, preæi na ma inski jezik. Zato, pre nego to preðemo na
ovaj jezik, moramo da objasnimo potrebu za njim.
Razgovor bez prevodioca
Pre svega, zamislite da razgovarate sa nekim Francuzom ne znajuæi njegov jezik.
Razgovor se, dakle, odvija preko prevodioca. Oèigledno je da je potrebno vreme da
ono
to ste eleli da ka ete objasnite prevodiocu, pa zatim on prevede va u reèenicu, saop ti
je Francuzu, razume njegov odgovor i prevede je vama. Isto je tako i kod raèunara
prevoðenje
svake naredbe traje dugo. Ako se jedan ciklus u programu izvr ava 1000 puta,
naredbe unutar tog ciklusa æe 1000 puta biti prevoðene. Programi koji rade na ma insko
m
19
jeziku zato, po pravilu, rade 40-100 puta br e od odgovarajuæih BASIC programa!
Problemi sa brzinom æe, u daljem razvoju raèunara, verovatno biti prevaziðeni, ali pot
reba
za ma inskim jezikom neæe. Mo ete li Francuzu sa kojim razgovarate posredstvom
prevodioca da saop tite taèno ono to mislite? Njemu ne govorite vi nego prevodilac; o
n
nehotice modifikuje neke va e reèenice tako da se nijansa njihovog znaèenja mo e lako
promeniti. Bejzik omoguæava realizaciju èak i vrlo slo enih programa za obradu podatak
a,
ali kada se doðe do osetljive oblasti rada sa periferijskim jedinicama ( tampaèem,
ploterom, modemom i, naroèito, disk-jedinicom) poèinju da se javljaju "nesporazumi"
korisnik
taèno zna ta bi raèunar trebalo da uradi, a raèunar radi ne to slièno tome, ali ne
to! Korisnik tada, u veæini sluèajeva, modifikuje svoje potrebe, to izaziva delimièni g
ubitak
poverenja u raèunar.
I ovaj problem mo e da bude prevaziðen bez ma inskog jezika -postoje specijalizovani
vi i programski jezici za rad sa periferijskom opremom. No, vratimo se opet razgov
oru sa
Francuzom i prevodiocu: ta ako elite da razgovarate o nekoj specifiènoj temi (npr.
raèunaru ZX Spectrum) koju i vi i sagovornik odlièno poznajete ali prevodilac o njoj
nema
pojma? Proæi æe mnogo, mnogo vremena dok prevodilac ne shvati ono to elite da
ka ete; njegov prevod æe, u nedostatku poznavanja struènih termina, postati nerazumlji
v i
na kraju æete morati da prekinete razgovor. Nikada ni jedan konstruktor raèunara i
programskih jezika neæe moæi da predvidi sve potrebe korisnika i da obuhvati sve obl
asti u
kojima æe raèunar biti kori æen! Ma inski jezik omoguæava korisniku da natera raèunar da
radi taèno ono to njemu treba bez posredstva operativnih sistema. Pomoæu ma inskog
jezika realizuje se slo eni softver za obavljanje specifiènih potreba koji, kasnije,
lako mo e
da preraste u poseban programski jezik.
Treba, ipak, reæi da veæina proseènih korisnika raèunara poèinje da pi e ma inske
programe ne zbog zadovoljavanja potreba za nekim sasvim specifiènim aplikacijama
raèunara veæ da bi programi za igre br e radili. Ovo se posebno odnosi na vlasnike spo
rog
ZX81.
Ma inska abeceda
Iako su ma inski jezici, kao to smo rekli, nizovi jedinica i nula, oni se prikazuju
na ne to
pogodniji naèin preko mnemonièkih skraæenica. Pre svega, jedinice i nule treba pretvor
iti u
heksadekadne brojeve (smatramo da vam je poznato ta su heksadekdani brojevi -u
njima se, osim cifara 0-9, javljaju i slova A, B, C, D, E i F, koja redom predst
avljaju "cifre"
10, 11, 12, 13, 14 i 15). Zatim se heksadekadni brojevi grupi u dva po dva (jer su
dve
heksadekadne cifre jedan bajt dok se, sa stanovi ta memorije, jedna heksadekadna c
ifra
naziva "nibble". Zatim se programske instrukcije zamenjuju skraæenicama koje opisu
ju
njihovo dejstvo. Kod procesora Z80 se, na primer, èesto koristi naredba LD A, H ko
ja se
heksadekadno kodira kao 7C. Skraæenica LD dolazi od "load" i znaèi: prenesi sadr aj
registra H u registar A (akumulator).
Za pisanje programa na ma inskom jeziku potrebno je, najpre, shvatiti strukturu na
redbi.
Svaka naredba se sastoji od mnemonièke skraæenice (u gornjem primeru to je bilo LD)
koja se prevodi u dve ili èetiri heksadekadne cifre (jedan ili dva bajta). Iza skr
aæenice se
pi e adresni deo koji govori raèunaru gde se nalaze podaci koje treba da obraðuje. Ova
j
adresni deo mo e da bude neki od procesorskih registara (B, C, D, A, E, H, L kod
procesora Z80, na primer) ili adresa nekog bajta memorije. Naredba LD A, (7530),
na
primer, prenosi sadr aj memorijskog bajta èija je adresa 7530 (ova adresa je
heksadekadna i njoj odgovara dekadna adresa 30000) u procesorski registar A radi
20
obrade.
Kada smo napisali program u mnemonièkim skraæenicama, pristupamo njihovom
pretvaranju u heksadekadne brojeve. Za to mo emo da koristimo tabelu (prema njoj s
e
gore pomenuta naredba LD A, (7530) prevodi sa 3A 30 75) ili gotov program koji v
r i
prevoðenje. Ovakav program mo e da bude vi e ili manje slo en, a vrlo su popularni
slo eni "asembler programi" koji omoguæavaju uno enje skraæenica, ispravljanje,
prevoðenje programa i snimanje na kasetu. Ukoliko radimo manuelno, treba dobijene
heksadekadne brojeve pretvoriti u dekadne (za to se koristi bejzik program ili,
najèe æe,
neki programabilni d epni raèunar) i uneti ih memoriju pomoæu naredbe POKE.
Da sve ovo ne bi ostalo na nivou teoretisanja, sastaviæemo kratak ma inski program k
oji
uveæava sadr aj nekog bajta memorije za 1 i odgovarajuæi prateæi bejzik program.
Ma inski program je pisan za procesor Z80 koji poseduje veæina popularnih modela
(ZX81, Spectrum, TRS 80...) koji su kod nas zastupljeni. Na ma inski program æe
poèinjati od adrese 30000 (heksadekadno 7530) i imaæe svega èetiri instrukcije. Prva
instrukcija (LD A, (753A)) æe u registar A (èesto se naziva i akumulator) dovesti br
oj koji se
nalazi na adresi 753A (dekadno 30010), sledeæa æe poveæati sadr aj registra A za jedan
(INC A), zatim æe sadr aj akumulatora biti vraæen na odgovarajuæe mesto u memoriji (LD
(753A),A) i na kraju æe se izvr avanje ma inskog programa prekinuti (naredba RET) i
raèunar æe se vratiti u bejzik program iz koga je usledio poziv ma inskog. Ceo program
,
kodiran, izgleda ovako:
7530 3A 3A 75 LD A, (753A)
7533 3C INC A
7534 32 3A 75 LD (753A),A
7537 C9 RET
Sa leve strane se nalaze adrese instrukcija, a odmah do njih su same instrukcije
predstavljene kao heksadekadni brojevi. Mnemonièke skraæenice su ispisane pored njih
radi kompletnosti - one raèunaru ni ta ne znaèe.
Rutine iz ROM-a
Program glasi 3A 75 3A 3C 32 75 3A C9 ili, kada ove brojeve pretvorimo u dekadne
: 58
117 58 60 50 117 58 201. Sada nam ostaje da sastavimo bejzik program koji æe uneti
ma inske instrukcije u memoriju, a zatim demonstrirati rad programa:
10 FOR I=0 TO 7
20 READ A
30 POKE 30000+I,A
40 NEXT I
50 INPUT A
60 POKE 30010,A
70 CALL 30000
80 PRINT PEEK 30010
90 GOTO 50
100 DATA 58,117,58,60,50,117,58,201
Nije te ko razumeti rad programa. Najpre se iz DATA naredbe u memoriju unosi ma insk
i
program koji poèinje od adrese 30000. Zatim se od korisnika tra i da otkuca neki bro
j
(podrazumeva se da je taj broj manji od 256), a zatim raèunar poziva potprogram i
na
ekranu prikazuje rezultat.
21
Èak i na ovom jednostavnom primeru se vidi koliko se ma inski programi razlikuju od
raèunara do raèunara. ZX81, na primer, ne poseduje naredbe READ i DATA, pa bi
uno enje programa moralo drukèije da se organizuje. Naredba CALL 30000 bi kod mnogih
raèunara morala da se zameni sa, na primer, B=USR(30000), a kod nekih drugih bi br
oj
30000 morao da bude sme ten negde u memoriji, pa bi se koristilo B=USR(0). Kod
raèunara koji ne koriste Z80 procesor morale bi da se izvr e korenite izmene: èitav
ma inski program bi, to se kodova tièe, bio sasvim razlièit, a mo da ne bi imao ni isti b
roj
naredbi. Kada bismo ovaj program eleli da primenimo na raèunaru BBC model B, sve
instrukcije bejzik programa bi morale da budu promenjene, a neke uop te ne bi lièile
na
one koje smo koristili!
Lako je primetiti da sastavljanje ma inskih programa nije ni malo jednostavan posa
o. Na
program je "znao" gde se nalazi argument operacije koju treba da izvr i i gde da s
mesti
rezultat. Da smo, meðutim, bili ambiciozniji i po eleli da elimini emo potrebu za bejz
ik
programom i da na ma inskom jeziku realizujemo uno enje broja sa tastature i
prikazivanje rezultata na ekranu, na program bi se produ io na stotinak instrukcija
. Ba u
ovome i le i ume nost dobrog programera: cilj je upotrebiti rutine iz ROM-a raèunara z
a
obavljanje nekih zadataka! Raèunar, jasno, negde u ROM-u ima potprogram koji slu i z
a
uno enje podataka sa tastature (ovaj potprogram se koristi za bejzik naredbu INPUT
). Zar
ne bi bilo bolje pozvati ovaj program? Na alost, ROM je toliko veliki da ovaj pro
gram nije
lako pronaæi, a nije lako ni zakljuèiti u kom æe se memorijskom bajtu nalaziti broj ko
ji je
korisnik otkucao posle njegovog izvr avanja.
Zakljuèak
Specifiènost svakog raèunara èine elektronske komponente, njihova logièka povezanost,
kao i njihovo funkcionisanje. Rijeè predstavlja niz bita, odnosno nula i jedinica.
Du ina
rijeèi je broj bita koji je saèinjavaju. U/I jedinica mo e da omoguæi serijski (bit po b
it) ili
paralelni (svi bitovi odjednom) prenos podataka odnosno instrukcija. Repertoar i
nstrukcija
(broj raspolo ivih instrukcija) zavisi od vrste i tipa raèunara. Do kraja 60-tih god
ina
organizacija upravljaèke jedinice zavisila je od repertoara instrukcija. Primjenom
koncepta
mikroprogramiranja omoguæeno je da se operacija (instrukcija) formira od elementar
nih
operacija nazvanih mikrooperacije. Binarni kodovi mikrooperacija nazivaju se
mikroinstrukcije. Umjesto binarnog koda operacije formiraju se mikroprogrami, ko
ji
predstavljaju skup mikroinstrukcija i koji se smje taju u upravljaèku memoriju. Repe
rtoar
instrukcija kod raèunara sa mikroprogramiranjem mo e se jednostavno mijenjati
dopisivanjem novih mikroprograma.
22
Asemblerski jezik
Asemblerski jezici su porodica ni ih jezika za programiranje raèunara,
mikroprocesora, mikrokontrolora i drugih (obièno) integriranih sklopova. Oni provo
de
simbolièan prikaz brojèanih kodova i ostalih konstanti potrebne da se programiraju
posebne CPU arhitektre. Ova reprezentacija je obièno definiran od strane proizvoðaèkog
hardvera, a temelji se na kratice (zvane mnemotehnike) koji poma u programeru da s
e
sjeti pojedinih uputa, registara, itd. Asemblerski jezik je tako specifièan za odr
eðene
fizièke (ili virtualne) raèunarske arhitekture. To je u suprotnosti s veæinom jezika v
isoke
razine, koji se (idealno) prenose.Korisnièki program koji se zove asembler i koris
ti se za
prevoðenje izvje taja asemblerskih jezika u odreðeni ma inski kod. Asembler obavlja vi e
ili manje izomorfne prijevode (jedan-na-jedan preslikavanja) iz mnemonièke izjave
u
ma inske instrukcije i podatke. To je u kontrastu sa programskim jezicima visoke r
azine, u
kojima jedna izjava opæenito je rezultat mnogim ma inskim uputama.Mnogi sofisticiran
i
assembleri nude dodatne mehanizme kako bi se olak ao razvoj programa, su tisku
kontrolu procesa, pomoæ i ispravljanje gre aka. U posebnim , najmodernim asemblerski
m
jezicima ukljuæene su i makro objekti( macro , opisane u nastavku), a nazivaju se makr
o
asembleri.
Asembler
Tipièno moderni asembler stvara objektni kod prevodeæi mnemotehnièke instrukcija
u opcode, te rje avanjem simboliènih imena za memorijske lokacije i drugih subjekata
.
Kori tenje simbolièke reference je kljuèno obilje je asemblera ,spremanje dosada njih
proraèuna i adresa nakon uploada programske modifikacije. Veæina asembler takoðer
ukljuèuje makro objekate za obavljanje tekstualne zamjenue -npr, za stvaranje zaje
dnièke
sekvence, kratke upute kako inline , umjesto naziva potprograma, ili èak i generirati
cijeli
plan programa. Asembler se opæenito jednostavnije mo e napisati nego programski jezi
ka
visoke razine, a moguæe je od 1950 godine. Moderni asembler, posebno je temelj za
RISC
arhitekture, kao to je MIPS, Sun SPARC, i HP PA-RISC, kao i x86 (-64), za optimiz
iranje
maksimalnog potencijala rada cijevi CPU-a. Postoje dvije vrste asemblera, koji s
e temelje
na koliko prolaza je potrebne za izrade datoteke programa:
Prva vrsta One-pass asembler prolazi kroz izvorni kod jednom i pretpostavlja da
æe svi simboli biti definiran prije bilo kakve upute.
Druga vrsta Two-pass asembleri (i Multi-pass asembleri) koji izraðuju tablice
sa svim nerije enim simbolima u prvom prolazu , zatim upotrijebe drugi prolaz za
rje avanje ovih adresa. Prednost one-pass asemblera je brzina, koja nije tako
va na kao to je nekada bio s napretcima u brzini i sposobnosti raèunara. Prednost
two-pass asemblera je da simbol se mo e definirati bilo gdje u programu. Kao
23
rezultat toga, program se mo e definirati na vi e logiènih naèina. To èini s dva
prolaza asemblerski program za lak e èitanje i odr avanje.
Sofisticirani asemblerski jezici visoke razine pru aju apstrakcije kao to su:
0-adresni (nulta adresna ma ina), tzv. stack ma ina : sve aritmetièke instrukcije
odvijaju pomoæu vrh jedne ili dviju pozicija na stack-u, naredbe su: push i pop up
ute
se koriste za pristup memoriji:push a, push b, add , pop c.
1-adresni (jednoadresa ma ina), tzv. akumulator ma ina, ukljuèuje veæinu starijih
raèunara i mnoge male mikrokontrolere. Veæina uputa odredi jednog izrièito prvu
naredbu (registar, memorijsku lokaciju) sa implicitnim akumulatorom: load, add b
,
store c. Vezana klasa je praktièno stack ma ini koje èesto omoguæavaju jedan
eksplicitnu naredbu u aritmetici instrukcije: push a, add b, pop c.
2-adresni (dvoadresna ma ina) -neke RISC i mnoge CISC ma ine spadaju u tu
26
kategoriju. Za RISC ma inu (zahtijeva eksplicitnomemorisko pamæenje), upute æe biti:
load a, reg1; load b, reg2; add reg1, reg2; store reg2, c;
print_s_loop
add.b (a2)+,(a3)+
beq print_s_done
trap #14
bra print_s_loop
Vax 11 (3 adresni):
loop3:
MULF3 (R5)+, (R6), R9 ; R9 <- A[i, k]*B[k, j] and
Makroji (Macro)
Mnogi asembleri podr avaju predefinirane makronaredbe, a drugi podr avaju
28
programer-defined makronaredbe koje ukljuèuju sekvence linije teksta u koje su stavl
jene
varijable i konstante. Ovaj slijed teksta linija ukljuèuje slijed instrukcija, ili
slijed za pohranu
podataka pseudo-OPS-a. Jedan makro je definiran koristeæi odgovarajuæi pseudo-op.
Kada asembler obradi takve izjave, on zamjenjuje izjavu sa tekst linije vezane u
z taj
makro, onda obraðuje ih kao da su se pojavili u izvornom kodu datoteke svi zajedno
(ukljuèujuæi, bolje asembler, irenje makronaredbi koje se pojavljuju u zamjenski teks
t).
Buduæi da makronaredbe mogu imati kratka imena, ali pro iriti na vi e ili zaista puno li
nija
koda, oni se mogu koristiti kako bi smo asemblerske programe puno skratili (zaht
ijevaju
manje linija koda iz programer aplikacija, kao i vi i nivo jezik). Oni se takoðer mo
gu koristiti
za dodavanje vi e razinskih struktura programa. Mnogi asembleri imaju izgraðene (ili
unaprijed definirane) makronaredbe za sistemsko pozivanja i drugih posebnih broj
nih
sekvenci, kao to je stvaranje i pohranu podataka realizirana kroz naprednu Boolean
operaciju nad bitovima koji se koriste u igricama, softver sigurnosti, upravljanj
e podacima
i kriptografiji. Makro asembleri èesto dopu ta makronaredbi da uzimaju parametre. Ne
ki
asembleri ukljuèuju prilièno sofisticirane makro jezike, koji ukljuèuje elemente visok
ih
programskih jezika kao dodatne parametre, simbolièke varijable, kondicionale, niz
manipulacija i aritmetièkih instrukcija, sve kori teno za vrijeme izvr avanja date
makronaredbe. Makronaredbe dozvoljavaju i spremanje konteksta tj. razmjenu infor
macija
. Tako makronaredbe mogu generirati veæi broj asemblerski jezika, na temelju makro
argumenata. To bi se moglo koristiti za generiranje strukture podataka ili "unro
lled" petlje,
na primjer, ili bi se mogli generisati cijeli algoritmi utemeljeni na slo enim par
ametrima.
Npr. : Organizacija koristi asemblerski jezik koji je sna no pro iren pomoæu
makronaredbi,tada se on mo e smatrati vi em programskim jezikom. Makroi su kori teni
za prilagodbu sistema velikih razmjera softver za odreðene kupce u mainframe doba, a
takoðer su kori teni od strane kupca da svoje osoblje zadovolje potrebama izrade
posebne verzije proizvoðaèa operativnih sistema, a to se dogodilo, na primjer, siste
mski
programeri rade s IBM-ovim Monitor System / Virtual Machine (CMS / VM) i sa IBM-
ovim
"real time transaction processing" ("stvarnom vremenska obrada transakcije") dod
atkom,
CICS (Customer Information Control System) a ACP / TPF, airline / financijskom s
istemu
koja je zapoèela u 1970-ih i dalje radi mnoge velike Global Distribution Systems (
GDS) i
kartiènog sistema danas. Takoðer je moguæe koristiti iskljuèivo makro obradu. Moguænosti
generirati asemblerski kod napisan u potpuno razlièitim jezicima, na primjer, za
generisanje verzije programa u COBOL-u koristeæi èisti program makroasemblera, sadr e
linija koda unutar COBOL-a. To je zato to, kao to je realizirana u 1970-ih, pojam m
acro
processing ( obrada makronaredbe ) je neovisna od pojma assembly ("asembler"),
modernom smislu rijeèi obrada, obrada teksta, nego objekt generiranog koda. Koncep
t
makro obrade, u stvari su se pojavila i pojavljuje se u programskog jezika C, ko
ji podr ava
"preprocesor upute" za postavljanje varijabli. Imajte na umu da za razliku od pr
ethodnih
odreðene makro procese unutar asemblera, C preprocesor nije Turing-complete (Turingpo
tpun),
jer nisu imali moguænost da koriste petlje ili "go to". Unatoè moæ makro obrade, to
je zapu teno na vi im programskim jezicima, a preostalih trajnica za asembler. To je
zato
to mnogi programeri su bili prilièno zbunjeni makro parametarima supstitucijom.
29
Stekovni jezici Forth i Postscript
Forth je strukturiran, zahtjevan, reflektivan, stack-Baziran programski jezik .F
orth se
ponekad pi e velikim slovima nakon uobièajene upotrebe tijekom ranijih godina, iako
ime
nije akronim. Proceduralni programski jezik, bez provjere tipa, Forth ima intera
ktivne
znaèajke oba izvr enje naredbi ( to ga èini pogodnim kao ti za sustave koji imaju
nedostatak formalnog operativnog sustava) i sposobnost za prikupljanje sekvenci
naredbi
za kasnije izvr enje. Neke Forth implementacije (obièno rane verzije ili one pisane
za
iznimno lak prenos) navojem kompajlirani kod, ali mnoge druge implementacije. Ia
ko nije
popularan kao drugi programski sistemi, Forth ima dovoljno podr ke za prodaju i
izvoðenje. Forth trenutno koristi Open Firmware, prostor aplikacije, i drugi ugraðen
i
sustavi. Gforth, implementacija u Forth od GNU projekta aktivno odr ava, posljednj
e
izdanje u decembru 2008. 1994 standard trenutno prolazi kroz reviziju, privremen
o
nazvan Forth 200x.
Pregled
Forth okru enju kombinira prevodilac s interaktivnim shell-ovima. Korisnik interak
tivno
odreðuje i vodi potprograme, ili "operacije," u virtualni stroj slièno runtime ! okru enj
u.
Operacije mogu biti testirane, redefinirane i debugged kao izvor je u ao bez recompi
ling
ili ponovno pokretanje cijelog programa. Svi sintaktièki elementi, ukljuèujuæi i osnov
ne
varijable operatera, pojavljuju se kao takva procedura. Èak i ako je odreðena operac
ija
optimizirana tako da ne zahtijeva poziv potprograma, jo uvijek je dostupna kao
potprogram. S druge strane, shell mo e sastaviti i interaktivno upisati naredbe u
koderu
prije nego ih izvodi (Takvo pona anje je uobièajeno, ali nije obavezno).Forth okru enj
a
razlikuju se u naèinu pohranjivanja rezultirajuæeg programa, ali automatski pokrenut
program ima isti uèinak kao i ruèno pokrenut program.Ovaj contrast sa kombinacijom C
sa Unix shell ,pri èemu su kompletne funkcije posebna klasa programskih objekata i
interaktivne naredbe su strogo zadane. Veæina Forth jedinstvenih svojstava proizla
ze iz
ovog naèela. Ukljuèivanjem interakcije, skriptiranja, i kompilacije, Forth je popula
ran na
raèunalima s ogranièenim resursima, kao to su BBC Microsoft i Apple II serije, i dalj
e
ostaje tako u aplikacijama kao to su firmware-i mali mikrokontroleri.Gdje C kompi
lator
sada mo e generirati kod s vi e kompaktnosti i performansi, Forth zadr ava prednost
interaktivnosti.
Stacks
Svaki programsko okru enje sa rekurzivnim potprogramom implementira stack za kontr
olu
toka. Ova struktura obièno pohranjuje lokalne varijable, ukljuèujuæi i potprogramske
parametre (u kao to je C call in value sistemu). Forth èesto nema lokalne varijable,
meðutim, nije ni poziv po vrijednosti. Umjesto toga, srednje vrijednosti èuvaju se u
drugi
stack. Rijeèi djeluju neposredno na zadnje vrijednosti u ovom stack-u. U tom smislu
mo e se nazvati "parametar" ili "podaci" stack, ali najèe æe jednostavno stack . Funkcija-
Poziv stack-a se onda zove "veza" ili "return" stack, skraæeno rstack . Posebna rstack
manipulacijska funkcija koju je omoguæio kernel koristi za privremeno skladi tenje u
nutar
rijeèi , ali inaèe ne mo e se koristiti da proðe parametre ili za rukovanje podacima. Veæi
rijeèi su navedene u smislu njihova uèinka na stack. Tipièno, parametri su postavljeni n
a
vrhu stacka prije nego to je rijeè izvr ena. Nakon izvr enja, parametri se bri u i
zamijene sa bilo kojm povratnom vrijedno æu. Za aritmetièki operatore, ovo slijedi pra
vilo
30
reverse Polish notaticije. Primjer stacka koji ilustrira upotrebu prikazan je na
slikama .
Odr avanje
Forth je jednostavan jezik koji se mo e pro iriti; njegova modularnost i pro irivanje
dozvoljavaju pisanja na visokoj razini programa kao to su CAD sustavi. Meðutim,
pro irivanje takoðer poma e slabijim programerima tipa da napi u neshavtljiv kod,sati
neshvatljivo broj, koji je dao Forth reputaciju kao "pisati-jedini jezik". Forth
se uspje no
koristi u velikim, slo enim projektima, dok je aplikacija razvijena od strane nadl
e nog,
disciplinirani profesionalci su dokazali da se jednostavno odr ava na razvoju hard
verske
platforme tijekom desetljeæa upotrebe.Forth je utoèi te, kako u astronomskim tako i u
prostoru aplikacija.Forth se jo uvijek koristi i danas je ugraðen u mnogim sistemim
a (mali
kompjuterizirani ureðaji) zbog svoje prenosivosti, efikasnog kori tenja memorije, kr
atkog
vremena razvoja, i velike brzine izvedbe. On je implementiran uèinkovito na modern
im
RISC procesorima i procesorima koji ga koriste kao navedeni strojni jezik. Ostal
o upotrebe
Forth-a ukljuèuju Open Firmware boot ROM-ovi koji koriste Apple, IBM, Sun, i OLPC
XO-1
i FICL-based u prvoj fazi kontroler pokretanja sustava FreeBSD operativnog susta
va.
Povijest
Forth je evoluirao od Charles H. Moore-ovih osobnih programskih sistema, koji su
se
kontinuirano razvijali od 1958. Forth je prvi put izlo en drugim programerima u ra
nim 1970im,
poèev i s Elizabeth Rather na US Nacionalnom Radio Astonomskom
laboratoriju.Nakon njihovog rada na NRAO, Charles Moore i Elizabeth formirali su
Forth
1973.godine,i preradili Forth sisteme na desetine drugih platformi u sljedeæem
desetljeæu.Fotrh je nazvan tako 1968.godine jer je fajl koji tumaèi datoteku bio ozn
aèen
Èetvrti, za èetiri (buduæe) generacije softvera-ali IBM 1130 operacijski sistem ogranièi
o
imena datoteka do 5 znakova.Moore je vidio Forth kao nasljednika kompajliranog l
inka
treæe generacije programskih jezika, ili softvera za "èetvrte generacije" hardvera,
a ne kao
èetvrta generacija programskog jezika kao pojam je do ao da se koristi..Buduæi da se
Charles Moore èesto selio sa jednog posla na drugi tokom svoje karijere, rani prit
isak na
uèenje jezika je bio lahk za portanje na razlièite raèunalne arhitekture. Forth sistem
èesto
je kori ten da bi se izneo novi hardver. Na primjer, Forth je prvi stanovnik softver
a na
novim Intel èip 8086 u 1978 i MacFORTH je prvi stanovnik razvoj sustava za prvi Appl
e
Macintosh je 1984.
FORTH, Inc.microFORTH je razvijen za Intel 8080, Nokia-u 6800, i Zilog Z80
mikroprocesor poèetkom 1976. godine. MicroFORTH hobisti kasnije koriste za generir
anje
Forth sistema za druge arhitekture, kao to je 6502 u 1978-oj godini. Brzo irenje i
velika
primjena konaèno su doveli do standardizacije jezika. Uobièajena praksa je zapravo
kodirati standarde FORTH-79 i FORTH-83 u 1979 i 1983 godini, respektivno. Ovi
standardi su ujedinjeni od strane ANSI 1994 god., obièno se nazivaju ANS Forth. FO
RTH
je postao vrlo popularan 1980 god. to je dobro jer je pogodan za mala mikroraèunala
iz
tog vremena,zato to je kompaktan i prenosiv. Barem jedan kuæni raèunar, ima FORTH u
operativnom sistemu. Canon Cat takoðer koristi FORTH za svoj sistem programiranja.
Rockwell je takoðer producirao single-chip mikroraèunala s FORTH jezgrima, R65F11 i
R65F12.
Programer perspektive
31
Dodatne informacije: Reverse Polish notacija
Forth velikoj mjeri oslanja na iskljuèivo kori tenje data stack-a i Reverse Polish n
otacije (ili
postfix notacija RPN), to obièno koriste kalkulatori iz Hewlett-Packarda. U RPN-u,
operator je postavljen iza njegovih operandi, za razliku od uobièajenih infix nota
cija, gdje
se opretaror nalazi izmeðu svojih operanada. Postfix notacija èini jezik lak im za
tumaèenje i pro irenje, Forth ne upotrebljava BNF gramatike, i nema monolitan prevod
ilac.
Produ eno prevodjenje jedino zahtijeva pisanje novih rijeèi, umjesto mijenjanja gram
atike i
mijenja temeljne provedbe. Koristeæi RPN,rezultat za matematièki izraz (25 * 10 + 50
)
mogao bi se napisati na ovaj naèin:
25 10 * 50 + . <cr> 300 ok
Ovaj kod definira novu operaciju (operacija again 'je pojam koji se koristi za pot
program)
koja sezove FLOOR5 pomoæu sljedeæe naredbe: DUP duplira broj na stack-u; 6 mjesta od
6 na vrhu stack-a, poredi prva dva broja na stack-u (6 i DUPed input), i zamjenj
uje ih s
pravom ili pogre nom vrijed æu, IF uzima pravu-ili-pogre nu vrijednost i odabere izvr avat
i
naredbe odmah nakon njega ili za prijelaz na drugo; DROP odbacuje vrijednost na
stack-
u, a THEN zavr ava uslov. Tekst u zagradi je komentar, koji defini e da operacija oèek
uje
broj na stack-u, i vraæa moguænost promjene broja. FLOOR5 operacija je ekvivalent za
ovu
funkciju napisan u C programskom jeziku:
int floor5(int v) { return v < 6 ? 5 : v - 1; }
Prvo tumaè stavlja broj (1 ili 8) na stack a zatim ga poziva FLOOR5, èije otvaranje
brojeva
pokreæe rezultat. Napokon, poziv za operaciju "." otvara i ispisuje rezultat na ko
risnikov
terminal.
Sadr aji
Forth gramatièko ra èlanjavanje je jednostavno, uprkos tome to nema eksplicitne
gramatike. Interpreter èita ulazne podatke iz ureðaja korisnièkog unosa, onda ra èlanjuje
rijeèi u prostoru ogranièenja.Neki sustavi prepoznaju dodatni razmak znakova. Kad
interpreter pronaðe rijeè, poku ava pronaæi rijeèi u rjeèniku. Ako je rijeè pronaðena, tuma
izvr ava kod vezan uz rijeè, a zatim se vraæa u ra èlanjivanje ostatka. Ako rijeè nije
pronaðena, operacija pretpostavlja da je broj i poku ava se pretvoriti u broj i stav
iti ga na
stack-u, ako je uspje na, tumaè nastavlja sa ra èlanjivanjem ulaznog toka podataka. U
32
suprotnom, ako oba pretra ivanja i broj pretvorbi ne uspije, tumaè ispisuje rijeèi sa
porukom o gre ci koja ukazuje da rijeè nije priznata, èisti ulazni tok, i èeka novog kor
isnièki
unos. Definicija nove operacije zapoèinje znakom : (dvotoèka) i zavr ava sa znakom ;
(taèka-zarez). Na primjer:
: X DUP 1+ . . ;
34
Naziv polja poèinje s prefiksom koji daje duzinu rijeèi imena (obièno do 32 bajtova),
te
nekoliko bita za zastave. Karakter reprezentira ime operacije a zatim slijedi pr
efiks. Ovisno
o pojedinoj provedbi Forth, moze biti jedan ili vi e NUL ('\ 0') bajtova za poravn
anje.
Povezano polje sadr i pokazivaè na prethodno definiranim rijeèi. Pokazivaè se mo e
relativni pomak ili apsolutna adresa koja ukazuje na sljedeæi najstariji brat ili
sestra. Polje
pokazivaèa kod æe biti adresu rijeè koja æe izvr iti koda ili podataka u polju ili paramet
ar
poèetak stroj kod taj Procesor æe se izvr iti izravno. Za debelo definirane rijeèima, kôd
polje pokazivaèa ukazuje na rijeèi koje æe spasiti trenutno Forth pokazivaè instrukcije
(IP)
na povratku stacka, pa teret s novom IP adresom na kojoj nastaviti izvr enje rijeèi.
To je
isto kao to procesor poziv / upute za vraæanje ne.
Struktura kompajlera
Kompajler sam po sebi nije monolitan program. Sastoji se od Forth rijeèi vidljivog
sustava
koji je i korisna je programer. Ovo omoguæava programeru da promijeni rijeèi kompajl
er za
posebne namjene. "Vrijeme prevoðenja" zastava u polje Ime je postavljen za rijeèi "v
rijeme
prevoðenja" pona anje. Veæina jednostavne rijeèi izvr iti isti kôd li su upisani na naredbe
i
redak, ili ugraðen u kod. Prilikom sastavljanja tih, prevodilac jednostavno mjesta
kod ili
navojem pokazivaè na rijeè. [14] klasièni primjeri kompajliranju rijeèi su kontrolne str
ukture,
kao to su IF, a dok. Sve u Forth kontrole strukture, i gotovo sve njegove kompajl
er budu
provedeni u kompajliranju rijeèi. Sve u Forth rijeèi kontrolu protoka izvr iti tijekom
kompilaciju za prikupljanje razlièitih kombinacija primitivnih rijeèi PODRU NICA i?
PODRU NICA (podru nice, ako false). Tijekom kompilacije podataka stog se koristi za
podr ku balansiranje upravljaèka struktura, gnije ðenje, a backpatching podruènih adrese.
Isjeèak:
... DUP 6 < IF DROP 5 ELSE 1 - THEN ...
Brojevi iza PODRU NICA predstavlja skok u odnosu adrese. LIT je primitivna rijeè za
guranje "doslovno" broj podataka na stog.
Kompilacija dr ave i tumaèenje stanja rijeèi:
: analizira ime kao parametar, stvara rjeènik ulaz (debelo definicija) i ulazi u kom
pilaciju
dr ave. Tumaè i dalje èitati razmakom razgranièeni rijeèi iz ureðaja korisnièkog unosa. Ako
rijeè je pronaðena, tumaè vr i prikupljanje semantike povezana s rijeèju, umjesto da
interpretacije semantike. Zadani kompilacija semantika rijeèi su dodati svojoj int
erpretaciji
semantika na trenutnu definiciju. [14] rijeè; (polu-debelo) zavr i definicijama i vr
aæa se na
tumaèenje stanja. To je primjer èije rijeèi kompilaciju semantici se razlikuju od zada
ne.
Interpretacija semantika, (polu-debelo), veæina kontrola protoka rijeèima, i nekolik
o drugih
rijeèi su neodreðene u Forth ANS, to znaèi da oni samo smiju se koristiti unutar defini
cije,
a ne na interaktivnoj komandna linija. [14]
Tumaèa dr ave mo e se mijenjati ruèno sa rijeèima [(lijevo-bracket) i] (desno-zagrada) koj
i
35
ulaze tumaèenje dr ave ili kompilaciju dr ave, odnosno. Ove rijeèi mogu se koristiti s r
ijeèi
doslovno za izraèun vrijednosti tijekom prevoðenja i umetnuti izraèunata vrijednost u
trenutnom debelo definiciju. Doslovno je kompilaciju semantika da se objekt iz p
odataka
stog i dodati semantiku na trenutni debelo definicija to mjesto taj objekt na st
og podataka.
ANS u Forth, trenutno stanje tumaèa mo e se i èitati iz dr ave zastave koji sadr i
vrijednost true kad u kompilaciji dr ave i la nih drugaèije. To omoguæava primjenu tzv
dr avnom pametnih rijeèi s pona anjem koji se mijenja u skladu s trenutno stanje tumaèa.
Neposredna rijeè
Rijeè TRENUTAN obilje ava najnoviju definiciju kao neposredna rijeèi, djelotvorno
zamijeniv i svoju kompilaciju semantike s tumaèenjem semantike. [21] Trenutan rijeèi
obièno se izvode tijekom kompilaciju, ne sastavlja, ali to se mo e nadjaèati koje
programer, u bilo dr ave. ; Je primjer neposredne rijeèi. U ANS Forth, rijeèi odgoditi
uzima
ime kao parametar i dodaje kompilaciju semantika zove rijeèi na trenutnu definicij
u èak i
ako je rijeè je oznaèen odmah. Forth-83 definira razlièite rijeèi sastaviti i [sastaviti
] prisiliti
kompilaciji ne-hitnu i neposrednu rijeèi, respektivno.
Neimenovane rijeèi
Neimenovani rijeèi se mo e definirati s rijeèi: NoName koji kompilira sljedeæe rijeèi do
sljedeæeg, (polu-debelo) i odlazi na izvr enje tokena podataka stog. Izvr enja tokena
daje
neprozirni ruèka za sastavio semantika, slièno djelovanje upuæuje na C programskog
jezika. Izvr enju tokena mogu biti pohranjeni u varijable. Rijeè EXECUTE traje izvr en
je
tokena iz podataka stog i obavlja povezana semantika. Rijeè kompajlirati, (kompajl
iratizarez)
traje izvr enje tokena iz podataka stog i dodaje povezana semantika na trenutnu
definiciju. Rijeèi '(karta) uzima ime rijeèi kao parametar i vraæa token izvr enje povez
anih s
tom rijeè o podacima stog. U interpretaciji stanja, 'RANDOM-rijeè EXECUTE jednak je
RANDOM-word. [22]
Ra èlanjivanje rijeèi i komentare rijeèi:
: , odgoditi, ' i: NoName primjeri su ra èlanjivanja rijeèi koje se iz svoje argumente za
unos korisnik umjesto podataka stog. Drugi primjer je rijeè ((Paren) koja èita i ign
orira
sljedeæe rijeèi do i ukljuèujuæi sljedeæa desno zagradi i koristi se za mjesto u komentare
debelo definiciji. Slièno tome, rijeè \ (backslash) koristi se za komentare koje nas
tavljaju
kraj trenutne linije. Da se rastaviti ispravno, ((Paren) i \ (backslash) mora bi
ti odvojen
razmakom od sljedeæih komentar tekst.
Struktura koda
U veæini Forth sustava, tijelo kod definiranja sastoji se od bilo strojnom jeziku,
ili neki oblik
navojem kod. Izvorni Forth koji slijedi neformalni FIG standardni (Forth interes
na
zajednica), je TIL (navojem Interpretive jezik). Ovo je takoðer pozvao indirektne-
navojem
kod, ali s izravnim navojem i potprogram navojem Forths takoðer su postali popular
ni u
moderno doba. Najbr i moderni Forths kori tenje potprograma navoja, umetnite
36
jednostavne rijeèi kao makronaredbi i izvesti okance optimizacije ili druge optimi
ziranje
strategije da bi kod manjih i br e. [23]
Podatkovni objekti
Kad je operacija varijabla ili drugi objekt podataka, ukazuje na CF runtime kod
povezan s
definiranjem rijeèi koju je stvorio.Operacija je karakteristièno definiranje "defini
ra
pona anje" (stvaranje rjeènika ulaza plus eventualno raspodjeli i inicijalizuije pod
atke
prostora), a takoðer propisuje pona anje kao instancu klase rijeèi da bi izgradili ovu
definiciju operacije. Primjeri ukljuèuju: imena varijablama neincijalizirani, jedn
a æelija
mjesto u memoriji. Primjer pona anja:
VARIJABILNI vraæa svoju adresu na stack
STALNE imena vrijednosti (naveden kao argument konstanta). Primjer pona anja vraæa
vrijednost.
CREATE imena lokacije; prostor mo e biti dodijeljena na ovoj lokaciji, ili se mo e p
odesiti
da sadr i niz inicijalizirane ili druge vrijednosti.
Primjer pona anja vraæa adresu poèetku ovog prostora. Forth takoðer pru a pogonu kojim
programer mo e definirati nove aplikacije specifiène za definiranje rijeèi, navodeæi kak
o
obièaj definiranja pona anja i primjer pona anja. Neki primjeri ukljuèuju kru ne odbojnika
,
imenovan bitovi na I / O port, i automatski-indeksirana polja. Podatkovni objekt
i definirani
ovim i sliènim rijeèima su globalne u djelokrugu. Funkcija osigurava lokalne varijab
le i na
drugim jezicima osigurava podataka stog u Forth (iako Forth takoðer ima stvarne lo
kalne
varijable). Forth stil programiranja koristi vrlo malo objekata zove podataka u
usporedbi s
drugim jezicima; obièno takvi podaci objekti slu e da sadr i podatke koji se koriste r
ijeèi ili
broj zadataka (u multitasked implementaciji)] Èetvrta ne provodi konzistentnost po
dataka
tipa uporabe, to je programer odgovornost za kori tenje odgovarajuæeg operatora za
preuzimanje i pohranu vrijednosti ili druge operacije na podacima.
Programiranje
Rijeèi napisane u Forth-u se skupljaju u izvr nom obliku. Klasièni "indirektni navoj"
implementacije sastavlja popise adresa rijeèi koje treba izvr iti, pak, mnogi modern
i
sustavi generiraju stvarni strojni kod (ukljuèujuæi i pozive na neki vanjski kod rij
eèi i za
druga mjesta). Neki sustavi imaju optimiziranje kompilatora. Opæenito govoreæi, Fort
h
program ia zadatak sprema kao sliku sjecanja i sastavi program s jedinstvenom
naredbom (npr. RUN) koji se izvr ava kada je sastavljena verzija optereæena. Tijekom
razvoja, programer koristi tumaèa za izvr enje i i test .Veæina programera Forth stack
-a
zala u slobodan top-down dizajn, i bottom-up razvoj uz kontinuiranu provjeru i
integracije."Top-down dizajn je obièno razdvajanje programa u" rjeèniku ",zatim kori
ste
visoke razine postavljanja alata za pisanje konaènom programu. Dobro osmi ljen progr
am
Forth èita kao prirodni jezik, i ne implementira samo jedno rje enje, ali i postavlj
a alate za
napad na povezane probleme.
Primjer koda
Hello, world!
Za obja njenje tradicije programiranja "Hello World", pogledajte program Hello, wo
rld!
. Jedan od moguæih implementacija:
37
: HELLO ( -- ) CR ." Hello, world!" ; HELLO <cr>
(Dot-Paren) je neposredna rijeè koja analizira razgranièeni niz i prikazuje ga. Kao
i kod
operacije .: razdvaja .
Rijeè dolazi prije teksta za ispisOperacija cr dolazi prije ispisa teksta.. Prema
konvenciji,
Forth tumaè ne pokreæe izlaz u novi red. Isto tako po konvenciji tumaè èeka za ulaz na
kraju prethodne linije.nema.U Forth's CR ne podrazumijeva 'flush-buffer', kao to
je to
ponekad sluèaj u drugim programskim jezicima.
Ra èlanjivanje rijeèi CHAR uzmima razmakom razgranièeni rijeèe kao parametar i mjesta
vrijednosti prvi lik podataka stack-a . Rijeè [CHAR] je neposredna verzija CHAR. K
oristeæi
[CHAR], npr. definicija za EMIT-Q mo e se prepisivati ovako:
: EMIT-Q [CHAR] Q EMIT ; \ Emit the single character 'Q'
Ova se definicija koristi \ (backslash) za opisivanje komentara. Obe,i CHAR i [C
HAR] su
unaprijed definirane u Forth ANS. Kori tenje neposrednih i odgoðenih operacija [CHAR
]
mogu su definirani ovako:
: [CHAR] CHAR POSTPONE LITERAL ; IMMEDIATE
R@ ROT C! ( -- S[i] )
R> + ( -- S[i]+S[j] )
XOR ;
: ARCFOUR-INIT ( key len -- )
0 TO jj
LOOP
0 TO ii 0 TO jj ;
HEX 61 8A 63 D2 FB 5 !KEY
CR
DC ARCFOUR 2 .R SPACE
EE ARCFOUR 2 .R SPACE
4C ARCFOUR 2 .R SPACE
F9 ARCFOUR 2 .R SPACE
2C ARCFOUR 2 .R
CR .( Should be: F1 38 29 C9 DE )
PostScript (PS) je dinamièki programski jezik (concatenative) koga su stvorili Joh
n
Warnock i Charles Geschke u 1982. PostScript je najpoznatiji po tome to je jezik
za
opisivanje stranica u elektronièkim i i podruèjima stalnog izdava tva.
Jezik
PostScript je Turing-complete programski jezik, koji pripada grupi concatenative jez
ika.
Tipièno, PostScript programi se ne proizvode prema ljudima, kao drugi programi. Meðu
tim,
39
moguæe je pisanje raèunalnih programa u PostScript kao u bilo kojem drugom
programskom jeziku. PostScript je intrepetirani, stack-based jezik slièan Forth-u,
ali s jako
dinamièanim pisanjem i strukture podataka inspirirane kao one u Lisp.scoped memori
ji i,
buduæi da je jezik na razini 2,orijentiran je i na garbage collection.. Jezik kori
sti Reverse
Polish notaciju, to èini redoslijed operacija jednoznaèanim,, ali èitanje program zahti
jeva
malo vje be, jer treba imatii izgled stack-a na umu. Veæina operatora ( to je u drugim
jezicima pojam funkcije) uzima svoje argumente iz stack-a, i mjesto njihovih rez
ultati je na
stack-u. Literala (npr. brojevi) imaju uèinak postavljanja svoje kopije na stack-u
.
Sofisticirani strukture podataka mogi biti izgraðene na polju i rjeènik tipa, ali ne
mo e biti
progla en u sistemu pisanja, koji ih vidi sve samo kao polja i rjeènicima, tako da s
vako
daljnje pisanje æe biti primenjeno na korisnièki definiran "tip" koji je lijevo od k
oda koji ih
provodi.
Simbol "%" se koristi za uvoðenje komentara u PostScript programe. Kao opæe konvenci
je,
svaki PostScript program bi trebao poèeti sa znakovima "%!" tako da svi ureðaji mogu
to
ispravno protumaèiti kao PostScript.
Hello World
Hello World program je uobièajen naèin da se poka e mali primjer kompletanog programa
u odreðenom jeziku, mo e izgledati ovako u PostScript-u (razina 2):
%!PS
/Courier % name the desired font
20 selectfont % choose the size in points and establish
Jedinice za du inu
Postskriptum koristi taèku kao jedinicu za du inu. Meðutim, za razliku od nekih drugih
verzija taèke, PostScript koristi toèno 72 bodova za inch. Tako je:
Na primjer, kako bi privukao vertikalne linije duljine 4cm, dovoljno je napisati
:
0 0 moveto
0 113.385827 lineto stroke
PostScript koristi single-precizne realne brojeve (24-bitni kazaljka), tako da nem
a smisla
koristiti vi e od 9 znaèajki i odrediti decimalni realni broj. Za prijedlog grafika,
broj
znaèajnihznaèajki mo e biti smanjen.
40
Nestrukturano programiranje u programskim jezicima visokog
nivoa
Ne-strukturirano programiranje je historijski najranija programska paradigma koj
a je bila u
stanju stvoriti Turing-complete algoritme. Praæeno je historijski kao proceduralno
programiranje a onda kao objektno-orijentirano programiranje,oba su smatrana kao
strukturirano programiranje.
Nestrukturirano programiranje je sna no kritizirano zbog proizvodnje jedva èitljivih
kodova i
ponekad se smatralo da ima lo pristup za stvaranje velikih projekata, ali je pohv
aljeno za
slobodu koju pru a programerima.
Tu su ujedno i visoke i niske razine programskih jezika koji koriste ne-struktur
irano
programiranje. To ukljuèuje rane verzije BASIC-a (kao to su MSX BASIC i GW-BASIC),
JOSS, FOCAL, MUMPS, TELCOMP, COBOL, machine-level code(ma insko kodiranje),
rani asemblerski sistemi (bez proceduralnih metaoperatora), asemblerskih program
za
pronala enje gre aka i nekih skriptnih jezika kao to su MS DOS.
OSNOVNI KONCEPTI
Program u ne-strukturiranom jeziku obièno se sastoji od sekvencijalno zapovjednih
naredbi, ili izjava, obièno po jedan u svakoj liniji. Linije su obièno numerisane il
i mogu imati
oznake, ovo omoguæava protok izvr enja za skok na bilo koji red u programu.
Ne-strukturirano programiranje uvodi osnovne koncepte kontrole toka, kao to su pe
tlje,
grane i skokove. Iako nema pojma o proceduri u ne-strukturiranoj paradigmi, potp
rogrami
su dozvoljeni. Za razliku od postupka, potprogram mo e imati nekoliko ulaza i izla
za, te
direktni skok u potprogram ili iz potprograma je (teoretski) dozvoljen.
Nema koncepta lokalne varijable u ne-strukturiranom programiranju (iako za sklap
anje
programa, registri opæe namjene mogu slu iti istoj svrsi nakon spremanja na ulaz), a
li
labele i varijable mogu imati ogranièeno podruèje djelovanja (Na primjer, grupa lini
ja). To
znaèi da nema (automatski) dodatak kada osvje iti potprogram koji dozivate, tako da
sve
varijable mogu zadr ati svoju vrijednost iz prethodnog poziva. To èini opæu rekurziju
(opis
procesa ponavljanja objekata na samoslièan naèin je rekurzija) te kom, ali neki sluèajev
i
rekurzija gdje nisu potrebene vrijednosti stanja potprograma nakon rekurzivnog p
oziva -
moguæe su ako su varijable koje su posveæene rekurzivnom potprogramu izbrisane (ili
reinicijalizirane
na svoju izvornu vrijednost) na ulazu u potprogram. Dubina stvaranja mo e
isto tako biti ogranièena na jednu ili dvije razine.
VRSTE PODATAKA
Ne-strukturirani jezici dopu taju samo osnovne tipove podataka, kao to su brojevi,
nizovi i
redovi (numeriran skup varijabli istog tipa). Uvoðenje polja u ne-strukturiranim j
ezicima bio
je znaèajan korak naprijed, èineæi tok obrade podataka moguæim unatoè nedostatku
strukturirane vrste podataka.
PROGRAMSKI JEZICI
Da bi bio izvediv, plan mora biti napisan u binarni ma inski kod, koji poznaje pro
cesor.
Ma insko programiranje je te ko i dovodi do gre aka. Nadalje, buduæi da svaki tip
41
procesora ima svoj ma inski kod, program napisan za jednu vrstu procesora nije izv
ediv
na bilo kojoj drugoj vrsti procesora.
FORTRAN
Danas, veæina programa su pisana u jezicima visoke razine, koje slièe engleskom pa s
u
zbog toga lak i za kori tenje nego ma inski kod, ali koji imaju ogranièen, specijalizira
n
rjeènik i jednostavnu sintaksu bez dvosmislenosti. FORTRAN (Formula Translation),
predstavljen 1956. godine, bio je prvi jezik visoke razine. Od tada je nekoliko
puta bio
ispitan (pregledan). Fortran 77,misleæi da neæe biti posljednja verzija, irom je bio
dostupan i kompatibilan s kasnijim verzijama.
U jezicima visoke razine instrukcije nisu izvedive. Umjesto toga, programski jez
ici visoke
razine izvorni program èitaju kao ulaz od strane programa koji se zove
prevodilac(kompajler), koji provjerava njegove sintakse i, ako nema gre aka, sasta
vlja
ekvivalentan ma inski programski kod objekta. (Ako izvorni program sadr i sintaksne
gre ke, prevodilac(kompajler) izbacuje broj poruka koji ukazuju na prirodu gre ke i
gdje su
te gre ke nastale.)
Iako je u ma inskom kodu, objektni program je nepotpun, jer sadr i napomene za
potprograme a koji zahtijeva zajednièke poslove kao to su èitanje ulaza, rezultata iz
laza i
raèunanja matematièkih funkcija. Ovi potprogrami su grupisani zajedno u bibliotekama
koje su na raspolaganju za kori tenje od strane svih objektnih programa. Za stvara
nje
izvedivog programa objektni programi zahtjevaju da budu povezani sa bibliotekama
potprograma. Izvr ni program tada mo e biti uèitan u memoriju i pokrenut.
CHARACTER tip
Konstanta tipa CHARACTER, (èesto zvana STRING) je niz znakova koja mogu biti velik
a
slova abecede, numerièka slova, praznine, kao i: + - * / = (),. '$:
Kada su ukljuèi u Fortran izvje taj, niz mora biti razdvojen jednostrukim navodnicim
a ( ').
Jedan citat mo e biti ukljuèen u niz tako to pi emo dva uzastopno. Samo je jedan
zadr an.
Primjer: 'WE''RE A'' JOCK TAMSON''S BAIRNS.'
INTEGER tip
Konstante tipa INTEGER su cijeli brojevi.
Primjeri: 123 + 1 0 4356 -4
INTEGER konstante su predstavljene u taènom obliku. Njihova velièina ima granicu koj
a
ovisi o du ini rijeèi.
REAL tip
Konstante tipa REAL su brojevi koji mogu ukljuèivati razlomke. Realni brojevi su z
apravo
ono to u matematici nazivamo decimalnim brojevima. Karakterizira ih decimalna taèka
koja odvaja cijeli dio od decimalnog dijela broja npr. 2.73. Ukoliko je broj nap
isan bez
42
decimalne taèke, Fortran ga tretira kao cijeli broj. Ako je napisan s taèkom, tretir
an je kao
realni broj. REAL konstanta je pisana u jednom od sljedeæih oblika:
1.
Cijeli dio napisan kao INTEGER konstanta definira se kao prethodnom dijelu, nako
n
èega slijedi decimalni zarez, nakon toga razlomak kao niz decimalnih cifri. Ili ci
jeli
dio ili razlomak, ali ne i oboje, jedan je morao biti izostavljen.
2.
INTEGER konstanta ili konstanta REAL, dalje slijedi decimalni eksponent napisan
kao slovo 'E' nakon toha slijedi INTEGER konstanta. Konstanta je na exponent od
10 a koji se mno i sa prethodnim dijelom.
Primjeri: +123,4 -123,4 .6 E-3 (0.6x10-3) 4.6E3
(4.6x103) 7E-3 2.
REAL konstante su predstavljene u pribli nom obliku. Njihova velièina ima granicu ko
ja
ovisi o du ini rijeèi.
Napomena: eksplicitni tip du ine secifikovan u bajtovima (8 bita) èesto je naveden i
za "*".
VARIJABLE
Varijabla je rezervirani memorijski prostor èiji sadr aj korisnik/programer smije mi
jenjati
tokom izvoðenja programa. Sadr aj dakle mo e biti UPISAN u varijablu. Pri tome se
sadr aj koji je eventualno prethodno tamo stajao bri e i zamjenjuje novim. Upis se v
r i, na
primjer, pridru ivanjem. Opæenito, u FORTRANU, izraze, odnosno vrijednosti izraza,
moramo pridru iti varijablama. Nakon pridru ivanja, varijabla sadr i vrijednost izraza
i u
programu, kad god zatrebamo taj izraz, mo emo upotrijebiti umjesto njega varijablu
kojoj
smo ga pridru ili (u koju smo izraz smjestili). Varijabla dr i vrijednost sve do nov
og
pridru ivanja! Varijabla se sastoji od 1 do 6 velikih slova i decimalnih brojeva.
Primjeri: VOL TEMP A2 COLUMN IBM370
Prostori su zanemareni od strane Fortran 77, npr. "COL UMN 'je ekvivalentno' COL
UMN
'.
Napomena: Prostor postaje znaèajan u "slobodnom formatu" za Fortran 90!
Jasnoæa se mo e pobolj ati tako to odaberemo varijable koje sugeriraju njihovu
upotrebu, npr.
DEGC MEAN STDDEV
Svaka varijabla ima tip, koji propisuje vrstu vrijednosti koju mo e imati. Tip var
ijable mo e
biti naveden eksplicitno ili dodijeljen implicitno.
EXPLICITNI TIP
Tip varijable mo e biti dodijeljen explicitno kao iskaz od strane tipa specifikaci
je. To je
oblik:
type variable_list
gdje je type (tip) naziv vrstei variable_list je jedna varijabla ili lista varij
abli, odvojene
zarezima.
U iskazu se dati tip dodjeljuje za sve varijable u listi.
Primjeri:
INTEGER WIDTH
REAL NUM, K
43
Tip specifikacije izjave se ne sla e u izvr om ma inskom kodu instrukcija. Umjesto tog
a
prevodilac zapisuje imena i tipove varijabli i pohranjuje rezerve za njih. Takve
ne-izvr ne
izjave moraju biti postavljene na poèetak programa, prije prve izvr ne izjave.
IMPLICITNI TIP
Ako se varijabla upotrebljava bez ukljuèenja u tip specifikacije, njegov tip je do
dijeljen
implicitno (po defaultu) prema sljedeæem pravilu: Ako varijabla poèinje slovom od I
do N,
njen tip je INTEGER. Ako to nije ispunjeno, onda je njen tip REAL.
Tako je TEMP REAL varijabla, dok je ITEMP INTEGER varijabla.
U programu je dopu teno pisati
OLOVKA = 6
HEMIJSKA=7.5
bez prethodne deklaracije. Nije meðutim dopu teno pisati
OLOVKA = 6.0
HEMIJSKA = 7
elimo li to, moramo napisati
REAL OLOVKA
INTEGER HEMIJSKA
OLOVKA = 6.0
HEMIJSKA = 7
Napomena: Deklaracija mora biti jednoznaèna: ime varijable se u deklaraciji smije
pojaviti
samo jednom.
DEKLARACIJA
Fortran kao i brojni drugi programski jezici zahtijeva od programera da prije ne
go poène
koristiti imena varijabli u programu, ta imena deklarira, tj najavi i rezervira.
Fortran je
meðutim, ne to liberalniji od npr C-a.
to je deklaracija?
Deklaracija je popisivanje imena varijabli koje æe biti kori tene u programu, uz ist
ovremeno
odreðivanje tipa varijable. Preciznije, deklaracijom se propisuje koji tip podatka
smije biti
smje ten u varijablu.
DODJELJIVANJE VRIJEDNOSTI
Prije nego to se varijabla mo e koristiti u raèunanju, mora joj biti dodijeljena poèetn
a
vrijednost. Ovo mo e biti ispunjeno èitajuæi vrijednosti ulaza ili putem dodjele izjav
a.
READ izjava
READ izjava se koristi za dodjeljivanje vrijednosti varijabli èitanjem podataka iz
ulaza.
Najjednostavniji oblik READ izjave je: READ *, variable_list Gdje je variable_li
st jedna ili
lista varijabli odvojenih zarezom. Ova izjava èita konstante iz terminala, odvojen
e
razmacima, zarezima, ili novim linijama, a dodjeljuje ih kao niz varijabli u lis
ti. Izvr enje
programa se zaustavlja dok se ukljuèi (unese) pravi broj konstanti.
Primjer: READ *, VAR1, VAR2, VAR3
Èeka dok se ne unesu tri konstante, nakon toga dodijeljuje im niz varijabli VAR1,
VAR2 i
VAR3.
44
DODJELA IZJAVA
Najjednostavniji oblik dodjele izjava je:
varijabla = konstanta
To znaèi da je konstanta dodijeljena kao vrijednost varijable na lijevoj strani. I
majte na umu
da '=' znak ima drugo znaèenje nego u algebri. To ne znaèi jednakost, ali je zadatak
operatora.
Primjeri:
TEMP = 74,5
ITEMP = 100
VRSTA PRAVILA
Koji god naèin se koristi za dodjeljivanje vrijednosti varijabli, tip vrijednosti
mora biti
dosljedan sa tom varijablom. Pravila su:
1.
CHARACTER vrijednost ne mo e biti dodijeljena numerièkoj varijabli ili obratno.
2.
INTEGER vrijednost mo e biti dodijeljena REAL varijabli. Vrijednost dodijeljena je
realni ekvivalent cijelog broja.
Primjer: X = 5 je ekvivalent X = 5.0
3.
REAL vrijednost mo e biti dodijeljena INTEGER varijabli. Dodijeljena vrijednost je
odrezana, tako to se odbaci dio razlomka.:
ARITMETIÈKI IZRAZI
Aritmetièki izraz je je onaj izraz koji se dobije izvodeæi niz aritmetièkih operacija
da bi dobili
brojèanu vrijednost koja zamjenjuje izraz. Aritmetièki izraz je svaka smislena
kombinacija operanada i operatora. Operatori, dakle, predstavljaju aritmetièke ope
racije
i, na neki naèin, stvaraju vezu izmeðu operanada. Operand aritmetièkog izraza mo e biti:
numerièka konstanta
numerièka varijabla, to mo e prethoditi predznakom + ili -.
aritmetièki izraz u zagradama, npr. (arithmetic_expression)
Aritmetièke operacije su obilje ene slijedeæim aritmetièkim operatorima.
Operator Operacija
+ Zbrajanje ili predznak +
- Oduzimanje ili predznak
* Mno enje
/ Dijeljenje
** Potenciranje
Aritmetièki izraz ima oblik:
operand [operator operand] ...
Uglate zagrade oznaèavaju da su stavke operatora i operanda neobavezne, da se oni
mogu ponavljati neogranièeno.
45
Spaces (prazan prostor) se mo e koristiti kako bi pobolj ali èitljivost, ali su zanema
reni od
strane kompajlera Fortran 77.
Primjeri:
3,14159
K
(A + B) * (C + D)
-1,0 / X +Y / Z ** 2
2,0 * 3,14159 * RADIUS
Ogranièenja:
1. Dva operatora ne mogu biti napisana uzastopno.
Primjer: *-B nije dozvoljeno. Drugi faktor mora biti stavljen u zagradu, to jest
: * (-B).
2. Operandi moraju biti takvi da su operacije matematièki definirane, npr. dijelje
nje s
nulom, nula na ne to itd, sve je ilegalno (nije dozvoljeno).
EVALUACIJA (PREDNOST REDA)
Aritmetièki izraz se ocjenjuje zamjenjujuæi varijable operandi i izraze u zagradama
njihovim
vrijednostima, i obavljanje operacija naznaèeno je u nizu, koristeæi rezultat svake
operacije
kao operand od sljedeæeg. Va an je redoslijed kojim se izvode operacije, kako je
prikazano na primjeru:
4,0 +6,0 * 2,0
Slijed operacija odreðen je redoslijedom raèunskih operacija, u kojem operatori na b
ilo
kojoj liniji imaju jednaku prednost i prednost se smanjuje prema dolje.
**
* /
+ - (Binarni i unarni)
Koristeæi ovu prednost reda, pravila za procjenu aritmetièkih izraza mogu biti naved
ena
kako slijedi:
1. Evaluacija (procjena) poèinje s lijevom operandom.
2. Varijabla operand, ili izraz u zagradi, se ocjenjuju prije nego to se sljedeæa p
ravila
primjene.
3. Potenciranje se realizuje s desna na lijevo.
Primjer: 2 ** 3 ** 2 vrednuje do 512 (2 ** 9).
4. Sve ostale operacije obavljaju se s lijeva na desno, osim ako operator nije d
rugaèije
naznaèio.
Primjeri:
4,0 +6,0 * 2,0 vrednuje do 16,0
(4,0 +6,0) * 2,0 vrednuje do 20,0
TIP PRAVILA ZA ARITMETIÈKE IZRAZE
Operandi REAL i INTEGER mogu se slobodno pomije ati u aritmetièkom izrazu. Tip
vrijednosti izraza odreðuje se primjenom sljedeæih pravila:
1. Ako su oba operanda istog tipa, vrijednost rezultata je takoðer tog tipa.
46
2. Ako je jedan operand INTEGER a drugi REAL, INTEGER operand se pretvara u svoj
pravi ekvivalent prije nego to se operacija izvede, a vrijednost rezultata je REA
L.
Ovo pravilo nije u skladu s pravilima iz aritmetike, u kojem se dijeljenjem jedn
og cijelog
broja sa drugim (npr. 7 / 5) ili podizanjem cijelog broja na cijeli broj (npr. 2
-1) ne dobije
uvijek kao rezultat cijeli broj.
Primjeri:
Vrijednost
99/100 0
7 / 3 2
-7 / 3 -2
N ** (-1) 0
N ** (1 / 2) 1
100 * 9 / 5 180
9 / 5 * 100 100
ARITMETIÈKI ZADATAK
Kao to je navedeno na poèetku poglavlja, vrijednost aritmetièkog izraza je dodijeljen
a
numerièkoj varijabli u izjavi (iskazu) oblika:
numeric_variable = arithmetic_expression
Ako se tip izraza razlikuje od varijable, pravila navedena pod 'Type rules (Tip
pravila) se
primjenjuju, tj.
Expression Promjenljivi Rule
tip tip
INTEGER REAL Pretvori u Real
REAL INTEGER Skratiti
PRINT izjava
Izlaz mo e biti printan koristeæi PRINT izjavu, koja je vrlo slièna READ izjavi:
PRINT *, output_list
output_list je jedna konstanta, varijabla ili izraz ili popis stavki, odvojenih
zarezima.
47
STOP i END izjave
Svaki program mora zakljuèiti s tvrdnjom END, koja oznaèava kraj programa. END izjav
a
mo e da bude samo na kraju programa. Izjava STOP zaustavlja izvoðenje programa. U
Fortranu 77/90, ali ne u prethodnim verzijama, END je takoðer imao isti efekat. St
oga, ako
je izvr enje jednostavno da se zaustaviti na kraju programa, STOP nije obavezno.
Meðutim, jedna ili vi e STOP izjava mo e biti napisana ranije.
IZGLED PROGRAMA (fiksni oblik Fortran 77)
Kada je uveden Fortran, bu ene kartice bile su zajednièki medijski ulaz. Fortran je
osmi ljen kako bi se iskoristio raspored kartice '80-kolone ignoriranjem razmaka i
rezervacije razlièitih podruèja kartice za razlièite svrhe. Iako se kartice vi e ne kori
ste,
Fortran i dalje koristi ovu kolonu na temelju rasporeda. Svi Fortran izvje taji mo
raju biti
napisani u kolonama 7 do 72. Izjava zavr ava zadnjim znakom u liniji, osim ako slj
edeæa
vrsta ima bilo koji znak osim 0 u koloni 6. Svaki takav karakter oznaèava da su ko
lone 7 do
72 nastavak prethodne vrste. Kolone 73 do 80 su zanemarene od strane kompajlera.
Izvorno, ove su kolone kori tene za ispis niza brojeva na karticama, ali sada se n
ormalno
ne koriste. Kolone 1 do 5 su rezervisene za izjavne oznake (statement labels).
Izgled pravila prikazani su na slici 5..
Columns Usage
1-5 Statement labels
6 Continuation character or blank
7-72 Fortran statements
73-80 Unused
Slika 5: Izgled Fortrana
JEDNOSTAVAN PROGRAM
Sljedeæi primjer koristi Fortran izjave koje smo upoznali do sad da bi se rije io je
dnostavan
problem.
Primjer 1: Vozaè puni svoj rezervoar benzinom prije polaska na put. Svaki put kad
stane
da bi nasuo benzin on stavlja 40 litara u rezervoar. Na njegovom odredi tu, on pun
i
rezervoar opet i bilje i udaljenost koju je napravio u kilometrima. Napi ite program
koji èita
udaljenost putovanja, broj zaustavljanja i kolièinu benzina koju je stavio na kraj
u putovanja,
a ispisuje prosjeènu potro nju benzina u kilometrima po litri.
1| PROGRAM PETROL
2| INTEGER STOPS, FILLUP
3| C
6| C
7| READ *, KM,STOPS,FILLUP
48
11| C 0.5 IS ADDED TO ENSURE THAT THE RESULT IS ROUNDED
12| PRINT *, 'AVERAGE KPL WAS',KPL
13| END
WRITE (6,100)
WRITE (6,200)
WRITE (6,300)
READ (6,400) FNTYPE,EMPSER
IF (FNTYPE.GT.4) GO TO 70
OPEN (UNIT=11, FILE='NAMES')
OPEN (UNIT=12, FILE='WORK')
49
10
READ (11,500,ERR=75,IOSTAT=INT,END=15) SERNO,FNAME,LNAME
IF (INT.NE.0) GO TO 75
IF (EMPSER.EQ.SERNO) GO TO 20
WRITE (12,500,ERR=75,IOSTAT=INT) SERNO,FNAME,LNAME
GO TO 10
15
FOUND = 0
ENDSW = 1
GO TO 25
20
FOUND = 1
25
IF (FNTYPE.EQ.1.AND.FOUND.EQ.0) GO TO 30
IF (FNTYPE.GT.1.AND.FOUND.EQ.1) GO TO 35
WRITE (6,1000) MSGNG
IF (FOUND.EQ.0) GO TO 65
GO TO 55
30
FNAME = BNAME
LNAME = BNAME
GO TO 45
35 IF (FNTYPE.EQ.3) GO TO 40
GO TO 45
40 WRITE (6,1000) MSGOK
GO TO 60
45
WRITE (6,900) FNAME,LNAME
IF (FNTYPE.EQ.4) GO TO 50
SERNO = EMPSER
WRITE (6,700)
READ (5,600) FNAME
WRITE (6,800)
READ (5,600) LNAME
65
CLOSE (UNIT=11)
CLOSE (UNIT=12)
STOP
70 STOP 10
75 STOP 20
END
COBOL
Cobol je jedan od najstarijih programskih jezika. Njegovo ime je akronim za Comon
Business-Oriented Language , odnosno primjenjuju ga u financijama i administrativ
nim
sistemima za tvrtke.
Cobol je kreirala Grace Hopper u drugoj polovini 1959. godine. Sve je poèelo 8. ap
rila
1959. na sastanku proizvoðaèa raèunara i korisnika, te akademika gdje je ministarstvo
za
50
obranu SAD-a odluèilo sponzorirati i nadgledati odreðene akcije. Sastanak je odr an 28
.
maja 1959. kojeg je predvodio Charles Phillips. Osnovan je odbor na èelu kojega je
bio
Joseph Wegstein koji je tijekom narednih mjeseci kreirao prvu verziju COBOLA. Od
bor su
èinili èlanovi est vodeæih tvrtki proizvoðaèa raèunara i tri vladine organizacije. Ti
proizvoðaèi su bili: Burroughs korporacija, IBM Laboratorije, Honeywell (Minneapolis
) ,
RCA Sperry Rand ,Sylvania Electric Products
Tri vladine organizacije su bile : Amerièko zrakoplovstvo David Taylor Model Basin
NBS
(dana nji Nacionalni institut za tehnologiju)
Ovaj odbor srednjeg dometa je osnovan, ali nikad nije sasvim pokrenut, na kraju je
osnovan pododbor kojeg su èinili: William Selden i Gertrude Tierney iz IBM-a,Howar
d
Bromberg i Howard Discount iz RCA, te Vernon Reeves i Jean Sammet iz Sylvania
Electric Products. Ovaj pododbor je zavr io specifikacije za Cobol u decembru 1959
.
Glavne odrednice su u velikoj mjeri inspirirane jezikom FLOW-MATIC kojeg je izum
ila
Grace Hopper,za koju obièno ka emo da je majka programskog jezika COBOL ,zatim
IBM-ovim COMTRAN-om,jezik kojega je izumio Bob Bemer, te FACT-om jezikom iz
Honeywell-a. Odluka za kori tenje naziva COBOL donesena je na sastanku odbora
odr anog 18.septmbra 1959.
Prvi kompajleri za Cobol su implementirani tijekom 1960, i u decembru je taj ist
i program
pokrenut na dva razlièita tipa raèunara, na RCA te na Remigton-Rand Univac-u
demonstrirajuæi da je moguæe postiæi takvu kompatibilnost. Od 1959. COBOL je podvrgnut
mnogim modifikacijama, to ga je u velikoj mjeri pobolj alo. U pou aju da se rije i prob
lem
nekompatibilnosti izmeðu razlièitih verzija COBOL-a American National Standards Inst
itute
(ANSI) je 1968. razvio standardni oblik jezika. Ova je verzija poznata kao Ameri
can
National Standard (ANS) COBOL. 1974. ANSI je objavio prepravljenu verziju
(ANS)COBOL-a, koji je sadr avao razne dodatke koji nisu bili u verziji iz 1968. go
dine.
1985. ANSI je objavio jos jednu prepravljenu verziju COBOL-a, napredniju od one
iz 1974.
, razvoj jezika se nastavio do danas.
U januaru 1960. sve dotada nje modifikacije su ureðene i izdane pod imenom Cobol 60.
ANSI je proizveo nekoliko revizija COBOL-a ukljuèujuæi: COBOL-68 , COBOL-74 ,COBOL85
,Amandman-1989 ,Amandman-1991 , COBOL 2002 , Finalno tehnièko izvje æe 2003
, XML sintaksno izvje æe 2006
Objektno orijentirane zbirke klasa jo se èeka za odobrenje
Posao se nastavlja do sljedeæe potpune revizije COBOL-a za koju se oèekuje da æe biti
2010.
COBOL se najèe æe koristi u vladinim i vojnim organizacijama, komercijalnim poduzeæima
i operativnim sistemima kao to je IBM-ov z/OS, Microsoft Windows i u familiji POS
IX
(Unix/Linux itd.). 1997. korporacija Gartner je objavila da 80 % svjetskog poslo
vanja
obavlja upravo programski jezk COBOL sa preko 200 milijardi linija koda, i procj
enjuje da
godi nje nastane jo dodatnih 5 milijardi linija koda.
COBOL nije podr avao lokalne varijable, rekurzije, dodjeljivanje dinamièkoj memoriji
te
struktuirane programske strukture, no u kasnijim verzijama je to ispravljeno. CO
BOL ima
preko 400 kljuènih rijeèi, omoguæava sintaksu kao to je:
ADD YEARS TO AGE
Dok je ekvivalentna struktura u veæini programskih jezika age:=age + years , a ova
sintaksa je slièna operatoru dodjele koji je kasnije implementiran u C.
COBOL dozvoljava identifikatore duge do 30 karaktera.
Primjer programa Hello, world u COBOLU:
51
IDENTIFICATION DIVISION.
PROGRAM-ID. HELLO-WORLD.
PROCEDURE DIVISION.
DISPLAY 'Hello,world'.
STOP RUN.
Sintaksa COBOLA je obièno bila kritizirana zbog verbalizma, ali neki smatraju to k
ao
pozitivnu stvar jer èini ovaj programski jezik lakim za èitanje i razumijevanje. Tra
dicionalni
COBOL, je imao ogranièen broj funkcija, to ga je èinilo podesnim za namjenu u
poslovnom raèunalstvu.
Programi u COBOLU imaju èetiri dijela:
IDENTIFICATION DIVISION-
Govori raèunaru ime programa,te sadr i ostalu dokumentaciju,odnosno tko je autor
programa, kad je program napisan,a kada kompajliran, za kakvu je namjenu napravl
jen itd.
ENVIRONMENT DIVISION
Ovaj dio govori raèunaru s kojim æe ureðajima suraðivati (printeri,ostale datoteke i sl.
),i
grana se na: CONFIGURATION SECTION (definira izvor) i INPUT-OUTPUT (definira
printer,datoteke koje bi mogle biti kori tene te dodjeljuje identifikacijska imena
ovim
izlaznim jedinicama).
DATA DIVISION
Data division govori o mjestu u memoriji koje je dodijeljeno podacima i identifi
katorima koje
je koristio program. Dvije va ne podjele ovoga dijela su: FILE SECTION (u ovom dij
elu se
definira struktura, velièina i tip podataka koji æe biti ispisani ili uèitani u datote
ku ) i
WORKING STORAGE SECTION.
Pretpostavimo da datoteka 'input.dat' sads i skup naruèioca po redovima:
Joe Bloggs 20Shelly Road Bigtown 023320
John Dow 15Keats Avenue Nowheresville042101
Jock MacDoon05Elliot Drive Midwich 100230
PROCEDURE DIVISION
Sva logika programa, odnosno sve naredbe se nalaze u ovom dijelu. PERFORM naredb
a
se koristi za poziv drugih paragrafa. Svaka naredba se zavr ava taèkom. Slijedi prim
jer
programa koji tekstualnoj datoteci dodaje brojeve.
52
000010 IDENTIFICATION DIVISION.
000020 PROGRAM-ID. LINE-NO-PROG.
000030 AUTHOR. TIM R P BROWN.
000040****************************************************
000050* Program to add line numbers to typed code *
000060* Allows for comment asterisk, solidus, or hyphen ,*
000070* moving it into position 7. *
000080* *
000090****************************************************
000100
000110 ENVIRONMENT DIVISION.
000120 INPUT-OUTPUT SECTION.
000130 FILE-CONTROL.
000140 SELECT IN-FILE ASSIGN TO 'INPUT.TXT'
000150 ORGANIZATION IS LINE SEQUENTIAL.
000160 SELECT OUT-FILE ASSIGN TO 'OUTPUT.COB'
000170 ORGANIZATION IS LINE SEQUENTIAL.
000180
000185*****************************************************
000187
000190 DATA DIVISION.
000200 FILE SECTION.
000210
000220 FD IN-FILE.
000230 01 LINE-CODE-IN.
000240 03 CHAR-1 PIC X.
000250 03 CODE-LINE PIC X(110).
000260
000270 FD OUT-FILE.
000280 01 LINE-CODE-OUT PIC X(120).
000290
000300
000310 WORKING-STORAGE SECTION.
000320
000330 01 EOF-FLAG PIC X VALUE 'N'.
000340 88 END-OF-FILE VALUE 'Y'.
000350
000360 01 NUMBER-CODE.
000370 03 L-NUM-CODE PIC 9(6) VALUE ZEROS.
000380 03 B-SPACE PIC X VALUE SPACE.
000390 03 L-CODE PIC X(100) VALUE SPACES.
000400
000410 01 NUMBER-COMMENT.
000420 03 L-NUM-COM PIC 9(6) VALUE ZEROS.
000430 03 L-COMMENT PIC X(100) VALUE SPACES.
000440
000450 01 LINE-NUMBER PIC 9(6) VALUE ZEROS.
000460
000470
000480*****************************************************
000490
000500 PROCEDURE DIVISION.
000510
000510 MAIN-PARA.
000520 OPEN INPUT IN-FILE
000530 OUTPUT OUT-FILE
000535
000540 PERFORM UNTIL END-OF-FILE
000550 ADD 10 TO LINE-NUMBER
000560 READ IN-FILE AT END
000570 MOVE 'Y' TO EOF-FLAG
53
000580 NOT AT END
000590
000600
000610
000620
IF (CHAR-1 = '*')
OR (CHAR-1 = '/')
OR (CHAR-1 = '-') THENMOVE LINE-CODE-IN TO L-COMMENT
000630 MOVE LINE-NUMBER TO L-NUM-COM
000640 WRITE LINE-CODE-OUT FROM NUMBER-COMMENT
000660 ELSE
000670 MOVE LINE-CODE-IN TO L-CODE
000680 MOVE LINE-NUMBER TO L-NUM-CODE
000690 WRITE LINE-CODE-OUT FROM NUMBER-CODE
000720 END-IF
000730 END-READ
000740 INITIALIZE NUMBER-CODE NUMBER-COMMENT
000750 END-PERFORM
000760
000770 CLOSE IN-FILE OUT-FILE
000780 STOP RUN.
BASIC
BASIC (Beginner's All-purpose Symbolic Instruction Code) je napredni programski
jezik.
Osmislili su ga maðarski matematièar i informatièar John George Kemeny i amerièki
informatièar Thomas E. Kurtz 1964. godine, kao programski jezik koji bi pribli io sv
ijet
programiranja osobama kojima to nije primarna struka, s obzirom da je svaka upot
reba
kompjutera zahtjevala pravljenje posebnog softvera. Sam jezik je do ivio ekspanzij
u 70-tih
i 80-tih kada na tr iste izlaze kompjuteri manjih dimenzija namijenjeni iroj bazi k
orisnika.
BASIC je i danas odlièan alat za uèenje programiranja, ali i kao osnova mnogo slo enij
ih
jezika poput Microsoft Visual Basic, koji je glavni jezik za .NET platforme.
Tako je recimo, 1977. u magazinu Byte Magazine predstavljana tri glavna kompjutera
tog
doba i sva tri su imali BASIC kao primarni programski jezik i kao operativno suèel
je.
Commodore PET je imao verziju Micro-Soft BASIC , a Apple II i TRS-80 su imali sliènu
ali
noviju verziju. Kako su dolazili novi kompjuteri na tr iste svaki je dolazio sa no
vijom
verzijom, èime su irili veliku familiju verzija BASIC-a. Tako su Atari 8-bit kompjute
ri imali
vlastitu verziju BASIC-a nazvanu Atari BASIC koja je donekle bila modifikovana da
bi
stala na 8kB ROM memorije. BBC je izdao BBC Basic, koji je razvijen od strane Aco
m
Computers Ltd. Koji je sadr avao mnogo novih strukturalnih naredbi. Mnogi kuæni
kompjuteri 80-tih su u ROM memoriji dobijali neku verziju BASIC-a. Samim time, f
amilija
verzija BASIC-a je najveæa od svih programskih jezika.
Primjer jednog koda u BASIC-u:
10 INPUT "What is your name: ", U$
20 PRINT "Hello "; U$
30 INPUT "How many stars do you want: ", N
40 S$ = ""
50 FOR I = 1 TO N
60 S$ = S$ + "*"
70 NEXT I
80 PRINT S$
90 INPUT "Do you want more stars? ", A$
100 IF LEN(A$) = 0 THEN GOTO 90
54
110 A$ = LEFT$(A$, 1)
120 IF A$ = "Y" OR A$ = "y" THEN GOTO 30
130 PRINT "Goodbye "; U$
140 END
Varijable
Klasièni BASIC je razumio samo jedan tip varijable i stringove. Imena varijabli u
BASIC-u
su morala na prvom mjestu sadr avati slova, dok je na drugom mjestu moglo biti ili
slovo ili
broj. Stringovi su se uvodili dodavanjem znaka $ nakon imenovanja varijable.
Primjer:
A=5
A$="THIS IS A STRING"
K7=10
BB$="HELLO!"
ZZ=1.54
Operatori i simboli
BASIC ima nekoliko operatora za kako matematièke operacije, tako i za string varij
able:
+ sabiranje
- oduzimanje
* mno enje
/ dijeljenje
() za postavljanje primarnosti matematièkih operacija
AND operacija u matematièkoj logici sa znaèenjem i
OR operacija u matematièkoj logici sa znaèenjem ili
55
NOT operacija u matematièkoj logici sa znaèenjem nije
= jednakost
> veæe od
< manje od
>= jednako ili veæe
<= manje ili jednako
<> nije jednako
" " odreðuje da je string podatak konstanta
: razdvaja vi e komandi u jednom redu
Radne naredbe
num znaèi da se tra i numerièka vrijednost. To mo e biti fiksni broj, varijabla ili neka
druga
operacija ili funkcija koja sadr i numerièku vrijednost
str znaèi da se tra i string. To mo e biti statièki string ili string varijabla ili neka
druga
operacija ili funkcija koja sadr i string vrijednosti
device number znaèi da je u pitanju neki ureðaj. Za device 0 se podrazumijeva da su
u
pitanju ekran i tastatura, a u COLOR BASIC-u device#-1 znaèi kasetu a #-2 printer
Funkcije
ABS(num) daje apsolutnu vrijednost za dati broj
ASC(str) daje prvom znaku ASCII string kod
CHR$(num) daje string znaku ACCII numerièki kod
EOF(device number) daje vrijednost 0 ako u fajlu imaju podaci ili -1 ako nema
INKEY$ daje neki znak ako je pritisnututa neka tipka na tastaturi, a ako nije da
je vrijednost
nula
INT(num) daje cijeli broj (integer) od numerièke vrijednost
LEFT$(str,num) daje prvih num slova stringa str
LEN(str) daje du inu stringa
MEM daje vrijednost preostale memorije u bajtima
56
MID$(str,start num,length num) daje novi string iz str poèev od pozicije start num pa
uzimajuæi narednih length num znakova
PEEK(num) daje vrijednost memorije na lokaciji num (0-65535)
POINT(x num, y num) daje boju na grafikonu na poziciji x,y
RIGHT$(str, position num) daje novi string poèev od pozicije num pa do kraja datog
stringa
RND(number) daje proizvoljan broj od 0 do number
SGN(num) daje vrijednost 1 ako je num pozitivan, a ako je negativan daje vrijednos
t-1,
te vrijednost 0 ako je u num 0
SIN(num) daje vrijednost num u radijanima
STR$(num) pretvara num u string
USR(num) poziva ma inski jezièni podprogram na lokaciji 275 i 276 u memoriji, te se
num izvr ava po tom podprogramu, nakon èega se dobija rezultat izvr ene operacije
Komande
AUDIO [ON/OFF] ukljuèuje i iskljuèuje zvuk iz audio kasete
CLOAD [ name ] otvara BASIC program iz kasete. Ako name nije zadan, otvara
sljedeæi program
CLOADM [ name ] otvara program u ma inskom jeziku iz kasete. Ako nije naveden
name , otvara sljedeæi dostupni program
CLOSE [device number] zatvara ureðaj (u COLOR BASIC-u ovo jedino mo e biti #-1, tj.
zatvara kasetu)
CLS(num) èisti ekran, a ako je dat num (0-8) daje boju novom ekranu
CONT nastavlja program nakon to se pritisne pauza ili stop
CSAVE [ name ] snima BASIC program na kasetu pod zadanim imenom
DATA var,var,var,... zadaje podatke u BASIC programu koji se pozovu sa READ
komandom
END kraj programa
EXEC [adresa memorije] izvr ava program u ma inskom jeziku na adresi u memoriji
FOR {num}={broj} TO {broj} [STEP {broj}]...NEXT (num) stvara FOR petlju sa zadan
im
parametrima
57
GOSUB {broj linije} poziva podprogram na datoj liniji
GOTO {broj linije} program se nastavlja od date linije
IF {ne to} THEN {komanda} [ELSE {komanda}] izvr ava kondicionu naredbu, ako je
taèna onda izvr ava THEN a ako nije onda ELSE
LIST [poèetni red] [zavr ni red] izlistava linije programa poèev i zavr avajuæi sa
zadanim linijama
LLIST [poèetni red] [zavr ni red] isto kao i LIST, samo to izlistava na printeru
NEW bri e sadr aj memorije (i program i varijable)
POKE adresa memorije, data zapisuje vrijedonst data (0-255) na adresi memorije (0
65535)
RESET (x,y) resetuje pixel na grafikonu sa koordinatama x (0-63) i y (0-31) na c
rnu boju
RETURN povratak iz podprograma
RUN num pokreæe BASIC program od date linije
SOUND ton, du ina daje zvuk sa frekvencijom tona (1-255) i trajanjem (1-255)
STOP program staje sa izvr avanjem
VAL (str) daje numerièku vrijednost iz stringa ako su u stringu brojevi
58
Struktuirano programiranje
Struktuirano programiranje mo e se posmatrati kao podskup ili subdisciplinarnih
imperativnih programiranja, jedan od glavnih paradigmi programiranja. Ono je naj
poznatiji
za uklanjanje ili smanjenje oslanjanja na GOTO naredbe. Historijski gledano, nek
oliko
razlièitih strukturirane tehnike ili metodologije razvijene su za pisanje struktur
iranih
programa. Najèe æi su:
1. Edsger Dijkstra strukturirano programiranje, gdje je logika programa struktur
a,
sastavljena od sliènih pod-struktura u ogranièenom broju naèina. To smanjuje
razumijevanje program za razumijevanje svaku strukturu vlastitu, te u odnosu na
onaj koji
sadr e to, korisno razdvajanje pitanja.
2. Pogled izvedena iz Dijkstrin koji se takoðer zala e za cijepanje programa u pod-s
ekcije
s jednog mjesta ulaska u zemlju, ali je sna no protivi konceptu jednu toèku izlaza.
3. Podaci Structured Programming ili Jackson strukturirano programiranje, koji s
e temelji
na usklaðivanje strukture podataka s programskim strukturama. Ovaj pristup primije
niti
temeljne strukture koje je predlo io Dijkstra, ali kao konstrukti koji koriste vis
oke razine
strukture programa koji æe se po uzoru na temeljne strukture podataka obraðuju. Post
oje
najmanje 3 glavne pristupu podataka strukturirani programski dizajn je predlo io J
ean-
Dominique Warnier, Michael A. Jackson, i Ken Orr.
Godina nakon Dijkstra (1969), objektno-orijentirano programiranje (OOP) je razvi
jen kako
bi se moglo sudjelovati u vrlo velikim ili slo enim programima (vidi dolje: Objekt
no
orijentirano usporedbe)
Niske razine strukture programiranje
Na niskom nivou, strukturiranih programa èesto su sastavljene od jednostavan,
hijerarhijska toka struktura programa. To su Sequence, selection, i repetition:
"Sequence" se odnosi na nalog za izvr enje izvje taja.
U " selection " jedna od brojnih izjava se izvodi, ovisno o stanju programa. To
se
obièno izra ava s kljuènim rijeèima kao to su if..then..else..endif, switch, or case.
U " repetition ", izjava je obavljena sve dok program dosegne odreðen oblik ili op
eracije
se primjenjuju na svaki element kolekcije. To se obièno izra ava s kljuènim rijeèima kao
to
su while, repeat, for or do..until. Èesto se preporuèuje da sve petlje moraju imati
samo
jedan unos taèke (i originalne strukture programiranja, takoðer samo jedan izlaz bod
), i
nekoliko jezika provoðenja ovog. Jezik je opisan kao "block-strukturiranim" ako im
a
sintaksu za zatvaranjem strukture izmeðu uzastopne kljuène rijeèi, kao to su if-izjavu
uzastopne strane, ako fi .. kao u ALGOL 68, ili broj odjeljak uzastopne BEGIN ..
END, kao
59
u PL / I. Meðutim, jezik je opisan kao "èe lja strukturiranim" ako ima sintaksa za
zatvaranjem objekata unutar redoslijedu rijeèi. "Èe alj-strukturirano" jezik ima vi e kl
juènih
rijeèi da definiraju strukturu odvojene sekcije unutar bloka, analogan vi e zubi ili
zubaca
èe lja u odvajanje dijelova èe lja. Na primjer, u Adi, blok 4-raèvast cesalj kljuènim rijeè
DECLARE, BEGIN, EXCEPTION, END , A ako je izjava-u Adi je 4-raèvast cesalj kljuènim
rijeèima IF, THEN, ELSE, END IF.
Dizajn
Strukturirano programiranje je èesto (ali ne uvijek) povezane s "top-down" pristup
dizajnu.
Top-down je programski stil, glavno upori te u tradicionalnim proceduralnim jezici
ma, u
kojoj dizajn zapoèinje odreðivanjem na slo ene komade i onda ih dijeli na sukcesivno
manje komade. Na kraju, komponente su dovoljno specifièni da bude kodirana, a prog
ram
je napisan. To je upravo suprotno od bottom-up pristup programiranju koja je uob
ièajena u
objektno-orijentirani jezici poput C + + ili Java.
Tehnika za pisanje programa koristeæi top-down metode je napisati nazive svih glav
nih
funkcija koji ce biti potrebni. Kasnije, programerski tim pregleda potreba od sv
ake funkcije
i proces se ponavlja. Ove podijeljene podrutine ce akcju izvoditi tako jednostav
no da se
moze i sa eto kodirati. Kad se sve ove razlicite podrutine kodiraju program je izv
rsen.
Strukturirano programiranje jezici
Strukturno programiranje se moze raditi u bilo kojem programskom jeziku, iako je
po eljno
da se koristi ne to poput proceduralnog programskog jezika. Od oko 1970 kada je
strukturirano programiranje poèelo da stièe popularnost kao tehnika, veæina novih
proceduralnih programskih jezika su ukljuèeni u moguænost potaknuti strukturirano
programiranje . Neki od poznatijih strukturirani programski jezici su ALGOL, Pas
cal, PL / I i
Ada.
Historija
Teorijski temelj
Teorema strukuiranog programiranja daje teorijsku podlogu strukturiranog program
iranja.
On navodi da su tri naèina kombiniranja programa-sekvenciranje, izbor, i iteracije
-dovoljni
da se izrazi bilo koja racunska funkcija. To zapazanje nije nastalo sa pokretom
struktuiranog programiranja, it te strukture su dovoljne da se opi u sa uputama ci
klusa
sredi ta centralne jedinice , kao i rad Turingovog stroja. Stoga procesor uvijek v
r i
"strukturirani program" u tom smislu, èak i ako se instrukcije èitaju iz memorije ni
su dio
strukturiranog programa. Strukturirani teorem programa ne adresira kako napisati
analizirati korisno strukturirani program.
60
Debate
Godine 1967 pismo od Dijkstra pojavilo se u Communications of the ACM s naslovom
"GOTO naredbe smatra tetnim." U pismu, koje je naveo Böhm i Jacopini dokaz, pozvao
na ukidanje nesputan GOTO od jezika visoke razine u interesu pobolj anja kvalitete
koda.
Ovo pismo se obièno navodi kao poèetak rasprave strukturirano programiranje. Iako,
mnogi programeri koji nisu upoznati s teoremom sumnjao je u svoja potra ivanja, to
vi e znaèajnih spora u nadolazeæim godinama je bilo strukturirano programiranje zaprav
o
mogao pobolj ati softvera jasnoæa, kvaliteta, i razvoj dovoljno vremena da se opravd
a
obuku programera u njemu. Dijkstra je tvrdio ogranièavanje broja strukture æe pomoæi d
a
se programer usredotoèi na razmi ljanje i da æe se pojednostaviti zadatak u osiguranja
ispravnosti programa dijeljenjem analizu na upravljive koraka. 1969 u svojim Nap
omene o
strukturirano programiranje, Dijkstra je napisao:
Kada smo zauzeli stav da to nije jedino zadatak programera za izradu odgovarajuc
eg
programa, ali i takoder da se demonstruje njegova ispravnost na uvjerljiv naèin pa
ove
gore navedene primjedbe imaju dobok utjecaj na aktivnosti programera: object koj
i stvara
mora biti korisno strukutirano.
... U nastavku æe postati jasno da plan korektnosti nije moja jedina briga, prilag
odljivost
programa ili upravljanja bit æe jo jedan ...
Donald Knuth je prihvatio naèelo da programi moraju biti napisani s logièno na umu,
ali on
se nije slo ilo (i jo uvijek se ne sla e ) i ukidanje GOTO naredbe. U svom radu 1974,
"srtuktuirano programiranje s Goto izvje taji", on je dao primjere gdje je vjerova
o da
direktno vodi do skoka jasnije i uèinkovite bez rtvovanja logiènosti. Knuth je predlo i
o
bla a strukturna ogranièenja: Trebalo bi biti moguæe donositi plan dijagram toka sa sv
im
naprijed granama na lijevo, sve unatrag grane na desnoj strani, i nema kri anja je
dnih i
drugih. Mnogi od onih koji poznaju prevodioce i teorije grafova su zagovarali do
pu tajuæi
samo reducirati tok grafova. Teoretièari strukturiranog programiranja stekli su ve
likog
saveznik 1970 nakon to je IBM-ov istra ivaè Harlan Mills primijenio svoju interpretac
iju o
teoriji strukturiranog programiranja na razvoj sistema za indeksiranje u New Yor
ku vrijeme
u istra ivanju datoteka. Projekt je bio veliki in enjering uspjeh, a menad eri u drugi
m
kompanijama navode u prilog usvajanja strukturiranog programiranja, iako je Dijk
stra
kritizirao naèina na koje Millsovo tumacenje razlikuje od objavljianih radova. 198
7 je jo
uvijek moguæe postaviti pitanje strukturiranog programiranja u èasopisu informatike.
Frank
Rubin did so in that year with a letter "," GOTO smatra tetnim 'smatra tetnim. "
Rezultat
Do kraja 20. st. gotovo svi raèunalni znanstvenici bili su uvjereni da je korisno
nauèiti i
primjenjivati koncepte strukturiranog programiranja. Vi i programski jezik kojima
su
izvorno nedostajale programske strukture, kao to su FORTRAN, COBOL, BASIC i sada
61
ih imaju.
Zajednièki odstupanja
Iznimka rukovanje
Iako postoji gotovo nikakav razlog za vi e taèaka ulaza do potprograma, èesto se koris
te
vi e izlaza, da bi se odra alo da potprograma mo da neæe imati vi e posla za napraviti, il
i
mo da nai li okolnosti koje sprjeèavaju nastavka. Tipièan primjer bio bi jednostavan
postupak èitanja podataka iz datoteke i prerade:
open file;
if (error) {
stop the subprogram and inform rest of the program about the
error;
}
}
process read data;
finish the subprogram;
" Stop and inform " mo e se postiæi bacanjem iznimke, drugi povratka iz postupka,
etiketom petlje break, ili èak goto. Kako postupak ima 2 izlaza, tokr i pravila Dijk
strinovog
strukturiranog programiranjea Kodiranje sa jednom toèkom izlaza u pravilu bi bilo
vrlo
nezgrapan. Ako je bilo vi e moguæih stanja pogre ke, s razlièitim pravilima èi æenja, toèka
izlaza æe biti izuzetno te ko za èitanje i razumijevanje, vrlo vjerojatno èak i vi e nego
onaj
s nestrukturiranim kontrolom barata goto izjavama. Veæina jezika usvojili vi e toèaka
izlaza
oblik strukturalnog programiranja. C omoguæuje vi estruke putove strukture izlaza (k
ao to
je "continue", "break", i "return"), noviji jezici takoðer imaju " labelled breaks
" ( dozvoljava
izbijanja vi e nego samo najintimnije petlje ) i iznimke.
Neki programi, osobito parsera i komunikacijskih protokola, ima broj oblika koji
slijede
jedni druge na naèin koji nije lako svesti na osnovne strukture. Moguæa je struktuir
atinje tih
sistema tako to svaki oblik-CHANGE zaseban potprograma i koristeæi varijable ukazuj
u
na aktivno stanje. Meðutim, neki programeri (ukljuèujuæi Knuth) vole da provode oblike
CHANGE s skokom na novo stanje.
Pascal
POVIJEST
Pascal se temelji na programskom jeziku Algolu i ime je dobio u èast francuskog
matematièara i filozofa Bleza Paskala. U pro losti, prateæi Pascal Kompanija Wirth je
razvila jezik Euler.
62
Pascal je uglavnom namijenjen za poduèavanje poèetnika strukturnom
programiranju. Neke verzije Pascala su se koristile za sve, od istra ivaèki projekat
a za PC
igre do ugraðenih sistema. Postoje noviji Pascalovi kompajleri koji se koriste na ir
oko.
Pascal je bio prvi visoko rangirani jezik kori ten za razvoj u Apple Lisa. Objektn
i Pascal se
na iroko koristi za razvijanje Windowsovih programa kao to je Skype. Kompanija Wirt
h je
namjeravala kreirati efikasan jezik baziran na tzv. strukturnom programiranju. P
ascal ima
korijene u programskom jeziku Algol 60, ali takoðer uvodi koncepte i mehanizme koj
i bi
omoguèili programerima da defini u vlastite tipove podataka, i uèiniti lak u gradnju
dinamiènih i rekurzivnih struktura podataka kao to su popisi, stabla i grafovi.
Pascal ima strog pristup svim objektima, to znaèi da se jedan tip podataka ne mo e
pretvoriti ili tumaèiti kao drugi, bez eksplicitne pretvorbe. Slièni mehanizmi su st
andard u
mnogim programskim jezicima danas. Drugi jezici koji su uticali na Pascal-ov raz
voj su
Cobol, Simula 67 i Wirth-ov vlastiti Algol-W.
ALFABET JEZIKA PASCAL
Alfabet programskog jezika Pascal se sastoji od svih velikih i malih slova engle
skog
alfabeta, cifara 0-9, i sljedeæih specijalnih znakova:
' ( ) + -* / , . :; < > = [ ] { }
Alfabet verzije Turbo Pascal ukljuèuje jo i sljedeæe znakove:
@ $ _
Sintaksa jezika Pascal predviða da bilo koji dio Pascal programa koji je omeðen vitièa
stim
zagradama predstavlja komentar, i raèunar se na njega uopæe ne obazire prilikom
izvr avanja programa.
STRUKTURA PASCAL PROGRAMA
Pascal u svom izvornom obliku je èisto proceduralni jezik,a ukljuèuje kontrolne
strukture s rezerviranim rijeèima kao to su: if, then, else, while, for, i tako dal
je.
Meðutim, Pascal takoðer ima mnogo olak ica u struktuiranim podacima i drugih objekata
apstrakcije koji nisu bili ukljuèeni u orginalni Algol60, kao to su tip,definicije,
dokumentacija, pokazivaèe, nabrajanja. Takve tvorevine su dijelom naslijeðene ili
inspirisane iz Simula 67, Algol 68, Niklaus Wirth-ovog vlastitog Algol-W i suger
isane od
CAR Hoare.
Na poèetku svakog Pascal programa mora se nalaziti zaglavlje programa. Ono
poèinje kljuènom rijeèi p r o g r a m, iza koje slijedi ime programa, a nakon tog slij
ede
rijeèi input ukoliko program èita podatke sa standrdnog ulaznog ureðaja(tipièno tastatur
e),
odnosno output ukoliko program prikazuje izlazne podatke korisniku preko standar
dnog
izlaznog ureðaja ( tipièno ekrana). Izvr ni dio programa uvijek poèinje kljuènom rijeèi
begin, a zavr ava kljuènom rijeèi end, nakon koje obavezno slijedi taèka, koja oznaèava
kraj programa.
U Pascalu se svaka od promjenjivih koje æe se koristiti mora predhodno
deklarirati(najaviti). Deklaracija promjenjivih zapoèinje navoðenjem kljuène rijeèi v ar
.
63
Nakon toga slijedi popis promjenjivih koje deklariramo zajedno sa dozvoljenim sk
upom
vrijednosti koje promjenjive mogu da prihvate. U jeziku Pascal, svaka promjenjiv
a mora
imati svoj tip. Svi tipovi podataka se mogu podijeliti na proste i slo ene tipove.
U proste
tipove spadaju èetiri osnovna tipa podataka: cjelobrojni tip, realni tip, znakovni
tip, i logièki
tip, kao i dva izvedena tipa: pobrojani tip i intervalni tip.
Cjelobrojni tip je najjednostavniji prosti tip. Uzmimo kao primjer deklaraciju
var Broj : integer;
Ova deklaracija oznaèava da je tip promjenjive Broj tip integer, odnosno cjelobroj
ni tip.
Zbog nekih tehnièkih ogranièenja, opseg vrijednosti koje se mogu smje tati u cjelobroj
ne
promjenjive uvijek je ogranièen. U veæini verzija Pascala vrijednosti promjenjivih
ogranièene su na opseg od -32768 do 32767. ovaj opseg èesto nije dovoljan, pa mnoge
verzije Pascala uvode i tip longint koji je identièan tipu integer, osim to dopu ta z
natno
iri opseg vrijednosti.
Realni tip
Promjenjive realnog tipa mogu sadr avati proizvoljne vrijednosti iz skupa realnih
brojeva.
Primjer deklaracije promjenjive realnog tipa:
var Temperatura : real;
Znakovni tip
Promjenjive znakovnog tipa, odnosno tipa char, mogu kao svoju vrijednost sadr avat
i
proizvoljan znak, to jest slovo, cifru ili znak interpukcije. Ovo se pokazalo ka
o veliko
ogranièenje, pa mnoge verzije Pascala uvode i tip string. Promjenjive ovog tipa mo
gu
sadr avati èitave rijeèi ili reèenice.
Logièki ( Bulov ) tip
Promjenjive logièkog tipa mogu imati samo jednu od dvije moguènosti: true ili false.
Na
primjer, ukoliko imamo deklaraciju:
Var Punoljetan : Boolean;
Tada promjenjiva Punoljetan mo e imati samo vrijednost true ili false.
Pobrojani tip
Pascal dozvoljava korisniku da definira vlastite tipove uz pomoæ kljuène rijeèi type.
Na
primjer, deklaracija
type Boje = ( Crvena, Zelena, Plava, Zuta, Crna, Bijela );
definira novi tip Boje. Promjenjive tipa Boja mogu imati vrijednosti samo vrijed
nosti
Crvena, Zelena, Plava, Zuta, Crna ili Bijela.
Intervalni tip
Intervalni tip je jo jedan korisnièki definirani tip, koji omoguæava programeru da de
finira
podskup nekog veæ postojeæeg tipa, odnosno da ogranièi skup vrijednosti predstavljen
tipom. Intervalni tip se definira tako to se prvo definira ime tipa, zatim znak j
ednakosti,
nakon èega se navode poèetna i krajnja vrijednost koju promjenjiva tog tipa mogu uzi
mati,
razdvojene sa dvije taèke. Na primjer:
type Sat = 0 . . 23;
DaniUgodini= 1. . 365;
Ovdje su deklarirani tipovi Sat i DaniUgodini kao podskupovi tipa integer. Slo eni
tipovi
mogu biti izgraðeni od jednostavnijih, kao npr. u sljedeæem primjeru:
a = Array [1..10] of Integer;
b = record
x: Integer;
64
y: Char
end;
c = File of a;
repeat
a := a + 1
until a = 10;
case i of
0: write('zero');
1: write('one');
2: write('two')
end;
Pascal kao i drugi programski jezici omoguèava definisanje potprograma kao to su
procedure i funkcije.Procedure i funkcije u Pascalu se mogu umetati na bilo koju
dubinu.
Svaki procedura ili funkcija mo e imati vlastitu deklaraciju konstanti, tipova, va
rijabli, i
drugih procedura i funkcija, koje moraju sve biti u tom redoslijedu. Ovaj zahtje
v narud be
je izvorno namijenjen da omoguæi efikasnu single-pass kompilaciju.
Sada æemo dati jedan primjer programa raðenog u programskom jeziku Pascal:
Programski jezik C
C (izgovara se "ce") je racunarski programski jezik opæe namjene. Razvio ga je 197
2
Dennis Ritchie na Bellovi laboratoriji za kori tenje s operativnim sistemom UNIX.
Iako je C
dizajniran za sistemski softver, on je takoðe iroko kori ten za razvoj prenosivih sof
tverskih
65
aplikacija. C je jedan od najpopularnijih programskih jezika i ima jako malo raèun
arske
arhitekture za koji C kompajler ne postoji. C je uvelike uticao na mnoge druge p
opularne
programske jezike, od kojih je najpoznatiji C + +, koji je izvorno zapoèeo kao pro
du etak
od C.
Dizajn
C se koristi u sistemskom softveru. Dizajniran je tako da je mogao da koristi je
dnostavan
kompajler, obezbedi nizak level pristupa memoriji i jezièke konstukcije unatoè ma insk
im,
te da bi osigurao minimalno vrijeme izvodjenja podr ke. C je stoga koristan za mno
ge
aplikacije koje su bile kodirane u asemblerskim jezicima. Uprkos niskom nivou sp
osobnosti
ovog jezika, bio je dizajniran da podstakne na nezavisno ma insko programiranje.
Skladnih standarda i spretno napisan, C program moze biti sastavljen za vrlo sir
ok raspon
raèunarskih platformi I operativnih sistema, sa malo ili nimalo promjena svog izvo
rnog
koda. Jezik je postao dostupan na svim poljima, od ugradjenih mikrokontrolera do
superracunara.
Minimalizam
Dizajn ovog programskog jezika je vezan za prvobitnu namjeru da se koristi kao
prijenosni sistem. On pru a jednostavan, direktan pristup bilo kojem adresnom obje
ktu i
izrazi u njegovom kodu mogu biti prevedeni direktno iz ma inskog u izvr ni kod. Neke
od
ranijih verzija C kompajlera su implementirane na PDP 11 procesorima koji imaju
samo
16 adresnih bita. C kompajleri za nekoliko obiènih 8- bitnih platformi su solidno
prevedeni.
Karakteristike
Kao i veæina jezika u ALGOL radiciji, C ima objekte za strukturirano programiranje
i
omoguæava opseg leksièkih promjenljivih i rekurzije, dok statièki sistem tipa spreèava
mnoge neplanirane operacije. U C u , sav izvr ni kod je sadr an unutar funkcije.
Funkcijski parametri uvijek nose vrijednost. Izostavljanje oznake se u C-u preds
tavlja se
izrièito preko polaznih pokazivaèa vrijednosti. Raznovrsni tipovi podataka (struktur
a)
omoguæuju povezivanje elemenata koji se mogu kombinovati I koristiti zajedno. Polj
e za
tekst u C programu je slobodnog formata, I koristi taèka zarez za razdvajanje izra
za.
Ovo su takodje neke osobine ovog jezika:
Logièke operacije "i" i "ili" su predstavljena sa & & i | | kao u Algolu, I semant
ièki su
razlièite od operatora & i | . Meðutim Unix 6 & 7 verzije C-a doista koriste ALGOLov
e
i ASCII operatore, ali za utvrðivanje infimuma i supremuma respektivno.
Veliki broj slo enih operatora, kao to su + =, + +, itd. (Odgovara operatorima +: =
i
+ = 1 kod ALGOL-a 68) .
Nedostaci
Relativno nizak novo prirode jezika pru a programeru kontrolu za zatvaranje nad on
im
to raèunar radi , pri èemu dozvoljava posebno skrojenu I agresivnu optimizaciju za
odreðenu platformu. To omoguæuje kodu da uèinkovito djenuje i na vrlo ogranièenom
hardveru, kao to su ugraðeni sistemi.
C ne posjeduje pojedine karakteristike koje su dostupne u nekim drugim programsk
im
jezicima:
standardnu I / O biblioteku
dugi tip podataka int
Neoznaèen tip podataka int
slo eni zadatak operatora oblika = OP (kao to su =-) su promijenjeni u obliku op =
da bi uklonili semantièku nejasnoæu stvorenu kao to je konstrukcija i=-10, koji je
bio interpretiran kao i =- 10 umjesto eventualno namijenjene I = -10
Èak i nakon objavljivanja 1989 Standard C, mnogo godina K & R C je jo uvijek smatra
n
kao "najmanji zajednièki nazivnik" na koji su C programeri ogranièili sebe kad je
maksimalni prijenos zatra en, jer su mnogi stariji kompajleri jo uvijek bili u upot
rebi.
U ranim verzijama C, samo funkcije koje su vratile ne -cjelobrojnu vrijednost tr
ebale su
biti deklarisane, ako se koriste prije definicije funkcije. Funkcija koja se kor
istila bez ikakve
prethodne deklaracije se , po pretpostavci , vracala na cijeli broj, ako je njeg
ova vrijednost
veæ kori tena.
Na primjer:
long int SomeFunction ();
/ * OtherFunction int (); * /
/ * Int * / CallingFunction ()
povratak test2;
)
Sve navedene komentare out - int deklaracije mogu biti ispu teni u K & R C .
Dok K & R deklaracije funkcija ne ukljuèuju bilo kakve informaciju o argumentu fun
kcije,
parametri funkcije se ne provjeravaju, iako æe neki prevodioci izdati upozorenje,
ako je
lokalna funkcija nazvana krivim brojem argumenta, ili ako se vi e poziva za funkci
je koristi
pomoæu razlièitih brojeva ili vrste argumenata. Odvojeni alati, kao to su neke usluge
Unixa
razvijeni su da (izmeðu ostalog) mogu provjeriti dosljednost funkcije kori æene na vi e
izvornih datoteka.
U godinama nakon objave K & R C, nekoliko neslu benih osobina su dodate jeziku, uz
potporu AT & T kompajlera i nekih drugih dobavljaèa. Meðu njima su:
69
· void funkcija
· funkcije povratka struktura ili skupine tipova (a ne pokazivaèe)
· zadatak za strukture tipove
· navedeni tipovi
Veliki broj ekstenzija i nedostatak sporazuma o standardnim bibliotekama, uz pop
ularnost
jezika i èinjenicu da èak ni Unix kompajleri nisu precizno implementirani K & R
specifikaciju, dovela je do nu nosti standardizacije.
Tijekom kasnih 1970-ih i 1980-ih, verzije C-a su prevodjene za irok krug raèunara,
miniraèunara i mikroraèunara, ukljuèujuæi i IBM PC, èime se njegova popularnost poveæala
znaèajno.
Godine 1983, amerièki nacionalni institut za standarde (ANSI) formira odbor, X3J11
, za
uspostavljanje standardnih specifikacija C-a. Godine 1989, standard je potvrdjen
kao ANSI
X3.159-1989 "Programski jezik C". Ova verzija jezika èesto se naziva ANSI C, Stand
ard C,
ili ponekad C89.
Godine 1990, ANSI C standard (sa promjenom oblikovanja) usvojen je od strane
Meðunarodne organizacije za normizaciju (ISO) kao ISO / IEC 9899:1990, koja se
ponekad naziva C90. Dakle, pojmovi "C89" i "C90" odnose se na isti programski je
zik.
ANSI, kao i druga nacionalna tijela za uspostavljanje normi, vi e ne razvijaju C s
tandard
samostalno, ali se priklanjaju normama ISO C. Nacionalno usvajanje promjena
meðunarodnog standarda se obièno dogaða u roku godinu dana od ISO objavljivanja.
Jedan od ciljeva procesa C standardizacije bio je proizvodnja skup K & R C, uklj
uèujuæi
mnoge neslu bene osobine koje su naknadno uvedene. Odbor za standarde je ukljuèivao
nekoliko dodatnih osobina kao to su prototipovi funkcija (posuðena iz C + +), void
pokazivaèi, podr ka za meðunarodni karakter skupova te lokacije, i pobolj anje
preprocesor. Sintaksa za deklaraciju parametara takoðer je takodje bila pribli ena s
tilu koji
se koristi u C + +, iako je K & R interfejs i dalje dopu ten, za kompatibilnost s
postojeæim
izvorni kod.
C89 je podr an u trenutnim C kompajlerima, a veæina C koda koji se sastavlja se i da
nas
temelji na njemu. Bilo koji plan napisan samo u Standard C i bez ikakve zavisnos
ti od
hardver-a æe raditi ispravno na bilo kojoj platformi C izvedbe, u okviru svojih gr
anica
resursa. Bez takve mjere opreza, programi mogu kompajlirati samo na odreðenim
platformama ili s odreðenim kompajlerima, zbog, na primjer, kori tenja nestandardnih
biblioteka, kao to su GUI biblioteke.
U sluèajevima gdje kod mora biti u iskompajliran, bilo standardno ili baziran na K
& R C
komajlerima, __STDC__ makro naredba se mo e koristiti za podijelu koda u Standard
i K
& R odjeljcima da bi iskoristila osobine dostupne samo u Standard C.
Nakon ANSI / ISO standardizacije procesa, specifikacija C jezika ostala je relat
ivno
statièna neko vrijeme, dok je C + + nastavio da se dalje razvija, uglavnom sopstve
nim
naporima. Godine 1995 Normativni Amandman 1 do 1990 C Standard je objavljen, da
bi
ispravio neke detalje i dodao podr ku za opse niji meðunarodni karakter skupova. C
standard dodatno je prepravljen krajem 1990-ih, to je dovelo do objavljivanja ISO
/ IEC
9899:1999 u 1999, koji se obièno naziva "C99". On je od tada izmijenjen tri puta o
d strane
70
Technical Corrigenda. Meðunarodni standard C odr ava radne skupine ISO / IEC
JTC1/SC22/WG14.
C99 uvodi nekoliko novih moguænosti,nekoliko novih tipova podataka (npr. int), raz
lièite
du ine polja, pomoæ za makronaredbe promjenjive mjesta i podr ku za komentari u
jednom redu koji poèinju s / /, kao u BCPL ili C + +. Mnogi od ovih veæ se provode u
nastavcima u nekoliko C kompajlera.
C99 je veæim dijelom kompatibilan s C90, ali je stro i na neki naèin. Godine 2007 se
poèelo sa radom u oèekivanju druge revizije C standarda, neformalno nazvane "C1X".
Odbor C standarda je usvojio smjernice da ogranièi usvajanje novih osobina koje ni
su
testirane od strane postojeæih implementacija.
Upotreba
Primarna upotreba C-a je "sistem programiranje", ukljuèujuæi izvedbu operativnih
sistema i ugraðenih sistem aplikacija, zbog kombinacija po eljnih karakteristika kao
to su
prenosivost koda i efikasnost, moguænost pristupa odreðenim hardverskim adresama,
sposobnost da se "igra rijeèima" kako bi se slagala sa zahtjevima za pristup podac
ima,
vrijeme izvoðenja i niske potra nje za resursima sistema. C se takoðer mo e koristiti za
web programiranje pomoæu CGI kao "Gateway" informacijama izmeðu web aplikacija,
poslu itelja i preglednika. Neki faktori za odabir C pord ostalih jezika su njegov
a brzina,
stabilnost i manja osjetljivost na promjene u radnim okru enjima zbog svoje prirod
e
sastavljanja.
Jedna od posljedica irokog prihvaæanja C-a je i efikasnost prevodjenja kompajlera,
bibioteka i predstavnika drugih programskih jezika u C. C se ponekad koristi kao
posredni
jezika u implementacijama drugih jezika. Ovaj pristup se mo e koristiti za prijeno
s i
praktiènost.Neki prevodiocima koji koriste C ovaj naèin su BITC, Gambit, Glasgow Has
kell
kompajler, Squeak, i Vala. Na alost, C je zami ljen kao programski jezik, a ne kao
prevodilac jezika, pa je stoga manje idealan za kori tenje kao srednji jezik. C je
takoðer
na iroko kori ten za implementaciju krajnjeg korisnika aplikacije, ali kako su aplik
acije
postale veæe, mnogo tog razvoja usmjereno je na druge jezike.
Sintaksa
Za razliku od jezika kao to su FORTRAN 77, C izvorni kod je slobodnog oblika i
omoguæuje proizvoljno kori tenje razmaka za oblikovanje koda, prije nego redanja u
kolone linije teksta,bazirane na ogranièenju. Komentari se mogu pojaviti bilo izmeðu
/ * i *
/, ili (u C99) nakon / / do kraja linije.
Svaka datoteka sadr i izvor deklaracije i definicije funkcije. Funkcije definicije
, pak,
sadr e deklaracije i izjave. Deklaracije defini u nove tipove koristeæi kljuène rijeèi kao
to
su struct, union i enum, ili dodijeljuju tipove, rezervi u nove varijable, obièno pi
sanjem tipa
nakon èega slijedi ime varijable. Kljuène rijeèi kao to su char i int odredjuju tipove.
Dijelovi
koda su u zagradama ({i}, ponekad zvanim "vitièasta zagrada") ogranièavaju opseg
deklaracija i djeluju kao jedna izjava za kontrolne strukture.
Kao imperativni jezik, C koristi izvje taje za specifiène akcije. Najèe æa izjava je izraz
,
nakon kojeg slijedi zarez. Kao nuspojava evaluacije, funkcijama se mogu davati i
mena i
varijablama se mogu dodijeliti nove vrijednosti.
Da biste izmijenili normalno sekvencijalno izvr enje izvje taja, C nudi kontrolu pro
toka
71
izjava identificiranim rezervisanim rijeèima. Strukturirano programiranje je podr an
o od
strane, if (-else) uvjetnog izvoðenja kao i do-while,while i for za izvr enje petlji
. For iskaz je
odvojio inicijalizaciju, testiranje, i ponovno inicijaliziranje izraza, bilo koj
eg ili svih koji mogu
biti izostavljeni. Break i continue se mogu koristiti da napuste izjavu ili petl
ju Tu je i nestrukturiran
go to iskaz koji se grana direktno do neoznaèene lebele unutar funkcije.
Switch odabira sluèaj koji treba biti izvr en na osnovu vrijednosti cijelog broja iz
raza.
Izrazi se mogu koristiti za razne ugraðene operatore (vidi dolje) i mogu sadr avati
pozivanje funkcija. Redoslijed argumenata funkcija i operanada je nedefinirana.
Procjene
se èak mogu poklapati. Meðutim, sve nuspojave (ukljuèujuæi skladi tenje u varijabli) æe se
dogoditi prije sljedeæeg "sequence point"-a.
Iako je imitirao mnoge jezike zbog rasprostranjene familijarnosti, C sintaksa je
èesto bila
kritizirana. Na primjer, Kernighan i Ritchie ka u u Introduction of The C Programm
ing
Language, "C, kao i bilo koji drugi jezik, ima svoje nedostatke. Neki od operato
ra imaju
krivu prednost, neki dijelovi sintakse bi mogli biti bolji."
Problemi koje vrijedi spomenuti su:
# Include <stdio.h>
return 0;
)
Primjetiti da je posljednja linija neobièna, ali semantiècki taèna, izraz: i[x], koji
mijenja
indeks varijabli i sa varijablom x. Ova zadnja linija mo e biti pronadjena u C kod
u, ali
njegova upotreba je strana i èudna medju C programerima.
Memory management
Jedna od najva nijih funkcija programerskog jezika je da omoguæi rukavanje memorijom
i objektima koje su pohranjene u memoriji.
C omoguæava tri puta da se smjesti objekat u memoriju.
y := 0; i := k := 1;
for p:=1 step 1 until n do
for q:=1 step 1 until m do
end Absmax
Algol 68
ALGOL 68 (skraæeno od ALGOrithmic Language 1968) je bio vodeæi raèunarski
programski jezik kao nasljednik uspje nog ALGOL 60 razvijen u cilju mnogo ireg spek
tra
primjene i rigoroznije definisane sintakse i semantike.
Doprinosi polju raèunarske nauke ALGOL-a 68 su veliki i raznovrsni. Iako neki od n
jih nisu
javno izno eni dok nisu potvrðeni, u jednom ili drugom obliku, kasnije je postao dio
razvijenih programskih jezika.
ALGOL 68 uvodi sadr aje kao to su sintakse na bazi izraza, korisnièki deklarisani tip
ovi i
strukture, model pokazivaèkih promjenjljivih i pokazivaèkih parametara, te moguænost
uzimanja elementa iz nizova, redova i matrica.
begin # Algol-68 prime number sieve, functional style #
show(tl(l)));
77
proc filter = (proc (int) bool p, list l) list:
if l is nil then nil
elif p(hd(l)) then cons(hd(l), filter(p,tl(l)))
else filter(p, tl(l))
fi;
show( primes(100) )
end
PL/I
Nauèno i poslovno orjentisani korisnici su 1950-tih i ranih 1960-tih programirali
u razlièitim
programskim jezicima za razlièiti raèunarski hardver. Tako su poslovno orjentisani s
e
koristili Autocoders-om preko COMTRANa do COBOLa, dok su nauèno orjentisani
korisnici programirali u FORTRANu. IBM-ov System 360 (najavljen 1964. god) je bi
o
dizajniran kao zajednièka ma inska arhitektura za oba tipa korisnika, nasljednika sv
ih
postojeæih IBM arhitektura. Slièno, IBM je elio jedinstven programski jezik za sve
korisnike. Nadali su se da bi FORTRAN mogao biti pro iren za potrebe poslovno
orjentisanih programera. U oktobru 1963 formira se odbor sastavljen od 3 èlana IBM
-a iz
Njujorka i 3 èlana SHARE-a te IBM-ove grupe nauèno orjentisanih korisnika u cilju
prijedloga ovih pro irenja FORTRAN-a. Bili su u nemoguænosti da to uèine zbog
ogranièenja FORTRAN-a te su se pojavili sa dizajnom novog programskog jezika pod
oznakom NPL . Ova skraæenica se podudarala sa skraæenicom za Britanski nacionalni
laboratorij fizike te je zamijenjen sa MPPL, a kasnije, 1965 godine sa PL/I (sa
rimsko I
kao FORTRAN-ov IV ). Prva definicija se pojavila u aprilu 1964 godine.
IBM je uzeo NPL kao poèetnu taèku i dovr io dizajn do nivoa pisanja prvog kompajlera:
NPL-ove definicije su bile nepotpune u detaljima i opsegu. Kontrola PL/I je obav
ljana
najprije u Centru za programiranje u Njujorku a kasnije u IBM-ovoj laboratoriji
u Hursliju,
Velika Britanija. SHARE i GUIDE grupe korisnika su bili ukljuèene u pro irivanje jez
ika i
imale su ulogu u IBM-ovom procesu za kontrolu jezika kroz njihove PL/I projekte.
Pokazalo
se da tako veliki jezik ima potrebu za formalnom definicijom PL/I-ja. Projekt je
osnovan
1967 godine u IBM-u u Beèu da bi pru io kompletnu specifikaciju i otklonio moguæe
dvojbe. To je dovelo do jedne od prvih veæih formalnih metoda za razvoj, nazvanih
VDM.
Jezik je najprije bio detaljno naznaèen u priruèniku Specifikacije jezika PL/I. C28-6
571
napisanog u Njujorku 1965 godine, te izmijenjen u priruèniku Specifikacije jezika P
L/I.
GY33-6003 u Hursliju 1967 godine. IBM je nastavio razvijat PL/I kasnih 60-tih i r
anih 70tih,
objavljujuæi ga u priruèniku GY33-6003. Ove priruènike su upotrijebljavale grupe
korisnika Multics-a kao i drugi rani korisnici. Prvi kompajler je napra vljen 19
66 godine, a
standard za PL/I je odobren 1976 godine. Odbor The Share 3by3 je postavio sljedeæe
ciljeve za NPL :
· Korisni opseg koji æe ukljuèivati postojeæi FORTRAN, dodatno uvrstiti aplikacije78
znakovne i brojne nizove, pro irene U/I operacije te dinamièke odzive u sluèajevima
gre aka prekoraèenja ili kraja datoteke.
end_file = 0;
on endfile (sysin) end_file = 1;
end find_strings;
Ada
Ada je struktuirani, imperativni raèunarski programski jezik. Dizajnirao ga je tim
predvoðen
Jean Ichbiah kompanije CII Honeywell Bull tokom 1977-1983. Obavljao je sliène zada
tke
kao C i C++, ali sa poveæanom sigurno æu poput Jave. (Neki navode i uticaj Ade na Javu
.)
Nazvana je prema Ada Lovelace, èesto pripisivano kao prvi raèunarski programer.
Izvorna namjena Ade je da bude u ugraðenim real-time sistemima, te se jo uvijek kor
isti u
te svrhe. Revizija Ada 95, dizajnirana od strane S. Tucker Taft kompanije Interm
etrics
izmeðu 1992 i 1995,unaprijedila je podr ku za sistemsko, numerièko i finansijsko
programiranje.
Znaèajnije odlike Ade ukljuèuju precizno pisanje, modularne mehanizme (paketi), prov
jeru
pri pokretanju, paralelno procesiranje (zadatci), upravljanje izuzecima te gener
iènost. Ada
95 je dodala podr ku za objektno-orjentisano programiranje, ukljuèujuæi dinamièko
otpremanje.
Podr ku provjere pri pokretanju Ada koristi da bi zabranila pristup slobodnoj memo
riji,
sprijeèiti prepunjavanje buffer-a, gre ku off-by-one i druge otklonjive propuste. Ov
e
moguænosti se mogu i iskljuèiti èime se dobije na efikasnosti, ali se takoðe mo e efikasno
i
kompajlirati. Takoðe ukljuèuje objekte za lak u programsku provjeru. Zbog ovih razloga
na ao je iroku upotrebu u sigurnosnim sistemima kao to su avio, vojnim (za oru je) te
svemirskim letjelicama.
Programe Ade saèinjavaju paketi, procedure i funkcije.
with Ada.Text_IO;
80
package Mine is
i : Integer := Integer'First;
procedure Print (j: in out Integer) is
begin
Ada.Text_IO.Put_Line ('The total is: ', j);
j := Next (j);
end Print;
begin
while i < Integer'Last loop
Print (i);
end loop;
end Mine;
Modula 2
Modula-2 je raèunarski programski jezik dizajniran i razvijan izmeðu 1977 i 1980 od
strane
Niklaus Wirtha iz Ciri kog ETH, kao revizija Pascala da bi slu io kao jedini program
ski
jezik za operativni i aplikacijski softver radne stanice Lilith. Glavni koncepti
su bili:
Modul kao mjera za kompajliranje iz dijelova
Coroutine kao osnovni programski dio za konkurencijske procese
Enkapsulaciju tipova i procedura koji omoguæavaju pristup odreðenim ma inskim
objektima
Modula-2 je shvaæena kao uspje an nastavak Niklaus Wirth-ovog ranijeg programskog
jezika Pascala. Dizajn jezika je bio pod uticajem programskog jezika Mesa i novi
h
moguænosti za programiranje osobnih raèunara Xerox Alto, oba iz Xerox-a, koje je Wir
th
vidio tokom 1976 u Xerox PARC-u.
MODULE SumAndAverage;
VAR
N:INTEGER;
X:INTEGER;
SUM:INTEGER;
AVERAGE:INTEGER;
BEGIN
WriteString
81
END;
OpenInput("IN");
IF NOT Done THEN
CloseOutput;
WriteString('Input file cannot be opened');
WriteLn;
HALT;
END;
N:=0; SUM:=0; ReadInt(X);
WHILE Done DO
WriteInt(X,3);
WriteLn;
N:=N+1;
SUM:=SUM+X;
ReadInt(X);
END;
WriteString('The Sum is '); WriteInt(SUM, 1);
WriteLn; AVERAGE:=SUM DIV N;
WriteString('The Average is ');
WriteInt(AVERAGE, 1); WriteLn;
CloseOutput;
CloseInput;
END SumAndAverage.
XBASE
dBASE je bio prvi iroko kori teni sistem za upravljanje bazama podataka ili
DBMS(database management system) za mikrokompjutere, objavljen od strane Ashton-
Tate za CP/M, kasnije i na Apple II, Apple Macintosh i IBM PC u DOS-u to je dBASE
uèinilo najprodavanijim softverom dugi niz godina. dBASE nije uspio napraviti prel
az na
operativni sistem Microsoft Windows te je na kraju bio zamijenjen novijim rje enji
ma kao
to su bili Paradox, Clipper i FoxPro. dBASE je prodat Borlandu 1991, koji je kasn
ije 1999
prodao prava na distribuciju novoformiranom dBASE Inc.
Sredinom 1980'tih mnoge kompanije su poèinjale sa pravljenjem njihovih varijacija
i sliènih
rje enja na jezik dBASE. Tu svrstavamo FoxPro (danas Visual FoxPro), Quick-Silver,
Clipper, Xbase++, FlagShip, i Harbour. Zajedno se neformalno svrstavaju i kao xB
ase ili
XBase.
SELECT 1
SET ORDER TO 1
@ 01,01 TO 20,78 DOUBLE
DO WHILE .T.
VCODIGO = 0
VFIM = SPACE(01)
@ 05,06 SAY "CODIGO: " GET VCODIGO PICT "999"
READ
SEEK VCODIGO
IF .NOT. FOUND()
@ 22,32 SAY "ESTE CÓDIGO NAO FOI CADASTRADO"
INKEY(0)
@ 22,32 SAY " "
LOOP
ENDIF
@ 07,6 SAY "DIA: " + DIA
@ 09,6 SAY "HORA: " + HORA
82
@ 11,6 SAY "COMPROMISSO: " + COMPRO
@ 15,48 SAY "CONTINUAR? [S/N] " GET VFIM PICT "@!" VALID(VFIM$"SN")
READ
IF VFIM = "S"
LOOP
ELSE
EXIT
ENDIF
ENDDO
Quick BASIC
Microsoft QuickBASIC (èesto jo i kao QB s tim da se treba razlikovati od Qbasic koji
je
zapravo drugi sistem)je nasljednik programskog jezika BASIC, razvijanog od stran
e
Microsoft korporacije za kori tenje u MS-DOS operativnom sistemu. Zasnovan je u ma
njoj
mjeri na GW-BASICu ali je podpomognut sa korisnièki-definisanim tipovima, unaprijeðe
nim
programskim strukturama, boljom diskovnom i grafièkom podr kom te kompajlerom u
dodatku interpreteru. Microsoft je prodavao QuickBASIC kao komercijalni paket za
razvoj.
DECLARE SUB init ()
DECLARE SUB get.wave ()
DECLARE SUB save.wave ()
DECLARE SUB measure ()
DECLARE SUB enter (number!)
DIM SHARED motorv(1000)
DIM SHARED servofreq(1000)
DIM SHARED lf$
lf$ = CHR$(10)
CALL init
CALL measure
END
SUB init
lf$ = CHR$(10)
OPEN "com2:2400,n,8" FOR RANDOM AS #1 LEN = 2
PRINT #1, ":acquire:type normal"; lf$;
PRINT #1, ":acquire:complete 1"; lf$;
END SUB
SUB measure
FOR count% = 1 TO 6
NEXT count%
END SUB
BCPL
BCPL (Basic Combined Programming Language) je raèunarski programski jezikm
dizajniran od strane Martin Richardsa sa Univerziteta Cambridge 1966; bio je nam
jenjen
za pisanje kompajlera za druge jezike.
Neobièan je utoliko to ima jedan podatkovni tip: rijeè, fiksan broj bita, obièno odabra
no da
se podudara sa arhitekturom ma inske rijeèi. Ovakav izbor je kasnije pokazao da stva
ra
izvjesne probeme kada je BCPL kori ten na ma inama èiji najmanji adresabilni podatak
83
nije bila rijeè veæ byte. Interpretacije bilo koje vrijednosti je odreðivao operater,
kori tenu
za obradu vrijednosti. (Na primjer, + je sabirao dvije vrijednosti zajedno treti
rajuæi ih kao
cjelobrojne tipove; znak ! uno eno u vrijednosti, efektivno tretirajuæi kao pokazivaè.
) Da bi
ovo moglo raditi, realizirano je tako da se ne vr i provjera tipa.
// Routine to compute a checksum of a
// named file, simplified from a compiler example.
GET "libhdr"
instream := findinput(args!0)
IF instream = 0 DO $( writef("can't open %s*n", args!0)
RESULTIS 20
$)
selectinput(instream)
UNLESS args!1 = 0 DO
$( outstream := findoutput(args!1)
$)
$)
$( LET ch = rdch()
IF ch=endstreamch BREAK
sum := (13*sum + ch) & #xFFFFFFF
$) REPEAT
endwrite()
$)
RESULTIS 0
$)
84
Objektno-orijentisano programiranje
Objektno orjentisano programiranje je metodologija programiranja kojom se modeli
ra
realan svet kao skup objekata i odnosa meðu objektima. Osnovni element u ovoj
metodologiji su, znaèi, objekti koji se koriste za razvoj programa (softvera). Pom
islite o
objektima koji nas oku uju automobili, ptice, drveæe, ljudi itd. Ima ih bezbroj svud
a oko
nas. Uobièajeno je da sve objekte koji nas okru uju klasifikujemo pa otuda i jedan o
d
osnovnih pojmova kod OO metodologije pojam klase (Class).
Klasa (Class)
Klasa je sastavljena od osobina objekta koje se izra avaju podacima koje ih opisuj
u
(atributa) i akcija koje objekti mogu sprovoditi (metoda). Uzmimo na primjer aut
omobil:
podaci (atributi) koji karakteri u automobile su brzina, boja, broj sjedi ta, itd.,
a aktivnosti
(metode) koje ovaj objekat mo e da obavlja su
ubrzavanje, koèenje, promena stepena brzine (mjenjaèem) itd. Ili, uzmimo za primjer
objekte kao to su studenti. Atributi studenta su ime, prezime, broj indeksa, godi
na
roðenja, godina studija, itd. Aktivnosti koje studenti izvr avaju su upis semestra,
prijava
ispita, polaganje ispita, itd. Ili, recimo posmatrajmo automat za kafu. Kao atri
bute automata
mo emo da uzmemo boju, listu artikala koji se nude, iznos novca u kasi, trenutnu u
patu,
itd. Metode kod automata mogu biti izbor artikla, ubacivanje novca, preuzimanje
artikla,
preuzimanje kusura, odustajanje od kupovine, itd. Klasa opisuje sve objekte dato
g tipa, na
taj naèin to defini e koji æe podaci biti kori æeni za opis svakog pojedinaènog objekta.
Zato je klasa apstraktna struktura bez pojedinaènih vrijedosti za podatke kojima s
e opisuju
objekti.
Objekti (Object)
Objekta je jedna konkretizacija klase, odnosno objekat je jedan konkretan primer
ak sa
konkretnim atributima koji ga razlikuju od drugih objekata iz iste klase. Na pri
mer u klasi
Pjevaè, mo e da postoji objekat HalidBeslic koja prestavlja jedan poseban sluèaj objekta
iz klase Pjevaè .
Razmjena poruka (Message Passing)
Objekti ne postoje izolovano. Oni interaguju sa drugim objektima. U OO programir
anju ova
interakcija se ostvaruje preko poruka. Prenos poruka je proces u kome jedan obje
kat
(po iljalac-sender) alje podatke drugom objektu (primaocureceiver) ili tra i od drugo
g
objekta da aktivira neki svoj metod. Tako svaka poruka ima po iljaoca i primaoca.
Pona anje objekata (Behavior)
Pona anje se odnosi na to kako objekti reaguju na poruke, to jest kako menjaju sop
stveno
stanje (atribute) i/ili aktiviraju svoje metode.
Prednosti kori æenja OO programiranja
Realistièno modeliranje realnosti: Kori æenje OO metodologije daje
moguænost boljeg I verodostojnijeg modeliranja procesa iz na e realnosti.
Vi estruko kori æenje klasa: Jedanput dizajnirana klasa mo e biti iskori æena
u raznim aplikacijama.
Olak ano odr avanje softvera: Kori æenjem OO metodologije znaèajno se
olak ava odr avanje softvera, jer je jednostvnija identifikacija modulèa koje
treba menjati.
Osnovna svojstva OO metodologije
Sada æemo se ukratko baviti nekim osnovnim svojstvima OO metodologije.
Enkapsulacija (Encapsulation, data hiding)
Enkapsulacija je jedan va an koncept u OO programiranju. Spoljni svet, kao je veæ reèe
no,
85
pristupa samo onim atributima i metodama koje su oznaèene kao public. Programer ko
ji
koristi neku klasu ne mora da zna kako su atributi i metode u samoj klasi kodira
ne. Sve to
je njemu potrebno je da poznaje interfejs preko kojeg pristupa metodama i atribu
tima
klase. Naravno, potrebno je da razume i znaèenje atributa i metoda kojima pristupa
, ali ne
mora da zna kako su same metode programirane. Na taj naèin je obezbijeðeno da se
gre ke koje se pojave u klasi otklanjaju u samoj klasi, bez potrebe za promjenom o
nog
dela programa koji tu klasu koristi.
Apstrakcija (Abstraction)
Apstrakcija je proces kojim se objekti iz realnog sveta modeliraju upro æenom slikom
napravljenom u klasi pomoæu atributa i metoda. Recimo klasa automobil koju smo nap
red
pomenuli ne opisuje sve moguæe karakteristike automobila, veæ neke osobine zanemaruj
e
(apstrahuje) i ne prikazuje ih kroz atribute i metode. Koji atributi i metodi æe b
iti odabrani za
prikaz u klasi zavisi od namjera koje imamo u pogledu buduæeg kori æenja klase u razni
m
aplikacijama. Pravilno odabran model realnog sveta mo e da pomogne da se razumeju
re enja problema koje treba rije iti kroz softversku aplikaciju.
Kompozicija (Composition)
Objekti mogu da interaguju na razlièite naèine u nekom sistemu. U nekim sluèajevima
klase i objekti mogu biti tako meðusobno povezani da svi zajedno èine kompleksan sis
tem.
U primeru sa automobilom toèkovi, paneli, motor, mjenjaè itd. Mogu biti posmatrani k
ao
posebne klase. Klasa automobil, u tom sluèaju, predstavlja kompoziciju ovih posebn
ih
klasa
Nasljeðivanje (Inheritance)
Nasljeðivanje omoguæava da neka klasa (sub klasa) bude bazirana na drugoj klasi (sup
er
klasa) i da od nje nasledi svu funkcionalnost. Kroz dodatni kod (atribute metode
) sub klasa
mo e biti specijalizovana za posebne potrebe. Na primer, kod klase vozila (kao sup
er
klase) mo emo kreirati sub klase automobili i motorcikli. Obe ove klase nasledile
bi sve
metode klase vozila, ali bi takoðe mogle da imaju I svoje specijalizovane metode i
atribute,
kao to su metoda Nagnise() i atribut Ugaonaginjanja za motorcikle.
Vi estruko nasljeðivanje (Multiple Inheritance)
Vi estruko Nasljeðivanje omoguæava da neka klasa (sub klasa) bude bazirana na vi e od
jedne klase.
Polimorfizam i kasno povezivanje (Polymorphism and Late bindning)
Polimorfizam je sposobnost objekta da menja pona anje u zavisnosti od naèina na koji
se
koristi. Polimorfizam u najjednostavnijem obliku se pojavljuje kao niz metoda sa
istim
imenom ali sa razlièitim parametrima. Ovaj oblik polimorfizma naziva se overloding
(overloading), a sreæe se i kod operatora . U zavisnosti od parametara koje korist
imo biæe
pozvan onaj metod koji odgovara kori æenim. Pored ovoga omoguæena je i izmjena
metoda u naslijeðenim klasama, kada metode s istim imenom rezultuju razlièitim poziv
ima
podprograma, to se naziva kasno povezivanje.
Modularnost (Modularity)
I pored gore navedenih koncepata OO programiranje donosi i poveæanje modularnosti
programa. Individualne klase ili grupe povezanih klasa (biblioteke klasa) mogu s
e
posmatrati kao moduli koji se mogu koristiti u raznim softverskim projektima. Na
taj naèin
se smanjuje potreba za ponovnim programiranjem sliènih zadataka, pa se tako reduku
je
ukupan napor potreban za razvoj softvera.
Automatsko upravljanje memorijom (Garbage collection)
Objekti se mogu kreirati i dinamièki, tako da se alocira vi e njegovih kopija (insta
nci). Ako
jezik ima automatsko upravljanje memorijom, njegovo okru enje æe samo izbacivati iz
memorije objekte koji se vi e ne koriste.
86
C++
int a;
double b;
};
struct D
int a;
double b;
C c;
};
POD-struktura
POD-struktura (Plain Old struktura podataka) je agregatna klasa koja ima ne-stat
ièku bazu
èlanova tipa ne-POD-strukture, nema korisnièki definisanu dodjelu operatora niti kor
isnièki
definisan destruktor. Mo e se izvuæi zakljuèak da je POD-struktura C++-a ustvari
ekvivalent C strukturama. U veæini sluèajeva, POD-struktura æe imati istu memoriju kao
odgovarajuæa struktura deklarisana u C. Iz tog razloga, POD-struktura se ponekad
kolokvijalno naziva i "struktura u C-stilu .
87
Deklaracija i upotreba C + + klase imaju svoje èlanove. Ovi èlanovi su varijable
(ukljuèujuæi i èlanove drugih objekata i klasa), funkcije (specifièni identifikatori ili
preoptereæenje operatora) poznatije kao metode, konstruktori i destruktori. Èlanovi
se
deklari u kako bi se bilo u moguænosti pristupiti istima bilo javno ili privatno pom
oæu
public: i private: ulaznih razvrstavaèa respektivno. Svaki èlan nakon to je nai ao na
razvrstaè imat æe povezani pristup sve dok drugi razvrstavaè ne naiðe. Tu je i nasljedst
vo
izmeðu klasa koji mo e koristiti protected: razvrstaè.
Osnovne deklaracijske I èlanske varijable
Klase se deklari u sa rijeèima class ili struct. Deklaracija èlanova se nalazi unutar
ove
deklaracije.
struct personclass person
{{
string name;public:
class person
{
public:
string name;
int age;
};
int main ()
{
person a, b;
a.name = "Calvin";
b.name = "Hobbes";
a.age = 30;
b.age = 20;
cout << a.name << ": " << a.age << endl;
cout << b.name << ": " << b.age << endl;
return 0;
}
88
Izvr avanjem prethodnog koda ispis æe biti :
Calvin: 30
Hobbes: 20
Èlan funkcije
Va an element C + + klasa i struktura èine èlanovi funkcije. Svaki tip podataka mo e ima
ti
svoje odranije ugraðene funkcije (zvane metodama) koje imaju pristup svim èlanovima
(javnim i privatnim) tog tipa podataka. U strukturi koda ne-statiènih èlanova funkci
je,
kljuèna rijeè this se koristi misleæi na objekat zbog kojeg je funkcija pozvana. To se
èesto
koristi prolaskom adrese objekta kao implicitno prvog argumenta funkcije. Uzet æem
o
gornji primjer person-e kao ponovni primjer:
class person
std::string name;
int age;
public:
person() : age(5) { }
of the object for which the member was invoked. Its type is
int x;
};
class C : public P
{
int y;
};
Stoga, bilo koji kod koji manipulira polja P objekta mo e manipulisati P polja unu
tar C
objekta bez razmi ljanja o definiciji o C poljima. Pravilno napisam C++ program ne
bi
trebao praviti pretpostavke u vezi sa izgledom naslijeðenog polja, ni u kom sluèaju.
Kori tenjem static_cast ili dynamic_cast tipove pretvaranja operatori æe osigurati d
a su
pokazivaèi pravilno pretvoreni iz jednog tipa u drugi.
Preoptereæeni operatori
U C ++-u operatori kao to su + - */ mogu biti preoptereæeni kako bi odgovarali potr
ebema
programera. Ovi se operatori nazivaju preoptereæeni operatori. Po konvenciji,
preoptereæeni operatori bi se trebali pona ati skoro isto kao to se pona aju u ugraðenim
baznim tipovima (int,float, itd.), ali ovo nije tra eno. Osoba mo e proglasiti struk
turu kao
integer u kojoj varijabla really pohranjuje cijeli broj, ali zvanjem integer * i
nteger suma,
umjesto umno ka cijelih brojeva, cijeli brojevi se mogu vratiti :
struct integer
{
int i;
integer (int j = 0) : i (j) {}
integer operator* (const integer &k) const
{
90
Kod iznad je koristio konstruktora kako bi konstruisao povratnu vrijednost. ZA jas
niju
prezentaciju (iako èe ovo smanjiti uèinkovitost programa), gornji kod se mo e prepravi
ti u:
integer operator* (const integer &k) const
{
integer m;
m.i = i + k.i;
return m;
}
Programeri mogu staviti prototip operatora u struct deklaraciji i definisati fun
kciju
operatora u globalnom podruèju:
struct integer
int i;
argument specified. */
integer j = 3;
/* variable names are independent of the names of the
91
'4' æe se ispisati
Slijedi popis binarnih preoptereæenih operatora:
Operator Op ta upotreba
+ - * /% Aritmetièka izraèunavanja
<<>> Bitna izraèunavanja
<> ==! = <=> = Logièka uporeðivanja
& & Logièka veza
{
name = N;
age = A;
93
Imajte na umu da vitièaste zagrade ne mo ete izostaviti, èak i ako su prazne.
Poèetne vrijednosti mogu se dati zadnjim argumentima kako bi se pomoglo pri
inicijaliziranju istih.
person (std::string N = "", int A = 0) : name (N), age (A) {}
Kada nijedan argument nije zadan konstruktoru u primjeru iznad, mo e se reæi da je t
o
jednako zvanjem konstruktor bez argumenta ( ili poèetni konstruktor):
person () : name (""), age (0) {}
Deklaracija konstruktora izgleda kao funkcija sa imenom istim kao i bazni tip. U
stvari,
mo emo to nazvati kontruktor u formi za zvanje funkcije. U tom sluèaju tip varijable
person bi bio povratna vrijednost:
int main ()
r.print ();
}
Kod iznad krejira privremeni person objekat, i onda ga dodjeljuje r-u kori tenjem
konstruktora za kopiranje.
Bolji naèin za kreiranje objekta bez kori tenja nepotrebnog kopiranja je:
int main ()
r.print ();
}
Specijalna programska akcija, koja mo e ali I ne mora biti povezana sa varijablom,
se
moze dodati kao dio konstruktora.
person ()
{
94
{
cout << "I'm deleting " << name << " with age " << age <<
endl;
}
Osobine
Sintaksa C++-a poku ava da uèini da svaki dio strukture izgleda kao osnovni bazni ti
p.
Upravo zato, preoptereæeni operatori dozvoljavaju da se manipuli e stukturom kao sa
prostim brojevima, polja strukture se mogu deklarisati kori tenjem uglastih zagrad
a u
sintaksi (neko_ime_struktuirane_varijable[velièina]).
Potro nja memorije
Potro nja memorije jedne strukture je ustvari suma memorijske velièine njenih dijelo
va
varijable. Uzmimo za primjer strukturu twonums :
struct twonums
{
int a;
int b;
};
Struktura se sastoji od dva integer. U mnogim sada njim C++ kompajlerima, integer
su 32bitni
integer po defoltu, tako da svaki èlan varijable koristi 4 bita memorije. Èitava
struktura, zato koristi najmanje (ili upravo toliko) 8 bita memorije.
+----+----+
| a | b |
+----+----+
Meðutim, kompajler mo e dodati crtice izmeðu varijabli ili na kraju structure kako bi
osigurao dobro poravnanje za datu kompjutersku arhitekturu, koje su inaèe 32-bitne
.
Naprimjer, struktura
struct bytes_and_such
{
char c;
char C;
short int s;
int i;
double d;
};
Mo e izgledati ovako
+-+-+--+--+--+----+--------+
|c|C|XX|s |XX| i | d |
+-+-+--+--+--+----+--------+
realPart += c.realPart;
imagPart += c.imagPart;
return *this;
}
Kao to smo ustanovili gore, this je pokazivaè, tako da je upotreba znaka (*) potreb
na
kako bi se on mogao preobratiti u odnosu na prethodno stanje.
C++ se èesto smatra da obuhvata C programski jezik, meðutim to I nije ba taèno. Veliki
dio C koda se mo e taèno kompajlirati u C++-u, ali postoji nekoliko razlika koje taène
kodove iz C-a prikazuje kao netaène u C++-u, ili ih drugaèije prihvata.
Jedna od razlika sa kojoj se èesto susreæemo jest eta to C dozvoljava promjenu iz voi
d* u
drugi pokazivaèki tip, a C++ ne dozvoljava. Jo jedan èesti problem jested a C++ defin
i e
mnogo novih kluènih rijeèi, kao to su new I class, koje se mogu koristiti kao identif
ikatori u
C programu.
Neke razlike su uklonjene u najnovijem (C99) C standard, koji sada podr ava znakov
e iz
C++-a kao to je npr. // komentari i mije a eklaracije I kod. Meðutim, C99 je uveo dos
ta
novih znakova koje C++ ne podr ava, kao to su promjenljive du ine polja, domaæe tipove
kompleksnih brojeva. Iako æe neki dijelovi C99 biti ukljuèeni u sljedeæu verziju C++
standard, C++0x.U cilju mje anja C i C++ koda, bilo koja deklaracija ili definicij
a funkcije
mora se deklarisati sa C poveznicom tako to æe se postaviti vanjski C {/*...*/} blok.
Takva funkcija ne mo e se osloniti na dodatke koji ovise o o teæivanju imena (funkcijs
ko
preoptereæenje).
96
Java
Java je objektno-orjentirani programski jezik razvijen u timu predvoðenim James Go
sling-
om u kompaniji Sun Microsystems poèetkom 1990-tih. Ideja je bila da se stvori prog
ramski
jezik koji bi bio nezavisan od operativnog sistema, baziran na C++-u, ali sa
pojednostavljenom sintaksom, stabilnijim runtime sistemom i pojednostavljenom ko
ntrolom
memorije.
Java nema veze sa JavaScript-om, iako oba jezika koriste sliènu sintaksu baziranu
na C
sintaksi.
Pet osnovnih razloga za razvoj Jave su:
treba da koristi objektno-orijentacione metodologije
treba da se isti program izvr ava na mnogim operativnim sistemima
treba da sadr i (built-in) podr ku za raèunarske mre e
treba da izvr i programe sa (geografski) udaljenih servera sa sigurno æu
treba da bude jednostavan za upotrebu i da posudi korisne stvari od starijih obj
ektivnoorijentisanih
jezika, poput C++.
Da bi postigli mre nu podr ku i izvr avanje programa na udaljenim serverima, Java
programeri ponekad moraju koristiti dodatke poput CORBA ili OSGi.
Objekt-Orijentacija [
Osnovni koncept u Javi je klasa (en. class), tj. sav izvorni kod je napisan unut
ar klasa. U
pravilu, svaka klasa je deklarirana unutar datoteke sa istim imenom i sufiksom .
java. Ovo
pravilo je donekle nametnuto kompajlerom koji zahtijeva da su imena klasa i dato
teka ista
(osim tkz. unutra njih klasa, en. inner classes). Osnovni tipovi u Javi, poput int
, boolean,
byte i sl. su takodjer predstavljeni u klasama (napomena: Reflection types) i im
aju
odgovarajuæe klasne omote poput java.lang.Integer, java.lang.Boolean i java.lang.B
yte.
Nezavisnost od Platforme (operativnog sistema) [uredi]
Javin izvorni kod nije kompajliran u ma inski kod nego je pretvoren u tkz. bytecod
e koji
zahtijeva posebno okru enje da bi se mogao izvr avati. To okru enje se u ovom sluèaju
zove Javina Virtualna Ma ina (en. Java Virtual Machine ili JVM). Trenutno JVM podr a
va
najrasprostranjenije operativne sisteme, mada ne sve. Ideja je da ako se kod nap
i e i
kompajlira na jednoj platformi (npr. Mac OS X), taj isti bytecode se mo e izvr avati
na svim
ostalim platformama koje imaju JVM (npr. Microsoft Windows XP, Linux) bez potreb
e za
97
ponovnim kompajliranjem na toj platformi.
Automatsko Èi æenje Resursa (garbage collection) [uredi]
U Javi, za razliku od npr. C++-a, memorija namjenjena objektu je automatski poèi æena,
tj.
vraæena sistemu èim se taj objekat vi e ne koristi (za tog objekta ka emo da je van
doma aja ili en. out of scope). To nije sluèaj u C++-u gdje svaki objekat koji je st
voren
mora biti ruèno izbrisan koristeæi uputu delete (ako se to ne uradi onda doðe do tkz.
curenja memorije ili en. memory leak).
Sintaksa [uredi]
Iako je Java nastala od C++, ali za razliku od C++, koji dozvoljava struktuirane
kao i
objektno-orjentirane principe, u Javi su objektno-orjentirani principi obavezni.
Sve je u Javi
objekat, a sav izvorni kod je pisan unutar klasa.
Sve u Javi je uvijek upisano unutar klase, pa èak i glavna aplikacija. Konvencija
za nazive
Java datoteke je da imaju isto ime kao i klasa koju sadr e sa obaveznim sufiksom "
.java".
Kompajler æe generirati class datoteku za svaku klasu definiranu u datoteci sa izv
ornim
kodom. Ime generirane datoteke je ime klase sa .class sufiksom. Tako npr. za kla
su
Primjer koja je deklarirana u datoteci Primjer.java, kompajler æe stvoriti class d
atoteku sa
nazivom Primjer.class. U sluèaju nepoznate (anonimne) klase, generirana datoteka æe
imati ime klase koja sadr i nepoznatu klasu, zajedno sa simbolom $ i brojem. Npr.
Primjer$1.class.
Klase koje pokreæu program moraju imati metodu main(), tzv. glavnu metodu.
Uputa void oznaèava da metoda main() ne vraæa ni ta.
main() metoda mora uzimati niz String objekata kao parametar. Obièno se taj parame
tar
imenuje args, meðutim bilo koje dozvoljeno ime varijable se mo e koristiti kao param
etar
(npr. argumenti).
Uputa static oznaèava da je ova metoda statièna tzv. metoda na nivou klase, umjesto
uobièajenog nivoa objekta (instance). Glavna metoda mora biti oznaèena static.
Uputa public (javna) oznaèava da se ta metoda mo e zvati iz koda u drugim klasama il
i da
se ta klasa mo e koristiti u drugim klasama izvan hierarhije te klase.
Printing funkcija je standardni dio Jave, tj. java.lang.System definira javnu st
aticnu (public
static) varijablu out koja je instanca (objekat) klase java.io.PrintStream i ima
metodu
println(java.lang.String) koja ispisuje informaciju na ekranu (tkz. standardni o
utput).
98
Evo primjera programa pisanog u jeziku Java
// OddEven.import javax.swing.JOptionPane;
* This is the constructor method. It gets called when an object of the OddEven t
ype
* is being created.
*/
public OddEven() {
/*
* Code not shown for simplicity. In most Java programs constructors can initiali
ze objects
* with default values, or create other objects that this object might use to per
form its
* functions. In some Java programs, the constructor may simply be an empty funct
ion if nothing
* needs to be initialized prior to the functioning of the object. In this progra
m's case, an
* empty constructor would suffice, even if it is empty. A constructor must exist
, however if
* user doesn't put one in then the compiler will create an empty one.
*/
}
// This is the main method. It gets called when this class is run through a Java
interpreter.
public static void main(String[] args) {
/*
* This line of code creates a new instance of this class called "number" (also k
nown as an
* Object) and initializes it by calling the constructor. The next line of code c
alls
* the "showDialog()" method, which brings up a prompt to ask you for a number
*/
OddEven number = new OddEven();
number.showDialog();
}
public void showDialog() {
/*
} catch (NumberFormatException e) {
/*
* Getting in the catch block means that there was a problem with the format of
* the number. Probably some letters were typed in instead of a number.
*/
System.err.println("ERROR: Invalid input. Please type in a numerical value.");
}
}
/*
99
Java izvorni kod se kompajlira koristeæi javac program, tj. pozivajuæi Java kompajle
r. Npr.
da bi kompajlirali gore navedeni primjer u trenutaènom direktoriju
UNIX, Linux i Mac OS X
$ javac Primjer.java
Windows
C:\> javac Primjer.java
Samostalni programi u Javi se izvr avaju tako da se Javinoj runtime (JRE) pripi e im
e
klase koja sadr i main() (glavnu) metodu koja se automatski poziva. Npr. gore spom
enuti
program se pokreæe na sljedeæi naèin (ako je Primjer.java kompajliran u trenutnom
direktoriju)
UNIX, Linux i Mac OS X
$ java -cp . Primjer
Windows
C:\> java -cp . Primjer
Ime klase koja sadr i glavnu metodu koja se pokreæe mo e se takoðer deklarisati u METAIN
F/
MANIFEST.MF datoteci u Java arhivi, tj. JAR fajlu.
Applet
Java apleti (applets) su (obièno mali) programi koji su ukljuèeni unutar drugih apli
kacija,
obièno web stranice prikazane (i izvr avane) unutar browser-a.
// Primjer.java applet
import java.applet.Applet;
import java.awt.Graphics;
}
}
<!-- Primjer.html stranica to sadr i Primjer applet -->
<html>
<head>
</head>
<body>
Apleti se takoðer mogu dodati HTML-u koristeæi object ili embeded elemente (tj. tago
ve),
mada podr ka za ove element varira ovisno o internet pregledniku.
Delphi
Do sada smo vjerovatno znali da je Borlandov Delphi najbolje prodavani proizvod
za
brzo razvijanje aplikacija (RAD -Rapid Application Development) koji se koristi
za pisanje
Windows aplikacija. Sa Delphijem mo emo pisati Windows programe br e i jednostavnije
nego to je to bilo moguæe ranije. Mo emo kreirati Win32 konzolne aplikacije, odnosno
Win32 programe za grafièki korisnièki interfejs (GUI Graphical User Interface). Kada
kreiramo Win32 GUI aplikacije koristeæi Delphi, dostupna nam je sva snaga istinsko
g
prevodioca (Object Pascal programski jezik) ubaæenog u RAD okru enje. Ovo znaèi da
mo emo kreirati korisnièki interfejs za program (korisnièki interfejs znaèi menije, dija
log
bokseve, glavni prozor, itd.) kori tenjem tehnike prevuci-i-pusti (drag-and-drop)
koja se
koristi kod pravih okru enja za brzi razvoj aplikacija. Takoðer, mo emo koristiti Acti
veX
kontrole kako bi smo kreirali specijalizovane programe poput Web browsera za par
minuta.
Delphi nam daje sve to bez dodatnih tro kova, ne moramo rtvovati brzinu izvr avanja
programa, po to Delphi generi e brz prevedeni kod. Delphi obavlja veliki dio posla r
adeæi
u pozadini sa detaljima niskog nivoa koji èine osnovu Windows programa, ali Delphi
ne
mo e pisati programe umjesto nas. Osoba koja se bavi izradom programske potpore èest
o
101
se naziva PROGRAMER, a alati za izradu programske potpore s kojima se slu i naziva
ju
se programerski alati.
Izbor alata za programiranje je vrlo irok. Prvo treba odrediti da li æe se programs
ki
proizvod koristiti na jednoj ili vi e platformi odnosno hoæe li se izvr avati u:
· DOS okru enju
· Windows okru enju
· Unix okru enju
· Specifiènom okru enju
ili na nekom od drugih okru enja, ili ipak mora zadovoljiti rad na vi e okru enja. Zat
im po
izboru platforme treba izabrati onaj jezièki procesor koji æe pru iti moguænost izrade
programske potpore po svim potrebnim zadanim elementima, na primjer da se izvr ava
u
Windows XP okru enju, omoguæava dostup vlastitim bazama podataka ili mo e pristupiti
bazama podataka drugih proizvoðaèa, ima potporu za pristup podacima na nekom
poslu itelju preko Interneta i slièno.
Delphi je proizvod firme Borland, danas poznate kao Inprise. Ova firma je poznat
a po
programskim jezicima kao sto su Pascal, C, C++... Dakle, Delphi programski jezik
firme
Borland utemeljen na Pascal-u zami ljen za brzu izradu programske potpore (RAD - R
apid
Application Development) s mno tvom alata koji slu e kao ispomoæ u oblikovanju grafièki
orijentiranog sadr aja. Vrlo je pogodan za izradu slo ene programske potpore.
Embarcadero Delphi, od prije poznat po imenima CodeGear Delphi, Inprise Delphi i
Borland Delphi je razvojni softver za Microsoft Windows aplikacije koje su prije
bile
kreirane od strane Borland-a, dok ih sada razvija Embarcadero Tehnologije. Bazir
a se na
jeziku Delphi programskog jezika, koje je izvedenica od Object Pascal-a. Delphi
2010 je
najnovija verzija ovog softvera i na tr i tu se mo e naæi u tri razlièita izdanja:
Professional, Enterprise i Architect.
Delphi koristi programski jezik na bazi Pascal -jezika koji se zove Object pasca
l i prikuplja
Delphi kodove u izvorni x86 kod. Oni ukljuèuju VCL (Visual Component Library), pod
r ku
za COM ovisne interfejse sa numerisanim referencama, te podr avaju veliki dio
komponenti od treæe strane. Sprovoðenjem interfejsa mogu se ovlastiti razlièita polja
ili
osobine klasa (razreda). Poruke su podr ane uvoðenjem tagging-a za svaki razred
koristeæi brojnu konstantu poruke koja se nas tièe.
Nagla ena je povezanost baze podataka, te Delphi nudi iroku bazu podataka. VCL
(Visual Component Library) sadr i veliku bazu podataka koja se tièe kontrole i bazu
podataka koja nude razlièite pristupe.
Objekti
Objekti su ustvari osnova Delphija. Nema Delphija bez objekata. Naime, sve to
vidimo u Delphiju i sa èime radimo su objekti.
Tako, recimo, èim otvorimo Delphi, dobivamo prvi i glavni objekt sa kojim æemo radit
i, a to
je Form. Form je ustvari prozor na koji se stavljaju ostali objekti. Naravno, De
lphi ne bi bio
to to jeste da se objektima ne mo e manipulisati. Tako mo emo pored fizièkih promjena
102
(mijenjanje irine, visine, boje... ) stvarati i akcije za taj objekt (na klik mi a,
na pomjeranje
mi a... ).
Vrlo va na odlika objekata je nasljeðivanje. Naime, kad god se jedan objekat stavi n
a drugi
(npr. Label na Form) ovaj prvi postaje 'dijete' (engl. Child), a drugi 'roditelj
' (engl. Parent),
te æe, po toj logici, prvi objekt naslijediti neke osobine od drugog (npr. boju, f
ont...). Va no
je napomenuti da broj 'dijete' objekata uop te nije ogranièen za jedan 'roditelj' ob
jekt. To
dopu ta itekako veliku slobodu programeru.
Kao i sve u Delphiju, programer mo e sam stvarati objekte po svojoj volji i svojim
eljama.
Najva nije je da su za svaki objekt vezane njegove osobine (engl. Properties), pom
oæu
kojih se manipuli e objektima.
Slika 1. Form
3OSOBINE
Osobine se mijenjaju na dva naèina. Onaj koji se prvi nauèi je pomoæu Object
Inspectora. To je prozor koji se nalazi sa lijeve strane i uvijek je otvoren. On
sadr i
osobine svih objekata koje trenutno programer koristi, ali je samo jedna vidljiv
a i to ona
koja je pod fokusom (na koju je kliknuto mi em).
103
Action Izaberete neku proceduru koja æe biti obavljena pri otvaranju prozora Izabe
rete neku proceduru koja æe biti obavljena pri otvaranju prozora
ActiveC ontrol Pokazuje objekat koji je aktivan nakon otvaranja prozora
Align Prijanjanje uz neku od ivica ekrana
Anchors Pokazuje kako je objekat vezan za 'roditelj' objekat
AutoScroll Odreðuje da li æe se automatski pojaviti scrollbarovi ako je to potrebno
AutoSize Odreðuje da li æe objekt tako prilagoditi velièinu da nema slobodnog prosto
BiDiMode Pravac objekata
Borde rIcons Ikone poput minimize, maximize, close
Borde rStyle Odreðuje stil prozora ( npr. Sizeable -moguæe je mijenjati velièinu u rad
u )
BorderWidth irina okvira
C aption Naslov ( npr. u ovom prozoru je naslov 'Programiranje: Osobine...' )
C lie ntHeight Visina 'korisnog' dijela prozora
C lientWidth irina 'korisnog' dijela prozora
Color Boja
Constraints Ogranièenja ( npr. visine )
Ctl3D Odreðuje da li æe objekat biti 3D renderisan
C ursor Odreðuje kakav æe kursor biti iznad objekta
DefaultMonitor Odreðuje koji objekat æe biti glavni
DockSite Odreðuje da li je objekat vezan
DragKind Odreðuje vrstu povlaèenja objekta
DragMode Odreðuje naèin povlaèenja objekta
Enabled Pokazuje da li je objekat ' iv'
Font Odreðuje font na objektu
FormStyle Stil prozora ( npr. MDIChild -prozor unutar drugog prozora )
Height Visina objekta ( dimenzija po y-osi )
HelpC ontext Dio Help file koji æe biti prikazan po pritisku na 'What's this?'
He lpFile Odreðuje koji file slu i kao Help file
Hint Tekst koji se nalazi u utom okviru koji slu i kao obja njenje
Horz ScrollBar Odreðuje osobine horizontalnog scrollbara
Icon Ikona u gornjem lijevom uglu prozora
Ke yPreview Odreðuje da li æe objekat reagovati na tastaturu prije aktivne kontrole
Left Udaljenost objekta od lijeve strane 'roditelj' objekta ( ovdje ekrana )
Menu Pokazuje na meni tog prozora
Name Ime objekta ( automatski je Form1, ali se mo e mijenjati )
O bje ctMenuItem Pokazuje na jedan dio menija
O ldC re ate O rde r Odreðuje kreiranje i uni tavanje objekta
Pare ntBiDiMode Nasljeðivanje BiDiMode
ParentFont Nasljeðivanje fonta
Pixe lsPerInch Broj taèaka po inèu
PopupMenu Odreðuje popup meni za objekat
Position Odreðuje poziciju prozora ( npr. ScreenCentar -uvijek u centru ekrana )
PrintScale Skala za printanje
Scaled Skaliranje
ShowHint Odreðuje da li æe Hint biti prikazan
Tag Brojna oznaka objekta
Top Udaljenost objekta od gornje strane 'roditelj' objekta ( ovdje ekrana )
UseDockManager Odreðuje kori tenje dock managera pri pomjeranju prozora
VertScrollBar Odreðuje osobine vertikalnog scrollbara
Visible Pokazuje da li je objekat vidljiv
W idth Odreðuje irinu objekta ( dimenzija po x-osi )
W indowMenu Odreðuje meni ako je FormStyle MDIForm
W indowState Stanje prozora ( npr. Maximized -starta se maximizovan )
105
Ovdje se radnja neæe izvr iti nijednom ukoliko je irina veæ veæa od 600. Ukoliko se vr i v
radnji
koristi se, kao i kod for petlje, begin..end blok.
PROCEDURE
Procedure su intelektualna osovina Delphija. Svaka radnja je, ustvari, jedna pro
cedura. Prvo,
upoznavanje sa jedinicom ( engl. Unit ). Prvi kontakt je svakako zbunjujuæi i jedi
nica djeluje krajnje
komplikovano. Meðutim, sve je potputno jasno. Zatamnjene rijeèi odvajaju cjeline i t
o malo
poja njava stvar.
A tu je i veza sa procedurama. Naime, u oèi odmah upadaju rijeèi private i public. I
znad private su
procedure definisane od strane samog Delphija. Na samom poèetku nema nijedne proce
dure.
Ispod private su procedure koje defini e sam programer. Mogu biti privatne i javne
. Privatne su
samo za taj prozor, a javne za sve prozore u tom projektu. Dakle, kad startamo D
elphi dobijamo
prazan Form i skoro prazan Unit.
Slika 3. Unit
Primjer: elimo da se poslije klika mi em na prozor, boja prozora promijeni u crvenu
.
1.Kliknimo jednom na Form.
2.Sa lijeve strane tu je Object Inspector koji sadr i dvije trake : Properties i E
vents. Biramo
Events.
3.Od mnogih moguænosti biramo onu OnClick. Dvoklikom na prazno desno polje pored
OnClick Delphi stvara procedure FormClick.
4.U jedinici se prikazuje sljedeæi tekst:
procedure TForm1.FormClick(Sender: TObject);
begin
end;
i u prazan prostor u begin..end bloku upisujemo:
Form1.Color := clRed;
Primjetimo da boje imaju prefiks cl.
Form1.Color := clRed;
end;
i, t: Integer;
begin
t := 1;
if i <> 0 then
for i := 1 to Eksponent do
t := t * Baza;
Stepenovanje := t;
end;
107
Dakle, funkcije se defini u tako to se nakon imena u zagradu upisuju promjenljive k
oje defini e
korisnik, a nakon zagrade tip koji funkcija vraæa. U gornjem primjeru to je Intege
r, najèe æi tip
brojevnih promjenljivih.
Ovako se pi e funkcija za jednokratnu upotrebu. Ali ako elimo da napi emo jednu ili v
i e funkcija
koje mo emo koristiti u svim projektima, defini emo funkcije kao public, a unit èuvamo
kao
poseban, bez prozora. U projektima u kojima elimo da upotrebimo taj unit, u gore
pominjanu listu
uses dodajemo i ime tog unita (ako je saèuvan pod imenom MyUnit, pi emo upravo MyUni
t). Isto
va i i za jedinice koje nisu veæ navedene (Delphi smatra samo odreðene jedinice za def
ault i kao
takve ih ispisuje automatski, ali onih koje ne spadaju u takve ima puno vi e. One
dolaze sa
Delphijem. Takve su recimo Math, Chart, Db...).
Oèigledno je da su funkcije veoma sliène procedurama. Ustvari, jedina razlika je to f
unkcije daju
neku povratnu vrijednost, a procedure samo obavljaju odreðene radnje, te se mo e reæi
da su
funkcije pro irene procedure.
JEDNA VRLO VA NA PROCEDURA:
FormIme.Show; (FormIme je ime prozora koji elimo otvoriti)
Ova procedura je specifièna po tome to se u jedinicu prozora iz kojeg elimo otvoriti
prozor treba
unijeti sljedeæi kod:
uses UnitIme; (UnitIme je ime jedinice prozora koji elimo otvoriti)
Meðutim, za razliku od gore pominjanih jedinica, ovaj kod se unosi, kao i procedur
e i funkcije,
izmeðu rezervisane rijeèi implementation i {$R *.DFM}.
7. DODACI ZA DELPHI
Delphi sa sobom donosi nekoliko vrlo korisnih dodataka. Zanimljiv je podatak da
je veæina ovih
programa kreirano u potpunosti u Delphiju to pokazuje njegovu uèinkovitost i moæ.
-Database Desktop -kao to i samo ime ka e, slu i za manipulisanje bazama podataka. U
njemu se mogu kreirati nove, ali i modifikovati stare baze. Database Desktop rad
i sa raznim
vrstama baza, a najva nija vrsta su tabele. Va no je reæi i da se tabele mogu saèuvati u
raznim
ekstenzijama (program je kompatibilan sa ostalim database programima).
108
Slika 4. Database Desktop
-Image Editor je, poput Paintbrush-a, program za dizajn i modifikovanje slika ti
pa bitmap, ali ima
i moguænosti kreiranja ikona i kursora.
Program nema veliki broj opcija, niti ima moguænost primjenjivanja nekih specijaln
ih efekata poput
nekih skupih editora slika, ali to mu i nije prvobitna namjena. Da bismo napravi
li sliku, ikonu ili
kursor, dovoljno je izabrati u opciji New (File meni) jednu od te tri opcije. Raèu
nar æe vas pitati za
velièinu i dalje je sve klasika.
Slika 7. InstallShield
110
PREDNOSTI
Delphi je visoko razvijeni program namijenjen mnogim korisnicima jer se lako upo
trebljava i
bazira se na raniji Object Pascal jezik. Iako je Pascal napravljen iskljuèivo za p
otrebe edukacije,
Delphi nije.
Iako Delphi koristi programski jezik visoke kvalitete, a takoðer podr ava i mali niv
o programiranja,
omoguæavajuæi asemblerske dijelove i sistem znakova direktnih CPU kodova.
Metarazred je prvi razred instrukcija ili objekata. Objekti se u stvari odnose n
a objekte (kao u Java
programu) koji Delphi implicitno razvrstava tako da èesto nema potrebe da se ruèno o
dredi
memorija za pokazatelje na objekte ili sliène tehnike koje se èesto koriste u drugim
programskim
jezicima. Postoje reference namijenjene za numerisane vrste (tipove) u nizu (kao
i niz za poèetak i
zavr etak, null-poèetak, terminate-kraj)
Nizovi mogu biti uvezani u lanace koristeæi + znak, radije nego koristeæi funkcije. Za
one koji vi e
vole nizove i vrste nizova, nije potrebno imati memoriju niti menad era memorije.
Menad er
memorije koju je uveo Borland Developer Studio 2006 je pobolj an u mjeri da sada i
ma funkcije za
praæenje memorijskih pukotina.
Programski jezik je prilagoðen Rapid Application Development (RAD) i ima integrisa
n IDE
(Integrated Development Environment) . Svi Delphi proizvodi imaju veliku bibliot
eku koja se zove
VCL (Visual Component Library) i ukljuèuje veæinu njihovih izvornih kodova.
Komponenete treæih strana (obièno imaju sve izvorne kodove) se mogu kupiti na tr i tu ka
o i alati
za pobolj anje IDE ili za druge relevantne razvojne zadatke Delphi-ja. IDE ukljuèuje
GUI za
lokalizaciju i prevoðenje kreiranih programa koji se mogu drugaèije rasporediti tako
da nema
dodatnih tro kova za prevoðenje (neki programeri ele da koriste proizvode od treæe stra
ne radi
toga jer time dobivaju veæu funkcionalnost). Okosnica ili okvir VCL-a odr ava visoki
nivo
kompatibilnosti izvornih kodova u razlièitim verzijama to znaèi da programer mo e da na
dogradi
veæ postojeæi izvorni kod u noviju Delphi verziju, u veæini sluèajeva. Biblioteke od treæe
strane
trebaju nadogradnju od strane prodavaèa ili ako veæ imaju izvorni kod, onda jednostv
ano trebaju
da ponovo prikupe podatke iz nove verzije. VCL je rano usvojio Dependency inject
ion ili Inversion
of Control. VCL je sofisticirani sastavni model koji se mo e iznova koristiti i iri
ti od strane
razvojnog programera.
Koristeæi razredne pomoænike (class helpers) mo e se uvrstiti nova funkcija u jezgro R
TL i VCL
razrede bez mijenjanja originalnog izvornog koda RTL-a i VCL-a.
Brz program -prevodilac mo e uraditi prevod i do jedne, finalne izvr ne radnje, to
pojednostavljuje distribuciju, te elimini e DLL verzijske probleme. Kreiranje DLL
i ActiveX DLLs ili
COM Automation servers je takoðe moguæe, te razvojni programeri mogu da kreiraju Win
dows
koristeæi Delphi program.
Delphi IDE, Delphi 2005 podr ava unaprijeðene oblike kao to je Method Extraction itd.
I imaju
moguænosti kreiranja UML metoda od izvornog koda ili modificiranje izvornog koda,
kroz promjene
samog modela. Delphi ima veliku grupu podr ke na Usenet i web (e.g. ) koji poma u u
rje avanju
problema za programere / individualce.
MANE
Nema izvorne 64-bit podr ke
Delphi kreira samo izvorne 32-bit aplikacije. Nije moguæe napisati 64-bit Windows
aplikacije,
koje su potrebne u kori tenju memorije vi e od 4 GB. Takoðer, ne mogu se napisati plug
-ins
(ukopèati plug in) u 64-bit aplikacije i usluge za treæa lica kao npr. Windows Explo
rer. Podr ka
111
aplikacijama u 64-bit mo e se naæi na Delphi mapama veæ nekoliko godina, ali se jo uvij
ek ne
praktikuje redovno. Sada nja mapa prikazuje Commodore project, to pru a podr ku 64-bit,
ali
datum objavljivanja jo uvijek nije odreðen.
Platforma nije unakrsna
Delphi nije unakrsna platforma. Posljednji izdati Delphi program sadr i Delphi Pri
sm koji se
mo e koristiti za razvijanje NET aplikacija. Unakrsna platforma, sa kod imenom Pro
ject X, je
prikazana na zadnjoj mapi. Takoðer, Lazarus (besplatni Delphi Clone) veæ sadr i najèe æe
kori tene VCL komponente Delphi-jeve unakrsne platforme izmeðu Linux, Mac OS i Windo
ws.
Kompatibilnost sa prija njim modelima
Svako novo izdanje Delphi-ja eli oèuvati kompatibilnost sa prija njim modelima, i to
u to
veæoj mjeri. Ovo omoguæava korisnicima da prikupljaju bogatstvo kodova bez brige oko
bilo kojih
prekinutih interfejsa ili funkcionalnosti. Meðutim, neki razvojni programeri misle
da ova pa nja
usmjerena na kompatibilnost sa prija njim modelima usporava razvoj i revoluciju De
lphi jezika, te
dovodi do starijeg dizajna u standardnim razrednim bibliotekama (VCL/RTL).
Na prvi pogled, Delphi se èini jako komplikovan, meðutim, ubrzo se shvata da je on
izuzetno jasan i matematièki definisan. Naime, i najte i izazovi su ustvari samo skl
apanje
jednostavnih radnji u jednu.
Delphi je vrlo moæan alat. Svaka akcija u Windows-u se mo e napraviti u Delphiju, ta
ko da
se jedan cijeli operativni sistem mo e napraviti u Delphiju. Zapravo, sam Delphi j
e
napravljen u Delphiju.
Takoðer je i kompletan alat. Naime, moguæe je manipulisati bazama podataka, SQL-om,
HTML-om, game driverima i slièno.
Njegova najznaèajnija osobina je kompatibilnost. Sam programer mo e kreirati nove
komponente i tako prilagoditi Delphi samom sebi.
C#
C#[1] (engl. C sharp, izgovor:/se shärp/) je jedan od mlaðih programskih jezika. Nas
tao je
2002. godine kao sastavni deo MS .NET Framework 1.0. C# je objektno orijentisan
programski jezik kao i veæina modernih vi ih programskih jezika (C++, Java itd). Jez
ik je
op te primene i namenjen je izradi aplikacija za .NET Framework platformu.
NET (èitaj: dot net) je naziv za najnoviju Microsoftovu viziju buduænosti raèunalstva
u kojoj
se aplikacije izvr avaju distribuirano putem Interneta. Da bi to ostvarili, bilo j
e potrebno
ispuniti neke uvjete.
Kao prvo, distribuirano raèunalstvo je konceptualno poput objektno orijentiranog
programiranja, to se najbolje vidi u sposobnosti da programski kod za odreðenu oper
aciju
smje tava u jedan blok, umjesto da ga se prepisuje gdje god je to potrebno. Upravo
prelazak na distribuirani model donio je toliko potrebnu efikasnost u razvoju ap
likacija.
Drugo, smje tanjem specijaliziranog koda na jedno mjesto i otvaranjem javno dostup
nog
suèelja, razlièiti su ureðaji (telefoni, dlanovnici, stolna raèunala itd.) podr ani istim
programskim kodom. Odavde vuèe korijene Microsoftova «pokreæi svagdje» filozofija.
I kao treæe, kontrolom pristupa u realnom vremenu distribuiranim resursima, tvrtke
poput
Microsofta dobivaju moguænost bolje kontrole izvr avanja aplikacija. Na taj naèin apli
kacije
112
prelaze iz razmi ljanja «posjedujem objekt» u razmi ljanje «podr avam servis». Zanimljivo
je da je Microsoft prelaskom na .NET odustao od strogog patentiranja svojeg vlas
ni tva
(sve tehnologije koje zahvati nastoji prilagoditi Windows operativnom sustavu).
Kako
buduænost vidi u pru anju softverskih servisa putem distribuiranih aplikacija, .NET
Framework je napravljen tako da aplikacije na drugim platformama mogu pristupiti
tim
servisima. Na primjer, .NET je izgraðen na standardiziranim tehnologijama poput XM
L-a i
SOAP-a.
U aspektu razvoja aplikacija, .NET se oslanja na .NET Framework. .NET Framework
se
sastoji od Common Language Runtime, .NET Framework standardne biblioteke klasa i
specijaliziranih klasa poput onih koje podr avaju ASP.NET (sljedeæa generacija ASP
serverske tehnologije) te Windows Forms (za razvoj klasiènih desktop aplikacija).
Common Language Runtime (CLR) upravlja izvr avanjem koda kompiliranog za .NET
platformu. CLR ima dvije zanimljive moguænosti. Prva je ta da mu je specifikacija
otvorena
to omoguæuje portiranje na newindows operativne sustave. Drugo, za pisanje aplikaci
ja
koje koriste standardne klase mo e se koristiti bilo koji programski jezik kojeg p
odr ava
CLR.
Jedan od jezika koji se savr eno uklapa u .NET Framework jest C#. Taj novi jezik,
nasljednik C++, objavljen je zajedno s .NET Frameworkom, te je zato logièno da bud
e
primarni programski jezik za pisanje .NET aplikacija.C# i Java su jezici najnovi
je
generacije èiji su izravni prethodnici C++ i C. Svaki od njih sadr i napredna svojst
va poput
Garbage Collection (skupljanje smeæa) èime se smanjuje potreba za intervencijama
izravno u programskom kodu. Navedeni jezici su sintaktièki gotovo isti.
C# i Java izvorne datoteke kompiliraju se u prijelazni jezik: C# u Microsoft Int
ermediate
Language (MSIL), a Java u Java bytecode. U svakom od ovih sluèajeva prijelazni jez
ik se
mo e izvoditi; bilo interpreterom, bilo just-in-time kompilacijom na odgovarajuæem
virtualnom stroju. Valja naglasiti da je u C# dodatna pozornost posveæena kompilac
iji
prijelaznog jezika u binarni kod.
C# podr ava primitivnije tipove podataka od onih u Javi (poglavlje 4), a omoguæuje i
stvaranje vlastitih tipova podataka. Na primjer, C# podr ava pobrojenja (enumerati
ons),
tipski sigurni vrijednosni tipovi podataka koji mogu sadr avati samo konstante, te
strukture
koje su korisnièki definirani tipovi podataka. (poglavlje 11). (Java ne podr ava pob
rojenja
ali ih mo e simulirati).
Za razliku od Jave, C# ima moguænost preoptereæivanja razlièitih operatora. Poput Jave
,
C# ne koristi nasljeðivanje vi e klasa u korist nasljeðivanja jedne klase to je pro ireno
nasljeðivanjem vi e suèelja. Polimorfizam je podr an pomoæu nasljeðenih metoda te
preoptereæenja ili skrivanja metoda bazne klase. C# koristi delegate. To su tipski
sigurni
pokazivaèi na metode, a osnovna ima je namjena implementacija upravljanja dogaðajima
.
U Javi su vi edimenzionalna polja implementirana preko jednodimenzionalnih (polja
mogu
biti èlanovi drugih polja). C# pak podr ava i takva (zupèasta), ali i pravokutna polja
.
Za detaljniju usporedbu C# i Java-e kliknite.
Komparativan pregled C#-a
Microsoft .NET vs. J2EE.
113
[b]C# vs. C++[/b]
Iako posjeduje neke elemente nasljeðene od Visual Basica i Jave, najbli i roðak C#-a j
e
C++.
Najva nija razlika izmeðu ta dva jezika je to to C# ne sadr i poziv datoteke zaglavlja,
to
znaèi da je sav kod «umetnut» u datoteku.
Kao to smo veæ spomenuli, .NET izvr ni sustav u kojem se izvodi C# kod upravlja
memorijom te preuzima brigu o zadaæama poput skupljanja smeæa (Garbage Collection).
Zbog toga je potreba za pokazivaèima u C#-u puno manja nego u C++. Pokazivaèi se
mogu dodu e koristiti i u C#-u, ali samo u pisanju nesigurnog koda. Preporuèa ih se
ondje
gdje su karakteristike performansi od krucijalne va nosti.
Razumijevanje tipova podataka u C# je znatno kompleksnije od razumijevanja C++ t
ipova
podataka. Svi tipovi podataka u C#-u izvedeni su iz 'object' tipa. Takoðer postoje
i razlike u
naèinu kako se odreðeni tipovi podataka mogu koristiti. Polja u C#-u su limitirana t
e stoga
nije moguæe dodavati elemente nakon to je polje popunjeno.
C# naredbe vrlo su sliène C++ naredbama. Spomenut æu samo jednu razliku: naredba
switch je promijenjena tako da je zabranjeno nastavljanje sluèaja.
Kao to je veæ spomenuto, C# ne koristi nasljeðivanje vi e klasa. Ostale razlike kod
upotreba klasa su: dodana je podr ka svojstvima klasa to je preuzeto iz Visual Basi
ca, a
metode se pozivaju pomoæu operatora . (toèka) umjesto operatora :: (dvije dvotoèke).
Primjer programa u C#
using System.IO;
FileAccess.Read);
try
// read until Read method returns 0 (end of the stream has been reached)
finally
fileStream.Close();
return buffer;
}
114
Python
Pajton (engl. Python) je programski jezik visokog nivoa op te namjene. Podr ava, u
prvom redu imperativni, objektno-orijentisan i funkcionalni stil programiranja.
Sintaksa
jezika Pajton omoguæava pisanje veoma preglednih programa. Jezik se brzo i lako
uèi.Programi pisani u Pajton jeziku se najèe æe interpretiraju. Uz interpretator se obièno
isporuèuje i veoma razvijena standardna biblioteka modula.
Programski jezik Pajton nastao je poèetkom devedesetih godina pro log vijeka. Njegov
autor je Gvido van Rosum. On je u vreme nastanka jezika bio zaposlen u Stiching
Mathematish Centrum (CWI) u Holandiji. Znaèajan uticaj na koncept ovog jezika, po
reèima autora, imao je autorov rad na kreiranju programskog jezika ABC.
2. Razvoj programa
2.1. Interpretatori i prevodioci
Programski jezik Pajton se uglavnom interpretira. Interpretatori i standardne bi
blioteke
modula se stalno razvijaju i prenose na veliki broj razlièitih platformi. Glavne p
odr ane
platforme su Linuks, BSD, Mac OS X, Majkrosoft Vindouz i Java. Slijedi spisak dr
ugih
platfomi koje podr avaju Pajton: AIX operating system, Amiga, AROS, AS/400, BeOS,
BSD, FreeBSD, Mac OS 9, NetBSD, OpenBSD, OS/2, OS/390, Palm OS, Plan 9,
PlayStation 2, Psion, QNX, RISC OS (ranije Acorn), Sharp Zaurus, SPAR Solaris,
Symbian OS, VMS, VxWorks, Windows CE/Pocket PC, Xbox, z/OS ...
Postoje i pravi prevodioci, koji Pajton kod prevode u ma inski jezik. Oni omoguæavaj
u da
se stvore izvr ni moduli nezavisni od interpretatora, te da se programi izvr avaju (
malo)
br e. Ono to se gubi ovakvim prevoðenjem je prenosivost ovako prevedenog programa
na razlièite hardverske i softverske platforme.
115
2.2. Standardne biblioteke modula
Za programski jezik Pajton razvijen je veliki broj standardnih modula koji omoguæa
vaju
efikasan rad u mnogim oblastima. Veæina ovih modula prenosiva je na razlièite platfo
rme
to omoguæava da èesto kompletni programi bez prilagoðavanja rade na razlièitim
ma inama i pod razlièitim operativnim sistemima.
Standardna biblioteka modula omoguæava pisanje programa vezanih za Internet
podr avajuæi veliki broj standardnih formata i protokola. Postoje moduli za kreiranj
e
grafièkog korisnièkog interfejsa, vezu ka relacionim bazama podataka, za aritmetiku
sa
proizvoljnim eljenim brojem decimala, za rad na leksièkoj analizi primenom regularn
ih
izraza, kao i standardni moduli za mnoge druge poslove.
2.3. Razvoj novih modula
Ukoliko je potrebno razviti novi modul, to je moguæe izvesti u Pajtonu ili u nekom
drugom
podr anom jeziku. Obièno je to C jezik, kada je potrebno sistemsko programiranje ili
kada
je brzina izvr avanja kritièna. Ali to mo e da bude na primer i Java ili Pyrex jezik k
oji
predstavlja me avinu programskog jezika Pajton i C jezika.
3. Organizacija podataka
3.1. Predstavljanje podataka
Podaci u programskom jeziku Pajton su predstavljeni objektima (engl. objects). S
vaki
podatak je predstavljen objektom ili relacijom meðu objektima. Sam kod programa je
zika
Pajton je takoðe predstavljen objektima.
3.2. Promjenljive i tip podataka
Tip podatka u programskom jeziku Pajton nije vezan za promjenljivu. Svakoj promj
enljivoj
tokom izvr avanja programa mo e da bude dodjeljena vrijednost bilo kog tipa kao i da
ta
vrednost bude zamjenjena drugom razlièitog tipa.
Tip podatka vezan je za vrijednost koju sadr i promenljiva. Sve vrijedosti promjen
ljivih su
objekti.
116
4. Objekti
Svaki objekat sadr i tip objekta i njegovu vrijednost. Jednom kreirani objekat ne
mo e da
mijenja tip, dok vrijednost nekih objekata mo e da bude promijenjena. Promjenljivo
st
objekata odreðena je njihovim tipom. Postoje:
-nepromjenljivi (engl. immutable) objekti
na primjer: brojevi, niske (engl. strings) i n-torke
-promjenljivi (engl. mutable) objekti
na primjer: rijeènici i liste
4.1. Objekti ugraðeni u jezik
Pajton posjeduje jedan broj tipova objekata koji su ugraðeni u jezik. Jezik mo e da
se
pro iri dodatnim tipovima preko modula.
Sljedeæi spisak sadr i neke od tipova objekata koji su ugraðeni u programski jezik Paj
ton:
. Brojevi (engl. Numbers)
Ovi objekti bivaju kreirani iz numerièkih leksema u izvornom programu, ili kao rez
ulat
aritmetièkih operatora ili funkcija. Jednom kreirani, ne mijenjaju vrijednost.
Postoje tri vrste brojeva. To su cijeli brojevi, brojevi sa pokretnim zarezom i
kompleksni
brojevi:
. . Cijeli brojevi (engl. Integers)
Predstavljaju elemente matematièkog skupa celih brojeva.
Postoje tri tipa cijelih brojeva:
5. Opis jezika
Osnovna svojstva jezika opisana su kroz niz jednostavnih primjera. Veæina primjera
napisana je kao da se izvr avaju u interaktivnom modu interpretatora. Oznake ">>>"
i "..."
na poèetku linije oznaèavaju ono to je korisnik upisao, dok je odgovor interpretatora
118
napisan bez ovih uvodnih znakova.
. Cijeli brojevi
Primjeri rada sa cijelim brojevima:
>>> 2 + 3
5
>>> 4 + 8 # Komentar pocinje iza znaka "#" i zavrsava se na kraju linije
12
>>> 3*2 # Mnozenje
6
>>> 4 + 3*5 # Koristi se u matematici uobicajeni redosled racunanja
19
>>> 5*(4 + 3*(2 + 1)) # Grupisanje operanada se vrsi jedino malim (oblim)
zagradama
65
>>> 6/2 # Celobrojno deljenje
3
>>> 7/2 # Ostatak pri celobrojnom deljenju se zanemaruje (u rezultatu)
3
U radu sa cijelim brojevima uvek se dobija taèan rezultat. Ovo omoguæuje prelazak (p
o
potrebi) na brojeve proizvoljne du ine:
>>> 2**1024 # 2 na stepen 1024
3.5
>>> 1e1/4 # Deset (jedan puta deset na prvi stepen) podeljeno na cetiri dela
2.5
>>> 5*3.25/2.5
6.5
. Kompleksni brojevi
Podr ani su i kompleksni brojevi. Imaginarni dio kompleksnog broja se oznaèava sufik
som
"j" ili "J". Kompleksni brojevi èiji je realni deo razlièit od nule pi u se u oblim za
gradama.
>>> (5+4j) - (3+1j)
(2+3j)
>>> (3+5j) + (0+2j)
(3+7j)
>>> (3+5j) + 2j
(3+7j)
>>> 1j * 1j
(-1+0j)
>>> (2+3j) * 3
(6+9j)
119
>>> 2 + 3j*3
(2+9j)
>>> (4+9.5j) / (1.5+2j)
(4+1j)
. Dodjeljivanje vrijednosti
Znak "=" koristi se kod dodeljivanja vrednosti promenljivim:
>>> cijena = 3.50
>>> brojKomada = 4
>>> cijena * brojKomada
14.0
>>> x = y = z = 17
>>> x
17
>>> y
17
>>> z
17
. Niske
Rad sa niskama (engl. Strings) je sna no podr an u Pajtonu. Niske sadr e nizove znakov
a
i nisu izmenljive.
Evo nekoliko naèina da se kreira niska:
>>> 'Ovo je niska'
'Ovo je niska'
>>> "Mogu da se koriste i dvostruki navodnici"
'Mogu da se koriste i dvostruki navodnici'
>>> niska = 'Mujo je rekao "Ja volim da programiram".'
>>> print niska
Mujo je rekao "Ja volim da programiram".
121
[1, 2, [3, 4], 6]
>>> a[2]
[3, 4]
>>> a[2][1]
>>> a[2].append(5)
>>> a
[1, 2, [3, 4, 5], 6]
>>> b
[3, 4, 5]
. Skupovi
Skupovi su okupljajuæi tip podataka u kome nije definisan redoslijed elemenata i n
e postoje
duplikati. Obièno se koriste za ispitivanje pripadnosti nekog elementa skupu kao i
za
eliminisanje duplikata. Implementirane su i matematièke operacije kao to su unija,
presjek, razlika i simetrièna razlika skupova.
>>> terarij = ['sarka', 'poskok', 'sarka', 'sarka', 'poskok']
>>> otrovnice = set(terarij) # Formiram skup eliminisuci duplikate
>>> otrovnice
set(['poskok', 'sarka'])
>>> 'poskok' in otrovnice
True
>>> 'belouska' in otrovnice
False
Skupovne operacije:
>>> A = set([1, 2, 3, 4])
>>> B = set([3, 4, 5])
>>> A | B # Unija
set([1, 2, 3, 4, 5])
>>> A & B # Presjek
set([3, 4])
>>> A - B # A razlika B
set([1, 2])
>>> A ^ B # Simetricna razlika
set([1, 2, 5])
6. Kontrolne strukture
6.1. IF iskaz
U najjednostavnijem obliku if iskaza izraèunava se izraz koji mora da rezultira je
dnom
Bulovom vrijedno æu (True ili False). Ako je izraèunata vrijednost True izrv iæe se blok
iskaza iza dvotaèke.
122
Blok iskaza koji pripada if iskazu oznaèava se pisanjem ispod i uvlaèenjem u odnosu
na
rezervisanu reè if udesno. Ovo oznaèavanje bloka iskaza uvlaèenjem koristi se kod svih
kontrolnih struktura.
>>> b = 'Popokatepetl'
>>> if b != 'Popokatepetl':
... print 'Hocu u Meksiko!'
... print 'Drugi red bloka naredbi'
... print 'treci red koji se takoðe izvrsava ako je uslov tacan'
Postoji forma if iskaza koja sadr i else deo. Blok naredbi koji odgovara else reze
rvisanoj
reèi izvr ava se jedino ako je uslov rezultirao False vredno æu.
>>> a = 12
>>> if a < 0:
... print 'a je negativno'
... else:
... print 'a je nenegativno'
a je nenegativno
Ako elimo da izvr imo detaljnije ispitivanje neke vrednosti mo emo da upotrebimo iska
z
koji sadr i rezervisanu reè elif. Iza ove reèi nalazi se uslov koji se testira i odgov
arajuæi
blok naredbi koji se izvr ava ako je uslov zadovoljen.
>>> if a < 0:
... print 'a ima negativnu vrednost'
... elif a == 0:
... print 'a sadrzi nulu'
... elif a == 12:
... print 'a sadrzi broj dvanaest'
... else:
... print 'nesto cetvrto'
123
drug Pera
drug Mika
drug Cokula
>>> fakt
120
7. Funkcije
Definicija funkcije poèinje rezervisanom reèi def iza koje u zagradama slijedi lista
formalnih
parametara. Sve promjenljive navedene u definiciji funkcije su lokalne, osim ako
se
direktno ne navede drugaèije (upotrebom iskaza global). Funkcija vraæa vrijednost po
moæu
iskaza return. Ukoliko takav ne postoji radi se o proceduri.
Slijedi definicija funkcije koja za dati prirodni broj izraèunava njegov faktorije
l:
>>> def fakt(n):
... rezultat = 1
... for i in range(1, n + 1):
... rezultat *= i
... return rezultat
>>> fakt(5)
120
>>> fakt(50)
30414093201713378043612608166064768844377641568960512000000000000L
... if n == 0:
... return 1
... else:
... return n*f(n - 1)
>>> f(5)
120
>>> f(50)
30414093201713378043612608166064768844377641568960512000000000000L
8. Moduli
Ako interpretator stane sa radom sve definicije koje su kreirane u interaktivnom
modu biæe
izgubljene. Da bi ih saèuvali mo emo na e definicije funkcija i promjenljivih da smjes
timo u
jednu ili vi e datoteka. Za to mo emo da upotrebimo tekst editor. Takve datoteke se
zovu
moduli.
Potom definicije iz tako kreiranih modula mo emo da uve emo i koristimo bilo u
interaktivnom modu ili u nekom drugom modulu. Kreiranje du ih programa sastoji se
obièno iz pisanja modula koji mogu da budu grupisani u pakete (packages).
Evo jednog jednostavnog modula koji kreiram kao datoteku u trenutnom direktoriju
mu sa
nazivom mm.py koja sadr i sledeæi tekst:
nula = 0
jedan = 1
Moguæ je i direktan uvoz pojedinih imena definicija, ili svih imena odjednom kao u
sljedeæem primjeru:
125
>>> from mm import *
>>> umanji(34, 7)
27
>>> uvecaj(nula)
1
1.0
>>> from math import sin, pi
>>> sin(pi/2)
1.0
9. Klase
Definicija klase u svom najjednostavnijem obliku izgleda ovako:
class ImeKlase:
iskaz 1
iskaz 2
iskaz 3
...
iskaz n
126
Ovako kreirana definicija mora da se izvr i da bi klasa mogla da se koristi. Po iz
vr enju,
ako sve proðe u redu, formira se objekat tipa klase.
Pojedinaèni primjerci klase kreiraju se upotrebom funkcijske notacije. Na primer:
>>> x = ProbnaKlasa()
Sada je kreiran primjerak klase ProbnaKlasa i smje ten u promenljivu x. Ovaj primj
erak
mo emo da koristimo na sljedeæi naèin:
>>> x.__doc__
'Ovo je jedna probna klasa.'
>>> x.f()
Ovo je metod klase
>>> x.podatak
12
Èesto se oèekuje da primjerak klase bude inicijalizovan prije njegove upotrebe. Ovo
mo emo da uradimo defini uæi metod __init__() unutar klase.
class Tacka:
10. Primjena
Internet
Programski jezik Pajton stekao je dio svoje popularnosti nudeæi efikasna rije enja z
a
internet. U ove svrhe izgraðene su standardni moduli koji se isporuèuju zajedno sa
interpretatorom. Na primjer, na strani klijenta postoji podr ka za FTP, Gopher, PO
P3,
IMAP4, NNTP, SMTP, Telnet protokole. Takoðe u okviru standardnih modula, postoje
bazièna re enja za izradu HTTP servera...
Slede neke internet tehnologije na bazi jezika Pajton koje su nastale van matiène
kuæe:
Zope
Zope (Z Object Publishing Environment) je veb server i skup alata napisan u Pajt
on jeziku.
Osnovni skript jezik kojim se ovaj server prilagoðava specifiènim potrebama je takoðe
Pajton jezik. Ovo je tehnologija koja omoguæava veb dizajnerima da formiraju veb s
ajt i
aplikacije koje se izvr avaju na strani servera kroz publikovanje hijerarhije Pajt
on objekata
na vebu. Programer mo e da se usredsredi na pisanje objekata ostavljajuæi da se Zope
brine o HTTP i CGI detaljima.
127
Plone
Zope je moæno sredstvo, ali ako je potrebno znatno jednostavnije re enje za kreiranj
e i
odr avanje sadr aja veb sajta mo e da se upotrjebi, na primjer, Plone. Ovaj sistem za
upravljanje sadr ajima (CMS) sajta baziran je na Zope tehnologiji i Pajton jeziku.
Jython
Jython je implementacija programskog jezika Pajton u Javi. Mo e da uvozi veæinu Java
klasa i da se prevodi u Java bajt kod. Ovo omoguæava pisanje programa koji se izvr a
vaju
na Java platformi bilo na strani klijenta ili servera.
Ruby
Yukihiro Matsumoto, tvorac Ruby.
Ruby je zami ljen na Februar 24, 1993 od Yukihiro Matsumoto-a koji je elio stvoriti
novi
jezik koji balansira izmeðu funkcionalnog programiranja sa imperativnim programira
njem,o
sam skriptni jezik koji je bio sna niji od Perl, i vi e objektno-orijentiran nego Py
thon. Zato
sam odluèio dizajnirati svoj jezik ". [2]
Etimologija imena "Ruby"
Da se program zove "Ruby", odluèeno je na vrijeme on-line chat sesije izmeðu
Matsumoto i Keiju Ishitsuka na Februar 24, 1993, prije nego to je bilo koji kod b
io napisan
za jezik. U poèetku dva imena su predlo ena: "Coral" i "Ruby" , a bili su izabrani o
d strane
Matsumoto-a u kasnijim e-mail za Ishitsuka. Coral ima veæ dugu povijest kao ime
programskog jezika koji potjeèe iz 1964 na osnutka Royal Radar u Velikoj Britaniji
, na
sreæu drugi naziv je izabran da iskljuèiti pometnju. Matsumoto kasnije je izjavio da
faktor u
odabiru imena "Ruby" je jer je Birthstone jednog od njegovih kolega.
Prvi objave
Prvi javni izlazak Ruby 0,95 najavljen je na domaæem japanskom newsgrupa 21.
decembra 1995. Nakon toga jo tri verzije Ruby su pu teni u dva dana. Izdavanja su s
e
poklopila sa lansiranjem japanskog jezika rubin-lista mailing lista koja je bila
prva mailing
listu za novi jezik.
Veæ predstavljne u ovoj fazi razvoja su mnoge od znaèajki upoznat u kasnijim izdanji
ma
Ruby, ukljuèujuæi i objektno-orijentirani dizajn, klase s nasljeðivanjem, mixins, iter
ators,
zatvaraèi, iznimka rukovanja, i odvoz smeæa.
Ruby 1,0
Ruby je dosegao verziju 1.0 25. decembra 1996.
Nakon objavljivanja Ruby 1,3 u 1999 prvi engleski jezik mailing lista ruby-talk
je poèela, to
je signalizirao veæe zanimanje za jezik izvan Japana. U septembru 2000 prva knjiga
na
engleskom jeziku je tiskana za programiranje u Ruby-u, koja je kasnije i besplat
no
objavljena u javnosti zbog daljnjeg irenja usvajanja Ruby meðu engleskog govornika.
128
Ruby on Rails
Oko 2005, interes za Ruby je skoèio u Ruby on Rails web aplikacijskog framework-
a napisan u Ruby.
Ruby 1.9.1
Zadnji stabilna verzija referentne implementacije je 1.9.1.
Ruby 1.9.1 uvodi mnoge znaèajne promjene na verziju 1.8.6. Neki primjeri su:
Blok lokalne varijable (varijable koje su lokalne za blok u kojem su objavljene)
Dodatna lambda sintakse (zabava = -> (a, b) (puts + B))
Per-string karakter kodiranja su podr ani
Filozofija
Matsumoto je rekao da je Ruby dizajniran za produktivnost i zabavu programera,
prateæi naèela dobrog dizajna korisnièkog suèelja. Nagla ava da oblikovanje sustava treba
istaknuti ljude, a ne raèunala, potrebama:
''Èesto ljudi, osobito raèunarski in enjeri, usredotoèeni su na strojeve. Oni misle, "Ra
deæi
ovo, stroj æe raditi br e. Radeæi ovo, stroj æe se pokretati uèinkovitije. Radeæi ovo, stro
æe
ne to ne to ne to." Oni se usredotoèuju na strojeve. Ali, u stvari trebamo se usredotoèiti
na ljude, o tome kako se ljudi brinu o pisanju programa ili rukovanja aplikacija
ma za
programe. Mi smo gospodari. Oni su robovi."
Ruby slijedi princip najmanjeg iznenaðenja (Pols), to znaèi da se jezik treba pona ati
na
takav naèin kako bi se smanjila konfuzija za iskusne korisnike. Matsumoto je rekao
da je
njegov glavni dizajnerski cilj bio napraviti jezik u kojem je i sam u ivao koristeæi
ga,
umnjujuæi programerski rad i moguæe konfuzije. On je rekao da on nije primijeniti naèe
lo
najmanjeg iznenaðenja za dizajn Ruby, ali ipak je do ao do izraza usko povezan s Rub
y
programskim jezikom. Fraza i sama je izvor iznenaðenje, kao novajlija korisnik mo e
poduzeti da to znaèi da se pona anje Ruby poku ava najbli e podudariti sa pona anjrm
poznatih drugih jezika. U maju 2005 raspravu o comp.lang.ruby interesne grupe,
Matsumoto je poku ao udaljiti Ruby od POLS, obja njavajuæi da æe odabir bilo kojeg
dizajna biti iznenaðenje za nekoga,ali on koristi osobni standard u procjeni iznen
aðenje.
Ako taj osobni standard ostane dosljedan on æe biti malo iznenaðenje za one upoznati
s
standardnim.
Matsumoto ga je definirao na ovaj naèin u intervjuu:
'' Svatko ima individualne pozadinu. Netko je do ao iz Python, netko drugi mo da
dolazi iz Perl, i mogu biti iznenaðeni razlièitim aspektima jezika. Onda su do li do m
ene i
ka u: 'Bio sam iznenaðen ovim odlikama jezika, pa Ruby kr i naèelo najmanjeg
iznenaðenja.' Prièekajte. Prièekajte. Princip najmanje iznenaðenje nije samo za vas.
Naèelo najmanje iznenaðenje znaèi naèelo najmanjeg mojeg iznenaðenja. A to znaèi
naèelo najmanjeg iznenaðenje nakon to ste upoznali Ruby vrlo dobro. Na primjer, bio
sam C + + programer prije nego sam poèeo projektiranje Ruby. Programirao sam u C +
+
tokom dvije ili tri godine. I nakon dvije godine C + + programiranje, to me jo uv
ijek
iznenaðuje.
"
Moguænosti
Temeljito objektno-orijentiran s nasljeðivanjem, mixins i metaclasses
Dinamièki tipovi i duck tipovi
129
Sve je izraz (èak i izjave) i sve je izvr eno imperativno (èak deklaracije)
Jezgrovita i fleksibilna sintaksa koja minimizira buku sintaktièke i slu i kao temel
j za
domenu odreðenih jezika
Dinamièko razmi ljanje i mijenjanje objekata kako bi se olak alo metaprogramming
Leksièki zatvaraèi, Iterators i generatora, uz jedinstvenu blok sintaksu
Doslovna notacija za polja, presjeci, regularnih izraza i simbola
Ugradnja koda u ice (interpolacija)
Standardni argumenata
Èetiri razine varijable opsega (globalno, klase, na primjer, i lokalne) obilje eni s
igils i
kapitalizaciju
Automatski odvoz smeæa
First-class nastavak
Stroga pravila boolean prisile (sve je istina osim la ne i nil)
Iznimka rukovanje
Operator preoptereæenja
Izgraðena podr ka za racionalne brojeve, kompleksne brojeve i proizvoljne preciznost
i
aritmetièke
Custom otpreme pona anja (kroz method_missing i const_missing)
Native teme i suradnièki vlakana
Potpuna podr ka za Unicode kodiranja i vi estruke karaktera (od verzije 1.9)
Native API plug-in u C
Interactive Ruby Shell (repl)
Centralizirano upravljanje paketima putem RubyGems
Implementiran na sve platforme
Velika standardna biblioteka
class Person
attr_reader :name, :age
def initialize(name, age)
"#@name (#@age)"
end
end
group = [
Person.new("Bob", 33),
Person.new("Chris", 16),
Person.new("Ash", 23)
]
puts group.sort.reverse
130
Deklarativno programiranje
U kompjuterskim naukama, deklarativno programiranje je paradigma programiranja k
oja
izra ava logiku izraèunavanja bez opisivanja svoje kontrole toka. Mnogi jezici primj
enom ovog stila
poku avaju da smanje ili elimini e ne eljene efekte koji opisuju ta program treba da os
tvari, a ne
opisuju kako da se to ostvari. To je u suprotnosti sa imperativom programa, koji
zahtijeva izrièito
odreðeni algoritam.
Deklarativno programiranje èesto smatra programe kao teoriju formalne logike, i pr
oraèune
kao odbitke u toj logici prostora. Deklarativno programiranje je postalo od pose
bnog znaèaja u
posljednje vrijeme, kao to je to da se u velikoj mjeri mo e pojednostaviti pisanje
paralelnih
programa.
Zajednièki jezici ukljuèuju one deklarativno regularne izraze, logiku programiranja,
i funkcionalno
programiranje.
Deklarativno programiranje je èesto definisano kao bilo koji stil programiranja ko
ji nije
imperativ. Broj drugih zajednièkih definicija postoji tako da poku avaju da daju ter
min definicija
osim jednostavnih kontrasta sa imperativom programiranja. Na primjer:
program koji opisuje ta izraèunavanja treba izvr iti, a ne kako da ga izraèunamo;
bilo koji programski jezik koji nema ne eljenih efekata (ili preciznije, to je ref
erentially
transparent)
jezik sa jasnim prepiskama u matematièkoj logici.
SQL
SQL, èesto zvan Structured Query Language, je kompjuterski programski jezik dizajn
iran
za upravljanje podacima u sistemima relacionih baza podataka (RDBMS relational d
atabase
management system), i izvorno baziran na relacionoj algebri. Njegov opseg ukljuc
uje upite (data
query) i izmjene (update), kreiranje ema i kontrolu pristupa podacima.
SQL nije Turing kompletan programski jezik.
HISTORIJAT
SQL je razvijen od strane Donald D. Chamberlin-a i Raymond F. Boyce-a iz IBM-a r
anih
1970-ih godina. Ova verzija, koja se u poèetku zvala SEQUEL, je dizajnirana za man
ipulaciju i
dobavljanje podataka smje tenih u IBM-ovom originalnom proizvodu relacionih baza p
odataka,
System R.
Tokom 1970-ih, tim iz IBM San Jose Research Laboratory istrazivackog laboratorij
a je
razvio System R, sistem upravljanja relacionim bazama podataka. Donald D. Chambe
rlin i
Raymond F. Boyce su zatim napravili Structured English Query Language (SEQUEL il
i SEQL) za
upravljanje podacima smje tenim u System R. Skraæenica SEQUEL je kasnije promijenjen
a u SQL
jer je SEQUEL bio za titni znak Hawker Siddeley avionske kompanije.
Prvi sistem za upravljanje relacionim bazama podataka (RDBMS) je bio RDMS, razvi
jen u
MIT-u ranih 1970-ih, a praæen jako brzo Ingres-om, razvijenim 1974. godine u U. C.
Berkeley-u.
Ingres je koristio upitni jezik (query language) QUEL, kojeg je kasnije potisnuo
sa tr i ta SQL.
131
Kasnih 1970-ih, Relation Software Inc. (sada Oracle Corporation) je primjetio po
tencijal koncepta
kojeg su opisali Codd, Chamberlin i Boyce i razvio svoj SQL-bazirani RDBMS te eæi da
ga proda
amerièkoj mornarici, CIA-i i ostalim amerièkim vladinim agencijama. Na ljeto 1979. g
odine, Relation
Software Inc. je predstavio prvu komercijalno dostupnu implementaciju SQL-a, Ora
cle V2 (version
2) za VAX kompjutere. Oracle V2 je pobijedio IBM-ovo izdanje System/38 RDBMS-a n
a tr i tu za
par sedmica.
Nakon testiranja SQL-a na korisnièkim testnim mjestima da se utvrdi korisnost i pr
aktiènost
sistema, IBM je poèeo razvijati komercijalne proizvode zasnovane na njihovom Syste
m R
prototipu, ukljuèujuæi System/38, SQL/DS i DB2, koji su bili komercijalno dostupni 1
979., 1981. i
1983. godine, redom.
Èeste kritike SQL-a ukljuèuju manjak vi eplatformske prenosivosti, neodgovarajuæe
rukovanje nedostajuæim podacima, i èesto nepotrebno kompleksna i povremeno dvosmisle
na
gramatika i semantika. Takoðer mu nedostaje èvrstina formalnijih jezika poput relaci
one algebre.
JEZIÈKI ELEMENTI
SQL jezik je podijeljen u nekoliko jezièkih elemenata, ukljuèujuæi:
FROM klauzula koja odreðuje tabelu (tabele) iz kojih se podaci dohvataju. FROM
klauzula mo e sadr avati dodatnu JOIN potklauzulu koja odreðuje pravilo spajanja
tabela.
WHERE klauzula dodaje poredbeni predikat koji ogranièava redove koje upit
dohvata. WHERE klauzula elimini e sve redove iz skupa rezultata kojim poredbeni
132
predikat ne dodijeli vrijednost True.
Primjer ispod demonstrira upit vi e tabela, grupisanje i gomilanje vraæajuæi listu knj
iga i broj
autora povezanih sa svakom knjigom.
SELECT Book.title,
count (*) AS Authors
FROM Book
JOIN Book_author ON Book.isbn = Book_author.isbn
GROUP BY Book.title;
Rezultat primjera bi mogao izgledati kao:
Title
Authors
SQL Examples and Guide 4
The Joy of SQL 1
An Introduction to SQL 2
Pitfalls of SQL 1
Pod uslovom da je isbn jedino zajednicko ime kolona dvije tabele i da kolona tit
le postoji
samo u Books tabeli, navedeni upit bi se mogao napisati u formi:
SELECT title,
count (*) AS Authors
FROM Book
NATURAL JOIN Book_Author
GROUP BY title;
133
Ipak, mnoge platforme ili ne podr avaju ovakav pristup ili zahtjevaju konvencije i
menovanja
kolona.
SQL sadr i operatore i funkcije za izraèune nad pohranjenim vrijednostima. SQL dozvo
ljava
kori tenje izraza u select listi za dohvatanje podataka, kao u slijedeæem primjeru k
oji vraæa listu
knjiga koje ko taju vi e od 100.00 sa dodatnom kolonom sales_tax koja sadr i porez na
prodaju od
6% cijene.
SELECT isbn,
title,
price,
price * 0.06 AS sales_tax
FROM Book
WHERE price > 100.00
ORDER BY title;
NULTA VRIJEDNOST (NULL) I THREE-VALUED LOGIC (3VL)
Ideja sa Null je uvedena u SQL za rukovanje nepostojeæim informacijama u relaciono
m
modelu. Uvoðenje Null (ili nepoznate vrijednosti) zajedno sa True i False je osnov
alo 3VL. Null
nema vrijednosti (i nije èlan nijednog domena podataka) nego je oznaka za izostana
k informacije.
Tako da poreðenja sa Null ne mogu rezultirati logièkom vrijedno æu True ili False nego t
reæom
vrijedno æu, Unknown (nepoznato).
SQL koristi Null za rukovoðenje izostavljenim informacijama. SQL podr ava 3VL i prav
ila
upravljanja SQL 3VL logikom su obja njena u tabelama ispod ( p i q predstavljaju l
ogièka stanja).
Rijeè Null je takoðer rezervisana kljuèna rijeè u SQL-u koja se koristi za identifikovan
je specijalnog
Null markera.
Kako SQL operatori vraæaju Unknown poreðenjem bilo èega sa Null, SQL pru a dva
posebna poredbena predikata: IS NULL i IS NOT NULL provjeravaju da li je (ili da
li nije) podatak
NULL. Primjetite da SQL vraæa samo rezultate za koje klauzula WHERE vrati vrijedno
st True, tj.
iskljuèuje rezultate i sa False i sa Unknown.
Univerzalni kvantifikator nije eksplicitno podr an u SQL-u i mora se izvoditi kao
negirani
egistencijalni kvantifikator.
Takoðer postoji i infiksni operator <redni izraz> IS DISTINCT FROM <redni izraz> koj
i
vraæa True ako su oba operanda jednaka ili su oba NULL. Slièno, <redni izraz> IS NOT
DISTINCT
FROM <redni izraz> je negacija gornjeg operatora.
MANIPULACIJA PODATAKA
Data Manipulation Language (DML) je dio SQL-a koji se koristi za dodavanje, izmj
ene i
brisanje podataka.
· INSERT dodaje redove u postojeæu tabelu. Npr.:
INSERT INTO My_table
(field1, field2, field3)
VALUES
('test', 'N', NULL);
TRUNCATE brzo uklanja sve podatke iz tabele. Obièno koristi COMMIT operaciju
sukcesivno.
MERGE se koristi za spajanje sadr aja vi e tabela. Kombinuje INSERT i UPDATE
elemente. Ta je naredba definisana u SQL:2003 standardu. Prije toga, neke
databaze su pru ale sliènu funkcionalnost preko razlièitih sintaksi, ponekad zvanih
upsert .
KONTROLE TRANSAKCIJA
Transakcije, ako su dostupne, se koriste za objedinjavanje DML operacija:
COMMIT;
UPDATE tbl_1 SET id=200 WHERE id=1;
SAVEPOINT id-1upd;
UPDATE tbl_1 SET id=1000 WHERE id=2;
ROLLBACK TO id-1upd;
SELECT id FROM tbl_1;
135
DEFINISANJE PODATAKA
Data Definition Language (DDL) upravlja strukturom tabela i indeksa. Osnovne stv
ari u
DDL-u su CREATE, ALTER, RENAME, DROP i TRUNCATE iskazi.
);
TIPOVI PODATAKA
Svaka kolona SQL tabele odreðuje tip sadr aja kolone. ANSI SQL sadr i slijedeæe tipove.
Znakovni nizovi
CHARACTER (n) ili CHAR (n) string taèno odreðene du ine n, po potrebi
nadopunjen praznim prostorom.
CHARACTER VARYING (n) ili VARCHAR (n) string neodreðene du ine ali koja
mo e najvi e biti n.
NATIONAL CHARACTER (n) ili NCHAR (n) string taèno odreðene du ine koji
podr ava internacionalne znakove.
NATIONAL CHARACTER VARYING (n) ili NVARCHAR (n) NCHAR string
neodreðene du ine.
Bit nizovi
INTEGER i SMALLINT
FLOAT, REAL i DOUBLE PRECISION
NUMERIC (precision, scale) ili DECIMAL (precision, scale)
Datum i vrijeme
KONTROLA PODATAKA
Data Control Language (DCL) daje korisnicima i grupama ovlasti za pristup i mani
pulaciju
podacima. Njegova dva glavna iskaza su:
136
· GRANT daje ovlasti za izvoðenje operacija nad objektima.
· REVOKE ukida GRANT.
Na primjer:
GRANT SELECT, UPDATE
ON My_table
TO some_user, another_user;
REVOKE SELECT, UPDATE
ON My_table
FROM some_user, another_user;
PROCEDURALI DODACI
SQL je dizajniran za specifiènu namjenu: za dohvatanje podataka iz relacione baze
podataka. SQL je skupovno-bazirani deklarativni upitni jezik, ne naredbeni jezik
kao C ili BASIC.
Ipak, postoje dodaci za standardni SQL koji dodaju funkcionalnosti proceduralnih
programskih
jezika, na primjer kontrola toka programa. To su:
Izvor
Puni naziv
ANSI/ISO
Uobièajeni naziv
SQL/PSM SQL/Persistent Stored Modules
Standard
Interbase/Firebird PSQL Procedural SQL
IBM SQL PL SQL Procedural Language (koristi SQL/PSM)
Microsoft/Sybase T-SQL Transact-SQL
140
pozivaju se, to omogu ava æ
da se radizvodiiznova iiznova. Rekurzija mo e
zahtijevati odr avanje
neæe uspjeti pod strogom procjenom jer imamo dijeljenje nulom u treæem elementu list
, toznaèi da
æe taj elementbiti neuspje an. Kod nestrogihprocjena,duina funkcije e æ
vratiti vrijednost 4,jer
-
procjena je da ne e æ
poku ati da ocjeni uslove koje èine listu. Ukratko, stroga evaluacija u
potpunosti procjenjuje funkciju, sve njene argumente prije nego to pozove funkcij
u. Ne-stroga
procjena ne procenjuje argumente funkcije, osim ako njihove vrijednosti moraju d
a procjene
funkciju poziva se.
Uobièajeno sprovoðenje strategije za ne-strogu evaluaciju u funkcionalnim jezicima j
e graf
smanjenje. Ne-stroga procjena koristi kao defaltna u nekoliko èisto funkcionalnih
jezika, ukljuèujuæi
Miranda, Clean i Haskell.
Tipièni sistemi i uzrok pogaðanja
Posebno od razvoja Hindley-Milner tipa zakljuèka u 1970-im, funkcionali programski
h
jezika imaju tendenciju koristiti tipiène lambda raèune, za razliku od netipiènih lamb
da raèuna
kori tenih u LISP-u i njegove varijante (kao to su ema). Kori tenje algebarskih tipova
podataka i
uzorka pogaðanja èini manipulacije slo enih struktura podataka vi e zgodnim i izra ajanim,
prisustvo jakih compile-time tipovaomoguæava provjeru programa i èini ih pouzdanijim
, dok tip
zakljuèak oslobaða programera od potrebe da ruèno proglasi tipove kompajler.
Neka istra ivanja orijentisanim funkcionalnim jezicima kao to su Coq, Agda, Cayenne
, i
Epigram su bazirani na Institucijskoj teoriji tipova, koja omoguæava vrste koje za
vise od uslova.
Nazivaju se zavisne vrste. Ove vrste sistema nemaju odluèujuæe tipove zakljuèivanja i
te ko je
razumjeti i program. Ali zavisni tipovi mogu da izraze proizvoljne prijedloge u
logici predikata. Kroz
Curry-Howard izomorfizam, onda, dobro otkucani programiu ovim jezicima dobijaju
znaèenje
pisanja u formi matematièkih dokaza iz koje kompajler mo e da generi e certificirani k
od.
Compcert je kompajler za podskup C programskog jezika koji je pisan u Coq-u i fo
rmalno
verifikovan.
Ogranièena forma zavisnih vrsta naziva se generalizovani algebarski tipovi podatak
a
141
(GADT -Generalized Algebraic Data Types) mo e da se sprovodi na naèin koji obezbjeðuje
neke od prednosti zavisnih tipova programiranje izbjegav i veæinu neprijatnosti. GAD
T su dostupni
u Glasgow Haskell kompajleru i u Scala (kao "sluèajne klase"), a predlo eni su kao d
odaci na
druge jezike, ukljuèujuæi Java i C# .
Funkcionalno programiranje u ne funkcionalnim jezicima
Moguæe je da se koriste funkcionalnim stilom programiranja u jezicima koji nisu
tradicionalno smatrani funkcionalnim jezicima. Neki ne-funkcionalni jezici su po
sudili funkcije kao
to su funkcije vi eg reda, kao i listu shvatanja iz funkcionalnih programskih jezik
a.. Ovo olak ava
usvajanje funkcionalnog stila kada koristite te jezike. Funkcionalne konstrukcij
e kao to su funkcije
vi eg reda i lijene liste mogu se dobiti u C + + preko biblioteka. U C, taèkasta fun
cija se mo e
koristitida bi se dobili neki od efekata funkcija vi eg reda. Na primjer, zajednièka
funkcija se mo e
implementirati kori æenjem taèkaste funkcije. U C # verziju 3.0 i vi e, lambda funkcije
mogu da se
koriste za pisanje programa u funkcionalnom stilu. U Javi, anonimne klase poneka
d moge da se
koriste za simulaciju zatvaraèa, meðutim anonimne klase nisu uvijek odgovarajuæe zamen
e za
zatvaraèe, jer imaju vi e ogranièenih moguænosti.
Mnogi objektno-orijentisani projektni uzorci su izra eni u funkcionalno programira
nim
uslovima: npr, Strategija ablon jednostavno diktira kori æenje funkcije vi eg reda, a z
a posjetioce
uzorak odgovara otprilike Catamorphism-u ili fold.
Prednosti nepromenljivih podataka mogu se vidjeti èak i u imperativnim programima,
tako da
programeri èesto nastoje da naprave neke podatke nepromenljivi i u imperativnim pr
ogramima.
Poreðenje funkcionalnog i imperativnog programiranja
Funkcionalno programiranje se veoma razlikuje od imperativnog programiranja. Naj
znaèajnije
razlike proizilaze iz èinjenice da funkcionalno programiranje izbjegava ne eljene ef
ekte, koji se
koriste u imperativnom programiranju da sprovede dr avne i I / O. èisto funkcionalno
programiranje
zabranjuje ne eljena dejstva u potpunosti. Zabranjena ne eljena dejstva obezbeðuje ref
erencijalnu
transparentnost, to olak ava provjeru, optimizuje i uporeðuje programe, i lak e je za p
isanje s
automatizovanim alatima za obavljanje tih poslova.
Funkcije vi eg reda se rijetko koriste u starijem imperativnom programiranju. Gdje
tradicionalno imperativno programiranje mo e koristiti petlje da prolaze kroz list
u, funkcionalni stil
se èesto koristi funkcijama vi eg reda, mapa, koja se uzima kao argumenti funkcije i
liste,
primenjuje funkciju na svaki element liste, i vraæa spisak rezultata.
Efikasnost pitanja
Funkcionalni programski jezici se percipiraju kao manje efikasni u kori tenju proc
esora i
memorije nego imperativni jezici kao to su C i Pascal. Za èisto funkcionalne jezike
u najgorem
sluèaju usporavanja je logaritamski broj memorijskih æelija koje se koriste, jer pro
menljiva memorija
mo e da se predstavi èisto funkcionalnim strukturama podataka sa logaritamskim vreme
nom
pristupa. Meðutim, usporavanja se javljaju vrlo rijetko u praksi. Za programe koji
obavljaju
intenzivna numerièka izraèunavanja, funkcionalni jezici kao to su OCaml i Clean obièno
su slièni
po brzini od C. Za programe koji rukuju velikim matricama i vi edimenzionalnim baz
ama podataka,
niz funkcionalnih jezika (kao to su J i K) je dizajniran sa brzinom optimizacije.
Upotreba u industriji
Funkcionalno programiranje ima reputaciju èisto akademskih interesa. Meðutim, nekoli
ko
uglednih funkcionalnih programskih jezika se koristi u komercijalne i industrijs
ke primjene. Na
primjer, Erlang programski jezik, koji je razvijen od strane vedske kompanije Eri
csson u kasnim
1980-im, bio je prvobitno kori æen za sprovoðenje gre aka otpornih na sisteme telekomuni
kacije.
On je postao popularan, jer je izgradio spektar aplikacija u kompanijama kao to s
u T-Mobile,
Nortel, i Facebook. ema dijalekta u LISP-u je kori tena kao osnova za nekoliko apli
kacija u
ranijim Apple Macintosh raèunarima. OCaml, koji je uveden sredinom 1990-ih godina,
je do ivio
komercijalnu upotrebu u oblastima kao to su finansijska analiza, verifikacije voz
aèa, industrijski
programiranih robota, kao i statièke analize ugraðenih softvera. Haskell, iako je pr
vobitno bio
namijenjen kao istra ivaèki jezik, takoðe se primjenjuje u nizu kompanija, u oblastima
kao to su
zraèni sistemi, hardverski dizajn i web programiranje.
Ostali funkcionalni programski jezici koji su primjenjivani u industriji su: Ska
la, F #, LISP,
Standardni ML, i Clojure.
Lisp
Lisp je najstariji i najpoznatiji funkcionalni programski jezik. Kod ovog jezika
je vi a razina
apstrakcije od imperativnih jezika (npr. C), jer izvoðenje ovisi o tipovima parame
tara, a
program i podaci mogu se modificirati tijekom izvoðenja. LISP se pokreæe funkcijama:
funkcije prenose rezultate drugim funkcijama, koje prenose daljnjim funkcijama i
td. LISP je
visoko rekurzivan glede struktura podataka (liste, stabla, ) i algoritama. Odr ava
jednakost programa i podataka. Temeljna struktura podataka je lista. LISP progra
mi su
takoðer formulirani kao liste. Suprotno C-u, funkcije u LISP-u objekti prvoga reda
: mogu se
143
kreirati, modificirati i evaluirati kao da su jednostavne varijable. Tip varijab
le ne mora se
deklarirati unaprijed. Podaci nose tip pa funkcije za vrijeme izvoðenja odluèuju o
specifiènoj akciji (kasnije prihvaæeno u OO paradigmi). Ima implicitan rad s pokaziv
aèima.
Zbog interpreterskog rada i brzog oblikovanja prototipa, LISP je pogodan za prob
leme koji
poèetno nisu potpuno razumljivi, kao to je oblikovanje ekspertnih (inteligentnih) s
ustava.
(if (= n 1)
1
(* n (factorial (- n 1)))))
(dotimes (i 10)
(format t "~% ~d" i))
144
(format t "~% ~d" i))
ML
ML je opæe namjene funkcionalni programski jezik razvijen od strane Robin Milner i
ostali u
kasnim 1970-ih na Sveuèili tu u Edinburghu, [1] èija je sintaksa inspirirana ISWIM.
Povijesno, ML stoji za metajezik: to je bio zami ljen za razvoj taktike u dokaze t
eorem
komora LCF (èiji jezik, pplambda, kombinacija prvog reda predikat raèun i jednostavn
o tip
polimorfnih lambda-raèuna, ML imala kao metajezik). On je poznat po kori tenju Milne
rtipa
zakljuèak Hindley algoritma, koja mo e automatski zakljuèiti vrstama najlak e izraza
bez zahtijeva eksplicitne komentare tipa.
Pregled
ML se èesto naziva i funkcionalni neèisti jezik, jer ne bismo ukratko opisali nuspoj
ava, za
razliku od èisto funkcijske programske jezike kao to je Haskell.
Znaèajke ukljuèuju ML-po-vrijednost vrednovanja strategije poziv, prvoklasne funkcij
ama,
automatsko upravljanje memorijom putem odvoz smeæa, parametarska polimorfizam,
statièna tipkanje, vrsta zakljuèivanja, algebarske tipove podataka, uzorak podudaran
ja, a
iznimka rukovanje.
Za razliku od Haskell, ML koristi eljni ocjenjivanja, to znaèi da su sve subexpressi
ons
uvijek procjenjuju. Meðutim, sporo vrednovanje se mo e postiæi kroz kori tenje zatvaraèa.
Tako se mo e stvoriti i koristiti beskonaèan potocima kao u Haskellu, meðutim, njihov
izraz
je relativno neizravne.
Danas postoji nekoliko jezika u ML obitelji; dva glavna narjeèja su Standard ML (S
ML) i
Caml, ali drugi postoje, ukljuèujuæi i F # -jezik koji podr ava Microsoft za svoje. NE
T
platforma. Ideje iz ML utjecale brojne druge jezike, kao to je Haskell, ciklona,
i Nemerle.
ML je snaga uglavnom se primjenjuju u jeziku dizajn i manipulacije (kompilatora,
analizatori, teorem provers), ali to je opæe namjene jezik se takoðer koristi u bioi
nformatici,
financijskih sustava i aplikacija, ukljuèujuæi genealo ka baza podataka, peer-to-peer
klijent
/ poslu iteljski program, itd.
ML koristi statièke odreðivanja pravila.
Primjeri
Sljedeæi primjeri uporabe sintaksu Standard ML. Drugi najèe æe kori tene ML dijalekt,
OCaml, razlikuje, u ovim jednostavnim primjerima, na razlièite naèine bez osnova.
Faktorijel
"Hello World" funkcionalne jezika funkciju faktorijela. Izra eno kao èista ML:
145
fun fac (0 : int) : int = 1
| fac (n : int) : int = n * fac (n-1)
Ovo opisuje kao faktorijela rekurzivna funkcija, sa samo jednim prestanka osnovn
og
scenarija. To je slièno opisima faktorijela naæi u ud benicima matematike. ML Velik di
o
koda je slièan matematike u pogonu i sintakse.
Dio definicije prikazano je opcionalno, i opisuje vrste ove funkcije. Oznaka E:
t mo e se
èitati kao izraz ima tip E t. Na primjer, argument je n cijeli broj dodijeljen tip
a (int), a
rezultat primjene fac do n (FAC (n)) ima i tipa integer. Funkcija èimbenika kao cj
elina tada
je tip funkcije cijeli u integer (int -> int). Zahvaljujuæi vrstu zakljuèivanja, pri
mjedbe tipa
mogu se izostaviti, te æe biti izveden od strane kompajlera. Prepisivati bez primj
edbe tipa,
primjer izgleda ovako:
fun fac 0 = 1
| fac n = n * fac (n-1)
fun fac 0 = 1
| fac n = n * fac (n - 1)
in
else fac n
end
Problematièna sluèaj (kad je n negativna) pokazuje kori tenje ML moæni iznimka sustava.
Funkcija se mo e dodatno pobolj ali pi uæi svojoj unutarnjoj petlji u rep-rekurzivna sti
lu,
kao da stoga ne treba rasti proporcionalno broju funkcije poziva. To se posti e
dodavanjem dodatnih, "akumulator", parametar za unutarnje funkcije. Napokon, dol
azimo
do
fun factorial n = let
in
end
146
Popis Obrnut
Sljedeæa funkcija "obræe" elemenata u popis. Toènije, vraæa novu listu èiji su elementi u
obrnutom redoslijedu u odnosu na dane popis.
fun reverse [] = []
| reverse (x::xs) = (reverse xs) @ [x]
days = "Nil":days
days!0
"Nil"
days = days -- ["Nil"]
#days
Nakon objavljivanja od strane Miranda Research Software Ltd, 1985, interes za li
jene
funkcionalnim jezicima rastao: od 1987, vi e od desetak ne-strogi, èisto funkcijskih
programskih jezika su postojale. Od tih, Miranda je najèe æe kori tena, ali nije bio u j
avnoj
domeni. Na konferenciji na funkcijske programske jezike i raèunalne arhitekture (F
PCA
'87) u Portland, Oregon, odr an je sastanak na kojem sudionici rasporede u obliku
jak
konsenzus da odbor treba biti formirana za definiranje otvoreni standard za te j
ezike.
Svrha je Odbora za konsolidaciju postojeæe funkcionalne jezika u zajednièkim koja æe
poslu iti kao osnova za buduæa istra ivanja u funkcionalnom jeziku dizajn. [10]
Haskell
Haskell 1,0
Prva verzija Haskell ("Haskell 1.0") je definiran u 1990 [11]. Odbora napori rez
ultirali u
nizu jezika definicije.
148
Haskell 98
Krajem 1997, serija je kulminirao u Haskellu 98, namijenjen za odreðivanje stabiln
o,
minimalan, prenosiv inaèici jezik i prateæih standardne biblioteke za nastavu, te ka
o baza
za buduæe ekstenzije. Odbor izrièito pozdravio stvaranje pro irenja i inaèica Haskell pr
eko
98 dodavanja i ukljuèuje eksperimentalne znaèajke. [10]
U veljaèi 1999, 98 Haskell jezièni standard je izvorno objavljen kao "Haskell 98 Rep
ort".
[10] U sijeènju 2003, revidirana verzija je objavljena kao "Haskell 98 Jezik i knj
i nice:
Revised Report". [12] jezik nastavlja razvijati ubrzano, s Glasgow Haskell Compi
ler (GHC)
provedba koja predstavlja trenutni de facto standard.
Haskell premijer
Poèetkom 2006, postupak definiranja nasljednik Haskell 98 standardu, neformalno zo
ve
Haskell "(" Haskell Prime "), je poèeo. [13] To je u tijeku proces preispitivanja
rastuæi jezik
definiciji, stvarajuæi nova revizija jednom godi nje. Prva revizija, nazvana Haskell
2010,
bio je najavljen u studenom 2009. [14]
Haskell 2010
Haskell 2010 dodaje vanjskih Funkcija suèelje (FFI) u Haskellu, èime povezivanja s
drugim programskim jezicima, popravci neki sintaksa problema (promjene u formaln
a
gramatika) i zabrana takozvani "n-k-plus-uzorci", to jest, definicije oblika Fak
(n +1) = (n
+1) * n fak vi e nisu dozvoljeni. Uvodi jezik-Pragma-sintaksa-ekstenziju koja omog
uæuje
za oznaèivanje Haskell izvor kao Haskell 2010 ili odreðene obveze Pro irenje Haskell
Jezik. Imena ekstenzija uveden u Haskellu 2010 su DoAndIfThenElse,
HierarchicalModules, EmptyDataDeclarations, FixityResolution, ForeignFunctionInt
erface,
LineCommentSyntax, PatternGuards, RelaxedDependencyAnalysis, LanguagePragma,
NoNPlusKPatterns.
Moguænosti
Glavni èlanak: Haskell znaèajke
Vidi takoðer: Glasgow Haskell kompajler # Pro irenje Haskell
Haskell znaèajke sporo vrednovanje, sparivanje uzoraka, liste spoznaja, typeclasse
s, i tip
polimorfizma. To je èisto funkcionalni jezik, to znaèi da se opæenito, funkcija u Haske
llu
nemaju nuspojava. Tu je razlièita tipa za zastupanje nuspojave, ortogonalna o vrst
i
funkcija. Èista funkcija mo e vratiti nuspojava koje su naknadno proveden, modeliran
je
neèistu funkcije drugih jezika.
Haskell je jaka, statièki, vrsta sustava temelji na Hindley-Milner tipa zakljuèak. H
askell
glavni inovacijama na ovom podruèju je dodati tip nastave, koji su izvorno zami ljen
kao
principijelan naèin za dodavanje preoptereæenja na jezik, [15], ali su od prona ao mno
go
vi e koristi. [16]
Tip koji predstavlja nuspojava je primjer monada. Monadama su opæi okvir koji mo e
149
modela razlièite vrste raèunanja, ukljuèujuæi i rukovanje pogre kama, nondeterminism,
parsing, i software transakcijski memorije. Monadama su definirani kao obièni tipo
vima
podataka, ali daje neke Haskell sintaktièka eæera za njihovu upotrebu.
Jezik ima otvoren, objavljeni rad, specifikaciji, [12] i vi estruke implementacije
postoji.
Tu je aktivna zajednica oko jezika, i vi e od 1700 drugih open-source biblioteka i
alata koji
su dostupni u paketu online repozitorij Hackage. [17]
Glavni provedbu Haskell, GHC, je i tumaè i izvorni-prevodilac koja radi na veæini
platforma. GHC je poznata po svojim high-performance provedbu konkurentnosti i
paralelizma, [18] i za to to bogati tip sustava koji ukljuèuju nedavne inovacije, k
ao to su
generalizirana algebarske tipove podataka i Tip obitelji.
Primjer programa u Haskellu
-- using recursion
factorial 0 = 1
factorial n = n * factorial (n - 1)
-- using lists
factorial n = product [1..n]
-- using fold
factorial n = foldl (*) 1 [1..n]
Logièko programiranje
Logièko programiranje nastalo je kao rezultat radova na mehanièkom dokazivanju
teorema. Jedna od prvih ozbiljnih studija mehanièkog procesa zakljuèivanja napisao j
e u
XVII vijeku matematièar Gottfried Leibniz ("Calculus Ratiocintator"). Nakon rada J
.
Herbranda objavljenog 1930. godine problemu mehanièkog dokazivanja teorema
posveæeno je dosta pa nje. Poveæanje zanimanja koje je rezulturalo podruèjem logièkog
programiranja u dana njem obliku mo e se prouèavati od èlanka J.A.Robinsona
objavljenog 1965. godine, gdje je prvi put opisan princip rezolucije.
Rezolucija je generalizacija principa "modus ponens" i omoguæava kori tenje operacij
a
uporedjivanja i prepoznavanja nazvanih unifikacija (izjednaèavanja).
Poèetkom 70-ih godina ideju kori tenja logike kao programskog jezika razvili su Robe
rt
Kowalski (teoretski) i Maarten van Emden (eksperimentalna demonstracija) u Edinb
urghu,
te Colmerauer (implementacija) u Marseillesu.
Osnovna teza logièkog programiranja prema Kowalskom glasi: "algoritam se mo e korisn
o
150
izraziti sa dvije komponente: logikom i kontrolom."
Logièka komponenta predstavlja izjavu o problemu, o osobinama problema i o rje enju
(" ta" je problem).
Kontrolna komponenta govori o naèinu rje avanja problema ("kako"). Idealni cilj logièk
og
programiranja je da programer specificira samo logièku komponentu algoritma, a o
kontrolnoj se brine raèunar. Taj ideal jo do sada nije postignut. Prednosti logièkog
programiranja su:
·jednostavnije razmi ljanje i zakljuèivanje o problemu,
·jednostavan prikaz metodologije rje avanja problema,
·veæe moguænosti za iskori tavanje pararelizma
·kori tenje jednog uniformnog formalnog sistema mo e imati korisne posljedice na
programski in enjering
Za postizanje ovog cilja treba rije iti dva problema. Prvi problem je kontrola izv
odjenja. Za
sada programer mora osigurati malu kolièinu kontrolnih informacija, djelomièno pravi
lnim
poretkom klauzula i ciljeva u programu, a djelomièno kori tenjem izvanlogièkih osobina
jezika.
Drugi problem jeste problem negacije. Kako samo pozitivne informacije mogu biti
logièke
posljedice baze podataka, za dedukciju negativnih informacija treba koristiti po
sebna
pravila.
Postojeæi interpreteri ne mogu implementirati negaciju, veæ samo problematiène verzije
pravila "negacija preko neuspjeha" (negation by failure).
Terminologija logièkog zakljuèivanja:
Sintaksa logièkog programiranja obuhvaæa slijedeæe pojmove:
·term
·atom, literal
·klauzula oblika Kowalskog je formula oblika A1,...,Ak B1,...,Bn gdje su
i B (i=1,...,k ; t = 1,...,n) atomi. Bse naziva prethodnik ili uslov, a Ai
Aitt
posljedica, zakljuèak, rezultat ili konzekvent.
·konaèna klauzula je formula oblika A B1,...,Bn, gdje su A i Bt atomi. Konaèna klauzula
oblika A naziva se jedinièna klauzula
·ciljna klauzula je formula oblika B1,...,Bn, gdje su Bt atomi.
·Ako je A B1,...,Bn konaèna klauzula tada se A naziva glava, a B1,...,Bn tijelo klauz
ule.
·Hornova klauzula je ciljna ili konaèna klauzula.
Prolog
Prolog je programski jezik koji se koristi za istra ivanje programske logike. Kori
jeni Prologa
(Programming in Logic) su u matematèkoj logici. Osnovna razlika u odnosu na klasiène
,
proceduralno orijentirane jezike je Prologov deskriptivni (opisni) i dekalrativn
i pristup.
Prolog se vrlo uspje no primjenjuje u podruèju umjetne inteligencije ("artificial
engineering") i in enjering znanja ("knowledge engineering").
Prolog je programski jezik baziran na malom skupu osnovnih mehanizama ukljuèujuæi
151
prepoznavanje uzoraka ("pattern matching"), stablaste strukture podataka i autom
atsko
povlaèenje ("backtracking").Ovaj mali skup formira fleksibilnu i djelotvornu progr
amsku
okolinu. Prolog je posebno pogodan za probleme koji ukljuèuju objekte, pogotovo
strukturirane objekte i relacije medju njima, te uglavnom za nenumerièko programir
anje.
Taèna sintaksa terma varira u razlièitim verzijama Prologa ali najèe æe se koristi tako
zvana Edinburgh sintaksa. Atomi se sastoje od alfanumerièkih atoma i znakovnih ato
ma
("sign").
Alfanumerièki atom je skup znakova koji poèinju malim slovom i mogu sadr avati sva
slova, brojeve i znak "_". Atomi znakova su stringovi koji se sastoje od znakova
+,>,?,$,itd.
Takodjer se svaki string okru en znakovima navoda (') smatra atomom. Varijable su
stringovi koji pocinju velikim slovom ili znakom "_". Strukture se sastoje od fu
nktora (koji je
atom) i jedne ili vi e komponenata (koji su termi). Funktor koji ima dimenziju N i
ma N
152
3.niz znakova unutar literala ('Bosna', 'Sarajevo')
Brojevi mogu biti cijeli ili sa pomiènim zareom, uz prikaz koji se koristi u ostal
im
programskim jezicima.
Dozvoljeni oblik varijabli je niz slova, brojeva, i znak "_", koji poèinje ili vel
ikim slovom ili
znakom "_".
Unifikacija:
Unifikacija je najèe æe kori tena operacija nad podacima. Dva izraza se medjusobno
mogu unificirati (prilagoditi) ako su ili identièni, ili mogu postati identièni uz o
dgovarajuæa
vezivanja varijabli. Slijede dva primjera unifikacije struktura u kojima _GXXX p
redstavlja
novu varijablu koju u cilju unifikacije uvodi prevodioc:
?-datum(D,M,1983) = datum(D1,april,G)
D=D1=_G283
M=april
G=1983
Opisivanje relacija:
Upotreba èinjenica u Prologu se mo e ilustrirati na primjeru relacije roditelj. Tako
se,
naprimjer, èinjenica da je Armin Jasminov roditelj, mo e predstaviti sljedeæom stavkom
:
roditelj(armin, jasmin)
U prethodnom stavku roditelj oznaèava relaciju, dok armin i jasmin oznaèavaju objekt
e nad
kojima ta relacija vrijedi.
Prethodnom programu se mogu postaviti razna "pitanja". Naprimjer, ako elimo sazna
ti da
li je Armin Ivanov roditelj, mo emo postaviti upit:
?- roditelj(armin, ruzica)
No
Znak "?-" oznaèava da je Prolog spreman za "pitanje", dok je "No" dobiveni odgovor
.
Opisivanje pravila:
Pravilima se na temelju postojeæih relacija definiraju nove. Mo e se reæi da svako pra
vilo
definira jednu uzroèno posljediènu vezu. Tako se na temelju relacije roditelj iz pre
thodnog
primjera te novih dviju elementarnih unarnih relacija musko i zensko, mogu opisa
ti nove
relacije majka i otac.
roditelj(armin, jasmin)
153
musko(armin)
....
otac(X,Y) :roditelj(
X,Y), musko(X)
Rekruzivna pravila:
Veliki broj problema u raèunarstvu se rje ava iterativnim pristupom. U konvencionaln
im
jezicima, ti problemi se opisuju programskim petljama. U Prologu se, medjutim, o
ni
prirodno opisuju rekruzijom.
Najjednostavnija primjena rekruzije je modeliranje rekruzivnih relacija. Slijedeæi
ilustrativni
program iz pro log primjera roditelj mo e se definirati rekruzivna relacija predak:
% predak je roditelj
predak(X,Y) :
roditelj(X,Y).
% ... ali i roditelj od bilo kojeg drugog predaka
roditelj(X,Z)
roditelj(Y,Z),
Relacija predak je opisana sa dva stavka to znaèi da vrijedi ako je zadovoljen bilo
koji od
njih. Vi e stavki koji definiraju jednu relaciju èine proceduru.
Operatorska sintaksa predikata i strukutra:
Operatorski prikaz je posebno pogodan za èitko predstavljanje èestih operacija:
2*a + b*c, (*).
U izrazu (*), + i * predstavljaju operatore, dok su 2,a,b,c njihovi argumenti. I
zraz (*) se u
Prologu standardno mo e predstaviti strukturiranim objektom, u tkz. prefiksnom obl
iku sa
zagradama:
+(*(2,a), (b,c)), (**)
gdje su + i * funktori, a 2,a,b,c atomi.
Artimetièke operacije:
Prolog nije namjenjen za opisivanje numerièkih postupaka. Zato je podr ka za numerièke
operacije u Prologu relativno skromna,a temelji se na evaluacijskom predikatu is
/2.
Predikat is/2 vraæa istinu ako mu se prvi argument mo e unificirati sa artimetièkom
vrijedno æu drugog argumenta. Pri tome drugi argument mo e biti i slo en aritmetièki
izraz, èija vrijednost se odredjuje ugradjenim procedurama koje su pridru ene
predefiniranim aritmetièkim funktorima (+,*,pi,random,**,sqrt). Buduæi da se vrijedn
ost
aritmetièkog izraza odredjuje konvencionalnim metodama, eventualne varijable u dru
gom
argumentu predikata is/2 moraju biti vezane u trenutku poziva predikata. Nepo tiva
nje tog
ogranièenja dovodi do iznimke, koja obièno rezultira nasilnim prekidom izvodjenja
programa.
?- X=1+2
X=1+2
?- X is 1+2
154
X=3
Izvan-logièke osobine:
Kori tenje Prologa u "stvarnim" aplikacijama zahtjeva ponekad kori tenje jeziènih osob
ina
koje ne ulaze u èistu logiku.Ove osobine omoguæene su ugradjenim predikatima koji se
mogu klasificirati u pet kategorija: aritmetièki predikati i operatori, baratanje
znakovnim
nizovima, ulaz i izlaz, predikati za modificiranje programa i kontrola izvodjenj
a.
Ulaz i izlaz su potrebni zbog komunikacije s korisnikom. Ulazno/izlazne operacij
e
karakterizirane su popratnim djelovanjem pa su stoga izvan-logièke.
Ugradjeni predikati za modificiranje programa koriste se za dodavanje i brisanje
klauzula iz
baze podataka. Na taj je nacèin moguæe napraviti samomodificirajuæe procedure.
Primjeri u Prologu:
Primjer programa Hello world:
?- write('Hello World!'), nl.
Primjer programa Quicksort(algoritam za sortiranje):
partition([], _, [], []).
partition([X|Xs], Pivot, Smalls, Bigs) :
(
X @< Pivot ->
Smalls = [X|Rest],
partition(Xs, Pivot, Rest, Bigs)
; Bigs = [X|Rest],
partition(Xs, Pivot, Smalls, Rest)
).
quicksort([X|Xs]) -->
{ partition(Xs, X, Smaller, Bigger) },
quicksort(Smaller), [X], quicksort(Bigger).
155
156