metode programiranje 1. - 5. predavanja

19
1. PREDAVANJE 27.2.2013. Uvod u OOP Pregled tehnika programiranja - Proceduralno programiranje - Modularno programiranje - Objektno – orijentisano programiranje Modeliranje Nestruktivno – proceduralno programiranje - Glavni program direktno operise sa globalnim podacima - Dugi I nepregledni programi - Copy paste – kod se visestruko koristi kopiranjem delova Proceduralno programiranje - Program se moze posmatrati kao sekvenca poziva potprograma (procedura) - Strukture podataka se modeliranju odvojeno od koda procedura koje ih obradjuju - Visestruko koriscenje koda postize se preko biblioteka procedura i funkcija Modularno programiranje - Procedure sa zajednickom funkcionalnoscu su integrisane u jedan modul - Svaki modul moze da ima svoje sopstvene podatke - Visestruko koriscenje struktura podataka i procedura Objektno orijentisano programiranje - Strukture podataka I procedure integrisane u klse - Program koji su u interakciji pri cemu svaki objekat zna svoje stanje

Upload: maja-knezevic

Post on 13-Jan-2016

109 views

Category:

Documents


0 download

DESCRIPTION

beleske sa preddavanja metode programiranja od prvog do petog predavanja

TRANSCRIPT

Page 1: Metode programiranje 1. - 5. predavanja

1. PREDAVANJE 27.2.2013.

Uvod u OOP

Pregled tehnika programiranja- Proceduralno programiranje- Modularno programiranje- Objektno – orijentisano programiranje Modeliranje

Nestruktivno – proceduralno programiranje- Glavni program direktno operise sa globalnim podacima- Dugi I nepregledni programi- Copy paste – kod se visestruko koristi kopiranjem delova

Proceduralno programiranje- Program se moze posmatrati kao sekvenca poziva potprograma (procedura)- Strukture podataka se modeliranju odvojeno od koda procedura koje ih obradjuju- Visestruko koriscenje koda postize se preko biblioteka procedura i funkcija

Modularno programiranje- Procedure sa zajednickom funkcionalnoscu su integrisane u jedan modul- Svaki modul moze da ima svoje sopstvene podatke- Visestruko koriscenje struktura podataka i procedura

Objektno orijentisano programiranje- Strukture podataka I procedure integrisane u klse- Program koji su u interakciji pri cemu svaki objekat zna svoje stanje- Apstrakcija (npr. struja), enkapsulacija (skrivanje informacija),

nasledjivanje I polimorfizam- Ponovno koriscenje objekta

Karakteristike proceduralnog programiranja- Koncentrise se na procedure – niz akcija, akcijski orijentisano- U suprotnosti sa ljudskim poimanjem realnog sveta- Jedinica programiranja – funkcija, funkcije se grupisu u programe

2. PREDAVANJE 6.4.2013.

Objektno – Orijentisano programirnaje koncept (OOP) Proceduralno programiranje – program se tretira kao serija instrukcija koje se

izvrsavanju u sekvenci. Programer mora da nauci da razlozi problem u obliku serije jednostavnih koraka.

Page 2: Metode programiranje 1. - 5. predavanja

OOP – program se tretira kao niz objekata koji saradjuju u cilju izvrsavanja odredjenog zadatka. Svaki objekat je poseban deo programa, koji interaguje sa drugim delovima programa na specifican, kontorlisan nacin.

OOP je nacin ugradnje programske podrske kod kojie su programi organizovani kao kooperativne grupe objekata, od kojih svaki predstavlja manifestaciju neke klase, a sve klse su clanovi neke hijerarhije klasa sjedinjene preko nasledjivanja

- Programiranje bez nasledjivanja nije objektno orijentisano, vec je rec o programiranju s apstraktnim tipovima podataka. Osnovni gradivni element jezika je objekat a ne algoritam Jezik je objektno orijentisan ako i samo ako:

- podrzava objekte koji predstavljaju apstrakciju stvarnog sveta sa skrvenim lokalnim stanjem i sa interfejsom koji definise operacije nad tim objektima

- objekti pripadaju nekoj klasi- klase mogu nasledjivati svojstva od nadklasa

Za jezik bez nasledjivanja kaze se da je zasnovan na objektima (object – based)

ObjekatSta je objekat:

