Top Banner

of 45

Prezentacija programiranje C++

Feb 24, 2018

Download

Documents

Jovan Crnogorac
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
  • 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

    ;