Odabrana poglavlja programskog inenjerstva
razvoj programa
Marko Mija Ivan vogor Boris Toma
FAKULTET ORGANIZACIJE I INFORMATIKE, VARADIN
KATEDRA ZA RAZVOJ INFORMACIJSKIH SUSTAVA
INTERNA SKRIPTA
Skriptu pripremili:
Marko Mija
Ivan vogor
Boris Toma
Odabrana poglavlja programskog inenjerstva
razvoj programa
Skriptu uredila:
Lea Kuzminski
I
Predgovor
Skripta Odabrana poglavlja programskog inenjerstva razvoj programa originalno je namijenjena
studentima tree godine preddiplomskog studija kao materijal za praenje vjebi iz kolegija
Programsko inenjerstvo. Skripta svakako nije ograniena na navedenu publiku ve se moe primijeniti i
na viim godinama te drugim fakultetima.
Nastanak skripte voen je idejom povezivanja teorijskih saznanja programskog inenjerstva s
inenjerskom disciplinom programiranja programsko inenjerstvo, vie je od programiranja. Zbog
toga razloga sadraj je podijeljen u tri logike cjeline: I) teorijske osnove i objektno orijentirana
paradigma, II) razumijevanje procesa i razvoj poslovne logike i III) uvoenje u rad i trendovi programskog
inenjerstva. U prvom dijelu naglasak je na razvojnoj okolini, osnovama programiranja, rukovanjem
programskim pogrekama te dokumentiranju i verzioniranju programskog koda. Drugi dio ove skripte
posveen je povezivanju poslovnog procesa i poslovne logike s arhitekturom programa. Naglasak je
stavljen UML (dijagram klasa, aktivnosti i sekvenci) modeliranje, modeliranje baze podataka i
povezivanje s istom. Trei dio koncentriran je na specifinosti odabrane platforme (u ovoj skripti koristi
se .NET Framework iako je naglasak na paradigmi stoga se vrlo lako mogu koristiti i druge tehnologije)
te korake koji slijede nakon implementacije programskog rjeenja.
Iza ove skripte stoje stotine stranica materijala koje su kroz godine ispisali suradnici na kolegiju
Programsko inenjerstvo, Fakulteta organizacije i informatike. Nae iskustvo i iskustvo naih
prethodnika, pokuali smo to vjernije pretoiti u novu i cjelovitu skriptu. Nadamo se da e itatelju biti
od koristi. Umjesto pojedinanim zahvalama svima koji su doprinijeli, direktno ili indirektno, naa je
zahvalnost predana svakome tko ita ovaj tekst.
Let us change our traditional attitude to the construction of programs. Instead of imagining that our
main task is to instruct a computer what to do, let us concentrate rather on explaining to human beings
what we want a computer to do.
- Donald Knuth -
U Varadinu, veljaa 2014
Autori
II
Sadraj Predgovor ................................................................................................................................................. I
1 . Integrirano razvojno okruenje - IDE ........................................................................................... 1
1.1. Uvod ........................................................................................................................................ 2
1.2. to je IDE? ................................................................................................................................ 2
1.3. .NET ......................................................................................................................................... 6
1.4. MSDN ....................................................................................................................................... 7
1.5. Visual Studio 2012 Prvi pogled ........................................................................................... 10
1.6. C# Hello world ....................................................................................................................... 15
1.7. Napredne mogunosti .NET-a i dodatni materijali ................................................................ 17
1.8. Zadaci..................................................................................................................................... 18
1.9. Vie informacija o temi .......................................................................................................... 18
1.10. Izvori .................................................................................................................................. 19
2 . Kratak pregled objektno orijentiranih koncepata ..................................................................... 20
2.1. Uvod ...................................................................................................................................... 21
2.2. Imenovanje ............................................................................................................................ 21
2.3. Tipovi podataka ..................................................................................................................... 23
2.4. Sekvenca, selekcija i iteracija ................................................................................................ 28
2.5. Pitanja i zadaci ....................................................................................................................... 33
2.6. Vie informacija o temi .......................................................................................................... 34
3. Rukovanje grekama u programskom kodu .................................................................................. 35
3.1. Uvod ...................................................................................................................................... 36
3.2. Greke u C# aplikaciji ............................................................................................................. 36
3.3. Iznimke .................................................................................................................................. 39
3.4. Debugging .............................................................................................................................. 45
3.5. Pitanja i zadaci ....................................................................................................................... 47
3.6. Vie informacija o temi .......................................................................................................... 49
4. Verzioniranje i dokumentiranje programskog koda ...................................................................... 50
4.1. Uvod ...................................................................................................................................... 51
4.2. Sustavi za verzioniranje ......................................................................................................... 51
4.3. Razvoj Windows Forms aplikacija ......................................................................................... 55
4.4. Ostale opcije Git sustava ....................................................................................................... 61
4.5. Dokumentiranje i komentiranje kda ................................................................................... 61
4.6. Pitanja i zadaci ....................................................................................................................... 62
4.7. Vie informacija o temi .......................................................................................................... 64
5. UML dijagram klasa koncepti i razvoj ......................................................................................... 65
III
5.1. Uvod ...................................................................................................................................... 66
5.2. Osnove objektno orijentiranog pristupa ............................................................................... 66
5.3. UML dijagram klasa ............................................................................................................... 68
5.4. Opis procesa proizvodna traka pogona za sklapanje automobila ...................................... 70
5.5. Implementacija dijagrama klasa u C# .................................................................................... 72
5.6. Generiranje klasa ................................................................................................................... 77
5.7. Pitanja i zadaci ....................................................................................................................... 81
5.8. Vie informacija o temi .......................................................................................................... 82
5.9. Izvori ...................................................................................................................................... 82
6. UML dijagram aktivnosti koncepti i razvoj ................................................................................. 83
6.1. Uvod ...................................................................................................................................... 84
6.2. Dijagram aktivnosti elementi ............................................................................................. 84
6.3. Implementacija ...................................................................................................................... 88
6.4. Dretve .................................................................................................................................... 91
6.5. Pitanja i zadaci ....................................................................................................................... 94
6.6. Vie informacija o temi .......................................................................................................... 95
6.7. Prilozi ..................................................................................................................................... 96
7. UML dijagram slijeda koncepti i razvoj ....................................................................................... 97
7.1. Uvod ...................................................................................................................................... 98
7.2. Dijagram slijeda sequence diagram .................................................................................... 98
7.3. Dijagram slijeda primjera sustava za mrenu komunikaciju ............................................... 101
7.4. Implementacija .................................................................................................................... 102
7.5. Testiranje ............................................................................................................................. 109
7.6. Pitanja i zadaci ..................................................................................................................... 110
8. Rad s bazom podataka I osnove ............................................................................................... 111
8.1. Uvod .................................................................................................................................... 112
8.2. ADO.NET .............................................................................................................................. 113
8.3. Kreiranje aplikacije za evidenciju studenata ....................................................................... 115
8.4. Pitanja i zadaci ..................................................................................................................... 127
8.5. Vie informacija o temi ........................................................................................................ 127
9. Rad s bazom podataka II dataset, procedure, okidai .............................................................. 129
9.1. Uvod .................................................................................................................................... 130
9.2. SQL Server 2012 .................................................................................................................. 130
9.3. Pristupanje bazi podataka koritenjem DataSet-ova. ......................................................... 135
9.4. Pitanja .................................................................................................................................. 153
9.5. Vie informacija o temi ........................................................................................................ 153
IV
10. Rad s bazom podataka III ORM............................................................................................. 154
10.1. Uvod ................................................................................................................................ 155
10.2. ADO.NET Entity Framework ............................................................................................ 155
10.3. Kreiranje aplikacije pristupom Prvo baza podataka ..................................................... 159
10.3. Pitanja i zadaci ................................................................................................................. 173
10.4. Vie informacija o temi .................................................................................................... 174
11. Testiranje programa ................................................................................................................ 175
11.1. Uvod ................................................................................................................................ 176
11.2. Faze u testiranju .............................................................................................................. 177
11.3. Izrada jedininih testova.................................................................................................. 178
11.4. Izrada kodiranih UI testova ............................................................................................. 184
11.5. Pitanja i zadaci ................................................................................................................. 187
11.6. Vie informacija o temi .................................................................................................... 187
12. Vizualizacija podataka rad s izvjetajima i vlastitim kontrolama.......................................... 188
12.1. Uvod ................................................................................................................................ 189
12.2. Report viewer .................................................................................................................. 189
12.3. Izrada sloenijeg izvjetaja .............................................................................................. 192
12.4. Google Chart API ............................................................................................................. 198
12.5. Vlastite kontrole .............................................................................................................. 199
12.6. Pitanja i zadaci ................................................................................................................. 204
12.7. Vie informacija o temi .................................................................................................... 205
13. Uvoenje programa u rad ....................................................................................................... 206
13.1. Uvod ................................................................................................................................ 207
13.2. Priprema aplikacije za distribuciju ................................................................................... 207
13.3. Copy &Paste distribucija .................................................................................................. 209
13.4. Publish ............................................................................................................................. 209
13.5. Setup ................................................................................................................................ 211
13.6. Pitanja i zadaci ................................................................................................................. 214
14. Zbirka zadataka ........................................................................................................................ 215
Gotove datoteke zadataka koje se rade na vjebama dostupne su na: http://goo.gl/Lo01P1
University of Zagreb, Faculty of Organization and Informatics, Varadin 1
Odabrana poglavlja programskog inenjerstva razvoj programa
Integrirano razvojno okruenje - IDE
1 . Integrirano razvojno okruenje - IDE
Saetak
Na poetku poglavlja napravljen je kratak pregled o integriranom razvojnom okruenju (IDE). U
uvodu je opisano nekoliko esto koritenih IDE alata te su objanjeni neki osnovni pojmovi u
razvoju softvera koji e se koristiti kroz itav kolegij. Veina pojmova koja se koriste u ovom
poglavlju dolaze iz engleskog jezika, te nemaju najspretniji prijevod. Stoga, kod nekih pojmova
je naveden i originalni engleski naziv, to itatelju moe posluiti za daljnje pretraivanje i
uenje jezika struke.
Kljune rijei: IDE, MSDN, Visual Studio 2012 Product Guide
University of Zagreb, Faculty of Organization and Informatics, Varadin 2
Odabrana poglavlja programskog inenjerstva razvoj programa
Integrirano razvojno okruenje - IDE
1.1. Uvod
Nakon prolaska razdoblja mehanikog programiranja uslijedilo je razdoblje razvoja softvera putem
terminala ili konzole. Naredbe koje bi raunalo moralo izvesti zapisivalo se kao niz instrukcija koje bi
se zatim interpretirale i izvravale. Do danas, isti principi su se zadrali no alati koji omoguuju pisanje
raunalnih programa znatno su napredovali s aspekta korisnike prihvatljivosti. Iako se nerijetko
koriste urednici teksta koji rade putem terminala, u daljnjem tekstu koncentriramo se na razvojna
okruenja sa grafikim sueljima IDE.
1.2. to je IDE?
IDE (eng. integrated development environment) je softver koji programeru prua jednostavniji razvoj
softvera jer integrira ureiva teksta (eng. editor), kompajler/interpreter i debugger.
U ranijim danima razvoja softvera, programer je koristio ureiva teksta (poput edit, nano, pico,
Notepad++, itd.), napisao program i spremio ga na nekoj lokaciji na raunalu
(/home/development/my_code.cpp ili c:\development\my_code.c). Nakon toga, pomou drugog
programa, kompajlera, bi kompilirao kd. Izlaz iz kompajlera je izvrni program i tekstualni dokument
s izvjetajem postupka kompilacije. Kompajler je izvrni program koji kao ulaz prima datoteku
izvornog kda, a izlaz su novi program i izvjetaj kompilacije. Osnovni zadatak kompajlera je prijevod
vieg programskog jezika (C++, Java, C#) u nii programski jezik (asembler, Bytecode, CIL). Dananji
kompajleri obino izvravaju vie zadataka: leksika analiza (eng. lexer), parsiranje1 (eng. parser),
sintaktika analiza (provjera tonosti), generiranje programskog kda, optimizacija programskog
kda. Kako je ovo gradivo ranijih kolegija, neemo detaljnije ulaziti u pojanjavanje, no za vie
informacija preporuujemo sljedeu literaturu:
Wikipedia2 Compilers [1]
Wikipedia Lexical analysis, [2]
Hints on Programming Language Design, Stanford University, [3]
Programming Language Design and Implementation Course Rochester University,
[4]
Debugger je program koji se koristi za testiranje i otklanjanje pogreaka iz programa. Izraz debug
povijesno ima vrlo zanimljivu priu. Naime, starija raunala nisu koristila tranzistore ve relejne
lampe, koje su prilikom kontakta pregorjele i trebalo ih je zamijeniti. Raunala su u tom vremenu bila
veliine prostorije ili nekoliko prostorija pa je bilo sasvim normalno da u prostoriju uleti leptir.
1 Obrada teksta, osnovno tumaenje teksta i pripremanje razumljivih cjelina 2 lanke iz Wikipedije smo provjerili i smatramo ih dovoljno relevantnima i pouzdanima za
informativnu razinu.
University of Zagreb, Faculty of Organization and Informatics, Varadin 3
Odabrana poglavlja programskog inenjerstva razvoj programa
Integrirano razvojno okruenje - IDE
Leptiri vole svjetlo, pa su prilikom dodira s lampom uzrokovali kvar hardvera, a time i kvar u
izvoenju softvera. Slika 1 prikazuje prvi primjer dokumentirane raunalne pogreke (eng. computer
bug).
Debugger omoguuje pronalaenje raunalnog buga, kroz
animiranje programa (izvoenje korak po korak), zaustavljanja
programa na specificiranim tokama (eng. breakpoint),
promjenu programa za vrijeme izvoenja, praenje stanja
varijabli, praenje stoga itd. Debugging je veliko podruje i
sastavni dio modernih IDE-a.
Vie o pronalaenju pogreki u programskom kdu moete
proitati u treem poglavlju.
Moderni IDE alati uz navedene specifikacije ukljuuju dodatna pomagala za razvoj softvera poput;
mogunost konekcije na bazu podataka, dovravanje kda prilikom razvoja (eng. code completion),
predlaganje kda, strukturiranje i organizacija kda itd. Iako jo uvijek programeri koji razvijaju
programe za naredbeni redak (bez grafikog suelja) i preferiraju stari nain bez IDE-a, prednosti IDE-
a najvie se primjeuju kod razvoja GUI aplikacija (primjerice; Windows Forms, Java SWT, WPF,
wxWidgets, qt, itd) i kod razvoja sloenih aplikacija (20-ak i vie klasa), gdje se izraajno poveava
produktivnost.
esto koriteni IDE alati
Eclipse
Eclipse je jedan od najrasprostranjenijih IDE-a
(Slika 2). Za njega postoji veliki broj dodataka
(eng. extensions) ime je omoguen razvoj u
vie od 20 programskih jezika i to na
Windows, Linux i MacOS operacijskim
sustavima. Iako je Eclipse besplatan, postoji
nekoliko komercijalnih izdanja specijaliziranih
za razvoj u nekoj okolini (primjerice,
MyEclipse Blue). Eclipse je dosta zastupljen u
akademskoj zajednici, u razvoju web
aplikacija, u razvoju poslovnih aplikacija te u
industrijskom programskom inenjerstvu
(primjerice, vojska, strojarstvo, autoindustrija).
Osnovna izdanja Eclipse-a ukljuuju Eclipse za Java, C/C++, Eclipse za razvoj paralelnih aplikacija,
Eclipse za auto industriju itd. Neki od poznatijih dodataka (eng. plug-in) za Eclipse su UMLet,
Subclipse, PyDev, EMF (koji omoguuje MDD, eng. model driven development), Papyrus itd.
Slika 1: Prvi dokumentirani "Bug"
Slika 2: Eclipse - glavni prozor
University of Zagreb, Faculty of Organization and Informatics, Varadin 4
Odabrana poglavlja programskog inenjerstva razvoj programa
Integrirano razvojno okruenje - IDE
Slika 3: NetBeans - glavni prozor
Slika 4: Embarcadero RAD Studio - glavni prozor
Slika 5: PyCharm - glavni prozor
NetBeans
NetBeans je vrlo popularan za razvoj web
aplikacija i Java GUI aplikacija (Slika 3).
Omoguuje razvoj s Java, PHP, C/C++, Groovy,
Ruby itd. Kao i Eclipse, alat je besplatan te sadri
mnogo dodataka i primijenjen je u mnogim
industrijama; obrana (NATO MICE Console,
Tactical Geographical Information System),
zrana industrija (Boeing Shared Platform, AirIT
Flight IS), glazba (Music IDE), financije
(PowerRate, Experian Banking Software), razvoj
softvera (software EKG, Cisco localisation toolkit)
itd.
Embarcadero RAD studio/Borland Builder
Embarcadero je proizvoa istoimenog IDE
alata (Slika 4). Embarcadero je 2007. godine
kupio Borland Software Corporation, te su
zajedno uli u razvoj. Embarcadero IDE je
moan komercijalan alat koji omoguuje
razvoj za vie programskih jezika, no
najpoznatije komponente su JBuilder, RAD
Studio, Delphi (jezik) i C++ Builder.
PyCharm
PyCharm (Slika 5), za razliku od prethodna dva
IDE-a je vrlo specijalizirani alat za koritenje
programskog jezika Python. Omoguuje razvoj
konzolnih, grafikih i web aplikacija. Jedna od
vrlo dobrih karakteristika ovog IDE-a jest
automatizirano povezivanje biblioteka.
Primjerice, ako vam zatreba neki Python modul
(primjerice NumPy, PyGame), nakon instalacije
istog, PyCharm e sam uoiti promjene, te e
ga moi koristiti. Alat je komercijalan, no za
akademske svrhe, mogue ga je nabaviti bez
novane naknade.
University of Zagreb, Faculty of Organization and Informatics, Varadin 5
Odabrana poglavlja programskog inenjerstva razvoj programa
Integrirano razvojno okruenje - IDE
Xcode
Xcode je IDE koji se najee koristi za razvoj
programa na Mac raunalima te i porodicu
proizvoda (iPhone, iPad). Xcode (Slika 6)
omoguuje razvoj s Cocoa i Cocoa Touch
okvirima (eng. framework) koji su okosnica
razvoja za Mac OS. Xcode podrava C, C++,
Objective-C, Objective-C++, Java, Python,
Ruby, itd.
Visual Studio
Visual Studio je Microsoftov komercijalni IDE
(Slika 7). Za akademsku zajednicu s MSDNAA
repozitorija moe se preuzeti Premium verzija
licencirana za akademsku primjenu. Razliiti
paketi (Ultimate, Premium, Professional, Test
Professional, Team Foundation Server)
omoguuju razliite funkcionalnosti, no
besplatna i najosnovnija verzija je Visual
Studio Express Edition. Visual Studio podrava
razvoj aplikacija za sve Microsoft platforme i
jezike (C#, F#, VisualBasic, C++). Takoer
omoguuje koritenje jezika za web (HTML5, Javascript). Uz novi poslovni pravac i novi nain razvoja
aplikacija, Microsoft je uz Visual Studio uveo i posebni alat Blend for Visual Studio (Slika 8). Blend
omoguuje razvoj korisnikog suelja i namijenjen je dizajnerima. Iz korisnikog suelja kojeg dizajner
napravi u Blendu, generira se XAML kd (eng. Extensible Application Markup Language). Generirani
kd Visual Studio uitava i prikazuje korisniko suelje, a dodatno omoguuje ureivanje XAML kda
(za dodavanje dodatnih svojstava,
programskih dogaaja (eng. event)). Ideja
Microsofta jest potpuno razdvajanje razvoja
korisnikog suelja od programske logike.
Programski kd razvijao bi developer, dok
bi dizajn razvijao designer. Time je nastala
kovanica deviner, odnosno novi lan
razvojnog tima, dizajner koji razumije XAML
kd. Za vjebe na kolegiju Programsko
inenjerstvo, koristit emo Visual Studio 2012
te emo ga detaljno upoznati.
Slika 6: Xcode
Slika 7: Visual Studio 2012
Slika 8: Microsoft Blend
University of Zagreb, Faculty of Organization and Informatics, Varadin 6
Odabrana poglavlja programskog inenjerstva razvoj programa
Integrirano razvojno okruenje - IDE
Slika 9: .NET 4.0 aplikacijski stog,
Izvor: Wikipedia
1.3. .NET
Visual Studio primarno slui za razvoj .NET aplikacija. .NET je Microsoftov okvir, odnosno skup
biblioteka koji pojednostavljuje razvoj aplikacije namijenjene za Microsoft tehnologije; Windows,
Windows Store, Windows Phone, Windows Server i Windows Azure.
Slika 9 prikazuje strukturu .NET okvira. Trenutno najnia
verzija koju Microsoft podrava je 2.0.
Promotrimo primjer jedne WinForms aplikacije .NET 2.0
razine. Ona se sastoji od prozora, tekstualnog polja i
nekoliko gumbova (primjerice kalkulator na Windows-u).
Prozor aplikacije dolazi iz biblioteke
System.Windows.Forms. Ona sadri sve potrebne elemente
za iscrtavanje forme na radnoj povrini Windows-a, za
praenje dogaaja (pritisak tipke tipkovnice ili klik mia) i
ostalih potrebnih mehanizama. Taj prozor nazivamo
formom. Skup objekata koji moemo prikazati na formi
(gumbi, tekstualna polja, polje za datum itd.) nazivamo
kontrolama. Sve kontrole koje emo trebati za razvoj
Windows Forms aplikacije nalaze se u WinForms
komponenti. Ako neka komponenta nedostaje, moemo
uzeti apstraktnu klasu Control i proiriti je na nain koji je
nama potreban (o tome e vie rijei biti kasnije). Kada emo trebati vezanu listu, stablo, graf ili neku
drugu kolekciju (kolekcija = ATP = apstraktni tip podataka), koristit emo biblioteku Collections koja
se nalazi u BCL-u (eng. Base Class Library vidi sliku). BCL takoer sadri mnoge druge
fundamentalne klase koje se koriste u razvoju (primjerice, System, Diagnostics, IO, Reflection,
Runtime, Security, Threading, itd.).
Prilikom kompilacije programa napisanog za .NET okvir (primjerice u jeziku C#), koristi se zajednika
infrastruktura (eng. Common Language Infrastructure) za prijevod na niu programsku razinu. Svi
jezici .NET-a se provode u zajedniki posredniki jezik CIL (eng. Common Intermediate Language). CIL
je neovisan o platformi. Program preveden u CIL se nakon toga izvrava zajednikoj infrastrukturi,
CLR (eng. Common Language Runtime), koja je ovisna o platformi (centralni procesor, grafiki
procesor, operacijski sustav, itd.).
Na razinama iznad .NET 2.0, postoje razne nadogradnje. Verzija 3.0, je uvela 4 nova vana koncepta u
razvoj, WPF (Windows Presentation Foundation koji slui za razvoj bogatih korisnikih suelja
pomou XAML-a), WCF (Windows Communication Foundation) koji slui za implementaciju servisno
orijentiranih arhitektura, distribuiranog raunarstva i openito komunikacije meu aplikacijama. WCS
(Windows Card Space) koji slui za pohranu identiteta (taj projekt je trenutno prekinut) i WF
(Windows Workflow Fundation) koji slui za opis procesa i izvravanje istog.
University of Zagreb, Faculty of Organization and Informatics, Varadin 7
Odabrana poglavlja programskog inenjerstva razvoj programa
Integrirano razvojno okruenje - IDE
Verzija 3.5 donosi dodatak za ADO.NET nazvan Entity Framework, koji je Microsoftov ORM (eng.
object relational mapping) sustav. LINQ (Language Integrated Query) omoguuje izraavanje upita
slinih kao SQL nad kolekcijama, XML-u, Microsoftovim relacijskim bazama i ostalim bazama
podataka za koje se koristi ADO.NET pristup.
.NET 4.0 uvodi paralelizam s obzirom na ubrzani razvoj
viejezgrenih i heterogenih platformi, a verzija 4.5
uvodi podrku za razvoj Windows 8 Metro Style
aplikacija, podrku za implementaciju WebSocket-a,
podrku za OAuth i OpenID, MVC za Web Forms te
ostala proirenja na postojee komponente iz verzije
4.0. Novosti .NET 4.5 (Slika 10) Izvor3.
1.4. MSDN
Ve je spomenuto da .NET okvir sadri vie od 45.000 klasa. Prvi dojam odaje veliinu itavog sustava
i strah prema shvaanju svih pojedinih elemenata. S vremenom, neke klase zastare (eng. deprecated)
i izbace se iz upotrebe, a zamjene ih nove. Kako bi se sve to moglo pratiti, uiti i vidjeti u primjeni,
Microsoft odrava mreu programera MSDN (Slika 11) te dokumentacijski repozitorij MSDN (eng.
Microsoft Development Network) Library.
Slika 11: Poetna strana MSDN-a
3http://www.heikniemi.net/hardcoded/wp-content/uploads/2011/10/WhatsNewNET45-en.png
Slika 10: .NET 4.5 novosti
University of Zagreb, Faculty of Organization and Informatics, Varadin 8
Odabrana poglavlja programskog inenjerstva razvoj programa
Integrirano razvojno okruenje - IDE
MSDN Library je prva postaja kod razvoja aplikacija na Microsoftovim tehnologijama. Primjerice,
elimo napraviti web aplikaciju i zanima nas kako se spojiti na MySQL bazu podataka. U polje za
pretraivanje moemo napisati web application development, da bi saznali kako se razvijaju web
aplikacije (Slika 12).
Slika 12: MSDN pretraivanje: web application development
Prema prikazanom, zakljuujemo da se esto ponavlja ASP.NET, a jedan od izvora navodi eng.
Creating ASP.NET Web Applications. Sada emo provjeriti to je tono ASP.NET, tako da napiemo u
pretraivanje samo kljunu rije asp.net (Slika 13).
Slika 13: MSDN pretraivanje: asp.net
University of Zagreb, Faculty of Organization and Informatics, Varadin 9
Odabrana poglavlja programskog inenjerstva razvoj programa
Integrirano razvojno okruenje - IDE
Rezultati daju naslutiti da se radi o skupu biblioteka za razvoj web aplikacija. Sada slijedi itanje
rezultata da bismo bili sigurni. Kada smo se uvjerili, znamo da trebamo ASP.NET, no jo uvijek se
elimo spojiti na MySQL bazu podataka. Sada emo pretraiti ASP.NET connect to MySQL database
(Slika 14).
Slika 14: Konaan upit: asp.net connect to mysql database
Prema rezultatima, moe se primijetiti da nas MSDN Library upuuje na druge izvore, nekoliko
najpoznatijih foruma za programere: CodeProject, Stack Overflow, openiti forumi, Microsoftova
baza znanja i MSDN Library. Moemo koristiti neki od tih izvora, tako da ga oznaimo i time
eliminiramo ostalo. Sada je trenutak kada trebamo odluiti o kvaliteti izvora i odluiti se za neko
rjeenje.
Napomena
Izvor i autor podataka na Internetu su najvaniji i trebaju biti pouzdani. esto nas pretraivanje
moe odvesti na neki zastarjeli izvor i zastarjelu informaciju. Stoga, uvijek je dobro pretraivati
slubene Microsoftove izvore. U gornjem primjeru, u slubenoj dokumentaciji Microsoft ne navodi
opis jer MySQL nije njihov proizvod, ve se preporuuje MS SQL Server. Pomo kod pretraivanja je
pojam najbolje prakse (eng. best practices, primjerice traimo: best practice for web socket
implementation).
Za vjebu, koritenjem MSDN Library pronaite odgovore na sljedea pitanja:
1. to je SQL Server connection pool?
2. to je to Lightswitch i kako pomou njega/nje implementirati vie naprama vie vezu.
3. Kako u Visual Studio-u 2012 dodati referencu na projekt i to je referenca?
4. to su to regularni izrazi (eng. regular expressions)?
University of Zagreb, Faculty of Organization and Informatics, Varadin 10
Odabrana poglavlja programskog inenjerstva razvoj programa
Integrirano razvojno okruenje - IDE
1.5. Visual Studio 2012 Prvi pogled
Da bismo malo upoznali Visual Studio (VS) i neke njegove zanimljive mogunosti, napravit emo
jedan klasian zadatak iz ranijih kolegija u C++-u. Cilj zadatka je napraviti jednu klasu, iji se elementi
pohranjuju u vezanu listu. Korisniku mora biti omogueno dodavanje klasa u listu i ispis itave liste.
Prvi korak pri razvoju ovog rjeenja je otvaranje prozora s izborom projekata. Iz izbornika File
odaberemo New pa Project. U otvorenom prozoru, odabiremo vrstu i tip projekta (Slika 15).
1. Popis programskih jezika koje Visual Studio podrava. Ubudue emo koristiti Visual C#
projekte, no sada je potrebno odabrati Visual C++ u podizborniku Other Languages.
2. Za svaki jezik mogue je odabrati nekoliko tipova projekta (obrasci projekta).
3. Za svaki projekt, potrebno je navesti ime, lokaciju na datotenom sustavu te naziv
rjeenja.
4. Odabir verzije .NET okvira. Koristit emo .NET 4.5
5. Odabir vrste projekta. Koristit emo Wind32 Console Application.
6. Odabrat emo da elimo kreirati novi direktorij u koji e se smjestiti projekt. Projekt
(Name) i rjeenje (Solution name) emo nazvati VSIntro.
Slika 15: Visual Studio New Project prozor
Nakon pritiska na OK, Next, na posljednjem prozoru odaberemo Empty project. SDL treba iskljuiti.
1
4
2 5
6 3
University of Zagreb, Faculty of Organization and Informatics, Varadin 11
Odabrana poglavlja programskog inenjerstva razvoj programa
Integrirano razvojno okruenje - IDE
Slika 16: Visual Studio 2012 - glavni zaslon
Slika 16 prikazuje tipian izgled .NET okruenja, koja se ovisno o koritenom tipu projekta ili
programskog jezika mijenja. Za sada emo se zadrati na C++ okruenju, meutim, pogledat emo i
okruenje za C# jer emo ga ubudue koristiti.
1. Glavni izbornik agregira sve mogunosti IDE-a na jednom mjestu i dinamiki se mijenja
ovisno o tipu i vrsti projekta. Izbornik File sadri mogunosti spremanja projekta, uitavanja,
ispisa, verzioniranje itd. Izbornik Edit sadri mogunost Copy, Cut, Paste itd. Moe se koristiti
za refaktoriranje kda. View izbornik slui za prikazivanje pogleda i prozora (primjerice prozor
Solution explorer), Build sadri opcije za kompilaciju projekta, Debug sadri mogunosti za
otklanjanje pogreaka, SQL/Data za spajanje na bazu podataka. Tools, Test i Analyze istraite
sami.
2. Alatna traka sadri preace do elemenata iz glavnog izbornika, primjerice za kreiranje
projekta, opciju kompilacije, spremanje itd.
3. Preglednik rjeenja (eng. Solution Explorer) sadri datoteno stablo projekta.
4. Izvjetajni prozor (eng. Error List) takoer ima tabularni prikaz. Tri glavna taba su Errors u
kojoj se ispisuju sve pogreke u kdu i koje su uzrok zato se program ne moe kompilirati.
Warnings tab ispisuje upozorenja, a Messages tab ispisuje preporuke i poruke VS-a.
5. Glavni prostor ovaj prostor namijenjen je za pisanje programskog kda. Na vrhu prostora
primijetit ete tabularnu organizaciju datoteka izvrnog kda.
1
2 3
4 5
University of Zagreb, Faculty of Organization and Informatics, Varadin 12
Odabrana poglavlja programskog inenjerstva razvoj programa
Integrirano razvojno okruenje - IDE
Upravljanje prozorima
Kada elimo dodati jo koji prozor na pogled glavnog zaslona VS-a, moemo to uiniti iz izbornika
View. Moemo mijenjati raspored onako kako nam najvie odgovara, tako da miom uhvatimo tab
prozora koji elimo pomaknuti te isti pomaknemo (Slika 17).
Slika 17: Visual Studio 2012, premjetanje prozora
Na zaslonu se pojavljuje pomoni prikaz te ako iznad njega proemo miem (jo uvijek drimo
prozor), VS e nam prikazati gdje e smjestiti prozor.
Prvi program u VS 2012
Moemo zapoeti s pisanjem kda. Najprije emo u strukturu projekta dodati novu .cpp datoteku.
Desnim klikom na VSIntro (korijen strukture u pregledniku rjeenja), pojavit e se kontekstni izbornik
iz kojeg emo odabrati opciju Add i onda New Item. Otvorit e se prozor u kojem emo odabrati C++
File (.cpp), nazvat emo ga Source.cpp i pritisnuti Add.
Za poetak, moramo dodati osnovnu biblioteku C++-a. Ponemo pisati #include
University of Zagreb, Faculty of Organization and Informatics, Varadin 13
Odabrana poglavlja programskog inenjerstva razvoj programa
Integrirano razvojno okruenje - IDE
Slika 18: IntelliSense
Implementirat emo klasu Automobil s atributima broja asije, marke automobila, naziva automobila,
iznos CO2 ispunih plinova te pokaziva na sljedei element liste.
Zadatak
Napravite vezanu listu i beskonanu petlju koja omoguuje dodavanje elemenata i ispis elemenata
iz liste. Element koji se upisuje je klasa Automobil.
Napomena
Kod punjenja liste, primijetite da svaki puta nakon ->, vam VS ponudi listu moguih atributa koji se
nalaze u vaoj klasi Automobil.
Error! Reference source not found.
#include
using namespace std;
class Automobil{
public:
int Sasija;
char MarkaAutomobila[20];
char NazivAutomobila[20];
double CO2;
Automobil *pokazivacNaSlijedeci;
void unos(){
coutthis->Sasija;
coutthis->MarkaAutomobila;
coutthis->NazivAutomobila;
coutthis->CO2;
this->pokazivacNaSlijedeci = NULL;
University of Zagreb, Faculty of Organization and Informatics, Varadin 14
Odabrana poglavlja programskog inenjerstva razvoj programa
Integrirano razvojno okruenje - IDE
}
void ispis(){
cout
University of Zagreb, Faculty of Organization and Informatics, Varadin 15
Odabrana poglavlja programskog inenjerstva razvoj programa
Integrirano razvojno okruenje - IDE
Pretraivanje projekta
Kako emo u projektima esto susresti tisue, desetke tisua i u velikim projektima stotine tisua
linija kda, za lake snalaenje potrebna je mogunost pretraivanja. U VS-u, iz izbornika Edit,
odaberimo Find and Replace opciju i unutar nje Quick Find.
Slika 19: Prozor za brzo pretraivanje
Pojavljuje se izbornik s poljem za pretraivanje u kojem moemo odabrati elimo li osjetljivost na
mala ili velika slova, pretraivanje cijele rijei ili dijela rijei, pretraivanje trenutnog dokumenta,
trenutnog projekta, trenutno rjeenje ili svih otvorenih dokumenata (Slika 19). Nije rijetka pojava da
se jedno rjeenje sastoji od vie projekata, pisanih u vie jezika. Upravo zato dodano je i svojstvo
pretraivanja pomou regularnih izraza (eng. regular expressions, RegEx).
U izborniku Find and Replace takoer moemo odabrati i sloenije pretraivanje; Find in Files.
Odabirom te opcije otvara se novi prozor s mnotvom opcija.
1.6. C# Hello world
U .NET okviru razlikujemo dva osnovna tipa programskih jezika, oni koji se izvravaju na razini
operacijskog sustava (eng. unmanaged), odnosno nenadzirani programski jezici. Njima je mogue
pristupati direktno do memorijskog adresnog prostora. U .NET-u to je C++. S druge strane postoje
nadzirani programski jezici (eng. managed) koji se izvode na virtualnom stroju .NET okvira. Toj
kategoriji pripadaju C#, VisualBasic, F# itd. Tijekom razvoja .NET-a, tako se C# nazivao Managed C, no
kasnije mu je autor Andreas Hejlsberg dao naziv Cool (eng. C-like object oriented language).
S obzirom da je to ime zauzeto, na Microsoft PDC4 konferenciji dobio je naziv prema glazbenom tonu,
C#, odnosno C s povisilicom, koji simbolizira razinu vie od C-a.
4 Professional development conference
University of Zagreb, Faculty of Organization and Informatics, Varadin 16
Odabrana poglavlja programskog inenjerstva razvoj programa
Integrirano razvojno okruenje - IDE
Slika 20: Hello world aplikacija
C# je danas programski jezik ope namjene. Ukljuuje mogunost jakih i dinaminih tipova,
imperativno, deklarativno, funkcionalno, generiko, objektno i komponentno orijentirano
programiranje. Jezik takoer sadri generiku, parcijalne tipove, anonimne metode, iteratore,
anonimne tipove, upitne izraze, lambda izraze, parcijalne metode, dinamiko povezivanje, ugraene
tipove za interoperabilnost, asinkrone metode, podrku za paralelizam itd.
Sada emo napraviti novi C# projekt. Koristit emo
Console Application i projekt emo nazvati
HelloCSharpWorld. Jednostavno emo ispisati
poruku Hello world (Slika 20).
Prvih 5 linija kda je deklarativnog tipa i slui nam za
uitavanje osnovnih biblioteka. Primijetite pored
kda mali znak -, klikom na isti, taj e se dio sakriti.
Trenutno ne trebamo ni jednu biblioteku osim
System, stoga ostale moemo ukloniti. U liniji 7
deklarirani je imenski prostor (eng. namespace).
Imenski prostori obino slue za grupiranje niza klasa
sline funkcionalnosti. Trenutno imamo samo jednu
klasu koja se zove Program i ona sadri samo jednu metodu koja se zove Main. Iz statinog objekta
Console, pozvat emo metodu WriteLine za ispis teksta, te metodu Read, zbog toga da se prozor
terminala ne ugasi odmah nakon ispisa.
Za neke specifine sluajeve, .NET ne sadri gotova rjeenja (biblioteka za naprednu matematiku,
strukturu podataka matrice, gotov algoritam neuronske mree itd.) stoga moramo koristiti gotova
rjeenja tree strane ili razviti vlastite biblioteke, zapakirati ih u prenosivu komponentu kako bismo je
u budunosti mogli koristiti. Kako bi je koristili u projektu, moramo dodati referencu, a u C#-u
najea vrsta komponente je DLL (eng. dynamic link library). U demonstracijske svrhe, pripremili
smo PIComponent.dll, koji emo sada referencirati u na projekt i pomou IntelliSense-a saznati koje
metode moemo koristiti. Da bismo dodali referencu moramo odabrati opciju Project pa Add
Reference (iz glavnog izbornika). Odabrat emo opciju Browse i pronai PIComponent.dll na
datotenom sustavu. Primijetite da je jo mogue referencirati druge projekte, komponente .NET-a
te COM-a , koji sadri mnoge zanimljive biblioteke aplikacija koje su instalirane na raunalu,
primjerice Google Talk API (eng. Application program interface).
Sada emo u novi redak upisati PIComponent. i pogledati koje nam mogunosti nudi Visual Studio.
Slika 21: Istraivanje grae objekta pomou IntelliSense
University of Zagreb, Faculty of Organization and Informatics, Varadin 17
Odabrana poglavlja programskog inenjerstva razvoj programa
Integrirano razvojno okruenje - IDE
Radi se o klasi IDClass (Slika 21) koja sadri metodu OMeni. Metoda OMeni nam vraa tip podataka
string. Da bismo to provjerili, zadravanjem mia iznad metode, pojavit e se kontekstni izbornik s
njenim proirenim opisom.
Napomena
Ako IntelliSense ne nudi nikakav ispis, a dio kda je podcrtan crvenom linijom, neto nije dobro
napravljeno. Najee se uzrok pogreke moe proitati u izvjetajnom prozoru.
Slika 22: Prikaz grae metode
Povratni tip string i metoda ne prima parametre (Slika 22). Ovaj postupak vrijedi za sve objekte
unutar .NET-a. Ispiite povratni tekst na zaslon u konzoli.
1.7. Napredne mogunosti .NET-a i dodatni materijali
Visual Studio omoguuje mnogo vie nego smo ovdje prikazali, a i vie od onoga to emo obuhvatiti
na ovom kolegiju. Sada emo spomenuti neke dodatne funkcionalnosti koje vam mogu biti korisne u
budunosti, a i za one koji ele znati vie. Kod traenja originalnim Microsoftovih dokumenta, dobro
je traiti white paper, primjerice white paper on visual studio 2012. Za najbolji pregled i
razumijevanje mogunosti koje prua VS, preporuujemo Visual Studio 2012 Product Guide.
1. Razvoj za Windows 8
Windows 8 nosi novo korisniko suelje nazvano Metro. Za razvoj Metro aplikacija VS prua posebne
mogunosti za razvoj istih. Te mogunosti ukljuuju podrku za HTML5, CSS3 i JavaScript kojima Web
programeri mogu razvijati Widnows 8 aplikacije, za .NET programere postoji podrka za XAML, C# i
VisualBasic. Dodane su opcije za koritenje DirectX 11 grafikog repozitorija, mogunost razvoja
upravljakog softvera (eng. driver). Uz sve navedeno programer ima mogunost objave svoje
aplikacije na Windows Store.
2. Razvoj za Web
Za web programere, ve smo ranije naveli da postoji podrka za najnoviji HTML i CSS, a takoer je
pojednostavljen razvoj, testiranje i otklanjanje pogreke. Olakano je koritenje OAuth-e, dodana je
podrka za mobilne telefone u obliku pregleda web stranice s ogranienjima mobilnog telefona.
University of Zagreb, Faculty of Organization and Informatics, Varadin 18
Odabrana poglavlja programskog inenjerstva razvoj programa
Integrirano razvojno okruenje - IDE
3. Razvoj za oblak
Visual Studio sadri podrku za Windows Azure, Microsoftov oblak. Olakan je razvoj, pronalaenje
greki, objava aplikacije, koritenje baze podataka itd.
4. Razvoj za SharePoint
SharePoint je Microsoftov servis koji omoguuje suradnju poslovnih entiteta unutar organizacije. VS
2012 sadri neto bolju podrku razvoju dodataka za SharePoint.
5. ALM (eng. Application Lifecycle Management) upravljanje ivotnim ciklusom aplikacije
Team Foundation Server je posebni dodatak za VS koji omoguuje kontinuirano praenje i
integraciju rjeenja unutar tima. ALM je sustav koji omoguuje nadzor itavog tog sustava.
Svatko ima sve potrebno za svoju ulogu, tako primjerice programer u kdu koristi anotacije
za naznaku do koje razine je stigao, da bi voditelj projekta mogao pratiti napredak u svom
pogledu na projekt. ALM je vrlo mono rjeenje za timove, moe znatno smanjiti trokove
razvoja uz bolje praenje te izvjetavanje.
1.8. Zadaci
2. Koritenjem standardne biblioteke STL, implementirajte zadatak s vezanom listom
koritenjem gotove liste list iz zaglavlja .
3. Prouiti prozor sloenog pretraivanja.
4. Koritenjem C# programskog jezika implementirati zadatak 1, uz klasu List.
1.9. Vie informacija o temi
1. What's New in Visual Studio 2012? (http://msdn.microsoft.com/en-
us/library/vstudio/bb386063.aspx), dostupno: prosinac, 2013.
2. Visual Studio 2012 Product Guide (http://www.microway.com.au/microsoft/Visual-Studio-2012-
Product-Guide.pdf), dostupno: prosinac, 2013.
3. Visual Studio Training (http://www.microsoft.com/learning/en/us/visual-studio-training.aspx),
dostupno: prosinac, 2013.
University of Zagreb, Faculty of Organization and Informatics, Varadin 19
Odabrana poglavlja programskog inenjerstva razvoj programa
Integrirano razvojno okruenje - IDE
1.10. Izvori
[1] Wikipedia, 2 2013. [Mreno]. Available: http://en.wikipedia.org/wiki/Compiler.
[2] Wikipedia, 2 2013. [Mreno]. Available: http://en.wikipedia.org/wiki/Lexical_analysis.
[3] C. Hoare, December 1973. [Mreno]. Available:
http://www.cs.berkeley.edu/~necula/cs263/handouts/hoarehints.pdf.
[4] M. Scott, 2012. [Mreno]. Available: http://www.cs.rochester.edu/u/scott/254/ .
University of Zagreb, Faculty of Organization and Informatics, Varadin 20
Odabrana poglavlja programskog inenjerstva razvoj programa
Kratak pregled objektno orijentiranih koncepata
2 . Kratak pregled objektno orijentiranih
koncepata
Saetak
Opisani su osnovni pojmovi programiranja poput varijable, sekvence, selekcije i iteracije. Kroz
primjere prikazani su osnovni koncepti programiranja u duhu objektno orijentiranog pristupa.
Nadalje, definirane su smjernice pisanja dobrog kda poput imenovanja i pozicioniranja
elemenata.
Kljune rijei: osnove, imenovanje, objektno orijentirani pristup, sekvenca, selekcija, iteracija
University of Zagreb, Faculty of Organization and Informatics, Varadin 21
Odabrana poglavlja programskog inenjerstva razvoj programa
Kratak pregled objektno orijentiranih koncepata
2.1. Uvod
Programiranje je proces stvaranja kreativnog rjeenja nekog problema. Danas postoji veliki broj
razvojnih alata prilagoenih velikom broj tipova problema odnosno rjeenjima. No, sutina svega je
tehnika programiranja, strukturni i kritiki nain razmiljanja.
Bill Gates je jednom prilikom izjavio: I choose a lazy person to do a hard job. Because a lazy person
will find an easy way to do it.
U ovom poglavlju prisjetit emo se osnovnih koncepata vezanih uz programiranje kako bi bili spremni
za rjeavanje kompleksnijih problema na to jednostavniji nain.
Napomena
Sve primjere radimo na konzolnoj aplikaciji koja se vizualno i sadrajno razlikuje od Windows Forms
aplikacija
2.2. Imenovanje
Postoji nekoliko standarda imenovanja elemenata programskog kda, to ovisi o jeziku i tehnologiji,
ali takoer ovisi i o samim programerima. Stoga, postoje organizacije koje koriste svoje standarde. S
obzirom na to da mi koristimo zadnju verziju .Net razvojne okoline, u pravilu emo se pridravat .Net
smjernica za imenovanja s malim izmjenama prilagoenima naim potrebama.
Notacije
1. Pascal
Ova notacija nalae da se svaka rije u nazivu elementa pie velikim poetnim slovom bez razmaka.
Npr. OvoJeIme
2. Camel Case
Za razliku od Pascal notacije ovdje se prva rije pie malim poetnim slovom dok se ostale piu
velikim poetnim slovom. Npr. ovoJeIme
3. Maarska
Prije mnogo godina programiranje je bilo kompliciranije iz vie razloga: imena varijabli su trebala biti
kratka jer su duga imena utjecala na veliinu same izvrne datoteke. Osim toga nisu postojali dobri
razvojni alati koji tokom programiranja ukazuju na meta karakteristike elemenata koji se koriste (kao
to to radi intellisense ili tooltipovi).
Zbog toga je uvedena maarska notacija koja nalae da ime bude kratko, idealno do 8 znakova, iako
je u praksi taj limit zanemaren. Osim toga nalae se obavezni prefiks koji oznaava tip podataka npr.
varijabla: dbRadius db oznaava double tip podataka dok je Radius stvarno ime varijable.
University of Zagreb, Faculty of Organization and Informatics, Varadin 22
Odabrana poglavlja programskog inenjerstva razvoj programa
Kratak pregled objektno orijentiranih koncepata
U modernim razvojnim okolinama nije potrebno navoditi tip podatka u ime elementa iz razloga to je
tip vidljiv kroz suelje razvojne okoline samim koritenjem elementa (intellisense ili tooltipovi).
Od navedenih notacija koristiti emo Pascal i Camel Case notacije za definiranje naziva elemenata
kda.
Tablica 1: Notacija Pascal i Camel Case
Imenovanje po elementima
Element Notacija Napomena
Class Pascal U pravilu je to imenica.
Enum Pascal Ne smije imati sufiks Enum
Event Pascal
Exception class Pascal Uvijek ima sufiks Exception
Interface Pascal Uvijek ima prefiks I (veliko slovo i)
Method Pascal U pravilu je to glagol.
EventHandler delegate Pascal Objekt uvijek ima sufiks EventArgs
Parameter Camel Case
Property Pascal
Private field Camel Case
Public field Pascal
Variable Camel Case
Tablica 1 prikazuje koritenje pojedinih notacija za imenovanje elemenata programskog kda.
Skraenice
Generalno skraenice nisu dozvoljene jer mogu proizvesti zabune kod koritenja elemenata te sami
programeri mogu ponekad pobrkati iste. Naravno, neke skraenice su dozvoljene, poput: ID, XML,
FTP i sl. One se piu velikim slovima samo ako su krae od 2 znaka. Skraenice od 3 ili vie znaka se
piu Pascal notacijom. Npr. XmlDataReader ili UserID.
Kako vie nije bitna veliina kda preporuuje se za nazive koristiti pune izraze jer su lake itljivi i
razumljiviji. S druge strane preveliki nazivi mogu kd uiniti teko itljivim. Stoga je potrebno
razumno nazivati elemente npr.
VarijablaZaBrojanjaKorakaWhilePetlje dobro opisani naziv ali predug, loa praksa.
Brojac dobar primjer naziva elementa. Za razliku od prethodnog veliine je samo jedne
rijei. Postavlja se pitanje, a kako znati za to je taj broja? Odgovor je iz konteksta. Ova
varijabla e, u pravilu, biti koritena u while petlji pa e se znati njena izvorna svrha.
University of Zagreb, Faculty of Organization and Informatics, Varadin 23
Odabrana poglavlja programskog inenjerstva razvoj programa
Kratak pregled objektno orijentiranih koncepata
2.3. Tipovi podataka
Sutina programiranja je logika obrada podataka razliitih tipova. Tip podatka definira izgled
memorijskog zapisa podatka u memoriji raunala. Osim toga tip podatka definira mogue operacije
(logike obrade) koje je mogue odraditi nad podatkom. Npr. podatke tipa tekst ne moemo mnoiti
kao to to moemo raditi s podacima cjelobrojnog tipa.
Postoje dvije vrste tipova podataka:
Jednostavni
Sloeni
Jednostavni tipovi podataka
Razliiti programski jezici definiraju razliite jednostavne tipove podataka. Tablica 2 opisuje osnovne
jednostavne tipove podataka.
Tablica 2: Jednostavni tipovi podataka
Tip Opis
Numeriki tipovi
Byte Raspon vrijednosti: 0 do 255.
Sbyte Signed byte, raspon vrijednosti: -128 do +127.
Decimal Raspon vrijednosti: -7.9*1028 do +7.9*1028, vrijednost ima opcionalni sufiks m.
Double Raspon vrijednosti: 5.0*10324 do 1.7*10308, vrijednost ima opcionalni sufiks D.
Float Raspon vrijednosti: -3.4*1038 do +3.4*1038, vrijednost ima opcionalni sufiks F.
Int Raspon vrijednosti: -2 147 483 648 do +2 147 483 647.
Uint Unsigned int, Raspon vrijednosti: 0 do 4 294 967 295, vrijednost ima opcionalni
sufiks U.
Long Raspon vrijednosti:
9 223 372 036 854 775 808 do +9 223 372 036 854 775 807, vrijednost ima
opcionalni sufiks L.
Ulong Unsigned long, Raspon vrijednosti: 0 do 18 446 744 073 709 551 615, vrijednost
ima opcionalni sufiks UL.
Short Raspon vrijednosti: -32 768 do +32 767.
Ushort Unsigned short, Raspon vrijednosti: 0 do 65 535.
Ostali tipovi
Bool Logiki tip podataka, moe imati dvije vrijednosti: True ili False.
Object Bazini tip podataka za sve ostale tipove podataka. To znai da su svi objekti ili
varijable nekog tipa ujedno i tipa object.
Void Tehniki ovo nije tip podataka nego samo oznaava da npr. neka metoda nema
povratni tip podataka, interpretirati se moe kao bez tipa, nikakvi tip.
University of Zagreb, Faculty of Organization and Informatics, Varadin 24
Odabrana poglavlja programskog inenjerstva razvoj programa
Kratak pregled objektno orijentiranih koncepata
Znakovni tipovi
Char Predstavlja vrijednost jednog znaka. Npr 'A'.
String Predstavlja sekvencu od 0 ili vie znakova. Npr: ovo je string.
U tablici su podebljani oni tipovi podataka koje emo koristiti. Odabir tipa podataka, posebno
numerikih, ovisi o primjeni. Zbog racionalnog koritenja resursa raunala, poeljno je koristiti
minimalni tip podataka potreban da se pohrane sve mogue vrijednosti.
Kd 1: Primjer koritenja sufiksa
float varijabla = 2.3F;
Sloeni tipovi podataka
Sloeni tipovi podataka sastoje se od vie razliitih ili istih jednostavnih (ili sloenih) tipova podataka,
a dijele se na:
Polja
Sastoje se od N elemenata od jednog jednostavnog (ili sloenog) tipa podataka. Npr. Polje brojeva
tipa int duine 7 elemenata:
Napomena
Redni brojevi elemenata u nekom polju poinju od 0 (nule). Generalno u .Net-u indeksi elemenata
polja, kolekcija, nizova, poinu od 0 (nule) to je tzv. Zero based indexing
Strukture i klase
Za razliku od polja strukture i klase mogu imati elemente razliitih jednostavnih (ili sloenih) tipova
podatka.
Razlika izmeu struktura i klasa je u injenici da klase u sebi mogu imati programsku logiku i podatke
dok strukture mogu imati samo podatkovni dio.5 Na primjer:
Tablica 3
Struktura Slika
Naziv, tipa string Vrisak
VrijednostKune, tipa int 1452
5 Iako, u novijim programskim jezicima ta razlika praktiki ne postoji.
1 2 3 4 4 5 6
University of Zagreb, Faculty of Organization and Informatics, Varadin 25
Odabrana poglavlja programskog inenjerstva razvoj programa
Kratak pregled objektno orijentiranih koncepata
Tablica 4
Tablica 3 definira strukturu dok Tablica 4 definira klasu za umjetnike slike. Prva kolona opisuje tip
dok druga definira primjer vrijednost konkretnog objekta. Klasa Slika ima jednu operaciju koja se zove
ProdajSliku(). Ovu operaciju struktura ne moe imati.
Varijable, reference, objekti i polja
Varijable su elementi programskog kda u koje pohranjujemo podatke. Svaka varijabla mora imati
definirani svoj tip podataka i ime (u skladu sa smjernicama imenovanja).
Dobra praksa je varijable deklarirati na poetku bloka u kojem
se koriste, npr. poetak klase ili na poetku metode, ako se
radi o varijabli koja e se koristiti samo u toj metodi.
Deklariranu varijablu je mogue koristiti, u pravilu, na dva
naina: itanje varijable i zapisivanje u varijablu. itanje
se radi samim spominjanjem imena varijable.
Vrijednost se u varijablu zapisuje koritenjem znaka =,
uvijek se s lijeve strane nalazi element u koji pohranjujemo vrijednost navedenu s desne strane znaka
=.
Mogue je prilikom same deklaracije pohraniti inicijalnu
vrijednost, ta procedura se zove inicijalizacija varijable.
Reference su varijable sloenog tipa. Reference
moemo promatrati kao pokazivae iz C/C++ jezika, ali
puno jednostavnije.
Primjer koritenja referenci pokazat emo na primjeru
klase Slika. Za poetak definirajmo klasu Slika.
Ovdje neemo ulaziti u naine definiranje klase, to je
tema jednih od sljedeih vjebi, samo je bitno da smo
definirali jedan sloeni tip podataka koji se zove Slika.
Deklariranje reference tipa klase Slika se radi na isti
nain kao i deklariranje varijable.
Klasa Slika
Naziv, tipa string Vrisak
VrijednostKune, tipa int 1452
Operacija ProdajSliku()
Kd 2: Zapisivanje u varijablu
varijabla = 2;
Kd 3: Deklaracija
varijable
int varijabla;
Kd 4: Inicijalizacija varijable
int varijabla = 2;
Kd 5: Definiranje klase Slika
class Slika
{
string Naziv;
int VrijednostKune;
void ProdajSliku()
{
}
public Slika()
{
}
}
University of Zagreb, Faculty of Organization and Informatics, Varadin 26
Odabrana poglavlja programskog inenjerstva razvoj programa
Kratak pregled objektno orijentiranih koncepata
Samim deklariranjem reference, Visual Studio e nas upozoriti da smo deklarirali varijablu, a da istu
nismo koristili. Upozorenje nestaje, ako inicijaliziramo referencu. Referenci smo dodijelili vrijednost
null koja oznaava praznu vrijednost, nita, stoga je vrijednost inicijalizirana u nita. Sadraj varijable
(reference) koja se zove referenca je nita odnosno
null. Dobra praksa je prazne reference inicijalizirati s null.
to je onda referenca?
- To je pokaziva na objekt odnosno instancu neke klase i slui nam za manipuliranje
karakteristikama i metodama objekata neke klase.
Objekt je instanca neke klase. Instanciranje odnosno
stvaranje objekta neke klase se radi koritenjem kljune
rijei new. Nakon rijei new slijedi poziv konstruktora.
Ovime naa referenca vie nema vrijednost null nego stvarnu vrijednost konkretnog objekta6. U
memoriji (u stvarnosti) postoji samo jedan novi objekt klase Slika.
Ovdje je prikazano instanciranje dva objekta klase
Slika. Meutim tu su deklarirane i tri reference tipa
Slika.
Reference: referenca i referenca2 pokazuju na prvi
objekt klase Slika. Referenca referenca3 pokazuje na drugi objekt klase Slika. Mijenjanjem stanja
objekta identificiranog referenca sve izmjene e istog trena biti dostupne i koritenjem reference
referenca2.
Strukturni objekti su instance strukture. Ranije smo opisali razliku izmeu strukture i klase.
Instanciranje objekata struktura se radi na isti nain kao i instanciranje objekata neke klase.
Meutim, strukture su nii koncept od klase pa postoji i mogunost deklariranja struktura kao i
jednostavne varijable koristei sintaksu TipStrukture ImeStrukture. U oba sluaja u memoriji e biti
instanciran samo jedan objekt strukture.
Polja su sloeni tip podataka koje takoer treba instancirati na slian nain kao i klase.
6 Tonije njegovu memorijsku adresu, ali radi jednostavnosti smatramo to vrijednou novog objekta.
tovie vrlo esto emo o referenci na objekt neke klase govoriti samo objekt neke klase.
Kd 6: Deklariranje reference
Slika referenca;
Kd 7: Inicijalizacija reference
Slika referenca = null;
Kd 8: Instanciranje objekta
klase
referenca = new Slika();
Kd 9: Instanciranje vie klasa
Slika referenca = new Slika();
Slika referenca2 = referenca;
Slika referenca3 = new Slika();
Kd 10: Instanciranje polja
University of Zagreb, Faculty of Organization and Informatics, Varadin 27
Odabrana poglavlja programskog inenjerstva razvoj programa
Kratak pregled objektno orijentiranih koncepata
Ovdje je instancirano polje brojeva u koje stane 7
elemenata.
Vrijednost prvom i drugom elementu polja se radi ovako:
Primijetimo da se elementima polja pristupa preko indeksa
koji se definira uglatim zagradama[] nakon imena varijable
odnosno reference.
Pitanje za razmiljanje (1)
int a = 1;
int b = 3;
Suma svih brojeva od a do b je 6.
Kolika bi bila suma svih brojeva od a do b ako su a i b tipa float?
2.3.1. Promjena tipa podataka (cast)
esto emo se nai u prilici da moramo promijeniti tip podataka nekoj varijabli ili objektu. Takav
proces zadaje puno problema zato to nisu svi tipovi kompatibilni i kod promjene tipa moe doi do
gubitka informacija.
Na primjer:
U varijablu tipa float pohranjujemo decimalni broj.
Ako toj varijabli promijenimo tip u int tada e doi
do gubitka informacije, konkretno izgubit e se itavi
decimalni dio jer int tip podataka samo pohranjuje
cijele brojeve. U konkretnom primjeru vrijednost varijable a je 3.45 dok je vrijednost varijable b 3.
Sintaksa promjene tipa podatka je takva da ispred varijable u zagradama ( ) navedemo novi tip
podataka kojeg elimo privremeno dodijeliti toj varijabli.
Referentni tipovi (klase i strukture) imaju mogunost koritenja i drugaije sintakse:
int[] polje = new int[7];
Kd 11: Dodjeljivanje
vrijednosti elementima polja
polje[0] = 3;
polje[1] = 1;
Napomena
Brisanje objekata: U veini sluajeva nije nuno voditi brigu o brisanju objekta jer .Net koristi
Garbage Collector za dealociranje (brisanje) svih objekata i varijabli koje se vie ne koriste. Ako na
neki objekt ne pokazuje niti jedna referenca tada e on automatski biti dealociran odnosno obrisan.
Kd 12: Promjena tipa podataka
float a = 3.45F;
int b = (int)a;
University of Zagreb, Faculty of Organization and Informatics, Varadin 28
Odabrana poglavlja programskog inenjerstva razvoj programa
Kratak pregled objektno orijentiranih koncepata
(objekt as NewType) - sve unutar zagrade, ispred as e biti promatrano kao objekt tipa NewType.
Pitanje za razmiljanje (2)
U koji tip podataka uvijek moemo promijeniti bilo koju varijablu bio kojeg tipa?
2.4. Sekvenca, selekcija i iteracija
Sada kada smo upoznati s podacima i definiranjem podataka u programskom kdu, moemo se
upoznati s kontrolnim strukturama.
Sekvenca
Sekvenca je prva i osnovna struktura. Programski kd se izvodi slijedno, linearno, jedna naredba iza
druge. Pojedina naredba moe biti alias za blok veliki blok drugih naredbi koje se opet izvode slijedno.
Nakon zavretka izvoenja jedne naredbe (koja se moe sastojati od vie drugih naredbi) izvoenje se
nastavlja nakon naredbe koja se prethodno izvrila.
Sa sekvencom smo se ve susreli u isjecima programskog kda u ovom poglavlju.
Ovaj programski isjeak deklarira tri varijable. U prve
dvije se pohranjuje konkretna vrijednost dok se u treu
pohranjuje rezultat zbrajanja vrijednosti iz prve dvije
varijable.
Selekcija
Selekcija je grananje programskog kda na 0 ili vie dijelova.
Napomena
Nisu svi tipovi kompatibilni i prikladni za meusobne promjene. Klase i potklase imaju hijerarhiju
koju je lako pratiti. Nije mogue npr. napraviti konverziju izmeu tipa string i tipa Slika. Zato to
nisu kompatibilni tipovi odnosno nisu u nikakvom odnosu.
Kd 13: Primjer sekvence
int prviBroj;
int drugiBroj;
int rezultat;
prviBroj = 3;
drugiBroj = 4;
rezultat = prviBroj + drugiBroj;
University of Zagreb, Faculty of Organization and Informatics, Varadin 29
Odabrana poglavlja programskog inenjerstva razvoj programa
Kratak pregled objektno orijentiranih koncepata
U ovom primjeru i ostalima na dalje, je
prikazana itava Main metoda. To je prva
metoda koja se izvri prilikom pokretanja
programa.
Selekcija je u ovom primjeru prikazana koristei
if {..} else {} naredbe.
U zagradama if naredbe se nalazi logiki izraz
(koji je laan). Ako je logiki izraz istina, izvrit e
se kd ili blok kda iza if naredbe (crveno). Ako
je logiki izraz laan (u primjeru je laan) izvrit
e se kd ili blok kda iza else naredbe (zeleno).
Kd 14: Primjer selekcije
if(){}else{}
static void Main(string[] args)
{
int prviBroj;
int drugiBroj;
int rezultat;
prviBroj = 3;
drugiBroj = 4;
if (prviBroj == 10)
{
// nee se izvriti
rezultat = 10;
}
else
{
Rezultat = prviBroj + drugiBroj;
}
}
Napomena
Blok kda je bilo koji set naredbi jedna iza druge definiran s vitiastim zagradama { }. U
prethodnom primjeru nismo trebali koristiti vitiaste zagrade za selekciju zato to se radi o jednoj
naredbi, meutim dobra praksa je uvijek staviti vitiaste zagrade radi lake itljivosti kda.
Kd 15: Primjer selekcije switch
University of Zagreb, Faculty of Organization and Informatics, Varadin 30
Odabrana poglavlja programskog inenjerstva razvoj programa
Kratak pregled objektno orijentiranih koncepata
Switch omoguava viestruko grananje gdje odabir
grane ovisi o vrijednosti varijable unutar zagrada
switch naredbe, u ovom sluaju je to vrijednost
varijable prviBroj.
Ako je prvi broj jednak 1 tada e se izvriti blok kda
definiran iza oznake case 1: tj. u varijablu rezultat e
se pohraniti vrijednost 11.
Ako je prvi broj jednak 2 tada e se izvriti blok kda
definiran iza oznake case 2: tj. u varijablu rezultat e
se pohraniti vrijednost 12.
Ako prviBroj ima vrijednost koja nije definirana niti
jednom case oznakom tada e se izvriti blok kda
definiran default: oznakom tj. u varijablu rezultat e
se pohraniti 10.
static void Main(string[] args)
{
int prviBroj;
int rezultat;
prviBroj = 1;
switch (prviBroj)
{
case 1:
{
rezultat = 11;
break;
}
case 2:
{
rezultat = 12;
break;
}
default:
{
rezultat = 10;
break;
}
}
}
Napomena
Break: Iza svake case oznake treba biti minimalno jedna naredba, a to je break naredba koja govori
da se izvoenje mora zaustaviti na mjestu gdje se ista nalazi. Break naredba je i obavezna na kraju
svakog bloka kda koji se treba izvesti nakon case (ili default) oznake.
Nadalje, mogue je koristiti tu naredbu za prisilno prekidanje iteracija neovisno o definiranom
uvjetu izlaska iz petlje.
University of Zagreb, Faculty of Organization and Informatics, Varadin 31
Odabrana poglavlja programskog inenjerstva razvoj programa
Kratak pregled objektno orijentiranih koncepata
Ovaj primjer selekcije je esto koriten kod
malih grananja, u pravilu samo za
definiranje vrijednosti neke varijable.
Kd provjerava varijablu prviBroj i ako je
ona 1 tada se u varijablu rezultat zapisuje 11
inae se zapisuje 10.
Sintaksa ove selekcije bi bila:
objekt = (logiki izraz)? vrijednost ako je izraz istina : vrijednost ako je izraz neistina
Vrijednost ne mora biti konkretna vrijednost nego moe biti i izraz (programski kd) koji vraa neku
vrijednost.
Iteracija
Iteracija definira koncept ponavljanja bloka programskog kda. Iteraciju je izmislio programer koji
odgovara profilu osobe u izjavi u Uvodu. Ideja je da umjesto 100 linija istog kda napravimo petlju
koja e uvelike pojednostaviti kd, a samim time i skratiti pisanje tog kda.
Postoji nekoliko naina definiranja iteracija, koje je najjednostavnije objasniti na primjeru zbrajanja
prvih N prirodnih brojeva.
Prvi primjer iteracije je for petlja koja ima sintaksu:
for(inicijalizacija ; logiki izraz ; korak petlje)
{}
Inicijalizacija i korak petlje mogu biti programski
izrazi. U praksi se pod inicijalizacijom podrazumijeva
deklariranje i inicijalizacija brojaa (i). U koraku
petlje definiramo promjene nad elementima
definiranim u inicijalizaciji. Logiki izraz slui za
ispitivanje uvjeta izlaska iz petlje, ako je on false tada
se izvoenje petlje zaustavlja.
Kd 16: Primjer selekcije inline
static void Main(string[] args)
{
int prviBroj;
int rezultat;
prviBroj = 1;
rezultat = (prviBroj == 1) ? 11 : 10;
}
Kd 17: Primjer iteracije for
static void Main(string[] args)
{
int n = 10;
int suma = 0;
for (int i = 0; i
University of Zagreb, Faculty of Organization and Informatics, Varadin 32
Odabrana poglavlja programskog inenjerstva razvoj programa
Kratak pregled objektno orijentiranih koncepata
Drugi primjer petlje je while petlja koja ima sintaksu:
while(logiki izraz) {}
U prikazanom primjeru moemo vidjeti koritenje
while petlje. U svakom koraku petlje, kao i kod for
petlje, izvodi se blok kda. U konkretnom primjeru
zbrajaju se svi brojevi od 0 do 10. Rezultat zbrajanja
se pohranjuje u varijablu suma. Primijetimo kako
smo morali voditi rauna o uvjetu izlaska iz petlje, za
to smo napravili jednu pomonu varijablu brojac koja
nam slui za brojanje koraka petlje. Na kraju petlje
brojac poveavamo za 1. U trenutku kada vrijednost
brojaa dosegne broj n tada prestaje izvoenje petlje.
Petlja e se izvoditi sve dok je logiki izraz istina. Na
taj nain je vrlo lako napraviti beskonanu petlju.
Izvoenje programa s beskonanom petljom nikada
nee samostalno zavriti.
Pitanje za razmiljanje (3)
Kako biste implementirali istu funkcionalnost zbrajanja prvih N prirodnih brojeva ali u formalno
beskonanoj while petlji?
Do..while iteracija je slina while iteraciji s
jednom razlikom. Uvijek e se izvriti minimalno
jedan korak petlje. To je zato to se logika
provjera dogaa na kraju petlje, dok se kod
while petlje provjera dogaa na samom
poetku pa je mogue da se korak while petlja
niti jednom ne izvri.
Kd 18: Primjer iteracije while
static void Main(string[] args)
{
int n = 10;
int suma = 0;
int brojac = 0;
while (brojac
University of Zagreb, Faculty of Organization and Informatics, Varadin 33
Odabrana poglavlja programskog inenjerstva razvoj programa
Kratak pregled objektno orijentiranih koncepata
Ovo poglavlje je bilo kratko i saeto ponavljanje osnovnih koncepata programskog kda. Teoretski je
s ovim znanjem mogue napraviti bilo koju aplikaciju uz dovoljno truda i vremena. Ponovili smo kako
se implementiraju petlje i grananja u aplikacijama. Nauili smo puno toga o razliitim tipovima
podataka, o jednostavnim ali i onim sloenima poput struktura, klasa i polja. Dogovorili smo naine
imenovanja elemenata programskog kda. Bitno je pridravati se jednog naina imenovanja zato to
e nam biti puno intuitivnije razumjeti tui, ali i vlastiti kd.
2.5. Pitanja i zadaci
Samostalni zadatak
Napravite konzolnu aplikaciju koja izraunava umnoak svih prirodnih brojeva od N=10 do
M=30. Kako bi ispisali rezultat izrauna na ekran, koristite naredbu Console.WriteLine()
Umjesto vrijednosti tekst za ispis moete
staviti bilo koju drugu vrijednost, ali i bilo koju
varijablu. Naredba e prepoznati da se radi o
varijabli i ispisati njenu vrijednost.
Ovu naredbu stavite na kraj vae Main funkcije kako se aplikacija ne bi zatvorila prije nego
fiziki vidite rezultat. U sutini ova naredba eka da korisnik pritisne bilo koju tipku. Kako se
radi o sekvenci naredbi nakon to korisnik stisne tipku
izvriti e se sljedea naredba; koje nema, zatim e
aplikacija zavriti i konzolni prozor e se zatvoriti.
Zadaci
1. Napravite konzolnu aplikaciju koja na ekran korisnika ispisuje N puta rijei crno zatim M
puta rije bijelo.
2. Napravite aplikaciju koja od korisnika trai unos dva decimalna zbroja te rauna njihov
zbroj. U aplikaciji se za pohranu smije koristiti samo int tip podataka. Zbog ovog
ogranienja najjednostavnije je napraviti strukturu/klasu za pohranu decimalnih brojeva.
Kd 21: Naredba za ispis na ekran
Console.WriteLine(tekst za ispis); Console.ReadLine();
Kd 22: Naredba za ekanje
Console.ReadLine();
University of Zagreb, Faculty of Organization and Informatics, Varadin 34
Odabrana poglavlja programskog inenjerstva razvoj programa
Kratak pregled objektno orijentiranih koncepata
Pitanja
1. to je to iteracija?
2. Objasnite osnovnu razliku izmeu do-while i while petlje.
3. Koja je svrha drugog segmenta for petlje? for(1.segment; 2.segment;3.segment)
4. Koja je razlika izmeu strukture i klase?
5. to su reference?
6. to je to tip varijable?
7. Navedite najkrai mogui logiki izraz (bez varijabi) koji se moe koristiti u programskom
kdu?
8. Objasnite break naredbu i njeno koritenje.
9. Objasnite continue naredbu. (odgovor potraiti na Internetu)
10. Navedite primjer inline grananja.
11. Objasnite razliku izmeu float i double tipa.
12. Objasnite razliku izmeu char i string tipa.
13. Koja je svrha default naredbe?
14. Zato koritenje maarske notacije nema smisla?
15. Kada koristimo camelCase notaciju?
16. Kako ispravno imenujemo suelja (interface) i njihove reference?
17. to je objekt neke klase?
18. to je object?
19. Napiite kd za deklariranje polja znakova s 3 elementa.
2.6. Vie informacija o temi
1. Imenovanje (http://msdn.microsoft.com/en-us/library/vstudio/ms229045(v=vs.100).aspx)),(
http://www.akadia.com/services/naming_conventions.html), dostupno: prosinac, 2013.
2. Tipovi podataka (http://msdn.microsoft.com/en-us/library/ya5y69ds.aspx), dostupno: prosinac,
2013.
University of Zagreb, Faculty of Organization and Informatics, Varadin 35
Odabrana poglavlja programskog inenjerstva razvoj programa
Rukovanje grekama u programskom kodu
3. Rukovanje grekama u programskom
kodu
Saetak
U ovom poglavlju opisane su mogue greke u C# aplikacijama. Nadalje, opisani su naini kako
moemo iskoristiti ugraene elemente Visual Studio-a i .NET-a da minimiziramo mogunost
pojave greaka. Obraene su teme kao to su tipovi greaka, iznimke, rukovanje iznimkama,
debugging itd.
Kljune rijei: greke u C#, tipovi greaka, iznimke, try-catch-finally, debugging
University of Zagreb, Faculty of Organization and Informatics, Varadin 36
Odabrana poglavlja programskog inenjerstva razvoj programa
Rukovanje grekama u programskom kodu
3.1. Uvod
Pisanje raunalnih programa je sloen posao, te je stoga vrlo osjetljiv na pogreke. S porastom
sloenosti i veliine raunalnih programa raste i vjerojatnost pogreke. Koliko god se trudili u tome,
vjerojatnost da emo napisati netrivijalan program koji nema ni jednu greku je vrlo mala. esto
pojava greke niti ne ovisi samo o nama programerima, pa osim to se trebamo truditi pisati kd sa
to manje greaka, moramo i pisati kd koji e biti otporan na greke, tj. ako se greka i dogodi - da
program na odgovarajui nain reagira na nju.
Postoje razliiti tipovi greaka koje se mogu pojaviti, ovisno o ozbiljnosti greke, fazi u kojoj se greka
pojavljuje, uzroniku greke itd. Visual Studio razvojno okruenje, kao i sam .NET i C# programski jezik
nude nam razliite mehanizme za pomo u pravovremenom identificiranju i adekvatnom rukovanju
grekama.
3.2. Greke u C# aplikaciji
U .NET-u a samim tim i u C# programskom jeziku postoji nekoliko vrsta greaka:
design-time greke
run-time greke
logike greke.
Napomena
O pojavi greaka nas Visual Studio obavjetava kroz panel Error List, koji moete ukljuiti kroz
alatnu traku: View -> Error List.
Design-time greke
Kd 23: Primjeri design-time greaka
//Pogreno napisana kljuna rije
public classe TestnaKlasa {}
//Uporaba nedeklarirane varijable.
varijab = 10;
//Pogrena uporaba operatora
if (varijabla = 10){}
//Izostavljen znak toka i zarez na kraju izraza (;)
int varijabla;
varijabla = 10
University of Zagreb, Faculty of Organization and Informatics, Varadin 37
Odabrana poglavlja programskog inenjerstva razvoj programa
Rukovanje grekama u programskom kodu
Design-time greke su greke koje se pojavljuju dok piemo kd u editoru, prije nego pokrenemo
program. Zapravo, ako imamo greku ovog tipa neemo ni moi pokrenuti program jer Visual Studio
nee moi kompilirati kd. Design-time greke je relativno lako uoiti, jer ih sam Visual Studio
podcrta im se pojave.
Crvenom crtom e biti podcrtane greke u sintaksi, npr. tipfeleri, nepropisna uporaba jezinih
elemenata, uporaba nepostojeih elemenata.
Zelenom crtom e biti podcrtana upozorenja, koja sama po sebi ne moraju biti greke, ali
potencijalno mogu uzrokovati probleme.
Osim to podcrta greke, Visual Studio nas o svakoj od ovih greaka obavijesti i kroz panel Error List
(Slika 23), prikazujui nam pri tome opis greke i tonu lokaciju. Dvostrukim klikom na neku od
greaka Visual Studio nas pozicionira na lokaciju greke u programskom kdu.
Slika 23: Error List panel sa popisom greaka
Osim to olakava i ubrzava proces programiranja, Intellisense opcija Visual Studio-a smanjuje i
mogunost pojave sintaktikih greaka, jer nam u svakom trenutku pisanja kda predlae mogue
jezine konstrukte, imena varijabli i slino.
Kd 24: Primjeri run-time greaka
//Pokuaj uporabe objekta sa vrijednou null
Form1 novaForma = null;
novaForma.ShowDialog();
//Pokuaj dijeljenja sa nulom.
int a = 10;
int b = 0;
int c = a / b;
//Pokuaj otvaranja nepostojee datoteke.
FileInfo datoteka = new FileInfo(@"C:\NepostojecaDatoteka.txt");
datoteka.Open(FileMode.Open);
University of Zagreb, Faculty of Organization and Informatics, Varadin 38
Odabrana poglavlja programskog inenjerstva razvoj programa
Rukovanje grekama u programskom kodu
Run-time greke
Run-time greke su one koje se pojave tek nakon to kompiliramo kd i pokrenemo ili pokuamo
pokrenuti aplikaciju. Ove greke uzrokuju pucanje programa i o njima nas Visual Studio obavjetava
kroz iznimke (eng. exceptions). Za razliku od design-time greaka, run-time greke esto nije lako
uoiti jer se ponekad pojavljuju u samo odreenim scenarijima koritenja programa. Zbog toga su
one i mnogo opasnije.
O run-time greki nas Visual Studio obavjetava kroz poruku o iznimci (Slika 25). Ako iznimka nije na
odgovarajui nain obraena, moemo oekivati pucanje programa.
Slika 24: Pokuaj otvaranja nepostojee datoteke
Logike greke
Logike greke je najtee uoiti. Njih Visual Studio nee prepoznati dok piemo kd, niti e iste nuno
uzrokovati pucanje programa. To su pogreke u logici programskog kda, koje je napravio
programer, te rezultiraju netonim i neoekivanim rezultatom izvoenja programa. Naalost, u
ovakvom sluaju nam Visual Studio ne moe mnogo pomoi. Osim temeljitog testiranja programa i
njegovih rezultata ne postoji drugi nain da pronaemo i otkrijemo logike greke.
Kd 25: Primjeri logikih greaka
private double IzracunajPovrsinuKruga(double polumjer)
{
//Logika greka kod izraunavanja povrine kruga (netona formula)
double povrsina = 0;
povrsina = polumjer * Math.PI;
return povrsina;
}
Slika 25: Pokuaj otvaranja nepostojee datoteke (debug)
University of Zagreb, Faculty of Organization and Informatics, Varadin 39
Odabrana poglavlja programskog inenjerstva razvoj programa
Rukovanje grekama u programskom kodu
3.3. Iznimke
Iznimke smo ve spomenuli kada smo govorili o run-time grekama te smo rekli da e greka za
vrijeme rada s programom u pravilu rezultirati iznimkom. U vremenu prije uvoenja iznimaka
postojalo je vie tehnika za rad s grekama. U pravilu je to ovisilo o programeru i aplikaciji koja se
razvija. Veina tih tehnika se temeljila na definiranju numerikih ili alfanumerikih konstanti koje su
predstavljale identifikator greke. Osim to ovakav pristup nije bio standardiziran, sam identifikator
nije mnogo govorio o samoj greki.
Uvoenjem mehanizma iznimaka pokualo se unificirati pristup rada s grekama, te ponuditi vie
informacija o greki od samog identifikatora greke. U skladu s objektnim principima C# programskog
jezika, i iznimke predstavljaju objekte koji sadravaju iscrpne informacije o greki koja se dogodila,
ukljuujui jasan opis, izvor, pomo itd. U .NET platformi postoji veliki broj predefiniranih iznimaka
koje moemo koristiti, a naravno moemo kreirati i vlastite iznimke.
Tablica 5: Tipovi iznimaka
esti tipovi iznimaka
Iznimka Opis
Exception Generika iznimka, ovu iznimku nasljeuju sve ostale.
ArgumentException Pojavljuje se kada pozivamo metodu u kojoj jedan od
parametara nije ispravan.
ArgumentNullException Pojavljuje se kada pozivamo metodu u kojoj je jedan od
parametara null vrijednost.
ArgumentOutOfRangeException Pojavljuje se kada pozivamo metodu u kojoj jedan od
parametara nije u zadanom rasponu vrijednosti.
ArithmeticException Pojavljuje se kada je generirana matematika greka.
DivideByZeroException Pojavljuje se ako pokuamo dijeliti sa nulom.
FormatException Pojavljuje se ako format parametra nije ispravan.
IndexOutOfRangeException Pojavljuje se ako pokuamo pristu
Recommended