- sve moze biti objekat- program je skup objekata koji medjusobno komuniciraju razmenjujuci

poruke- svaki objekat ima vlastitu memoriju sastavljenu od drugih objekata –

podatke, te skup funckija koje je u stanju obaviti – postupke- neke od postupaka i podataka objekat izlaze drugim objektima –

(interface)- svaki objekat je odredjenog tipa- svi objekti nekog tipa imaju istu internu strukturu podataka, te mogu

primati, slati i obradjivati iste vrste poruka.Objekat ima:

- svojstva- ponasanje

Slozenost programse podrskeRazlozi slozenosti programske podrske

slozenost i cesto nejasna definicija problema- iterativni razvoj, interakcija s korisnikom

teskoce u upravljanju razvojnim procesom- dekompozicija u module, koordinacija

softver omogucava ostvarenje svih elementarnih gradivnih elemenata sto se cesto koristi zbog nedostataka standarda

problem opisa ponasanja diskretnih sistema- ne mogu se modelirati kontinualnom funkcijom,- mogu imati ogroman broj diskretnih stanja

nerazumni zahtevi korisnika

Page 3: Metode programiranje 1. - 5. predavanja

Pet atributa slozenih sistema1. Imaju hijerarhijsku formu sastoje se od povezanih podsistema koji mogu imati svoje podsisteme2. definicija osnovnih komponenti nije jednoznacna zavisi o subjektivnom gledistu posmatraca3. veze unutar komponenti su jace od veza medju komponentama sistemi su razlozivi jer se mogu razdeliti na komponente sistemi su skoro razlozivi jer komponente nisu nezavisne4. cesto se sastoje od samo nekoliko razlicitih podsistema, ali u mnogim

kombinacijama i pojavnim oblicima osnovne komponente s dna hijerarhije cesto su zajednicke5. slozeni sistemi evoluiraju iz jednostavnijih

Razumevanje slozenih sistema olaksava prepoznavanje svojstava koja su zajednicka s drugim sistemima

avion, automobil“Industrial – strenght software”

nijedan clan razvojnog tima ne moze biti upoznat sa svim detaljima projekta vrlo dugi zivotni vek programske podrske mnogi korisnici zvaise od korektnog funkcionisanja programske podrske veliki broj ljudi je ukljucen u odrzavanje i poboljsanje programa

“Softverska kriza” zahtevi korisnika su se drasticno povecali programska podrska je sve obiminija i zahtevnija troskovi odrazavanja su u drasticnom porastu troskovi odrazavanja su u drasticnom porastu ne postoji dovoljan broj ljudi osposobljenih za razvoj kvalitetne programske

podrske

Evolucija programskih jezika (i tipican redosled ucienja programera)- Nestrukturirano programiranje- Proceduralno programiranje- Modularno programiranje- Objektno orijentisano programiranje

Nestrukturirano programiranje- Ucenje programa pocinje pisanjem malih i jednostavnih programa koji se

sastoje od niza naredbi i deluju nad zajednickim skupom podataka- Ponavljanje nekog posla znaci i kopiranje naredbi

Proceduralno programiranje- Izdvajanjem naredbi u procedure, program postaje niz poziva procedura

Modularno programiranje- Procedure srodne funkcionalnosti grupisu se u module koji mogu imati

vlastite podatke

Page 4: Metode programiranje 1. - 5. predavanja

Objektno orijentisano programiranje- Koriscenje objekata koji medjusobno komuniciraju porukama- Svaki objekat brine se o svome stanju, stvaranju i unistenju

Prevladavanje slozenosti programske podrske Povecanje produktivnosti programera

- Problemi koji se cesto ponavaljaju resavaju se po standardizovanom uzorku

- ponovna iskoristivost postojeceg koda- bolja iskoristivost postojeceg programskog koda modularizacijom i jasnim

interfesjom- postepeni razvoj – od malih/jednostavnih do velikih/slozenih sistema- bolja kontrola slozenosti i troskova odrazavanja- bolje razumevanje problema

Terminologija koriscenja kod definisanja problema ima odraz na slozenost programske podrske

Metode analzie i oblikovanja programske podrske Metoda: proces izrade skupa modela koji opisuju elemente i ponasanje sistema, uz

