Ekonomski fakultet u Osijeku | EFOS - 3. Objektno ... · Web viewDa bi se izgradila kuća (stvarni...

42
Ekonomski fakultet u Osijeku, Razvoj poslovnih aplikacija Marijana Zekić-Sušac, Saša Mitrović 3. Objektno orjentirano programiranje (OOP) Objektno-orijentirano programiranje je pristup programiranju koji predstavlja koncepte stvarnog svijeta kao „objekte“ koji imaju svojstva (eng. properties) i pridružene procedure nazvane „metode“. (Wikipedia, 2013). Objektno orjentirani jezici su npr. C++, Smalltalk, Java, C#, Visual Basic, Delphi i dr. ŠTO JE OBJEKT? Objekt je u OOP neka stvar (ili biće) koja može imati svoja svojstva i može izvesti neke aktivnosti (zadatke) s pomoću metoda (CodeProject, 2013). To je ujedno i model instanci stvarnog svijeta. Npr, ako se izgrađuje aplikacija za evidenciju studenata, tada su objekti osobe za koje se unose podaci, ali su objekti i prozori u aplikaciji, dugmad, polja za unos podataka itd., tj. sve stvari koji se pojavljuju u aplikaciji. ŠTO JE KLASA? Klasa je tip ili vrsta nekog objekta. Npr. neka osoba na fakultetu je objekt, ali ona može biti tipa: student, profesor, asistent, službenik, portir, čistačica i dr. Ako je ta osoba student, onda ona pripada klasi „STUDENT“. „Student“ je dakle njezin tip osobe, odnosno njezina klasa u koju pripada. Ovo je dodatno pojašnjeno na donjoj slici. ŠTO JE INSTANCA? Instanca je primjerak neke klase. Npr. Pero Perić može biti instanca klase Student, OK dugme koje je smještenu na dnu prozora neke aplikacije može biti instanca klase Dugme (Button), itd. Na donjoj slici vidimo više objekata na Ekonomskom fakultetu u Osijeku. Objekti su osobe, namještaj, i različite druge stvari u prostoriji. Te objekte možemo svrstati u sljedeće klase: student, profesor, stolica, stol, prozor itd. 1

Transcript of Ekonomski fakultet u Osijeku | EFOS - 3. Objektno ... · Web viewDa bi se izgradila kuća (stvarni...

Page 1: Ekonomski fakultet u Osijeku | EFOS - 3. Objektno ... · Web viewDa bi se izgradila kuća (stvarni objekt) potreban je tlocrt kuće. Tlocrt kuće sadrži skup/kolekciju podataka i

Ekonomski fakultet u Osijeku, Razvoj poslovnih aplikacija Marijana Zekić-Sušac, Saša Mitrović

3. Objektno orjentirano programiranje (OOP)

Objektno-orijentirano programiranje je pristup programiranju koji predstavlja koncepte stvarnog svijeta kao „objekte“ koji imaju svojstva (eng. properties) i pridružene procedure nazvane „metode“. (Wikipedia, 2013). Objektno orjentirani jezici su npr. C++, Smalltalk, Java, C#, Visual Basic, Delphi i dr.

ŠTO JE OBJEKT? Objekt je u OOP neka stvar (ili biće) koja može imati svoja svojstva i može izvesti neke aktivnosti (zadatke) s pomoću metoda (CodeProject, 2013). To je ujedno i model instanci stvarnog svijeta. Npr, ako se izgrađuje aplikacija za evidenciju studenata, tada su objekti osobe za koje se unose podaci, ali su objekti i prozori u aplikaciji, dugmad, polja za unos podataka itd., tj. sve stvari koji se pojavljuju u aplikaciji.

ŠTO JE KLASA? Klasa je tip ili vrsta nekog objekta. Npr. neka osoba na fakultetu je objekt, ali ona može biti tipa: student, profesor, asistent, službenik, portir, čistačica i dr. Ako je ta osoba student, onda ona pripada klasi „STUDENT“. „Student“ je dakle njezin tip osobe, odnosno njezina klasa u koju pripada. Ovo je dodatno pojašnjeno na donjoj slici.

ŠTO JE INSTANCA? Instanca je primjerak neke klase. Npr. Pero Perić može biti instanca klase Student, OK dugme koje je smještenu na dnu prozora neke aplikacije može biti instanca klase Dugme (Button), itd.

Na donjoj slici vidimo više objekata na Ekonomskom fakultetu u Osijeku. Objekti su osobe, namještaj, i različite druge stvari u prostoriji. Te objekte možemo svrstati u sljedeće klase: student, profesor, stolica, stol, prozor itd.

Slika 3.1. Slikoviti primjeri objekata, klasa i instanci

1

Objekt: Osoba, pripada klasi Student, ali je to instanca Sanja Marić

Objekt: Namještaj, pripada klasi Stolica, instanca: prva stolica u prvom redu

Objekt: Osoba, pripada klasi Profesor, instanca: Boris Crnković

Objekt: Osoba, pripada klasi Student, instanca: Pero Perić

Page 2: Ekonomski fakultet u Osijeku | EFOS - 3. Objektno ... · Web viewDa bi se izgradila kuća (stvarni objekt) potreban je tlocrt kuće. Tlocrt kuće sadrži skup/kolekciju podataka i

Ekonomski fakultet u Osijeku, Razvoj poslovnih aplikacija Marijana Zekić-Sušac, Saša Mitrović

Pomoću objekata je olakšana interakcija između dijelova koda u aplikaciji, omogućeno je modularno programiranje i time brže kreiranje aplikacije.

Princip OOP može se slikovito objasniti i kroz gradnju kuće.

Da bi se izgradila kuća (stvarni objekt) potreban je tlocrt kuće. Tlocrt kuće sadrži skup/kolekciju podataka i funkcija o tome kakva kuća treba biti i što će se sve u njoj moći raditi. Isti taj skup skup/kolekciju podataka i funkcija sadrži i klasa u nekom objektnom jeziku, npr. C#-u. (svi primjeri u nastavku bit će prikazani u programskom jeziku C#).

class Kuca{ public decimal Kvadratura { get; set; } public decimal BrojSoba { get; set; }

public void OtvoriVrata() {

}

public void UkljuciGrijanje() {

}

}Slika 3.2. Usporedba kuće i klase

2

Tlocrt kuće (Izvor: www.interijer.com)

Ovo je metoda nazvana OtvoriVrata

Ovo je metoda nazvana UkljuciGrijanje

Page 3: Ekonomski fakultet u Osijeku | EFOS - 3. Objektno ... · Web viewDa bi se izgradila kuća (stvarni objekt) potreban je tlocrt kuće. Tlocrt kuće sadrži skup/kolekciju podataka i

Ekonomski fakultet u Osijeku, Razvoj poslovnih aplikacija Marijana Zekić-Sušac, Saša Mitrović

Na Slici 3.2. desno u programu C# kreirana je klasa pod nazivom Kuca (s pomoću naredbe: class Kuca), a u vitičastim zagradama su za tu klasu definirana dva svojstva (Kvadratura i BrojSoba), te dvije metode: OtvoriVrata i UkljuciGrijanje. Te metode još ništa ne rade (jer u vitičastim zagradama za svaku metodu još nisu napisane naredbe koje bi nešto izvodile), ali te metode pripadaju klasi pod nazivom „Kuca“ i nakon što se za svaku metodu u vitičastim zagradama upišu naredbe, one će nešto izvoditi.

Da bi se kuća izgradila potreban je alat i tlocrt po kojemu se kuća radi, dok u C# se koristi riječ instanca za izgradnju a umjesto alata upotrebljava se ključna riječ new.

Izvor: growmap.com

Kuca instancaKuca = new Kuca();

Slika 3.2. Kreiranje instance pod nazivom „instancaKuca“ koja pripada klasi Kuca

Uočite na Slici 3.2. da kad se u aplikaciji treba kreirati neka nova instanca neke klase, potrebno je napisati najprije naziv klase u koju instanca pripada (Kuca), zatim naziv instance (proizvoljno, npr. instancaKuca), zatim znak jednakosti, pa iza toga ključna riječ „new“, te naziv klase sa okruglim zagradama (Kuca()). Ova se naredba još zove i „konstruktor“ jer kreira nešto novo.

Nakon izgradnje fizičke kuće nastao je stvarni objekt, a isto tako i u aplikaciji, nakon instanciranja klase nastaje konkretni objekt s podacima i funkcijama koje se mogu koristiti.

Izvori(www.theguardian.com, www.sa.gov.au)

Slika 3.3. Usporedba instance fizičke kuće i instance u aplikaciji

Na Slici 3.3. desno, nakon što je u aplikaciji kreirana instanca pod nazivom instancaKuca, tada se ona može koristiti tako da se pozove neka njezina metoda, npr. metoda UkljuciGrijanje. Cijela naredba izgledala bi:

3

Kuca

KvadraturaBrojSobaOtvoriVrataUkljuciGrijanje

instancaKuca.UkljuciGrijanje();

instancaKuca.UkljuciGrijanje();

Page 4: Ekonomski fakultet u Osijeku | EFOS - 3. Objektno ... · Web viewDa bi se izgradila kuća (stvarni objekt) potreban je tlocrt kuće. Tlocrt kuće sadrži skup/kolekciju podataka i

Ekonomski fakultet u Osijeku, Razvoj poslovnih aplikacija Marijana Zekić-Sušac, Saša Mitrović

Na taj način se u OOP koriste objekti, klase i njihove instance.

Svaka klasa u OOP može imati:

Svojstva (eng. properties) – atributi klase Metode – s pomoću kojih se na instanci klase može nešto napraviti Polja (eng. Fields) – u kojima se čuvaju vrijednosti Varijable (opcionalno – neka klasa može, a i ne mora sadržavati varijable u koje se lokalno

spremaju neke vrijednosti unutar klase)

U bilo kojem objektnom programskom jeziku koriste se ovi osnovni koncepti objektno-orjentiranog programiranja (CodeProject, 2011):

Enkapsulacija (eng. encapsulation) - ili skrivanje informacija, učahurivanje Nasljeđivanje (eng. inheritance) Polimorfizam (eng. polymorphism) - ili „mnogo oblika“)

Enkapsulacija

Enkapsulacija je uključivanje u objekt svih resursa koje su potrebni objektu da bi funkcionirao (CodeProject, 2011). Drugim riječima, sve metode i podaci potrebni objektu da bi se nešto napravilo na njemu nalaze se upisani u objektu (npr. u klasi), i nisu poznati ostalim objektima. Klasa je kao kontejner ili kapsula ili čahura ili ćelija koja sakriva u sebi skup metoda svojstava koji su potrebni za njezinu funkcionalnost prema drugim klasama. Klase mogu koristiti javne metode i svojstva s kojima će komunicirati s ostalim klasama, ali uglavnom se u klasama koriste privatne metode i svojstva.

Na taj način, klasa može promijeniti svoju internu implementaciju bez da se narušava funkcionalnost cijelog sustava, odnosno aplikacije.

Sama ideja enkapsulacije je sakriti KAKO klasa nešto radi, ali dozvoliti da se od klase traži da to napravi.

Primjer: Možemo pozvati metodu UkljuciGrijanje da uključi grijanje u instanci instancaKuca s pomoću sljedeće naredbe, ali ne znamo kako ta metoda to radi, jer je to skriveno unutar klase.

instancaKuca.UkljuciGrijanje();

Nasljeđivanje

Nasljeđivanje je mogućnost kreiranja novih klasa iz postojećih, pri čemu novokreirana klasa nasljeđuje sva svojstva klase iz koje je kreirana, ali ih može i proširiti (dodati nova svojstva i metode). Npr. na slici je grafički prikazana klasa Student, koja ima dva svojstva. Ime (tekstualnog tipa String) i Starost (Numeričkog cjelobrojnog tipa Int). Ako nakon toga kreiramo novu klasu pod nazivom redovitiStudent, tada će nova klasa nasljediti sva svojstva već postojeće klase iz koje je nastala, ali može imati i dodatno svojstvo npr. obavezaPredavanja.

4

Page 5: Ekonomski fakultet u Osijeku | EFOS - 3. Objektno ... · Web viewDa bi se izgradila kuća (stvarni objekt) potreban je tlocrt kuće. Tlocrt kuće sadrži skup/kolekciju podataka i

Ekonomski fakultet u Osijeku, Razvoj poslovnih aplikacija Marijana Zekić-Sušac, Saša Mitrović

Slika 3.4. Nasljeđivanje svojstava klase

Pri tome je klasa Student super-klasa klase redovitiStudent, a redovitiStudent je podklasa klase Student. Na sličan način i instace u OOP nasljeđuju svojstva klasa kojima pripadaju, npr. Pero Perić nasljeđuje svojstva klase Student (tj. Ime i Starost).

Polimorfizam

Polimorfizam je mogućnost da se iste operacije mogu izvesti od strane više različitih tipova objekata.

U OOP, polimorfizam se postiže korištenjem više različitih tehnika, kao što su: method overloading, operator overloading and method overriding. Method overloading Method overloading je mogućnost definiranja više različitih metoda ali s istim nazivom.Primjer (CodeProject, 2011):public class MyLogger{ public void LogError(Exception e) { // Implementation goes here }

public bool LogError(Exception e, string message) { // Implementation goes here }}

U gornjem primjeru, definirana je najprije klasa pod nazivom MyLogger, zatim u toj klasi metoda pod nazivom LogError kojoj se u zagradi prosljeđuje samo jedan parametar (Exception e), ali i još jedna metoda s istim nazivom kojoj se u zagradi prosljeđuju dva parametra (Exception e, string message). Kada se pozove ta metoda, ovisno o tome koliko joj se parametara proslijedi, pozvat će se odgovarajuća metoda LogError.

5

Student

Ime: String

Starost: Int

Student

Ime: String

Starost: Int

Student

Ime: String

Starost: Int

Student

Ime: String

Starost: Int

Student

Ime: String

Starost: Int

Student

Ime: String

Starost: Int

Student

Ime: String

Starost: Int

Student

Ime: String

Starost: Int

Student

Ime: String

Starost: Int

Student

Ime: String

Starost: Int

Student

Ime: String

Starost: Int

Student

Ime: String

Starost: Int

Student

Ime: String

Starost: Int

Student

Ime: String

Starost: Int

Student

Ime: String

Starost: Int

Student

Ime: String

Starost: Int

Student

Ime: String

Starost: Int

Student

Ime: String

Starost: Int

Student

Ime: String

Starost: Int

Student

Ime: String

Starost: Int

redovitiStudent

Ime: String

Starost: Int

ObavezaPredavanja: String

redovitiStudent

Ime: String

Starost: Int

ObavezaPredavanja: String

redovitiStudent

Ime: String

Starost: Int

ObavezaPredavanja: String

redovitiStudent

Ime: String

Starost: Int

ObavezaPredavanja: String

redovitiStudent

Ime: String

Starost: Int

ObavezaPredavanja: String

redovitiStudent

Ime: String

Starost: Int

ObavezaPredavanja: String

redovitiStudent

Ime: String

Starost: Int

ObavezaPredavanja: String

redovitiStudent

Ime: String

Starost: Int

ObavezaPredavanja: String

redovitiStudent

Ime: String

Starost: Int

ObavezaPredavanja: String

redovitiStudent

Ime: String

Starost: Int

ObavezaPredavanja: String

redovitiStudent

Ime: String

Starost: Int

ObavezaPredavanja: String

redovitiStudent

Ime: String

Starost: Int

ObavezaPredavanja: String

redovitiStudent

Ime: String

Starost: Int

ObavezaPredavanja: String

redovitiStudent

Ime: String

Starost: Int

ObavezaPredavanja: String

redovitiStudent

Ime: String

Starost: Int

ObavezaPredavanja: String

redovitiStudent

Ime: String

Starost: Int

ObavezaPredavanja: String

redovitiStudent

Ime: String

Starost: Int

ObavezaPredavanja: String

redovitiStudent

Ime: String

Starost: Int

ObavezaPredavanja: String

redovitiStudent

Ime: String

Starost: Int

ObavezaPredavanja: String

redovitiStudent

Ime: String

Starost: Int

ObavezaPredavanja: String

Page 6: Ekonomski fakultet u Osijeku | EFOS - 3. Objektno ... · Web viewDa bi se izgradila kuća (stvarni objekt) potreban je tlocrt kuće. Tlocrt kuće sadrži skup/kolekciju podataka i

Ekonomski fakultet u Osijeku, Razvoj poslovnih aplikacija Marijana Zekić-Sušac, Saša Mitrović

Operator overloadingOperator overloading je specifičan slučaj polimorfizma u kojem se neki ili svi operatori (kao npr. +, -, ==, tretiraju kao polimorfne funkcije i kao takve mogu imati različita ponašanja ovisno o tipu svojih argumenata. Method overridingMethod overriding je mogućnost da neka podklasa prepisuje implementaciju neke metode koja je već definirana u programu od strane neke njezine super-klase. Podklasa može dati svoju vlastitu definiciju metode, ali mora imati isti potpis (odnosno isti naziv i listu parametara) kao i metoda u njezinoj super-klasi.

Primjer: (CodeProject, 2011)public override string ToString() { return (String.Format("{0} + {1}i", real, imaginary)); }

U gornjem primjeru, definirana je metoda ToString kao override metoda, jer metoda ToString već postoji prije definirana i ona pretvara neki tip u tekst. Ova nova override metoda formatira neki string kao realni imaginarni broj.Više informacija o tim tehnikama kasnije, u okviru naredbi C# jezika.

Programski jezik C#

U ovom poglavlju obradit će se osnovne naredbe programskog jezika C# u alatu Visual Studio Express for Windows Desktop, kroz izradu prvog projekta i aplikacije 'Hello World'. Aplikacija će biti kreirana kao tip konzolne aplikacije (eng. Console Application), kako bismo objasnili osnovne naredbe na što jednostavniji način, bez umetanja grafičkih sučelja koja se koriste u MVC aplikacijama i Web form aplikacijama.

Napomena: za izradu primjera u ovom poglavlju potrebno je instalirati na svoje računalo Visual Studio Express for Windows alat, sa stranice: http://www.microsoft.com/visualstudio/eng/products/visual-studio-express-products

Najprije, da bi se kreirao novi projekt, potrebno je u alatu Visual Studio odabrati opciju iz izbornika File -> New1. Otvoriti će se dijaloški okvir za odabir vrste novog projekta (eng. New Project). Na popisu s lijeve strane, pod Installed > Templates > Visual C# treba odabarti Windows, te zatim u srednjem dijelu dijaloškog okvira potrebno je odabrati Console Application.

Kako bi se dovršila izrada projekta potrebno je zadati ime programa (eng. Name).2 Nakon toga, postoji još opcija kreiranja mape, od strane Visual Studia, za rješenje (eng. Solution), ispunjavanjem polja odabira kvačicom, Create directory for solution. Navedeno polje se odabire u slučaju ako se izrađuje više međusobno povezanih projekata ili komponenti, s obzirom da će primjer koji slijedi imati više projekata – potrebno je označiti polje za kreiranje mape. Na slici 1. prikazan je navedeni postupak.

1 Kratica za odabir navedenog izbornika je kombinacija tipki Ctrl+Shift+N. 2 Visual Studio uvijek predloži ime programa s nazivom odabranog predloška i broja pored njega (na primjer, ConsoleApplication1).

6

Page 7: Ekonomski fakultet u Osijeku | EFOS - 3. Objektno ... · Web viewDa bi se izgradila kuća (stvarni objekt) potreban je tlocrt kuće. Tlocrt kuće sadrži skup/kolekciju podataka i

Ekonomski fakultet u Osijeku, Razvoj poslovnih aplikacija Marijana Zekić-Sušac, Saša Mitrović

Slika 3.4. Kreiranje konzolne aplikacije

Pritiskom gumba OK, Visual Studio će izraditi novi projekt, mapu i skup datoteka koje će novokreirani projekt koristiti.

Pregled C# izvornog koda

Izvorni kod jezika C# se pohranjuje u datoteke s ekstenzijom cs, te sav kod koji programeri napišu u tekstualnom editoru Visual studia će pohraniti u datoteke, čiji naziv sami odabiru, ali ekstenzija mora ostati cs. U nastavku slijedi pregled generiranog C# koda prilikom izrade novog projekta.

7

Page 8: Ekonomski fakultet u Osijeku | EFOS - 3. Objektno ... · Web viewDa bi se izgradila kuća (stvarni objekt) potreban je tlocrt kuće. Tlocrt kuće sadrži skup/kolekciju podataka i

Ekonomski fakultet u Osijeku, Razvoj poslovnih aplikacija Marijana Zekić-Sušac, Saša Mitrović

Izvorni kod u datotekama s nastavkom cs u Visual Studiu uvijek počinje s imenskim prostorima (eng. Namespaces). Oni sadržavaju razne tipove usluga za rješavanje problema koji su postavljeni.

Na primjer, imenski prostor System sadrži tip Console.WriteLine() koji pruža uslugu ispisa teksta u konzoli, samo je potrebno tekst napisati unutar zagrada kako bi ga navedeni tip ispisao.

Također System sadrži i tipove koji predstavljaju brojeve poput tipa int, tekst tip string, tipove koji pružaju informacije o računalu i korisniku ( Environment) i drugi.

Ostali navedeni imenski prostori, u primjeru, pružaju tipove koji služe za složenije operacije, odnosno probleme koje treba riješiti. Među njima su System.Collections.Generic pomoću kojeg se manipulira nad skupom podataka ili popisima, System.Linq sadrži dodatke C# jeziku koji se nazivaju izrazi za upite (eng. query expressions), a svrha im je manipulacija nad bazama i skupovima podataka, System.Text sadrži tipove za pretvaranje znakova (na primjer, naših slova) u byte-ove i za pretvaranje byte-ova u u znakove, dok System.Threading.Tasks sadržava tipove za paralelno izvršavanje više dijelova koda, odnosno istovremeno rješavanje više problema.

U navedenom primjeru ostao je još jedan imenski prostor HelloWorld, a to je imenski prostor kreiranog projekta, odnosno vlastito kreirani imenski prostor koji sadrži tip za ispis teksta Hello World.

8

Page 9: Ekonomski fakultet u Osijeku | EFOS - 3. Objektno ... · Web viewDa bi se izgradila kuća (stvarni objekt) potreban je tlocrt kuće. Tlocrt kuće sadrži skup/kolekciju podataka i

Ekonomski fakultet u Osijeku, Razvoj poslovnih aplikacija Marijana Zekić-Sušac, Saša Mitrović

Zašto koristiti imenske prostore?

Osnovna svrha imenskih prostora je organizacija i kategorizacija usluga i tipova koje pružaju. Prilikom korištenja tipova i usluga, imenski prostori se ne moraju navoditi, pa je tako ispravno napisati i

System.Console.WriteLine(„Hello World“);

kao i

Console .WriteLine(„Hello World“);

pa se drugi, kraći način pisanja bez navođenja prostora za nazive češće koristi. Drugi problem koji rješavaju imenski prostori su i razdvajanje tipova koji rješavaju slične probleme ali u različitim tehnologijama. Na primjer, tip za prikaz poruka (eng. MessageBox) u tehnologiji Windows Forms se nalazi u imenskom prostoru System.Windows.Forms, dok isti tip s istom zadaćom u WPF tehnologiji se nalazi u System.Windows imenskom prostoru. U ovom slučaju mora se se zadati imenski prostor kako bi razvojni alat znao koji tip treba koristiti.

Više o imenskim prostorima u .NET bibliotekama na Microsoftovoj razvojnoj mreži na stranicama: http://msdn.microsoft.com/en-us/library/z2kcy19k%28v=vs.110%29.aspx i http://msdn.microsoft.com/en-us/library/0d941h9d.aspx.

Varijable i tipovi

C# je strongly-typed jezik, što znači da svaka imenovana metoda može čuvati informacije određene po svome tipu. Prethodno spomenute informacije se spremaju u varijable, a ta varijabla ima utvrđen tip. Varijable mogu mijenjati svoje vrijednosti tokom izvršavanja programa, te uglavnom služe kao ulazni parametri i izlazne vrijednosti metoda. U 1. primjeru prikazana je metoda koja ima dvije ulazne varijable određenog tipa Int (cijeli broj), te izlaznu vrijednost varijable istog tipa.

9

Page 10: Ekonomski fakultet u Osijeku | EFOS - 3. Objektno ... · Web viewDa bi se izgradila kuća (stvarni objekt) potreban je tlocrt kuće. Tlocrt kuće sadrži skup/kolekciju podataka i

Ekonomski fakultet u Osijeku, Razvoj poslovnih aplikacija Marijana Zekić-Sušac, Saša Mitrović

Kao što je vidljivo u primjeru prisutne su četiri varijable – dvije kao ulazni parametri, jedna u svrsi izlazne vrijednosti, te treća definirana u koju pohranjujemo izlaznu vrijednost. Napisana metoda prima dvije varijable (broj1 i broj2), varijable koje definiramo kada kada pozivamo metodu da se izvrši u programu (Izracun(20, 10)), što znači da u navedenom primjeru prilikom pozivanja metode vrijednost varijable brojDjeljenik je 20 a vrijednost varijable brojDjelitelj je 10. Zatim metoda Izračun dijeli varijablu brojDjeljenik s varijablom brojDjelitelj i vraća (ključna riječ return) vrijednost tipa cijeli broj (riječi int ispred naziva metode Izračun). Ovo je primjer kada metoda vraća vrijednost, u nastavku je primjer gdje su ulazni parametri definirani pri postavljanju metode, te metoda ne vraća vrijednost, već je samo ispisuje u konzoli.

10

Page 11: Ekonomski fakultet u Osijeku | EFOS - 3. Objektno ... · Web viewDa bi se izgradila kuća (stvarni objekt) potreban je tlocrt kuće. Tlocrt kuće sadrži skup/kolekciju podataka i

Ekonomski fakultet u Osijeku, Razvoj poslovnih aplikacija Marijana Zekić-Sušac, Saša Mitrović

Važna stvar kod objektnog programiranja je i imenovanje varijabli, jer imena varijabli trebaju govoriti kakvi se podaci pohranjuju u njih i čemu te varijable služe. U primjerima je vidljivo da u varijble pohranjujemo broj, te jedan je djeljenik a drugi djelitelj, dok treća varijabla je dobivena vrijednost koja je isto broj. Takav način imenovanja varijabli je vrlo bitan jer varijable su se mogle nazvati i a, b, c ali to ne bi bilo korisno programerima koje te varijable koriste pošto s imenima a, b, c ne znaju koji rezultat te varijable trebaju postići, niti kojeg su tipa, te kako ih treba koristiti. U konkretnom primjeru, programer ne bih znao koja od a, b, c varijabli je djeljitelj, koja djeljenik, te u koju se pohranjuje rezultat, te kakav rezultat. Stoga kod imenovanja treba dati dobro opisno ime, kako bi programeri znali kakve podatke varijable obrađuju. Ako se naziv varijable sastoji od dvije riječi, treba ih spojiti u jednu riječ koristeći tzv. Camel Casing način: da se prva riječ piše malim slovom, a druga velikim početnim slovom, ali da se riječi spajaju zajedno, budući da naziv varijable mora biti jedan niz znakova.

Tipovi varijabli

Tipove varijabli se dijele na brojčane, tekstualne i varijable koje provjeravaju istinitost neke informacije (točno / netočno). U prethodnim primjerima su deklarirani cijelo-brojčani tipovi varijabli, no osim njih .NET platforma nudi još nekoliko tipova brojčanih podataka. U nastavku, u tablici, su prikazani svi brojčani tipovi podataka:

Tablica 1: Numerički tipovi (adaptirano prema: Griffiths, 2012)

C# ime .NET ime Namjenafloat System.Single Cijeli brojevi i određeni razlomci s širokim

rasponom zbog „pomičnog zareza“. Zauzima 32 bita.

double System.Double Verzija tipa float s dvostrukom preciznošću. Zauzima 64 bita.

byte System.Byte Ne-negativni cijeli broj. Zauzima 8 bita. Predstavlja vrijednost od 0 do 255.

sbyte System.SByte Cijeli broj s predznakom. Zauzima 8 bita.

11

Page 12: Ekonomski fakultet u Osijeku | EFOS - 3. Objektno ... · Web viewDa bi se izgradila kuća (stvarni objekt) potreban je tlocrt kuće. Tlocrt kuće sadrži skup/kolekciju podataka i

Ekonomski fakultet u Osijeku, Razvoj poslovnih aplikacija Marijana Zekić-Sušac, Saša Mitrović

Predstavlja vrijednost od -128 do 127.short System.Int16 Cijeli broj s predznakom. Zauzima 16 bita.

Predstavlja vrijednosti od -32768 do 32767.ushort System.UInt16 Ne-negativni cijeli broj.Zauzima 16 bita. Predstavlja

vrijednosti od 0 do 65535.int System.Int32 Cijeli broj s predznakom. Zauzima 32 bita.

Predstavlja vrijednosti od -2147483648 do 2147483647.

uint System.UInt32 Cijeli broj s predznakom. Zauzima 32 bita. Predstavlja vrijednosti od -0 do 4294967295.

long System.Int64 Cijeli broj s predznakom. Zauzima 64 bita. Predstavlja vrijednosti od -9223372036854775808

do 9223372036854775807.ulong System.UInt64 Cijeli broj s predznakom. Zauzima 64 bita.

Predstavlja vrijednosti od 0 do 18446744073709551615.

(ništa) System.Numerics.BigInteger Cijeli broj s predznakom. Raste po potrebi. Raspon vrijednosti ograničen je samo količinom memorije.

decimal System.Decimal Podržava cijele brojeve i razlomke. Nešto je manje učinkovit nego double ali se predvidljivije ponaša

kada se koriste decimalne vrijednosti.

Cijeli brojevi

Tip int (skraćeno od integer) predstavlja cijelobrojne vrijednosti. Upravo su se cijeli brojevi koristili u prethodnom primjeru varijabli. Glavna prednost int-a je njegova točnost jer će uvijek vratiti točan cijeli broj, Na primjer broj 20,00001 će vratiti kao 20, isto tako broj 2,17 će vratiti kao 2. U aplikacijama koje se razvijaju, u varijable tipa int se pohranjuju vrijednosti poput broja redova u tablici baze podataka ili nekoj sličnoj informaciji koja je potrebna u razvoju aplikacije, poput broja niza brojeva u određenom popisu brojeva.

Također, int može predstavljati i negativne količine, odnosno tip int može predstavljati brojeve u rasponu od -2.147.483.648 do 2.147.483.647.

Pored toga, što mogu biti i s negativnim predznakom, mogu imati i različite raspone veličina. Detaljan prikaz svih tipova dan je u tablici.

Tipovi s pomičnim zarezom

Tipovi double, float i decimal podržavaju brojeve s razlomljenim dijelovima. Na primjer, broj poput 2,17 se može predstaviti s prethodno navedena tri tipa, dok se ne može s cjelobronim tipom (int).

12

Page 13: Ekonomski fakultet u Osijeku | EFOS - 3. Objektno ... · Web viewDa bi se izgradila kuća (stvarni objekt) potreban je tlocrt kuće. Tlocrt kuće sadrži skup/kolekciju podataka i

Ekonomski fakultet u Osijeku, Razvoj poslovnih aplikacija Marijana Zekić-Sušac, Saša Mitrović

Nazivaju se 'Tipovi s pomičnim zarezom' zbog načina spremanja vrijednosti. Ti brojevi sadrže fiksan broj binarnih mjesta, odnosno znamenki brojeva. Na primjer, decimalni broj 4,185 sadrži četiri znamenke, od toga tri iza decimalnog separatora, taj separator predstavlja binarni zarez koji se pokretan, pa od toga i naziv pokretni. Broj 4,85666 sadrži isto šest znamenki, ali od tih šest znamenki pet ih je iza separatora.

Jedina razlika između tih tipova je u preciznosti koju pružaju; float nudi preciznost od oko sedam do osam decimalnih mjesta, double sedamnest do osamnest decimalnih mjesta, dok decimal ima preciznost od dvadeset osam decimalnih mjesta. Točna preciznost u decimalnim mjestima se ne može izraziti jer ti tipovi nude preciznost u binarnim formatima odnosno mjestima, konkretno float ima preciznost od dvadeset tri, a double od pedest dva binarna mjesta. Također, bitno je istaknuti da se double i float koriste za znanstvene izračune, dok decimal služi za financijske. Promatrajući izračune u sljedećem kodu prethodno istaknuto dolazi do izražaja:

Ovaj rezultat iznenadi mnoge programere, ali je sasvim normalan. Ako je float-u dostupna samo ograničena količina prostora, taj tip ne može predstaviti broj s potpunom preciznošću. U konkretnom primjeru da bi float prikazao potpuno precizan broj potrebno mu je tri decimalna mjesta, dok je kod zaokruživanja na dva izgubljeno jedno mjesto i s tim prestaje potpuna preciznost tog tipa. Ta vrsta netočnosti je prisutna i u ostalim programskim jezicima. U mnogim poslovnim aplikacijama su prikazani izračuni značajne važnosti, stoga je bitno odabarati prave tipove za spremanje podataka u varijable.

U prethodnom primjeru su ispisana slova m i f. Navedena slova su ispisana kako bi C# prepoznao o kojem je tipu riječ, jer bez tih slova C# tretira takve i slične brojeve kao tip double, a to je bitno C#-u eksplicitno reći kako bih znao kakvu preciznost treba primjeniti za deklarirani broj, jer, prethodno je rečeno, da se Tipovi s pomičnim zarezom razlikuju jedino po preciznosti.

13

Page 14: Ekonomski fakultet u Osijeku | EFOS - 3. Objektno ... · Web viewDa bi se izgradila kuća (stvarni objekt) potreban je tlocrt kuće. Tlocrt kuće sadrži skup/kolekciju podataka i

Ekonomski fakultet u Osijeku, Razvoj poslovnih aplikacija Marijana Zekić-Sušac, Saša Mitrović

14

Page 15: Ekonomski fakultet u Osijeku | EFOS - 3. Objektno ... · Web viewDa bi se izgradila kuća (stvarni objekt) potreban je tlocrt kuće. Tlocrt kuće sadrži skup/kolekciju podataka i

Ekonomski fakultet u Osijeku, Razvoj poslovnih aplikacija Marijana Zekić-Sušac, Saša Mitrović

Operatori

Operatori su dio koda pomoću kojih se postiže određeni rezultat. U prethodnim primjerima su viđeni operatori pomoću kojih se dolazilo do željenog izračuna. Ti viđeni operatori se nazivaju, konkretno, aritmetički operatori, koji su navedeni u nastavku:

+ Zbrajanje, - Oduzimanje, * Množenje, / Dijeljenje, % Ostatak nakon dijeljenja.

Kao što je prethodno navedeno, operatori pomažu pri postizanju neke vrste rezultata. Kako bi operatori „pomogli“ bitno je utvrditi koji se zahtjevi trebaju ispuniti za njihovo korištenje. U prethodnom primjeru je korišten operator /, te da bi dao rezultat zahtjevao je dva ulaza – djeljenika i djeljitelja. Druga stvar koje se primjećuje, je korištenje imena varijabli i literala. Korištenje takvih mješavina je dopušteno u C#-u, dok god su te varijable brojčanog tipa.

Također je dopuštena mješavina tipova cijelih brojeva i s pomičnim zarezom.

Iskazi pridruživanja

C# nudi iskaze za pridruživanje koje kod čine preglednijim i sažetijim. Na primjer, ako se uzme obična matematička operacija zbrajanja kao dolje navedena:

x = x + y;Ovdje se evaluira izraz s desne strane (y) i zatim pridodaje izrazu s lijeve strane (x), da bi se navedeni kod učinio sažetijim u C# postoji posebna sintaksa koja to omogućava:

x += y; Ovaj izraz ima isti učinak kao i prethodno navedeni. Također postoje i ekvivalenti za druge matematičke operacije:

-= *=

Operatori povećanja i smanjivanja

Operatori povećanja i smanjivanja prestavljaju posebnu sintaksu u C# kodu pomoću koje određenu vrijednost povećavaju i smanjuju za 1. Na primjer, vrijednost se može povećati ovako:

15

Page 16: Ekonomski fakultet u Osijeku | EFOS - 3. Objektno ... · Web viewDa bi se izgradila kuća (stvarni objekt) potreban je tlocrt kuće. Tlocrt kuće sadrži skup/kolekciju podataka i

Ekonomski fakultet u Osijeku, Razvoj poslovnih aplikacija Marijana Zekić-Sušac, Saša Mitrović

x += 1;Ovaj iskaz će povećati x za 1, ali pošto je operacija dodavanja jedinice vrlo važna, projektanti C# jezika su uveli posebnu sintakstu s kojom bi to postigli, a pri tom učinili kod sažetijim. Prethodni primjer soperatorom povećanja bi izgledao ovako:

x ++;Kada bi koristili operator smanjivanja, onda bi primjer izgledao ovako:

x --;

Tipovi String i Char

Kostur za .NET pruža dva tipa koji odgovaraju znakovima: String i Char. Također, kao što je u prethodnoj tablici prikazano, ti tipovi su toliko važi da imaju i C# imena string i char. String pruža uređeni niz znakova u navodnicima poput ove rečenice „Ovo je prikaz tipa za znakove.“, dok char predstavlja unikodni znak koji se može ispisati kao literal, hexadecimalna sekvenca ili unicode. Primjeri stringova i charova su dolje navedeni:

Uvjetni iskazi

Uvjetni iskazi su iskazi odabiranja koji odlučuju hoće li se izvršiti određeni dio koda na temelju vrijednosti koja se evaluira. Među njima postoje dva iskaza; iskaz if je namijenjen jednostavnom vrednovanju izraza, dok se iskaz switch i case koristi za složenije procjene izraza.

16

Page 17: Ekonomski fakultet u Osijeku | EFOS - 3. Objektno ... · Web viewDa bi se izgradila kuća (stvarni objekt) potreban je tlocrt kuće. Tlocrt kuće sadrži skup/kolekciju podataka i

Ekonomski fakultet u Osijeku, Razvoj poslovnih aplikacija Marijana Zekić-Sušac, Saša Mitrović

Iskaz if

Iskaz if se najčešće koristiti kada postoji vrijednost/vrijednosti koje treba evaluirati s ciljem donošenja odluke s dva ishoda – program izvršava jedan blok koda ako je ishod točan, a ako nije drugi dio koda. Takav način donošenja odluke u iskazu if, konceptualno izgleda ovako:

Ovaj primjer ilustrira da iskaz if pri pripremi za donošenje odluke provjerava je li je IzrazKojiSeEvaluira ISTINIT ili LAŽAN. Takav način evaluacije je uvijek prisutan kod iskaza if, bez obzira na tip ili vrstu vrijednosti, odnosno iskaz if uvijek daje samo povratnu informaciju je li je neki izraz istinit ili lažan. U sljedećem, konkretnom, primjeru evaluira se vrijednost tekstualne varijable:

Konkretan primjer iskaza if

Gore navedeni primjer će izvršiti blok koda ispod else ključne riječi jer izraz koji evaluiramo nije istinit. Iskaz if može imati i više evalucija vrijednosti, ali s time će postati i manje čitljiviji programeru.Takav primjer izgleda ovako:

17

Page 18: Ekonomski fakultet u Osijeku | EFOS - 3. Objektno ... · Web viewDa bi se izgradila kuća (stvarni objekt) potreban je tlocrt kuće. Tlocrt kuće sadrži skup/kolekciju podataka i

Ekonomski fakultet u Osijeku, Razvoj poslovnih aplikacija Marijana Zekić-Sušac, Saša Mitrović

Primjer složenog if iskaza

Ovaj primjer iskaza se može jednostavnije napisati tako da se zada popis očekivanih vrijednosti i radnji što za svaku od njih treba napraviti – takav iskaz je poznatiji pod nazivom switch i case.

Iskaz switch i case

Iskaz switch i case evaluira vrijednosti s ograničenjima koje su mu postavljeni i ako je jedna opcija (C#: case ) točna – ispunjava njegovu zadanu radnju i izlazi iz iskaza (C#: break). U nastavku je napisan prethodni primjer prepravljen u ovaj iskaz:

18

Page 19: Ekonomski fakultet u Osijeku | EFOS - 3. Objektno ... · Web viewDa bi se izgradila kuća (stvarni objekt) potreban je tlocrt kuće. Tlocrt kuće sadrži skup/kolekciju podataka i

Ekonomski fakultet u Osijeku, Razvoj poslovnih aplikacija Marijana Zekić-Sušac, Saša Mitrović

Primjer switch i casea iskaza

Gore navedeni primjer je puno čitljiviji u odnosu na isti napisan u if iskazi – promatra se jedna vrijednost i odabire opcija ovisno o evaluaciji te vrijednosti, a ako nema istinitog izraza izvršava se blok koda u default opciji i zatim izlazi iz iskaza pomoću ključne riječi break. Dodatna prednost ovog iskaza je u tome što opcija za evaluaciju može biti jedna vrijednost tipa string jer je tog tipa i vrijednost koja se evaluira – takva značajka kod čini razumljivijim i lakšim za održavanje. Iskaz if nema takvog ograničenja i zbog toga nekada zna učiniti kod teže shvatljivim.

Petlje

Petlje omogućuju izvršavanje bloka koda više puta. Često u programiranju je potrebno neki dio koda ponovno ili više puta zaredom izvršiti, kako se ne bi taj dio koda ponovno pisao i tako stvarao dupli kod, projektanti programskih jezika su razvili petlje koje izvršavaju isti dio koda ovisno o evaluaciji uvjeta i vrijednosti koje im programeri zadaju.

Petlja foreach

Petlja foreach izvršava blok koda za svaku stavku u određenom skupu vrijednosti, primjerice u nizu vrijednosti. Na primjer:

19

Page 20: Ekonomski fakultet u Osijeku | EFOS - 3. Objektno ... · Web viewDa bi se izgradila kuća (stvarni objekt) potreban je tlocrt kuće. Tlocrt kuće sadrži skup/kolekciju podataka i

Ekonomski fakultet u Osijeku, Razvoj poslovnih aplikacija Marijana Zekić-Sušac, Saša Mitrović

Foreach petlja

Primjer navedene foreach petlje ilustrira uzimanje jednog imena iz zadanog niza imena u dijelu foreach(string jednoIme in nizImena) i njegovo ispisivanje na ekranu pomoću Console.WriteLine(jednoIme), zatim se ponovno vraća na dio foreach(string jednoIme in nizImena) i opet uzima jedno ime, ali ovaj puta drugo po redu (jer je prvo3 ispisao) i zatim i njega ispisuje pomoću Console.WriteLine(jednoIme). Na takav način, petlja će se izvršavati sve dok ne ispiše sva imena.

Petlja for

Petlja for se koristi kada se unaprijed zna koliko puta se mora ponoviti izvršavanje određenog bloka koda. Petlja for konceptualno izgleda ovako:

Značenje parametara:

početniBrojač – s kojom vrijednošću petlja počinje brojati koliko puta se treba izvršiti ukupanBrojIzvršavanjaPetlje – koliko puta ukupno će se izvršiti zadani dio koda povećanje početniBrojač – operatorima povećanja i smanjivanja se određuje koliko puta će se

još petlja izvršavati

Konkretan primjer for petlje koja ispisuje ime Marko deset puta bi izgledao ovako:

Ovaj primjer ilustrira da će se ispisivati ime Marko sve dok je vrijednost varijable i manja od 10, kada varijabla i s povećavanjem (i++) prije svakog izvršavanja naraste do 9 petlja for će prestati ispisivati ime Marko.

3 C# kreće od nule (0)

20

Page 21: Ekonomski fakultet u Osijeku | EFOS - 3. Objektno ... · Web viewDa bi se izgradila kuća (stvarni objekt) potreban je tlocrt kuće. Tlocrt kuće sadrži skup/kolekciju podataka i

Ekonomski fakultet u Osijeku, Razvoj poslovnih aplikacija Marijana Zekić-Sušac, Saša Mitrović

Petlja while i do

C# nudi treću vrstu petlja za iteraciju, koja je zapravo pojednostavljena petlja for s evaluacijom zadane vrijednosti pomoću koje odlučuje hoće li krenuti u izvršavanje zadanog bloka koda ili ne, ako evaluacija vrijednosti utvrdi da vrijednost nije točna, pelja se neće izvršiti, a ako utvrdi da je točna – petlja će se izvršavati sve dok je ta vrijednost točna. Konceptualni prikaz petlje izgleda ovako:

Slika 1: Konceptualni prikaz while i do petlje

U nastavku je dan prepravljeni primjer for u while i do petlju:

Slika 2: Primjer while i do petlje

Navedeni primjer primjer ilustrira da će se ispisivati ime Marko sve dok je vrijednost varijable i manja od 10, kada varijabla i s povećavanjem (i++) nakon svakog ispisivanja Marko naraste do 9 petlja će prestati ispisivati ime Marko jer zadana vrijednost više neće biti točna. Ponekad se može dogoditi da se treba izvršiti određeni blok koda iako evaluacija vrijednosti nije točna, a ako taj uvjet nije ispunjen petlja će se preskočiti. Izvršavanje bloka koda bar jednom se može ostvariti varijacijom while petlje koja na taj način postaje do i while:

Slika 3: Primjer do i while petlje

Ovaj primjer ilustrira ispisivanje imena Marko, te zatim provjerava je li je varijabla i veća od 10 – kako ta varijabla nije veća od 10 navedeni blok koda se neće više ponovno izvršavati.

21

Page 22: Ekonomski fakultet u Osijeku | EFOS - 3. Objektno ... · Web viewDa bi se izgradila kuća (stvarni objekt) potreban je tlocrt kuće. Tlocrt kuće sadrži skup/kolekciju podataka i

Ekonomski fakultet u Osijeku, Razvoj poslovnih aplikacija Marijana Zekić-Sušac, Saša Mitrović

Metode

Metoda predstavlja imenovani blok koda u koju programeri upisuju izjave (linije koda) koje ta metoda treba izvršiti. Nakon imenovanja metode potrebno je staviti otvoriti i zatvoriti zagrade (). Ako ta metoda prima nekakve vrijednosti onda u nju treba staviti te vrijednosti. Također, sastavni dio metode je povratni tip (eng. return type). Primjerice ako metoda radi nekakav izračun i treba vratiti brojčanu vrijednost onda će povratni tip biti decimal i na kraju metode će biti ključna riječ return s brojčanom vrijednošću koju treba vratiti, a ako metoda ne vraća ništa onda na mjesto povratnog tipa se piše ključna riječ void.

Ilustrirane su dvije metode; prva samo izvršava liniju koda kojom se termostat postavlja na 20 i ne vraća nikakvu vrijednost (void), dok druga metoda ima ulazni parametar imeSobe, te prva linija koda saznaje kolika je trenutna temperatura u toj sobi, a zatim ako je manja od 10 okreće termostat na dvadeset i na kraju vraća vrijednost temperature sobe koja se dobila prvom izjavom odnosno linijom koda.

Svojstva, polja i razine zaštite

Svojstva su zapravo za mnoge programere kostur i najbolja značajka objektno-orijentiranog programiranja, te ih je s tim na umu najbolje predstaviti kroz primjer kuće. Svaka kuća ima dosta svojstava, a jedno od njih je i temperatura – što je zapravo decimalni broj. Takvo svojstvo u C#-u se definira na sljedeći način:

22

Page 23: Ekonomski fakultet u Osijeku | EFOS - 3. Objektno ... · Web viewDa bi se izgradila kuća (stvarni objekt) potreban je tlocrt kuće. Tlocrt kuće sadrži skup/kolekciju podataka i

Ekonomski fakultet u Osijeku, Razvoj poslovnih aplikacija Marijana Zekić-Sušac, Saša Mitrović

U definiciji svojstva uvijek stoji tip podatka (u ovom slučaju decimal) i zatim ime. Kao i kod većine stvari u C#-u zatim dolaze vitičaste zagrade koje predstavljaju blok koda i u njima dvije ključne riječi get i set. Navedene ključne riječi izvršavaju određenu logiku svojstava, u ovom slučaju uzimaju/čitaju (get) i postavljaju/pišu (set). Kada se klasa Kuca instancira u objekt, preko svojstva TrenutnaTemperatura se može pristupiti privatnom svojstu temperatura u klasi Kuca. U primjeru to izgleda ovako:

Slika 4: Upotreba get-a i set-a u svojstvu

Sada je u klasi kuca svojstvo temperatura postavljeno na 5. Ako se u svojstvima izvršava samo logika čitanja i pisanja, navedeno svojstvo se može pojednostavljeno napisati ovako:

Slika 5: Primjer automatskog svojstva

Takvo pojednostavljeno svojstvo se zove auto-svojstvo gdje C# i .NET znaju da trebaju samo čitati i pisati u svojstvo bez da programer piše dodatni kod.Također, svojstva mogu biti samo za čitanje i samo za pisanje. Primjer takvih svojstava dan je u nastavku:

Slika 6: Primjer svojstava samo s jednom logikom

23

Page 24: Ekonomski fakultet u Osijeku | EFOS - 3. Objektno ... · Web viewDa bi se izgradila kuća (stvarni objekt) potreban je tlocrt kuće. Tlocrt kuće sadrži skup/kolekciju podataka i

Ekonomski fakultet u Osijeku, Razvoj poslovnih aplikacija Marijana Zekić-Sušac, Saša Mitrović

Iako je moguće samo postaviti vrijednost bez čitanja iste, u programiranju aplikacija to baš nema smisla pa se i ne koristi. Nikome ne treba postavljanje vrijednosti, a da je poslije toga ne može uzeti.

Zašto koristiti svojstva?

Na ovo pitanje najbolje je odgovoriti na primjeru kuće i njenog svojstva TrenutnaTemperatura. U kući tijekom grijanja trenutna temperatura će se mijenjati odnosno na ekranu termostata će se ponovno postavljati nova trenutna temperatura i vlasnici kuće će je moći čitati i ovisno o tome odlučiti o daljnjoj regulaciji grijanja. Kada bude trenutna temperatura velika, grijanje će se smanjiti na manji broj stupnjeva, a ako bude hladno – vlasnici će povećati stupnjeve grijanja.

Na isti način svojstva djeluju i u C#-u tokom rada aplikacije (eng. on-the-fly) i ovisno koja je vrijednost postavljena u svojstvu, program izvršava određene radnje – kao u dolje navedenom primjeru, ako prilikom izvršavanja metode UkljuciGrijanje svojstvo bude imalo vrijednost manju od 10, izvršiti će se linija koda na kojoj se termostat okreće na 20:

Slika 7: Primjer upotrebe svojstva u aplikaciji

Polja

Polje (eng. field) je mjesto za spremanje podatka određenog tipa. U polju ne postoji nikakva logika postavljanja i čitanja kao u svojstvima već polja jednostavno predstavljaju podatke. Oni su jedini članovi klase u kojima se mogu čuvati podaci ili informacije.

Razine zaštite (eng. Access Modifiers)

U C#-u postoje četiri razine zaštite koje su već korištene u dosadašnjim primjerima. One se dijele na:

private – podrazumijeva razinu zaštite unutar klase. Članu klase s tom razinom zaštite može se pristupiti samo u toj klasi u kojoj je definiran.

public – članu klase može pristupiti bilo koji drugi objekt. protected - podrazumijeva razinu zaštite unutar klase i u podklasama. Članu klase s tom

razinom zaštite može se pristupiti samo u toj klasi u kojoj je definiran i u klasama koje su naslijedile tu klasu u kojoj je definiran.

internal - članu se može pristupiti od strane bilo koje klase unutar istog assembly-a4

4 Assembly predstavlja paket koda kao što je jedan projekt ili code library.

24

Page 25: Ekonomski fakultet u Osijeku | EFOS - 3. Objektno ... · Web viewDa bi se izgradila kuća (stvarni objekt) potreban je tlocrt kuće. Tlocrt kuće sadrži skup/kolekciju podataka i

Ekonomski fakultet u Osijeku, Razvoj poslovnih aplikacija Marijana Zekić-Sušac, Saša Mitrović

Nasljeđivanje

Nakon upoznavanja pojmova klase i njezinih članova u C#-u, potrebno se je upoznati i s pojmom nasljeđivanja u objektno-orijentiranom programiranju. Nasljeđivanje se može primjeniti na već postojeću klasu Kuca, deklariranoj u prethodnom poglavlju.

Uzimajući za primjer klasu Kuca, definirane su samo osnovne stvari koje svaka kuća ima: Kvadratura, Temperatura, BrojSoba i manipulacija nad vratima i grijanjem. Sukladno tome, postavlja se sljedeće pitanje: što je s kućama katnicama, kućama koje imaju bazen ili balkon – hoće li se za njih definirati nova klasa i u njoj ponovno navesti osnovne stvari (Kvadratura, Temperatura, BrojSoba i manipulacija nad vratima i grijanjem), te zatim još dodati članove klase za broj katova, bazen, itd.?

Odgovor na postavljeno pitanje je NE. Neće se ponavljati osnovne stvari već će se one naslijediti iz već definirane klase Kuca. Sljedeći primjer pokazuje takvo nasljeđivanje u C#-u:

Slika 8: Primjer nasljeđivanja

Zamjećuje se dvotočka kod nasljeđivanja, ista je vrlo bitna je definira klasu Kuca kao baznu klasu (eng. base class) klasi KucaKatnicaSBazenom, odnosno govori C#-u da naslijedi osnove stvari iz klase Kuca. Promatrajući odnos s druge strane dvotočke, ona definira klasu KucaKatnicaSBazenom kao izvedenu klasu iz klase Kuca.

Sada kada se klasa KucaKatnicaSBazenom instancira odnosno napravi objekt s kojim će se manipulirati – moći će se koristiti i članovi klase Kuca. Ilustracija nevedenoga je dana u nastavku:

25

Page 26: Ekonomski fakultet u Osijeku | EFOS - 3. Objektno ... · Web viewDa bi se izgradila kuća (stvarni objekt) potreban je tlocrt kuće. Tlocrt kuće sadrži skup/kolekciju podataka i

Ekonomski fakultet u Osijeku, Razvoj poslovnih aplikacija Marijana Zekić-Sušac, Saša Mitrović

Slika 9: Primjer korištenja instance klase KucaKatnicaSBazenom

Override metoda

Ono što se zapravo čini s overrideom je mijenjanje implementacije na temelju tipa objekta. Da bi se to učinilo mora se overridati podrazumijevana impelmentacija u baznoj klasi s onom iz izvedene klase, kao što i sam naslov kaže – ključna riječ u C#-u kojom se to može postići je override.

Uzimajući, opet, u obzir dosadašnje kreirane klase, za prikaz modifikatora override koristiti će se metoda UkljuciGrijanje(). Klasa KucaSKatnicaSBazenom ima složeniji način uključivanja grijanja u odnosu na klasu Kuca. Imajući to na umu, postoje dvije mogućnosti:

1. Kreirati posebnu metodu UkljuciGrijanjeUKuciKatniciSBazenom() i nadati se da programeri kojima će trebati metoda za uključivanje grijanja će uzeti baš tu metodu, a ne nasljeđenu metodu UkljuciGrijanje() iz bazne klase.

2. Druga mogućnost je overridati UkljuciGrijanje() metodu – to je i jedini ispravan način!

Konkretan primjer overridanja metode je dan u nastavku:

26

Page 27: Ekonomski fakultet u Osijeku | EFOS - 3. Objektno ... · Web viewDa bi se izgradila kuća (stvarni objekt) potreban je tlocrt kuće. Tlocrt kuće sadrži skup/kolekciju podataka i

Ekonomski fakultet u Osijeku, Razvoj poslovnih aplikacija Marijana Zekić-Sušac, Saša Mitrović

Slika 10:Primjer overridanja metode

Sada se koristi ista metoda, ali kada se uključuje grijanje izvršiti će se izjave zadane u overridanoj metodi:

27

Page 28: Ekonomski fakultet u Osijeku | EFOS - 3. Objektno ... · Web viewDa bi se izgradila kuća (stvarni objekt) potreban je tlocrt kuće. Tlocrt kuće sadrži skup/kolekciju podataka i

Ekonomski fakultet u Osijeku, Razvoj poslovnih aplikacija Marijana Zekić-Sušac, Saša Mitrović

Slika 11:Primjer izvršavanja metode odnosno uključivanja grijanja

U navedenom primjeru primjećuje se još jedna ključna riječ: virtual koja dopušta overridanje metode iz bazne klase – da se nije navela navedena ključna riječ overridanje metode ne bi bilo dopušteno.

Što ako se žele izvršiti izjave iz obje metode?

Ovakav slučaj je čest u programiranju, a i u ovom konkretnom primjeru. U klasi KucaSKatnicaSBazenom je uključeno grijanje na prvom,drugom katu i bazenu, te postoji nešto zajedničko za termostate u obje klase – a to je postavljanje stupnjeva grijanja na 20. Navedeno se može postići s ključnom riječi base. Pomoću nje se pristupa baznoj klasi klase KucaSKatnicaSBazenom (U praktičnom primjeru Kuca), te s njom pozivamo metodu UkljuciGrijanje() iz bazne klase. U konkretnom primjeru izgleda ovako:

28

Page 29: Ekonomski fakultet u Osijeku | EFOS - 3. Objektno ... · Web viewDa bi se izgradila kuća (stvarni objekt) potreban je tlocrt kuće. Tlocrt kuće sadrži skup/kolekciju podataka i

Ekonomski fakultet u Osijeku, Razvoj poslovnih aplikacija Marijana Zekić-Sušac, Saša Mitrović

Slika 12: Primjer korištenja ključne riječi base

Rezultat izvršavanja primjera izgleda ovako:

29

Page 30: Ekonomski fakultet u Osijeku | EFOS - 3. Objektno ... · Web viewDa bi se izgradila kuća (stvarni objekt) potreban je tlocrt kuće. Tlocrt kuće sadrži skup/kolekciju podataka i

Ekonomski fakultet u Osijeku, Razvoj poslovnih aplikacija Marijana Zekić-Sušac, Saša Mitrović

Slika 13: Primjer korištenja obje metode

Polimorfizam

Polimorfizam omogućuje tipu da se ponaša drugačije, kao specijaliziraniji tip. Najbolje je na primjeru vidjeti taj koncept:

30

Page 31: Ekonomski fakultet u Osijeku | EFOS - 3. Objektno ... · Web viewDa bi se izgradila kuća (stvarni objekt) potreban je tlocrt kuće. Tlocrt kuće sadrži skup/kolekciju podataka i

Ekonomski fakultet u Osijeku, Razvoj poslovnih aplikacija Marijana Zekić-Sušac, Saša Mitrović

Slika 14:Primjer polimorfizma

Kreirana je instanca klase KucaKatnicaSBazenom, a zatim je ta istanca klase dodijeljena klasi Kuca, s tom radnjom je compiler automatski implicitno pretvorio klasu tipa KucaKatnicaSBazenom u klasu tipa Kuca, ali bez obzira na to compiler i dalje gleda/referencira na istancu kucaKatnicaSBazenom objekta KucaKatnicaSBazenom. Upravo je to primjer gdje se određeni tip ponaša drugačije odnosno specijaliziranije.

Nakon toga oba objekta su proslijeđena metodi GrijanjeUKuci(). Kako u izvedenoj klasi postoji override virtualne metode UkljuciGrijanje(), a instanca kuca objekta Kuca upućuje na objekt klase KucaKatnicaSBazenom, pozivajući metodu kuca.UkljuciGrijanje() u pozadini je zapravo pozvana metoda kucaKatnicaSBazenom.UkljuciGrijanje() koja ispisuje „Uključivanje grijanja u KucaKatnicaSBazenom klasi...“ – takvu radnju obilježava polimorfizam. U nastavku je prikazan rezultat izvršavanja programa:

31

Page 32: Ekonomski fakultet u Osijeku | EFOS - 3. Objektno ... · Web viewDa bi se izgradila kuća (stvarni objekt) potreban je tlocrt kuće. Tlocrt kuće sadrži skup/kolekciju podataka i

Ekonomski fakultet u Osijeku, Razvoj poslovnih aplikacija Marijana Zekić-Sušac, Saša Mitrović

Slika 15: Prikaz polimorfizma na konkretnom primjeru

Konstruktori

Konstruktor je posebna metoda koja se izvršava prije izrade instance klase. Konstruktor omogućava obavljanje određenih priprema prije nego što se iz klase stvori objekt. Na primjer, prije kreiranja objekta Kuca iz klase kuce želi se postaviti adresa tog objekta. U primjeru to izgleda ovako:

32

Page 33: Ekonomski fakultet u Osijeku | EFOS - 3. Objektno ... · Web viewDa bi se izgradila kuća (stvarni objekt) potreban je tlocrt kuće. Tlocrt kuće sadrži skup/kolekciju podataka i

Ekonomski fakultet u Osijeku, Razvoj poslovnih aplikacija Marijana Zekić-Sušac, Saša Mitrović

Slika 16: Primjer konstruktora

Primjer ilustrira konstruktor kao standardnu deklaraciju metode, ali bez zadanog povratnog tipa – jer ga nema. Također, konstruktor uvijek nosi isto ime klase u kojoj se nalazi.

Overload metoda

Overload metoda predstavlja deklariranje više metoda sa istim imenom ali s različitim popisom tipova parametara. Overload se isto tako može primjeniti i na konstruktor. U nastavku je dan primjer konstruktora koji prima više različitih parametara za postavljanje adrese:

Slika 17:Primjer overloada konstruktora

Statične metode, svojstva i klase

Prilikom korištenja metoda, svojstva i ostalih članova klasa u dosadašnjim poglavljima bilo je potrebno instancirati klasu kako bi bila omogućena njihova upotreba. Upotrebom ključne riječi static ispred povratnog tipa omogućuje se korištenje metode bez kreiranja instance klase, isto je primjenjivo i za polja i svojstva. Upotreba statičnih metoda i svojstava izgleda ovako:

33

Page 34: Ekonomski fakultet u Osijeku | EFOS - 3. Objektno ... · Web viewDa bi se izgradila kuća (stvarni objekt) potreban je tlocrt kuće. Tlocrt kuće sadrži skup/kolekciju podataka i

Ekonomski fakultet u Osijeku, Razvoj poslovnih aplikacija Marijana Zekić-Sušac, Saša Mitrović

Slika 18:Primjer statičnih metoda i svojstava i njihova upotreba

Primjer ilustrira da je potrebno napisati naziv klase i metode zajedno s točkom kao jedinim znakom koji ih odvaja (Pec.OkreniTermostatNa20(imeSobe);). Također, bitno je napomenuti dane-statične metoda i svojstva ne mogu se koristiti u statičnim metodama, stoga svojstvo ImeSobe se nikako nije moglo koristiti u statičnoj metodi OkreniTermostatNa20. Treba istaknuti i novu ključnu riječ const, koja je vidljiva u ovom primjeru. Jedina razlika između polja definiranog kao const i polja static je u tome što se polje static može mijenjati, dok je const polje nepromjenjivo kada se definira.

Nizovi, liste i kolekcije

Niz (eng. array) je posebna vrsta objekta koji može čuvati više stavki bez potrebe za deklariranjem polja za svaku stavku. Ovako to izgleda u primjeru:

34

Page 35: Ekonomski fakultet u Osijeku | EFOS - 3. Objektno ... · Web viewDa bi se izgradila kuća (stvarni objekt) potreban je tlocrt kuće. Tlocrt kuće sadrži skup/kolekciju podataka i

Ekonomski fakultet u Osijeku, Razvoj poslovnih aplikacija Marijana Zekić-Sušac, Saša Mitrović

Slika 19: Usporedba i deklariranje polja i nizova

Također, u nizove se mogu spremiti reference instanciranih klasa, koje se kasnije mogu pretraživati. Takav primjer dan je u nastavku:

Slika 20: Spremanje skupa objekata tipa Kuca u niz

Primjer ilustrira obavezno zadavanje veličine niza, to predstavlja problem jer se unaprijed mora znati veličina niza, a i na taj problem se nadovezuje još jedan: veličina niza je fiksna. Ti problemi se mogu riješiti izradom novog niza i kopiranjem podataka ili korištenjem metode Array.Resize. No, to nisu prikladna rješenja kada se u praksi radi s nizovima, te se stoga koriste generičke kolekcije koje će biti opisane u nastavku.

Generičke kolekcije

35

Page 36: Ekonomski fakultet u Osijeku | EFOS - 3. Objektno ... · Web viewDa bi se izgradila kuća (stvarni objekt) potreban je tlocrt kuće. Tlocrt kuće sadrži skup/kolekciju podataka i

Ekonomski fakultet u Osijeku, Razvoj poslovnih aplikacija Marijana Zekić-Sušac, Saša Mitrović

Klasa List<T> predstavlja generičku klasu definiranu u imenskom prostoru System.Collection.Generic, a efektivno je niz promjenjive veličine. Lista može napraviti slične stvari kao i niz, ali bez ograničenja veličine.

Generički tipovi

List<T> je primjer generičkog tipa. Generički tip se ne koristi izravno, već se pomoću njega gradi novi tip. Na primjer, List<Kuca> je popis objekta Kuca koji je izgrađen proslijeđivanjem tipa argumenta Kuca klasi List<T>. Umetanje tipa argumenta kako bi se formirao novi tip naziva se instanciranje generičkog tipa.

Primjer korištenja liste dan je u nastavku:

Slika 21: Primjer dodavanja objekata Kuca u generičku listu

Postoji još jedna generička kolekcija naziva IEnumerable<T>. Ta kolekcija služi za spremanje objekata koji će se kasnije koristiti primarno u C# petljama.

Literatura

1. Griffiths, I., Programming C# 5.0, Sebastopol, O’Reilly Media, Inc., 2013.2. Solis, D., Illustrated C# 2012, New York, Apress Media LLC, 2012.3. Albahari, J., Albahari, B., C# 5.0 in a Nutshell, Fifth Edition , Sebastopol, O’Reilly Media, Inc.,

2012.4. Interijer, www.interijer.com, 18.10.2013.5. Growmap, www.growmap.com, 18.10.2013.6. ASCBLOG, alzan.info, 18.10.2013.7. Guardian, www.theguardian.com , 18.10.2013. 8. Government of South Australia, www.sa.gov.au, 18.10.2013. 9. Nirosh, CodeProject, Introduction to OOP Concepts and More,

http://www.codeproject.com/Articles/22769/Introduction-to-Object-Oriented-Programming-Concep#OOP, 20011, 14.10.2013.

36

Page 37: Ekonomski fakultet u Osijeku | EFOS - 3. Objektno ... · Web viewDa bi se izgradila kuća (stvarni objekt) potreban je tlocrt kuće. Tlocrt kuće sadrži skup/kolekciju podataka i

Ekonomski fakultet u Osijeku, Razvoj poslovnih aplikacija Marijana Zekić-Sušac, Saša Mitrović

10. Wikipedia, Object Oriented Programming, http://en.wikipedia.org/wiki/Object-oriented_programming , 14.10.2013.

37