Programsko inzenjerstvo

  • Upload
    cvigsy

  • View
    283

  • Download
    2

Embed Size (px)

DESCRIPTION

Programsko inzenjerstvo - skripta

Citation preview

  • 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