koriscenje dobro definisane notacije Metodologija: skup metoda koje se primenjuju tokom razvoja programske

podrske, a koje poseduju zajednicki idejni pristup oblikovanje odozgo prema dole (top – down design)

prilagodjeno strukturiranim programskim jezicima (glavni program, funkcije) zasad je jos najveci deo postojece programske podrske oblikovan uz pomoc ovih

metoda podatkovno orijentisano oblikovanje (data – driven design)

preslikava ulaz sistema na izlaz objektno orijentisano oblikovanje (object – orijented design)

sistem razlaze na objekte koji medjusobno komuniciraju

Dekompozicija Algoritamska dekompozicija

- problem razlaze na niz dogadjaja ili funkcija Objektno – orijentisana dekompozicija

- definise povezanost i medjusobnu komunikaciju medju objektima u sistemu

Vrste programskih paradigmi (obrazaca) proceduralno orijentisana algoritmi logicki orijentisana ciljevi, predikatni racun orijentisana funkcija definicije i pozivi funkcija orijentisana pravilima ako – tada pravila orijentisana ogranicenjima odnosi medju varijablama objektno orijentisana klase i objekti

Page 5: Metode programiranje 1. - 5. predavanja

3. PREDAVANJE 13.3.2013.

Objektno orijentisano programiranje je odgovor na tzv. krizu softvera.OOP pruza nacin za resavanje (nekih) problema softverske proizvodjnje.Softverska kriza je posledica sledecih problema proizvodnje softvera:

1. Zahtevi korisnika su se drasticno povecali. Za ovo su uglavnom “krivi” sami programeri: oni su korisnicima pokazalai sta sve racunari mogu, i da mogu mnogo vise nego sto korisnik moze da zamisli. Kao odgovor, korisnici su poceli da traze mnogo vise, vise nego sto su programeri mogli da postignu.

2. Neoplhodno je povecati prduktivnost programera da bi se odgovorilo na zahteve korisnika. To je moguce ostvariti najpre povecavanjem broja ljudi u timu. Konvencionalno programiranje je nametalo projektovanje softvera u modulima sa relativno jakom interakcijom, a jaka interakcija izmedju delova softvera koga pravi mnogo ljudi stvara haos u projektovanju.

3. Produktivnost se moze povecati i tako sto se neki delovi softvera, koji su ranije vec negde korisceni mogu ponovo iskoristiti, bez mnogo ili imalo dorade. Laku ponovnu upotrebu koda (software reuse) tradicionalni nacin programiranje nije omogucavao.

4. Povecani su drasticno i troskovi odrzavanja. Potrebno je bilo naci nacin da projektovani softver bude citljiviji i laksi za nadogradnju i modifikovanje. Primer: cesto se desava da ispravljanje jedne greske u programu generise mnogo novih problema; potrebno je “lokalizovati” realizaciju nekog dela tako da se promene u realizaciji “ne sire” dalje po ostatku sistema.

Treadicionalno programiranje nije moglo da odgovori na ove probleme, pa je nastala kriza proizvodnje softvera. Povecane su rezije koje prate proizvodnju programa. Zato je OOP dosao kao odgovor.

Sta se menja uvodjenjem OOP?

Jezik C++ nije cisti objektno orijentisani programski jezik koji bi korisnika naterao da ga koristi na objektno orijentisani nacin. C++ moze da se koristi i kao “malo bolji C”, ali se time nista ne dobija (cak se i gubi). C++ treba koristiti kao sredstvo za OOP i kao smernicu za razmisljanje. C++ ne sprecava da se pisau losi programi, vec samo omogucava da se pisu mnogo bolji programi.

1. OOP uvodi drugaciji nacin razmisljanja u programiranje!2. U OOP, mnogo vise vremena trosi se na projektovanje a mnogo manje na samu

implementaciju (kodovanje).3. U OPP razmislja se najpre o problemu, ne direktno o programskom resenju.4. U OOP razmislja se o delovima sistema (objektima) koji nesto rade a ne o tome

kako se nesto radi (algoritmima).5. U OOP, paznja se prebacuje sa realizacije na medjusobne veze izmedju delova.

teznja je da se te veze sto viseredukuju i strogo kontrolisu. Cilj OOP je da smanji interakciju izmedju softverskih delova.

Page 6: Metode programiranje 1. - 5. predavanja

