Prezentacija programiranje C++
-
Upload
jovan-crnogorac -
Category
Documents
-
view
250 -
download
1
Transcript of Prezentacija programiranje C++
-
7/24/2019 Prezentacija programiranje C++
1/45
Programiranje II
Uvod
-
7/24/2019 Prezentacija programiranje C++
2/45
Softver Obini korisnik
Porast procesorske moi raunara i pojeftinjenjekomponenti omoguili su da niskobudetni korisnicimogu da priu!te sebi raunare "a posao i "abavu#
Softveri "a obine korisnike morali su da budu pisanina osnovu strategije odbrambenog programiranja$trebalo je predvidjeti korektivnu akciju "a svakuglupost koji ovi korisnici poku!aju% i morali su da sei"vr!avaju interaktivno $na osnovu neki& intuitivni&predstava%' jer se ovi korisnici nijesu mogli natjerati dapamte naredbe ili sloene procedure $ili nijesu &tjeli daplate "a takve softvere%#
(a stvar bude gora' obini korisnici su' kada su s&vatili
mo raunarski& sistema' poeli da postavljaju svevee i vee "a&tjeve#
-
7/24/2019 Prezentacija programiranje C++
3/45
Softver Proi"vo)a
softvera (a bi proi"vo)a softvera "aradio mora da i"a)e u
susret "a&tjevima korisnika $u suprotnom' preotee
mu i& drugi proi"vo)a%# *o "nai da su softverske +rme morale da br"oproi"vode nove ver"ije softvera#
,r"o - i" dva ra"loga. da bi !to prije i"a!le u susretkorisnikim "a&tjevima i da bi !to manje platile
programere $na "apadu programeri rade po satnici%# /ako su softveri bivali sve komplikovaniji i
komplikovaniji to su nove ver"ije morale pola"iti odkoda stare ver"ije i na osnovu prepravki se dola"ilo
do nove ver"ije#
-
7/24/2019 Prezentacija programiranje C++
4/45
Softver - Sadraj
Programski moduli koji su sainjavali softveresu prevas&odno bile funkcije#
Podaci nad kojima su funkcije operisale bili supo pravilu strukture$samo struktura moe dapredstavi sloeniji podatak. radnika' studenta'pro"or u gra+kom okruenju' gra+k itd#%#
Svaka funkcija koja je radila sa strukturamamorala je da "na na koji je nain strukturanapravljena $od ega se sastoji%#
0 tu lei "ec###
-
7/24/2019 Prezentacija programiranje C++
5/45
Softver - Prepravke
Prepravke softvera su bile komforne dok se prepravljajufunkcije' ali kada se prepravi jedna struktura to je "nailoda se moraju prepraviti sve funkcije koje komuniciraju sa
tom strukturom' tj# koje je koriste# Svaka prepravka funkcije se morala testirati# 1ajvei problem je to !to prepravka strukture dovodi do
nelokali"ovani& prepravki programa' odnosnonajvjerovatnije indukuje prepravku kompletnogprograma2
3edna prepravka indukuje mno!tvo drugi& prepravki' asvaka prepravka "nai mnogo testiranja#
Programeri su svoje korisno vrijeme tro!ili ne na pisanjeprograma' ve na nji&ovo testiranje222
-
7/24/2019 Prezentacija programiranje C++
6/45
Softverska kri"a
(a bi "aradile' softverske kue su na tri!tei"nosile programe koji nijesu bili dovoljno testiranii ti programi su imali mnogo gre!aka $bugs%# /upcinijesu eljeli da kupuju takve softvere ili su trailipovraaj uloenog novca#
4no!tvo softverski& +rmi je propalo# Postalo je jasno da uskoro nijedna +rma nee moi
da proi"vede iole ispravan softver "a dato vrijeme# Ovaj doga)aj se na"iva softverskom krizom# /rajem 56-ti& jedna grupa programera na elu sa
,jarne Stroustrupom dobila je "adatak da prepravisoftver "a telefonsku centralu#
-
7/24/2019 Prezentacija programiranje C++
7/45
7je!enje softverske kri"e
8rupa je radila "a 9*:* ,ell# Stroustrup je uoio da "adatak prepravke softvera (pisan u C-
u, kao i 90% sistemskog softvera tada)nije mogue obaviti u datomvremenu' na datom kompajleru i sa datim ljudstvom#
Stoga je potraio nove koncepte na kojima bi se softvermogao reali"ovati#
*ada su ve postojali (vie od 10 godina)objektno-orjentisani(OO) jezii(primjer je !ma""ta"k), ali nijesu bili popularni "bogsloenosti#
Stroustrup je do!ao na spasonosnu ideju. nakalemiti OOkoncepte na postojei $;% kompajler# (obio je kombinacijujednostavnosti i moi alatke kojom je rije!io svoj problem(piu#i novi kompaj"er),ali i itavu softversku kri"u#
-
7/24/2019 Prezentacija programiranje C++
8/45
OOP $programiranje% -
/oncepti Stroustrup je postigao da OOP nije "amjena "a
strukturno programiranje' ve njegovo pro!irenje#*okom vremena emo nauiti da je ovo pro!irenje
ogromno i da "asjenjuje mnogo toga !to smo do sadauili# Ovdje emo pomenuti samo osnovne koncepteOOP koje emo na primjeru programskog je"ika ;
-
7/24/2019 Prezentacija programiranje C++
9/45
OOP - koncepti
Ponekad se kae da su u programiranju najvanije tristvari. reusing' reusing i reusing' odnosno mogunostponovnog kori!enja koda#
&pstrakijaOvo je prvi koncept po svojojlogici# 9pstrakcija je modelovanje dijelaproblema ra"matranjem odgovarajueg tipapodataka# 1pr# ako je program ve"an "a radstudentske slube' Student je dio problema i tajproblem treba rije!iti modelovanjem Studenta#*aj model se kreira kao tip podataka $klasa%'odnosno tip podataka nam je dio rje!enjaproblema# Ovo je jedan od elemenata OOP veliki dio problema se rje!ava u okviru modelapodataka#
-
7/24/2019 Prezentacija programiranje C++
10/45
OOP /oncepti
'as"jeivanje/reirali smo jednu klasu' recimo-Student# 4e)utim' sistem posjeduje i podatke tipa(iplomac koji su ra"liiti unekoliko od ove klase#3edan nain rje!avanja problema je da reali"ujemodvije klase sa gotovo istim operacijama koje se sanjima mogu vr!iti# Ovo je lo!e' jer' ako je bilo kojaoperacija lo!e reali"ovana' mi prepravke moramoobaviti na vi!e mjesta u kodu' ime se gube nekedobre strane OOP' a to je lokali"ovanoprepravljanje gre!aka# Umjesto toga' mi moemorei da klasa (iplomac $na"iva se i"vedenomklasom% naslje)uje sve i" klase Student $na"iva seosnovnom klasom% u" neke dopune i i"mjene#
-
7/24/2019 Prezentacija programiranje C++
11/45
OOP /oncepti
rijate"jstvo=i!e klasa moe da radi na rje!avanjuistog problema# Ponekad postoji potreba da one naneki nain ra"mjenjuju podatke# (a bi se i"bjeglougroavanje enkapsulacije (odnosno situaija da k"asa svimadozvo"i uvid u svoju rea"izaiju),uvodi se konceptprijateljstva po kome klasa samo odre)enim klasama$i funkcijama% moe do"voliti pristup svojoj reali"aciji#
rek"apanje operatoraOOP i ;
-
7/24/2019 Prezentacija programiranje C++
12/45
OOP /oncepti
o"imor+zamOvo je jedan od najsloeniji& $inajmoniji&% koncepata OOP# 3edan dio koda u OOPmoe da se pona!a ra"liito u "avisnosti od toga nakakve se podatke primjenjuje# /oncept je sloen ireali"uje se preko. preklapanja funkcija' naslje)ivanja$posebno koncepta virtuelni& funkcija% i preko !ablonaklasa i funkcija# /oncept emo detaljno ra"matrati kad"a to do)e vrijeme#
zuzeiU programiranju' i"u"etak je doga)aj koji semoe predvidjeti' a ne moe i"bjei $nema papira'djeljenje sa nulom' itd#%# OOP i ;
-
7/24/2019 Prezentacija programiranje C++
13/45
Organi"acija kursa
1akon ovog kratkog uvoda' prela"imo nai"uavanje koncepatakoje je ;
-
7/24/2019 Prezentacija programiranje C++
14/45
7a"like ; i ;
-
7/24/2019 Prezentacija programiranje C++
15/45
7a"like kod funkcija 1eobjektne ra"like ;-a i ;
-
7/24/2019 Prezentacija programiranje C++
16/45
Inline funkcije
(a bi se i"bjeglo gubljenje vremena na i"vr!avanjekratki& funkcija' u ;
-
7/24/2019 Prezentacija programiranje C++
17/45
Pobolj!anja kod funkcija
9ko kompajler i" nekog ra"loga ne moe da kreirainline funkciju' odnosno da je ugradi u kod' kreirae jekao standardnu funkciju# Ostala pravila kod inlinefunkcija su ista kao i kod standardni& funkcija#
(rugi vaan koncept uveden kod funkcija u ;
-
7/24/2019 Prezentacija programiranje C++
18/45
Podra"umijevani argumenti
f-ja Pret&odni problem se moe rije!iti pisanjem
mno!tva funkcija gdje bi svaka radila sa svojim g
ili pisanjem jedne funkcije koja bi imala dvaargumenta - masai g# (rugi nain je bolji' ali ne iidealan' jer bi stalno funkciju po"ivali kaote"ina$m' H#5A%' odnosno u veini sluajeva senepotrebno "amarali sa pisanjem H#5Akoje je
uobiajeno# ;
-
7/24/2019 Prezentacija programiranje C++
19/45
(efault argumenti - Pravila
(akle' ako se i"ostavi podra"umijevani argumentonda se u"ima podra"umijevana vrijednost i"
"aglavlja f-je# Junkcija moe imati vi!e podra"umijevani&
argumenata' ali svi moraju biti na kraju# 1pr#int fun$int a' int b>K' int c>L% Ereturn a
-
7/24/2019 Prezentacija programiranje C++
20/45
Preklapanje funkcija
4noge funkcije rade prirodno sline stvari# 7ecimo'maksimum dva cijela broja je slina funkcija kao
maksimum dva realna broja' a ova je slina kaomaksimum ni"a realni& brojeva# U programskom je"iku ; smo reali"ovali funkcije po
pravilu jedan problem - jedna funkcija' odnosno $!to jegora formulacija% vi!e slini& problema - vi!e slini&
funkcija# ;
-
7/24/2019 Prezentacija programiranje C++
21/45
Preklapanje imena f-ja -
Primjer /reirajmo tri preklopljene f-je.
int maM$int a' int b% Ereturn $ab%a.b?F
Doat maM$Doat a' Doat b%Ereturn $ab%a.b?FDoat maM$Doat Ca' int n% EDoat maM>a6Q?for$int i>A?i@n?i
-
7/24/2019 Prezentacija programiranje C++
22/45
7a"rje!enje po"iva
Pret&odni primjer je demonstrirao situaciju kada postoji potpunopoklapanje argumenata po"vane funkcije sa pojedinim njenimreali"acijama#
Postoji problem !to se de!ava ako takvog poklapanja nema# Procedura koja se provodi i koja odluuje koja se funkcija "apravo
po"iva na"iva se ra"rje!enje po"iva# 8rubo pravilo. "a svaku funkciju datog imena broji se koliko ima
potpuni& preklapanja sa tipovima "adati& argumenata# 9ko
postoji jedna funkcija koja ima najvi!e preklapanja po"iva se ona'a ako ima vi!e od jedne sa najveim brojem preklapanjaprovjerava se koja od nji& ima najvei broj preostali& argumenatakoji se konver"ijama mogu prevesti u traene argumente# 9ko sena)e jedna funkcija - po"iva se ona' a ako ima vi!e od jedne sa
podjednako kvalitetnim argumentima dola"i do prekidai"vr!avanja programa i gre!ke usljed dvosmislenosti#
-
7/24/2019 Prezentacija programiranje C++
23/45
7a"rje!enje po"iva
1pr# po"iv maM$K'K#R%e dovesti do gre!ke po!to dvije funkcijeimaju po jedno potpuno poklapanje argumenta i jedno koje sestandardnim konver"ijama moe i"vr!iti#
7a"rje!enje po"iva se dodatno komplikuje ako imamo funkcijesa podra"umijevanim argumentima#
Postupak ra"rje!enja po"iva je detaljno anali"iran u knji"i od4ilieva na stranama AHH-K6L#
4i emo to ovdje preskoiti# Problem postaje dodatno uslonjen ako kompajler ne prati
preporuke 91SI komiteta# 1pr# na! kompajler e prilikompo"iva maM$K'K#R%po"vati funkciju koja prima dva Doat-a jer todoivljava kao bolju situaciju u kojoj ne dola"i do odsjecanja
necjelobrojnog dijela prilikom prenosa argumenta#
-
7/24/2019 Prezentacija programiranje C++
24/45
7a"rje!enje po"iva - Savjet
1ajbolje je da do pomenuti& problema u ra"rje!enjupo"iva i ne do)e#
1aime' ako veoma sline funkcije reali"ujemo kao !tosmo to uradili sa prve dvije' mi obije operacijemoemo odraditi sa drugom funkcijom koja sastandardnom konver"ijom moe da primi i argumentekoji su cijeli brojevi i da' ako su argumenti cijelibrojevi' vrati re"ultat koji je su!tinski cijeli broj# Stogabi u na!em sistemu i"brisali prvu funkciju i ne bi imaliproblem sa ra"rje!enjem#
,riljivim di"ajnom funkcija i"bjeiete problem
tumaenja ra"rje!enja po"iva funkcija#
-
7/24/2019 Prezentacija programiranje C++
25/45
7a"rje!enje po"iva
9ko funkcije imaju iste argumente' a ra"liit tip re"ultata' doi euvijek do gre!ke u kompajliranju (i"i greke u izvravanju)po!to se te dvijefunkcije ne mogu ra"dvojiti argumentima i nikada se ne moeprotumaiti koja e se po"vati222
Junkcije sa istim imenima moraju se ra"likovati barem po jednomargumentu222
U ;-u smo vidjeli da ime funkcije moe posluiti kao njena adresa# *onije bio problem jer je funkcija morala da ima jedinstveno ime i to ime
je moglo da se upotrijebi kao pristupna adresa kodu funkcije#
U ;
-
7/24/2019 Prezentacija programiranje C++
26/45
/omentari i konstante
Pored komentara u ;-u koji poinje sa BCi"avr!ava sa CBi moe se prostirati preko vi!eredova' ;
-
7/24/2019 Prezentacija programiranje C++
27/45
/onstante - Pretprocesor
Pa gdje se konstante ra"likujuU upotrebi2U ;
-
7/24/2019 Prezentacija programiranje C++
28/45
Upotreba Tde+ne
Pretprocesorska direktiva Tde+ne u ;-u je imala trinamjene. makro"amjena $npr# Tde+ne 49G A66' kojom se svaka pojava
49Gu kodu programa prije poetka kompajliranja mijenja saA66# Problem je bila promjena na slijepo' jer se 49G49Gmijenjalo sa A66A66' kao i to !to se na ovaj nain u i"ra"imagdje se pojavljuje makro 49G ne moe vr!iti provjeraispravnosti tipova# Umjesto ovoga koristiti globalnu konstantu.const int 49G>A66?%#
makrora"voj $npr# Tde+ne "bir$a'b% a
-
7/24/2019 Prezentacija programiranje C++
29/45
Upotreba Tde+ne
*rea upotreba Tde+ne je preivjela. makrode+nicija tipa Tde+ne 49G# 1a ovaj nain se u
program uvodi ime 49G# 1ije pravilo' ve praksa' daimena makroa poinju sa podvlakom# Obino se navodi ubiblioteci klasa ili funkcija# 1pr# napravimo bibliotekuklasa ili funkcija koja koristi prvu biblioteku# Vatim pi!emoprogram koji ukljuuje obije biblioteke preko naredbe
Tinclude# Programer koji koristi biblioteke ne mora da "nakako su one kreirane# 4e)utim' po!to su funkcije ili klaseprve biblioteke ukljuene i u drugu biblioteku do!lo bi doprekida programa jer imamo dva puta de+nisane funkcijesa istim imenom i istim argumentima $ili dvije klase saistim na"ivom%' !to nije do"voljeno#
-
7/24/2019 Prezentacija programiranje C++
30/45
/ori!enje de+nisani&
makroa Programi esto imaju pitanja tipa.
Tifndef 49G
Tinclude @biblsamaM#&Tendif
Tde+ne ima jo! neke primjene koje mogu da sekoriste i u savremenim ; kompajlerima' astandardi"ovane su tek nakon pojave ;
-
7/24/2019 Prezentacija programiranje C++
31/45
Specijalni tipovi
makrora"voja Prvi specijalni tip makrora"voja je.
Tde+ne napisistring$M% puts$TM%U programu. napisistring$ssss%se mijenja sanaredbom puts$ssss%#
(rugi specijalni tip makrora"voja je.Tde+ne abc$M% 7TTMTT;
/ao konani dodatak prii o
pretprocesoru kaimo da savremenikompajleri do"voljavaju i kori!enje odre)eni&ugra)eni& makrokonstanti. (9*0 $tekuidatum? da' u pravu ste' makrou pret&odi i "a njimslijede dvije podvlake%' *I40 $tekue vrijeme%'
WI10 $linija koda%' JIW0 $fajl koji se i"vr!ava%#
*araba "apravo "nai dase argumentmakrora"vojatretirakao string#
&rgument makroamo6e s"u6iti zaformiranje raz"iiti/identi+katora,reimo 71C, 78Citd
-
7/24/2019 Prezentacija programiranje C++
32/45
Stringovi
Programski je"ik ;
-
7/24/2019 Prezentacija programiranje C++
33/45
Jormati"ovani IBO
; i ;
-
7/24/2019 Prezentacija programiranje C++
34/45
iostream#&
1aredbe (nijesu naredbe, a"i i/ za poetak mo6emo tako zvati)"a formati"ovani ula"Bi"la" u biblioteci iostream#&
su. cin$ita se si-in%
i cout$ita se si-aut%
# cin se koristi "a standardni ula".cinabc?
1a ovaj nain se ono !to se unese sa tastature
smije!ta redom u promjenljive a' b' ckoje mogubiti bilo kog tipa podataka ukljuujui i string$poka"iva na ni" karaktera%# Vnai' ne koristimo adresu kaokod scanf-a i ne obja!njavamo kojeg je tipapodatak $Xd%#
-
7/24/2019 Prezentacija programiranje C++
35/45
1aredba cout
1aredba cout se koristi "a standardni i"la".cout@@a@@1ekitekst@@K@@a
-
7/24/2019 Prezentacija programiranje C++
36/45
9lokacija i dealokacija
1iko nam ne brani da i dalje koristimo naredbe mallocifreei" standardnog "aglavlja alloc#
4e)utim' programski je"ik ;ne[ int? BB"au"ima memoriju "a jedan cijeliBBbroj na koji poka"uje p
int Cp>ne[ int$L%?BBisto kao gore u" inicijali"aciju brojana BBkoji poka"uje p na cijeli broj L
int Cp>ne[ intR6Q?BBalocira memoriju "a R6 cijeli&brojeva'
BBa p poka"uje na poetak ni"a
-
7/24/2019 Prezentacija programiranje C++
37/45
9lokacija i dealokacija
9lokacija je' !kolski reeno' obave"no praenaprovjerom alokacije' ali' grubo govorei' savremeni;
-
7/24/2019 Prezentacija programiranje C++
38/45
7eference
1auili smo. funkcija se moe po"vati povrijednosti $call bN value% i po referenci#
1auili smo. programski je"ik ; ne posjedujereferencu' pa se po"iv po referenci simulirapreko poka"ivaa#
Stariji programski je"ici $recimo Pascal%
posjeduju referencu# Programski je"ik ;
-
7/24/2019 Prezentacija programiranje C++
39/45
7eferenca u ;L' jer su to samo dva
imena "a isti objekat# Uoimo da referenca mora bitiinicijali"ovana2nekim memorijskim objektom' "a ra"likuod poka"ivaa koji ne mora# (alje' pristup referenci ne"a&tjevanavo)enje operatora$nijesmo pisali :j>L%#
-
7/24/2019 Prezentacija programiranje C++
40/45
7eference i poka"ivai
7eferenca ne moe da promjeni objekat na koji seodnosi' niti da pokae na 1UWW objekat# 1pr#
int i>L?int :j>i'k>K? BBj>L jer je isto kao i
j>k? BBi>K jer je isto !to i ji>? BBj>' ali k i dalje ostaje K'
jer nije to j 7eferenca se rijetko koristi u programu (jedino ako
jedan dio programera koji rade na programu neku promjen"jivu
zovu na jedan nain, a drugi dio na drugi nain)ve jeprevas&odna primjena kod funkcija#
-
7/24/2019 Prezentacija programiranje C++
41/45
7eference i funkcije
1pr# dio glavnog programa. int a>K'b>L? fun$a'b%? 1eka je funkcija. void fun$int i'int :j% Ei
-
7/24/2019 Prezentacija programiranje C++
42/45
7eferenca kao re"ultat
funkcije Junkcija moe da vrati re"ultat koji je referenca# 1pr#
int :f$int :i% Ereturn i?F
Primjer glavnog programa.void main$%Eint M? f$M%>A?F
Ovo je nevjerovatan po"iv# Suprotno onome !to smo dosada uili' funkcija $njen re"ultat% moe biti na lijevojstrani ako funkcija vraa referencu# U ovom sluajufunkcija vraa argument funkcije $M% i to stvarni objekattako da je re"ultat ove operacije M>A?# Va sada je ovosamo atrakcija' ali emo ovo upotrebljavati dosta kasnijeu na!em kursu# =e "a nekoliko nedjelja koristiemore"ultat koji je referenca da bi u!tedjeli na kopiranjuobjekata prilikom vraanja re"ultata#
Ova oznaka znai da funkijavra#a kao rezu"tat
memorijski objekat koji morabiti a"oiran u pozivaju#emmodu"u (reimo u g"avnomprogramu)
-
7/24/2019 Prezentacija programiranje C++
43/45
7eference (odatna
pravila 1e moe se deklarisati.
referenca na referencu?
referenca na polje bitova? referenca na void? poka"iva na referencu#
-
7/24/2019 Prezentacija programiranje C++
44/45
s[itc&-case - enum
U ;-u' argument naredbe s[itc&mogao je biti samo cijelibroj $ili cjelobrojni i"ra" ili ne!to !to se moe konver"ijamadovesti do cijelog broja%# U ;6' crno>^' "eleno>L' plavo>AF?
Osnovna ra"lika je da ime nabrajanja koje po pravilu
nijesmo ni navodili ni koristili u ;-u $u ovom sluaju color%ovdje po pravilu navodimo i esto koristimo# 1aime' colorje sada pored skupine cjelobrojni& konstanti i pravi tippodatka $mogue je deklarisati color a?% koji moe u"etisamo navedene vrijednosti i koji moe biti argument ire"ultat funkcije. color fun$color M' int a%EBCCBF#
-
7/24/2019 Prezentacija programiranje C++
45/45
eMit i abort
Junkcija eMit$standardno "aglavlje stdlib#&%"atvara sve otvorene fajlove i vraa cjelobrojnukonstantu kao re"ultat operativnom sistemu# U
;