Objektno programiranje

1. Problemi kompatibilnosti, kontinuiteta i ponovnog koriscenja

Problem KOMPATIBILNOSTI je direktna posledica algoritamske orijentisanosti izrade programa. Primera radi, ako razliciti timovi realizuju razlcitie potprograme jednog programa, oni jednu vrstu podataka mogu definisati kao razlicite strukture i tada se svi potprogrami ne bi mogli implementirati u jedinstvern program. Dakle, postoji potreba da se na pocetku definise i naprave sve strukture podataka i tek onda pristupi izradi algoritma.

Problem KONTINUITETA zahteva da se moraju praviti programi za dugotrajnu upotrebu, dakle, da to bude jedan projekat koji ce se vremenom nadogradjivati, jer da bi projekat trajao na trzistu, u njega se moraju unositi izmene (tj. da se prave verzije). Ove izmene najcesce znace uvodjenje novih f-ja, sto je izuzetno nezgodno raditi kod algoritamskih orijentisanih programa jer je skoro nemoguce uvek menjati algoritam programa, dok je ove izmene dosta lako naciniti ukoliko se one unose u strukturu podataka, pri cemu algoritam programa ostaje skoro netaknut.

Problem MOGUCNOSTI VISESTRUKE UPOTREBE (reusability) zahteva da se napsiani softver moze koristiti ponovo vise puta, s tim da se dodaju neke izmene. Primer: problem izrade prozora – da se prozor napravi jednom i da se svi ostali prozori realizuju preko ovog postojeceg ubacivanje nekih datoteka. Ovaj problem je NEMOGUCE ostvariti algoritamski.

Istorijat razvoja C++

C++ je najvazniji programski jezik kada je rec o razvoju softvera visokih performansi Sintaksa ovog jezika postala je standard i u drugim programskim jezicima a ideje koje su koriscenje tokom njegovog dizajniranja cesto se srecu u racunarstvu.

... C++ je projektovao Danac Bjame Stroustrup 1979. godine. Pre toga, on je radio na svom doktoratu na Kembridzu gde je proucavao distribuiranu obradu (paralelno programiranje za vise procesora istovremeno). Pri tom je koristio jezik Simula, koji je posedovao neke vazne osobine koje su ga cinile pogodnim za taj zadatak; na primer, podrzavao je pojam klasa, tj. strukutra koje objedinjuju podatke i f-je za rad sa njima.... 1973. Stroustrup je prvo nazvao jezik “C sa klasama” a onda ga je 1983. preimenovao u C++.

4. PREDAVANJE 20.3.2013.

Uvod u Metodologiju

Kroz istoriju programerske struke pojaviljivale su se tri metodologije:1. Kompozitna metodologija – nastaje sa pojavom FORTRAN-a I trajala je do 60-

tih godina proslog veka.

Page 7: Metode programiranje 1. - 5. predavanja

2. Strukturirana metodologija – je metodologija koja nastaje posle kompozitne I zasnovana je na FOTRAN-u I COBOL-u I traje do kraja 70-tih godina dvadesetog veka.

3. Objektna metodologija – koja nastaje krajem 70-tih I koja je I danas dominantna metodologija.

Metodologije su se medjusobno smenjivale I menjale zbog porasta kompleksnosti programa, prvenstveno zbog naglog razvoja hardvera koji je pruzao svoj maksimum tek kada je bio pracen odgovarajucim softverom. Kompleksnost programa nije tako lako resiti, U sesavanju nekih problema programeri su dosli do neke odredjene granice, programerskog “plafona”, kada ni njihovo umece ni programski jezik nisu mogli resiti probleme I tada se pribeglo promeni metodologije. Npr. Struktuirano programiranje se nije moglo izboriti sa problemom korisnickog interfejsa I tada je objektna metodologija I objektno programiranje postalo dominantno.Sturkturirano I kompozitno programiranje su srodnije medjusobno neko sa objektnim programiranjem, pa se zajednickim imenom zovu proceduralno programiranje.

Dekompozicija, razlike izmedju metodologija

Jedino sredstvo sa kojim se borimo sa kompleksnoscu programa jeste dekompozicija. Ove tri metodoligije se sustinski razlikuju po vrsti dekompozicije.Kompozitno programiranje je izvedeno tako da se dekompozicija vrsi na bazi potprograma. Npr. Ako imamo problem mnozenja matrice vektorom Ax = b, kompozitni programmer odmah razmislja sta je u ovom problemu dovoljno komplikovano da odradi preko potprograma a sta je dovoljno jednostavno da ide u glavni program. U resavanju ovog problema se pojavljuje inverzna matrica sto je ocigledno dovoljno komplikovano da se inverzija matrice nadje kao potprogram, dok je drugi potprogram u stvari unos matrice jer je u to vreme on bio komplikovan zbog ogranicene velicine vrste na busenim karticama koje su tada bile u upotrebi. Ostatak je bio program. Redosled potprograma nije bitan ali uvek se prvo pristupalo najtezem potpprogramu zbog testiranja masine, jer ako je taj potprogram mogao da radi onda je masina bila dovoljno jaka da pokrene ceo program.

Page 8: Metode programiranje 1. - 5. predavanja

Kompozitno programiranje je nasledjeno od strane strukturiranog programiranja koje postaje dominantno. Kod njega je uvedeno vreme kao komponenta. Npr. Na istom primeru mnozenja matrice vektorom, programmer trazi resenje I polazi upravo od resenja. On se pita sta program treba prvo da radi? Npr. Treba prvo da se obavi ulaz, pa trazenje vektora x, pa izlaz. Ovo je sekvencijalna dekompozicija I potpuno se odrzava u vremenu. Ona je sekvencijalna jer se jedan deo problema resava tek kada je prethodni u potpunosti resen.

Problem strukturirane metodologije

Strukturirano programiranje je imalo takoreci “ugradjenu naprslinu”. Ovakav nacin dekompozicije je u stvari dekompozicija algoritma, ali se onda postavlja pitanje sta je sa strukturama podataka? Ova metodologija to ne resava. To je u stvari osnovni problem ove metodologije, to sto se bavi samo dekompozicijom algoritma. Iz toga proistice problem kompatibilnosti. To je problem koji nastaje kada neki tim radi na resavanje problema I jedan programmer pravi ulazni potprogram (npr. Unos matrice I mora da je sazme da bi stala u memoriju), a aneki drugi programmer koji radi sa drugim potprogramom ne koristi istu strukturu podataka (npr. Inverziju kompletne a ne sazete matrice) I tu nastaje problem. Ovaj problem se vidi tek kod velikih projekata kada I mali problem moze da ima katastrofalne posledice. Tj. U opstem slucaju nema garancije da ce se za razlicite potprograme koristiti iste structure podataka.Drugi problem jeste problem kontinuiteta (prosirivosti). Svaki softver sa vremenom prosiruje I nadogradjuje da bi opstao na trzistu. Strukturirano programiranje ne garantuje da ce softver biti prosiriv tj. Ne resava ga uopste jer je vrlo tesko raditi izmene kod algoritamsko orijentisanih programa, za razliku od unosa izmena u strukturu podataka.Treci problem je problem mogucnosti visestruke upotrebe. On nastaje kada hocemo neke potprograme da koristimo uvek kada nam zatrebaju tj. Hocemo da oni budu

Page 9: Metode programiranje 1. - 5. predavanja

univerzalni. Nacini na koji su organizovane biblioteke potprograma je postao ogranicenje u radu sa potprogramima.

5. PREDAVANJE 27.3.2013.

Temelji objektnog programiranjaObjektna metodologija kao i svaka druga metodologija stoji na odredjenim principima tj. ima odredjene osnove. Ona se zanisma na enkoliko osnovnih principa koji su bili poznati cak i pre objektnog programiranja u rudimentalnom obliku samo sto tada nisu igrali bitnu ulogu u izradi softvera. Osnovni elemenit objektnog programiranja su: apstrakcija i skrivanje informacija, inkapsulacija i modularnost, polimorfizam, veze izmedju klasa a posebno nasledjivanje.Apstrakcija ili apstrahovanje je veoma opsti postupak, na kome je zansovana nasa logika, poznat i hiljadam godina pre nastanka objektne metodologije i predstavlja izdvajanje odnosno uocavanje bitnog i zanemarivanje nebitnog. Postoji i u strukturnom programiranju gde svaki obucen programer vidi potprograme kao apstraktivne elemente.Skrivanje informacija je odavno jedan od kljucnih principa objektnog programiranja. Razlog skrivanja informacija je smanjivanje kompleksnosti koju programer mora da razume. Takodje ovaj princip podrazumeva da klijentu ne moraju biti poznati detalji realizacije programa i time smanjuje kolicinu informacija koju programer – klijent mora da drzi u glavi.Inkapsulacija je tehnika kojom se pri realizaciji objedinjavaju deskriptivne i dinamicke osobine modela entiteta (u nasem slucaju objekata) postujuci pri tome princip skirvanja informacija.Modularnost je tehnika razlaganja slozenog softverskog sistema u domenu implementacije na jednostavnije elemente koje imaju unutrasnju logiku.Polimorfizam je osobina ili pak mogucnost da se softverska komponenta ponasa zavisno od konteksta ili okolnosti.Veze izmedju klasa su jedan od bitnih elemenata, jer vrlo retko klase potaje kao izovolane, vec su veoma ceste veze sa drugim klasama. Vezama se ostvaruje uredjenje apstrakcija. Najvecu vaznost ima nasledjivanja.

Razlike C i C++ Void

Ne mora se pisati void kao argument funkcijeC jezik C++int main (void) int main(){ { return 0;} }

Komentari C * C++

/* return square */ * //return squareint f (int n) {...}

Page 10: Metode programiranje 1. - 5. predavanja

/* int i, s=0; * int f (int n) {...}

/ return nn; /*easier*/ /retrurn nn; /much easier

RAZLIKE U ODNOSU NA JEZIK Casm, auto, bool, catch, cllass, const_class, delete, dynamic_class, explicit, false, friend, inline, mutable, namespace, new, operator, private, protected, public, reinterpret_cast, static_cast, template, this, throw, true, try, typeid, typename, using, virtual, wchar_t

Definisanje promenljivih Naredbe deklaracija mogu da se koriste bilo gde u programu a ne samo na

pocetku bloka Na ovaj nacin je moguce deklaraisati promenljivu neposredno pre njene primene i

na istom mestu joj dodeliti pocetnu vrednost

Deklarisanje promenljivihKod jezika C sve varijable se moraju deklarisati na vrhu funkcijeKod jezika C++ radi drugacije i deklarisu se promenljive onda kad zaista trebaju

FOR petlja C * C++

for (i=0;i<n;i++) for (int i=0;i<n;i++)Za stvari koje vam trebaju unutar petlje tu se mozeizvrsiti deklaracija

Koliko zive promenljive u C

Promenljive u C-u zive samo u u odredjenim zagradama u zavistnosti gde su deklarisane

Bool C * C++ Na osnovu predstavljanja Novi tip varijable, potpuno

logickih podataka operandi ravnopravansu numerickog tipa a kao rezulatat bool f (int n)obavezno vracaju vrednost jedan {ako je relacija zadovoljenaa, a if (n<0)vrednost nula u suprotnom return true;

int f (int n) return false;{ } if (n<0) ili

return 1; bool f (int n) return 0; { } if (n<0)

return true; else

Page 11: Metode programiranje 1. - 5. predavanja

return false;}

C++Prva dramaticna novost su

::Ovo nema u C.Ovo cemo vidjati na puno mestaOmogucava pristup skrivenim globalnim promenljivama

int n; //globalna promenljiva #include <cstdio>int mainJ(void) int n; //globalna{ int main()int n; //lokalna promenljiva istog {naziva int n=1; //lokalnafor (n=0; n<10;++n) {n++; int n=2; //i jos lokalnijareturn 0; printf(“%d”,n);} }Lokalna varijabla skriva globalnu }

LOS PRIMER PISANJA

C++int n; //globalna promenljivaint main(void){

for (n=0;n<10; ++n):: n++;

}Imate nacina probiti se do globalne promeljive tako da ispred naziva promenljive stavite ::.U principu treba izbegavati globalne promeljive.

Imenski prostoriImenski prostori sluze za grupisanje globalnih imena u velikim programskim sistemima. Ako se delovi programa stave u razlicite imenske prostore tada ne moze doci do konflikta sa koriscenjem imena.Opsti oblik definisanja imenskog prostora je:

namespace identifikator .... ima ostalo u skripti sa vezbi

Po standardu programskog jezika C++ je predvidjeno da sva standardna zaglavalja sve globalne identifikatore stavljaju u imenski prostor std. Standardom je predvidjeno da standardna zaglavlja ne budu u vidu tekstualnih datoteka, pa zbog toga standardna

Page 12: Metode programiranje 1. - 5. predavanja

zaglavlja ne sadrze prosirenje imena sa .h (kao sto je to slucaj u C-u). Jedno od takvih zaglavalja jeste i <iostream>. Zbog toga cemo uvek pisati na pocetku progrma:#include <iostream>using namespace std;Ukoliko ne ukljucujemo imenski prostor std za ispis promenljive x moramo pisati:std::cout<<x;Ukoliko ukljucujemo imenski prostor std za ispis promenljive x dovoljno je pisati:cout<<x;

Pretpostavljenje vrednost argumenataC C++int f (int n, int b) bool f (int n, int b=2){ {

return n%b==0; return n%b==0;} }int main (void) { int main (void) {f(10,5); f(10,5);f(9,3); f(9,3);f(8,2); f(8);} }

U programskom jeizku C++ reference su uvedene radi pojednostavljenog pisanja;Nasledivsi kompletnu sintaksu iz C-a, a samim time i pokazivace, u C++-a imaju reference koje bi u odredjenim aspektima preuzele ulogu pokaizvaca ali bile i znatno jednostavnije za upotrebu.Bitno je naglasiti da pokazivaci i reference nisu ekvivalentni u C++-u i da stavise postoje znacajne razlike: pokazivaci mogu primiti vrednost u bilo kom trenutku za vreme rada programa a reference moraju biti inicijalizovani pri konstruisanju, i ne mogu menjati vrednost.

* Pokazivaci mogu sadrzati vrednost NULL, tj. ne pokazivati ni na sta.* Reference moraju biti inicijalizovane na neku vrednost, ili ce kompajler prijavit gresku.* Pokazivaci se mogu koristiti za implementaciju nizova, matrica, dinamicku alokaciju memorije i prosledjivanje argumenata funkcije “po referenci”* Reference se mogu korisiti samo za prosledjivanje argumenata funicje po referenci* Pokazivaci koriste operator * (zvezdicu) za dereferenciranje i operator & (ampersand) za referenciranje* Reference ne koriste ni jedan od navedenih operatora, sto ih cini znatno jednostavnijim za rad* Mogu postojati pokzivaci na pokzivace

Ne mogu postojoati pokazivaci na reference

Simbolicke konstantePostavljanjem sluzbene reci const ispred tipa promenljive prilikom deklaracije dobija se prava konstantamain ()

Page 13: Metode programiranje 1. - 5. predavanja

{const int a=2;char niz[a]=”A”; //a se prihvata kao prava konstanta

}

Definisanje tipovaIdentifikatori strukutra, nabrajanja prestavljaju identifikaotre tog tipa i mogu da se koriste bez navodjenja sluzbenih reci (npr. sturct).

OperatoriU C++ se pojavljuju jos neki novi operatori:

- :: pristup globalnim promeljivama- new dodela memorije dinamickom objektu- delete oslobadjanje dodeljene moemorije - .* pristup clanu objekta pomocu pokaizvaca- ->* pristup pokazivanom clanu objekta pomocu pokazivaca

Dinamicka dodela memorije Operatori new i delete se u jeziku C++ koriste za dinamicku dodelu i oslobadjanje

dinamicki dodeljene memorije F-je malloc(), calloc(), realloc() i free() postoje i dalje ali upotreba operatora new

i delete ima prednost

Ulazna i izlazna konverzija podataka F-je printf() i scanf() postoje i dalje (ne koristimo) Uvedena su dodatna znacenja za operatore << i >> Osnovno znacenje je zadzano ali podrzavajuci preklapanja imena operatora,

postoji mogucnost da se .... U programskom jeziku C++ dodeljena su nova znacenja operatorima << i >>. Znacenje tih operatora je ostalo isto ukoliko su oba operanda celobrojne vrednoti (sluze za pomeranje levog operanda za onoliko binarnih mesta koliko je vresnot desnog operanda), medjutim ukoliko je prvi operand referenca na tekstualnu datoteku onda te operatore koristimo za ulaz/izlaz podataka.