c i .net framework 4.0 preview
TRANSCRIPT
-
8/16/2019 C i .NET Framework 4.0 Preview
1/22
-
8/16/2019 C i .NET Framework 4.0 Preview
2/22
autor:
Silvije Davila; Marko Petričević
urednica:
Ana Rutar, prof.
naslov:
C# I .NET FRAMEWORK 4.0
stručni recezent:
mr. sc. Goran Đambić
lektorica:
Anka Munić
grafički urednik:
Krešimir Pletikosa, ACE
nakladnik:
Algebra d.o.o., 2010.
za nakladnika:
mr.sc. Mislav Balković
mjesto i godina izdavanja:
Zagreb, 2010
Sva prava pridržana. Niti jedan dio oveknjige ne smije se reproducirati ili prenositiu bilo kojem obliku, niti na koji način.Zabranjeno je svako kopiranje, citiranje teupotreba knjige u javnim i privatnimedukacijskim organizacijama u svrhuorganiziranih školovanja, a bez pisanogodobrenja nositelja autorskih prava.
Copyright © Algebra d.o.o.
CIP zapis dostupan u računalnom kataloguNacionalne i sveučilišne knjižnice u Zagrebu
pod brojem 744148
ISBN 978-953-322-034-5
-
8/16/2019 C i .NET Framework 4.0 Preview
3/22
Sadržaj: 1. Poglavlje:
...... UVOD ...................................................................................................................... 3 1.1 Kratki pregled razvoja programskih jezika ........................................................................ 4
1.1.1 Strojno zavisni jezici ..................................................................................................... 4 1.1.2
Programski jezici više razine ........................................................................................ 5
1.2
Algoritmi ............................................................................................................................ 6
1.2.1
Rješavanje problema primjenom računala ................................................................... 6
1.2.2
Pojam i karakteristike algoritma ................................................................................... 7
2. Poglavlje: ...... OBJEKTNO ORIJENTIRANO PROGRAMIRANJE ............................................... 9
2.1
Osnovni principi ............................................................................................................... 10
2.2
Klasa, objekt, struktura.................................................................................................... 11
2.2.1
Klasa, objekt (svojstva, metode – događaji, operatori) .............................................. 11
2.2.2
Strukture ..................................................................................................................... 14
2.2.3
Osnovni tipovi podataka ............................................................................................. 14
2.2.4 Deklaracija i definicija varijable .................................................................................. 17 2.2.5
Izrazi, operatori, konverzije ........................................................................................ 19
2.2.6
Aritmetički operatori ................................................................................................... 19
2.2.7
Relacijski operatori ..................................................................................................... 20
2.2.8
Logički operatori ......................................................................................................... 21
2.2.9
Tekstualni operator .................................................................................................... 22
2.2.10
Operator dodjele ................................................................................................... 22
2.2.11
Konverzije podataka .............................................................................................. 24
3. Poglavlje:
......
UVOD U .NET FRAMEWORK .............................................................................. 27
3.1
Osnovni principi ............................................................................................................... 28
3.2
Hello World – pisanje prve aplikacije .............................................................................. 29
4. Poglavlje: ...... VISUAL STUDIO .NET 2010 (VS2010) ................................................................ 31
4.1
Visual studio .NET 2010 (VS2010) – pokretanje aplikacije ............................................. 32
4.2 Hello World – pisanje aplikacije u VS2010 ..................................................................... 33 4.3 Objašnjenje sučelja ......................................................................................................... 34
4.3.1
InteliSense ................................................................................................................. 34
4.3.2
Solution Explorer ........................................................................................................ 36
4.3.3
Ostali okviri (paneli) u VS2010 ................................................................................... 36
5. Poglavlje:
......
OSNOVNI TIPOVI PODATAKA ........................................................................... 37
5.1
Varijable .......................................................................................................................... 38
5.1.1
Matematički operatori ................................................................................................. 38
5.1.2
Varijable ..................................................................................................................... 38
5.1.3
Učitavanje podataka s tipkovnice ............................................................................... 39
5.1.4
Metoda Parse ............................................................................................................. 40
5.2
Uvjetno grananje ............................................................................................................. 41
5.2.1 Naredba If ................................................................................................................ 41 5.2.2
Naredba Switch .......................................................................................................... 44
5.2.3
Strukturirano upravljanje greškama ........................................................................... 46
5.2.4 Logički operatori ......................................................................................................... 47 5.2.5
Ostatak pri cjelobrojnom dijeljenju ............................................................................. 49
5.3
Cikličke petlje .................................................................................................................. 49
5.3.1
Petlja For .................................................................................................................... 50
5.3.2
Petlja While ................................................................................................................ 52
6. Poglavlje:
......
NIZOVI .................................................................................................................. 55
6.1
Nizovi (Arrays) ................................................................................................................. 56
6.2
Objekt ArrayList ............................................................................................................... 57
6.2.1
Petlja Foreach ............................................................................................................ 58
7. Poglavlje:
......
PROCEDURE (METODE) .................................................................................... 61 7.1 Procedure (metode) ........................................................................................................ 62
7.2 Potprogrami ..................................................................................................................... 63 7.3
Funkcije ........................................................................................................................... 66
8. Poglavlje: ...... OBJEKTI ............................................................................................................... 69
8.1
Svojstva, metode, događaji (Properties, Methods, Events) ............................................ 70
8.1.1
Objekti ........................................................................................................................ 70
8.1.2
Klase .......................................................................................................................... 70
8.1.3
Svojstva (Properties) .................................................................................................. 74
8.2
Doseg varijabli ................................................................................................................. 80
8.2.1
Metode Static ............................................................................................................. 81
8.2.2
Prosljeđivanje varijabli po vrijednosti i po referenci.................................................... 83
8.3
Nasljeđivanje ................................................................................................................... 85
8.3.1
Premošćivanje (override) ........................................................................................... 88
8.3.2
Kolekcija objekata ...................................................................................................... 88
8.4
ClassLibrary (dll) ............................................................................................................. 90
8.4.1
Kreiranje ClassLibrary projekta .................................................................................. 90
8.5
Događaji .......................................................................................................................... 93
-
8/16/2019 C i .NET Framework 4.0 Preview
4/22
9. Poglavlje:
......
RAD S TEKSTOM ................................................................................................ 97
9.1
Klasa String ..................................................................................................................... 98
9.1.1
Metode ToLower i ToUpper ....................................................................................... 98
9.1.2
Metoda SubString ...................................................................................................... 98
9.1.3
Metoda Replace ......................................................................................................... 98
9.1.4 Metoda Split .............................................................................................................. 99
9.1.5
Svojstvo Length .......................................................................................................... 99
9.2
String, char ...................................................................................................................... 99
10. Poglavlje:
....
DATOTEKE ........................................................................................................ 101
10.1
System.IO namespace .................................................................................................. 102
10.1.1
Klase FileStream, StreamReader, StreamWriter ................................................ 102
10.1.2
Klase Path, File, Directory ................................................................................... 104
11. Poglavlje:
....
DATUMI .............................................................................................................. 107
11.1 DateTime struktura........................................................................................................ 108 11.1.1 Uspoređivanje datuma ........................................................................................ 108 11.1.2
Važnije metode ................................................................................................... 109
11.2
TimeSpan struktura ....................................................................................................... 109
12. Poglavlje: .... ENUMERACIJE .................................................................................................. 113
12.1
Enumeracije .................................................................................................................. 114
13. Poglavlje:
....
INTERFEJSI ....................................................................................................... 115
13.1
Interfejsi ......................................................................................................................... 116
14. Poglavlje:
....
POPIS KLJUČNIH RIJEČI ................................................................................. 119
-
8/16/2019 C i .NET Framework 4.0 Preview
5/22
U ovom poglavlju naučiti ćete:
Osnovne principe objektnog programiranja
Što je klasa, objekt, struktura?
2. Poglavlje: OBJEKTNO ORIJENTIRANOPROGRAMIRANJE
-
8/16/2019 C i .NET Framework 4.0 Preview
6/22
Str.10§ §2. Poglavlje: OBJEKTNO ORIJENTIRANO PROGRAMIRANJE
Tel: 01 2332 861, Fax: 01 2305 004 e-mail: [email protected] § www.algebra.hr §
2.1 Osnovni principi
Kod objektno orijentiranog programiranja programer polazi od objekata izrealnoga svijeta. Njegov je posao napraviti model tog objekta u programu.U tom modeliranju osnovni je alat apstrakcija. Apstrakcija je kontrolirano
uključivanje i isključivanje nekih detalja o objektima koji su bitni, odnosnonisu bitni u programu. Ti objekti iz realnoga svijeta posjeduju stati č ke idinami č ke osobine. Uzmimo primjer automobila. Za njega možemo reći daima određenu boju, određen broj sjedišta, određenu kubikažu – stati č keosobine. Međutim, automobil se može kretati, stati, okrenuti se – dinami č keosobine. Vidimo, dakle, da su akcije koje objekt može napraviti zapravosastavni dio samog objekta. Objektno orijentirano programiranje vodi seovim činjenicama, pa stoga objekti imaju svoja unutrašnja stanja –svojstva, ali i skup akcija – metoda koje objekt može izvršiti. Samoprogramiranje je sklapanje više objekata u cjelinu.Općenito, u radu s računalom osnovna misao vodilja jest automatizacijaposlova. Tako je i kod objektnog programiranja objekte iste vrste prirodnotretirati na isti način. Stoga govorimo o klasama. Klasa je dakle apstrakcija(uopćenje) konkretnih objekata iste vrste. Svaki objekt u programu jestobjekt određene klase. Klasa objekta određuje dakle njegovo interfejs, tj.njegova svojstva, metode i događaje preko kojih možemo komunicirati snjim u programu. Kažemo da je taj objekt instanca te klase.Objekti su osnova modularnosti i strukturiranosti objektno orijentiranogprogramiranja. Oni predstavljaju samostalne cjeline koje možemo sklapati sdrugim objektima u skladu s potrebama, te tako rješavati složenijeprobleme. Svaki objekt može primati poruke, a može ih i slati drugimobjektima. Korisnici nekog objekta ne mogu mijenjati unutrašnja stanja imetode objekata. To se svojstvo zove enkapsulacija. Bilo kojem objektu
može se pristupiti samo preko njegova interfejsa, koristeći samo njegove javne metode.Nasljeđivanje je također važna osobina objektno orijentiranogprogramiranja. Ono je posljedica generalizacije. Dakle, ako krenemo odnaše klase Automobil , pa zatim uzmemo klasu Brod , generalizacija bimogla rezultirati nastankom klase vozilo.Obrnuta operacija naziva se specijalizacija. Sve klase nastalespecijalizacijom zatim nasljeđuju sve atribute i metode polazne ili generi č ke klase.Generalizacijom i specijalizacijom može doći do pojave da ista metodadjeluje na različite načine, ovisno o objektu na koji se primjenjuje, što seonda naziva polimorfizmom.
Vezano uz to, možete uočiti i potrebu uvođenja apstraktnih klasa. Naprimjer, pogledajte klasu cestovna vozila, pri čemu možete govoriti onasljeđivanju svojstava i metoda iz klase vozila. Ali, ta klasa zapravo nerezultira konkretnim objektom - vozilom. Umjesto toga, bolje bi bilo napravitipotklase Automobili ili Kamioni pa tek iz njih instancirati konkretne objektekoji će zatim naslijediti sva svojstva i metode apstraktne klase Cestovnavozila.Iz svega opisanog možemo zaključiti da korištenje objektno orijentiranogprogramskog jezika omogućuje modeliranje sustava na visokoj raziniapstrakcije, onako kako on u prirodi i postoji, bez razmišljanja kako će se ina kojem stroju realizirati.
-
8/16/2019 C i .NET Framework 4.0 Preview
7/22
Str.11§ §C# I .NET FRAMEWORK 2.0
Zagreb - Maksimirska 58a § A L G E B R A §
2.2 Klasa, objekt, struktura
2.2.1 Klasa, objekt (svojstva, metode – događaji, operatori)
Pogledajte opet primjer automobila u kontekstu voznog parka neke tvrtke.Vozni park čine objekti klase Automobil . Do klase se dolazi polazeći odpojedinačnih objekata. Promatranjem svih automobila uočavaju se njihovazajednička svojstva (marka automobila, boja, kubikaža, godinaproizvodnje, registracija...). Također, svim automobilima možete pridružitiiste "akcije" (kreni, stani...). Te akcije u okviru klase nazivaju se metodama klase, a njima se opisuje funkcionalnost objekata te klase.Dakle, klasa Automobil je uopćenje (apstrakcija) pojedinačnih automobilanašeg voznog parka. Svaki taj pojedinačni automobil zapravo je primjerak (instanca, objekt ) klase Automobil , a opisan je skupom vrijednostisvojstava te klase. Vrijednost svojstva marka za konkretan automobil jenpr. "Mercedes", a vrijednost svojstva godina proizvodnje je 2005."Mercedes" i 2005. su pojedinačni podaci.Iako se svaki od tih podataka u memoriji čuva u obliku nizova 0 i 1 (bezobzira na to je li to broj, slovo, slika ili zvuk), jasno je da se različite vrstepodataka registriraju na različite načine i da su nad različitim vrstamapodataka dopuštene različite operacije. Stoga računalu morate datiinformaciju o tome koja je vrsta podataka registrirana da bi ga ono na pravinačin tumačilo i obrađivalo. To se postiže tipom podataka.Tipom podataka definiran je:
• način registriranja podataka u memoriji• skup mogućih vrijednosti podataka• skup mogućih akcija nad podacima.
Može se reći da su vrijednosti atributa - svojstava (marka, godinaproizvodnje) podaci na najnižoj razini apstrakcije i za njihovo definiranjekoriste se primitivni tipovi podataka. Klasa je, pak, tip podataka na višojrazini apstrakcije, jer opisuje skup objekata koji imaju zajednička svojstva i jednako se ponašaju.Klasu definirate navođenjem ključne riječi class iza koje slijedi ime klase. Ako formirate klasu koja nasljeđuje neku prethodno definiranu klasu, ondaposlije imena navodite dvotočku (':'), a zatim slijedi ime klase koja senasljeđuje. Nakon toga, u vitičastim zagradama definirate članove klase(svojstva i metode):
class imeKlase :imePrethodnoDefiniraneKlase
{opis / definicija č lanova klase
}
U ovom primjeru klasu automobila možete definirati na sljedeći način:
class Automobil{
// Svojstvastring markaAutomobila;int godinaProizvodnje;string boja;int brojSjedišta;int brojVrata;
-
8/16/2019 C i .NET Framework 4.0 Preview
8/22
Str.12§ §2. Poglavlje: OBJEKTNO ORIJENTIRANO PROGRAMIRANJE
Tel: 01 2332 861, Fax: 01 2305 004 e-mail: [email protected] § www.algebra.hr §
string registracija;double KS; // konjskih snaga
// Metodevoid Kreni(){... }void OtvoriVrata(Vrata x){... }double KSuKW(){... }
}
Svojstva se definiraju navođenjem njihova tipa (koji mora biti prethodnodefiniran) i imena. Pristup svojstvima u programskom jeziku C# realiziratenavođenjem imena objekta, zatim točke ('.'), pa imena svojstva.Na primjer, ako je A1 objekt klase Automobil , tada svojstvumarkaAutomobila pristupate ovako:
A1.markaAutomobila
Svojstvima opisujete osobine objekta i njihove vrijednosti definiraju njegovostanje.
Metoda klase je imenovani blok naredbi koji se sastoji od zaglavlja i tijela metode. U zaglavlju navodite povratni tip (ili riječ void ako nema povratnevrijednosti), a zatim ime metode. Slijede zagrade. U zagradama se, akopostoje, navode zarezima odvojeni parametri . Za svaki parametar navodise tip i ime. Poslije zaglavlja u vitičastim zagradama navodite tijelo metodekoje se sastoji od odgovarajućih naredbi programskog jezika C# .Metodama opisujete ponašanje objekta u određenoj situaciji i pododređenim uvjetima (Kreni, OtvoriVrata), ali i određujete nove vrijednosti natemelju osobina koje objekt posjeduje (KSuKW ). Na taj način opisujetefunkcionalnost objekta:
povratniTip imeMetode (listaParametara)
{tijelo metode
}
U programskom jeziku C# metodu nekog objekta pozivate na sljedećinačin:
imeObjekta.imeMetode (lista stvarnih parametara)Na primjer, ako je A1 objekt klase Automobil , tada metodu Kreni pozivate
A1.Kreni()
-
8/16/2019 C i .NET Framework 4.0 Preview
9/22
Str.13§ §C# I .NET FRAMEWORK 2.0
Zagreb - Maksimirska 58a § A L G E B R A §
a metodu OtvoriVrata
A1.OtvoriVrata(V1)
gdje je V1 objekt klase Vrata.
Neke od metoda automatski se pokreću kao reakcija na događaje kojinastaju tijekom izvršavanja aplikacije, pa se takve metode i nazivajudogađajima (engl. events).Svaka klasa sadrži metode koje omogućuju kreiranje objekata(konstruktora) na više načina, kao i metodu koja "uništava" objekt(destruktor ).
Unutar programskog kôda možete upisivati kratke komentare navođenjemdviju kosih crta ("//"). Tada sve što napišete do kraja linije kompajliranjem programa biva ignorirano i ne izvršava se. Kada želite napisati duljikomentar, koji će se protezati kroz više linija, ograničit ćete ga na sljedeći
način:
/* ... komentar ... */
Jedan od osnovnih koncepata objektno orijentiranog programiranja jestkontroliranje pristupa članovima objekta. Za svaki član klase (svojstva imetode) morate definirati razinu pristupa (dostupnosti). U programskom jeziku C# postoji više razina pristupa, a najosnovnije su privatna ( private) i javna ( public ). Privatni članovi klase dostupni su samo metodama te klase ito je najviša razina zaštite. Suprotno tome, public članovima klase možepristupiti bilo koji drugi objekt.Primijetite da se svi dosad spomenuti članovi klase konkretiziraju tek
instanciranjem objekta, odnosno tek kada stvorite novi objekt, možetekoristiti njegova svojstva i metode.Međutim, pri definiranju članova klase poslije razine pristupa možetenavesti i ključnu riječ static kojom omogućujete postojanje i korištenje togčlana bez kreiranja konkretnih instanci. Takvim članovima pristupatenavođenjem imena klase umjesto imena objekta. Tada bez obzira na brojinstanci klase koja sadrži static svojstvo postoji točno jedna kopija togsvojstva u aplikaciji. Statičko svojstvo je zapravo svojstvo klase, a nesvojstvo objekta.U programskom jeziku C# postoje klase koje sadrže uglavnom statičkečlanove (Math, Convert, Array ...). Konkretne objekte takvih klasa nemožete čak ni instancirati, već vam one omogućuju korištenje sistemskih
metoda koje se mogu primjenjivati na objektima različitog tipa.
Ako novu klasu nasljeđujete od neke već postojeće, treba dodati da novaklasa od postojeće nasljeđuje sva njezina svojstva i metode, a vamapreostaje samo da definirate nove i predefinirate postojeće. Ovamogućnost programskog jezika C# izuzetno ubrzava i olakšava kreiranjeaplikacija.Za klasu se kaže da je referentni tip podataka jer, kad se tijekomizvršavanja aplikacije kreira novi objekt određene klase, prostor za njegovoregistriranje odvija se u memoriji računala izvan aplikacije (u heapu –dinamičkoj memoriji), a aplikacija s njim komunicira preko njegove adrese –
reference.
-
8/16/2019 C i .NET Framework 4.0 Preview
10/22
Str.14§ §2. Poglavlje: OBJEKTNO ORIJENTIRANO PROGRAMIRANJE
Tel: 01 2332 861, Fax: 01 2305 004 e-mail: [email protected] § www.algebra.hr §
2.2.2 Strukture
Budući da je svaki objekt primjerak neke klase, a svaka klasa sadržisvojstva koja mogu biti objekti neke druge klase, jasno je da morajupostojati neki osnovni (temeljni) podaci na kojima objekt (a samim tim iaplikacija) počiva.
U programskom jeziku C# osnovni podaci su predstavljeni strukturama.Strukture se definiraju na sljedeći način:
struct imeStrukture{
definicija atributa u metoda strukture }
Članovima strukture možete definirati razinu pristupa kao i kod klasa. Ali,za razliku od klasa, strukturu ne možete naslijediti iz druge strukture iliklase, niti iz nje može biti naslijeđena druga struktura ili klasa. Isto tako,struktura je vrijednosni tip podataka, a klasa referentni.
C# sadrži ugrađene (sistemske) biblioteke klasa i struktura, gdje su, kaostrukture, definirani i osnovni tipovi podataka (cijeli brojevi, decimalnibrojevi, tekstualni i logički tip). Stoga su svi osnovni tipovi vrijednosni tipovipodataka.
2.2.3 Osnovni tipovi podataka
Kako smo već spomenuli, navođenjem tipa podataka određujete načinregistriranja podataka u memoriji, skup mogućih vrijednosti tog podatka teskup mogućih akcija nad podatkom.
Cijeli brojevi predstavljaju se u binarnom brojevnom sustavu određenimbrojem bitova. U N bitova možemo registrirati "neoznačene" cijele brojeveod 0 do 2 N -1, odnosno "označene" cijele brojeve od -2 N-1 do 2 N-1. Prematome razlikujemo više cjelobrojnih tipova.
-
8/16/2019 C i .NET Framework 4.0 Preview
11/22
Str.15§ §C# I .NET FRAMEWORK 2.0
Zagreb - Maksimirska 58a § A L G E B R A §
Tip Dopuštene vrijednosti Veličinasbyte od -128 do 127 (od -27 do 27-1) 1 bajt (8 bita)byte od 0 do 255 (od 0 do 28-1) 1 bajt (8 bita)short od -32 768 do 32 767 (od -215 do 215-1) 2 bajta (16 bita)
ushort od 0 do 65 535 (od 0 do 216
-1) 2 bajta (16 bita)int od -2 147 483 648 do 2 147 483 647(od -231 do 231-1)
4 bajta (32 bita)
uint od 0 do 4 294 967 295 (od 0 do 232-1) 4 bajta (32 bita)long od -9 223 372 036 854 775 808
do 9 223 372 036 854 775 807(od -263 do 263-1)
8 bajta (64 bita)
ulong od 0 do 18 446 744 073 709 551 615(od 0 do 264-1)
8 bajta (64 bita)
Realni su brojevi u programskom jeziku C# predstavljeni trima tipovimapodataka:
1. float 2. double 3. decimal.
Oni se razlikuju po skupu dopuštenih vrijednosti i po broju značajnihdecimala (preciznosti).
Tip Dopuštene vrijednosti Preciznost Veličinafloat od ±1,5 x 10-45
do ±3,4 x 1038 7 decimala 4 bajta (32 bita)
double od ±5,0 x 10-324 do ±3,4 x 10308
15-16decimala
8 bajta (64 bita)
decimal od ±1,0 x 10-28
do ±3,4 x 1028
28-29decimala 16 bajta (128 bita)
Osim osnovnih brojevnih tipova, postoje još dva tipa:1. char 2. bool.
-
8/16/2019 C i .NET Framework 4.0 Preview
12/22
Str.16§ §2. Poglavlje: OBJEKTNO ORIJENTIRANO PROGRAMIRANJE
Tel: 01 2332 861, Fax: 01 2305 004 e-mail: [email protected] § www.algebra.hr §
Tip Dopuštene vrijednosti Veličinachar pojedinačni Unicode znak
cijeli broj od 0 do 655352 bajta (16 bita)
bool true, false 1 bajt
Konstante tipa char pišu se navođenjem znaka između apostrofa ('A', 'b','1' ...).Neki znakovi nemaju svoju grafičku interpretaciju (tab, novi red ...), pa ih ukodu zapisujemo pomoću određene specijalne oznake, tzv. escapesekvence.
Escape sekvenca Znak\' jednostruki navodnik\" dvostruki navodnik\\ obrnuta kosa crta (backslash)\n novi red
\t tab
Svi navedeni osnovni tipovi podataka realizirani su sistemskim strukturama.
Tip Sinonimna strukturasbyte System.Sbytebyte System.Byteshort System.Int16ushort System.UInt16int System.Int32
uint System.UInt32long System.Int64ulong System.UInt64float System.Singledouble System.Doubledecimal System.Decimalchar System.Charbool System.Bool
U kodu je svejedno koristimo li ime tipa ili ime odgovarajuće strukture.
Posebno mjesto među tipovima podataka zauzima znakovni tip string koji je zapravo niz charova. Stoga je on, za razliku od ostalih osnovnih tipova,realiziran referentnim tipom – sistemskom klasom System.String. Brojznakova u stringu nije ograničen, pa tako ni količina memorije koju zauzimastring nije unaprijed određena.Konstante tipa string pišu se između znakova navoda ("A", "Ovo je string","" ).
-
8/16/2019 C i .NET Framework 4.0 Preview
13/22
Str.17§ §C# I .NET FRAMEWORK 2.0
Zagreb - Maksimirska 58a § A L G E B R A §
2.2.4 Deklaracija i definicija varijable
Varijabla je ime (identifikator) memorijske lokacije u kojoj aplikacija čuvavrijednost. To ime (identifikator) mora biti jedna riječ sastavljena od slovaengleske abecede, znamenki ili znaka za podvlačenje ("_"). Ime mora
početi slovom ili znakom "_".Evo primjera ispravno imenovanih varijabli:
imeOsobe, osoba1, prezime_osobe, _spol...
No, ovo nisu imena varijabli:
ime Osobe, prezime-osobe, 1osoba...
Programski jezik C# razlikuje velika i mala slova ("Case Sensitive"), pastoga varijable ImeOsobe i imeOsobe nisu iste.
U programskom jeziku C# postoje dvije vrste varijabli:1. vrijednosne2. referentne.
Memorijska lokacija imenovana varijablom vrijednosnog tipa direktno sadrživrijednost, a lokacija imenovana varijablom referentnog tipa sadrži adresulokacije u dinamičkoj memoriji u kojoj se čuva informacija. Za podatkeosnovnih tipova (int, double, char, bool... – sistemske strukture) samo imepredstavlja vrijednost pa su to vrijednosne varijable. S druge strane, zaobjekte sistemskih i programerski definiranih klasa ime varijable predstavljaadresu (referencu) memorijske lokacije u dinamičkoj memoriji gdje objektegzistira, pa su to referentne varijable.
Deklaracija varijable:
imeTipa imeVarijable...;
Primjer 2.2.4.1 – primjeri deklaracija
int x,y;char a,b;Osoba osoba1, osoba2;
Deklaracijom varijable vrijednosnog tipa odvaja se u memoriji sav prostorpotreban za registriranje podatka zadanog tipa, a deklaracijom varijablereferentnog tipa odvaja se samo prostor za registriranje adrese memorijskelokacije na kojoj će se nalaziti objekt.Samom deklaracijom varijabli se ne dodjeljuje vrijednost, nego ju je jošpotrebno i inicijalizirati .
-
8/16/2019 C i .NET Framework 4.0 Preview
14/22
Str.18§ §2. Poglavlje: OBJEKTNO ORIJENTIRANO PROGRAMIRANJE
Tel: 01 2332 861, Fax: 01 2305 004 e-mail: [email protected] § www.algebra.hr §
Inicijalizacija varijable vrijednosnog tipa obavlja se pomoću operatora dodjele ("=") na sljedeći način:
varijabla = izraz.
Tip vrijednosti izraza mora se poklapati s tipom varijable.
Primjer 2.2.4.2
int x,y; x=1;y=x+3;
Inicijalizacija varijable referentnog tipa obavlja se pomoću operatora new :
new imeKlase (listaParametara)
U dinamičkoj memoriji odvaja se prostor za registriranje objekta klaseimeKlase, a operator new vraća adresu tog prostora koju onda možetedodijeliti referentnoj varijabli.
Primjer 2.2.4.3
mojaKlasa x; x = new mojaKlasa();Osoba o1;
o1 = new Osoba("Marko", "Markovi ć ");
Možete primijetiti da nakon operatora new zapravo slijedi poziv metodekoja nosi isto ime kao i sama klasa. Ta metoda (može ih biti i više) nazivase konstruktor i sastavni je dio svake klase. Pozivom konstruktora nastajenovi objekt te klase.
Dakle, definicija varijable uvijek se sastoji od dva koraka: deklaracije iinicijalizacije. U programskom jeziku C# zgodno je što se ta dva korakamogu objediniti.
Primjer 2.2.4.4
int x = 1, y;mojaKlasa = new mojaKlasa();Osoba o1 = new Osoba("Marko", "Markovi ć ");
-
8/16/2019 C i .NET Framework 4.0 Preview
15/22
Str.19§ §C# I .NET FRAMEWORK 2.0
Zagreb - Maksimirska 58a § A L G E B R A §
2.2.5 Izrazi, operatori, konverzije
Tijekom implementiranja vašeg programskog algoritma stalno se događada na podatke primjenjujete različite operacije kojima nastaju novevrijednosti. Niz varijabli i konstanti, međusobno povezanih operatorima,
eventualno odvojenih zagradama, koji kao rezultat daju nekakvu novuvrijednost naziva se izrazom.
Primjer 2.2.5.1 – primjeri izraza
123'a'a + 4 * b"Moje ime je "+ime x > y + 5(x +1) * y
Izrazi se, s obzirom na tipove podataka i operatore koji u njima sudjeluju,mogu podijeliti kao u sljedećoj tablici:
Izrazi Tipovi podataka Operatoriaritmetički svi numerički tipovi + – * / %relacijski svi usporedivi tipovi == != < > =logički logički tip ! && ||tekstualni tekstualni tipovi +
Svaki od navedenih operatora karakteriziraju sljedeće osobine:• arnost operatora (koliko izraza povezuje – unarni, binarni, ternarni )• tip izraza na koje se primjenjuje i tip vrijednosti rezultata• prioritet operatora u odnosu na druge operatore• asocijativnost (određuje redoslijed izvršavanja operacija istog
prioriteta).
2.2.6 Aritmetički operatori
Operatori +, –, *, / predstavljaju osnovne računske operacije. To subinarni operatori, s tim da se + i – mogu koristiti i kao unarni (predznak).Operatori * i / višeg su prioriteta od operatora + i –. Binarni operator %
vraća ostatak pri cjelobrojnom dijeljenju.Svi aritmetički operatori su lijevo asocijativni (operacije istog prioritetaizvode se slijeva nadesno).
-
8/16/2019 C i .NET Framework 4.0 Preview
16/22
Str.20§ §2. Poglavlje: OBJEKTNO ORIJENTIRANO PROGRAMIRANJE
Tel: 01 2332 861, Fax: 01 2305 004 e-mail: [email protected] § www.algebra.hr §
Primjer 2.2.6.1
x + y * z
Prvo se računa y * z jer je operator * većeg prioriteta od operatora +, a tekonda se provodi zbrajanje.
Primjer 2.2.6.2
x * y / z
Prvo se računa x * y , a zatim se rezultat dijeli sa z (lijeva asocijativnost).
2.2.7 Relacijski operatori
Svi relacijski operatori su binarni i vraćaju rezultat true ili false (istina ili laž ).Oni služe za uspoređivanje vrijednosti operanada. Relacijski operatori su
nižeg prioriteta od aritmetičkih operatora.
Primjer 2.2.7.1
x + 5 * y > y -2
Prvo se računa vrijednost aritmetičkog izraza s lijeve strane relacijskogoperatora >, zatim vrijednost aritmetičkog izraza s njegove desne strane, itek tada se te dvije vrijednosti uspoređuju.
Operator == ispituje jesu li vrijednosti operanada iste, ali samo ako se radio operandima vrijednosnog tipa ili tipa string. Ako su operandi referentnog
tipa, onda taj operator ispituje pokazuju li oni na isti objekt.
Primjer 2.2.7.2
Ako je definirano
int x = 1, y = 2;
tada je vrijednost izraza
x == y – 1
true jer su vrijednosti izraza s lijeve i s desne strane operatora == iste.
Primjer 2.2.7.3
Ako je definirano
string ime1 = "Marko";string ime2 = "Marko";
-
8/16/2019 C i .NET Framework 4.0 Preview
17/22
Str.21§ §C# I .NET FRAMEWORK 2.0
Zagreb - Maksimirska 58a § A L G E B R A §
tada je vrijednost izraza
ime1 == ime2
true jer su vrijednosti obiju varijabli iste.
Primjer 2.2.7.4
Ako je definirano
Osoba o1 = new Osoba("Marko", "Markovi ć ");Osoba o2 = new Osoba("Marko", "Markovi ć ");
tada je vrijednost izraza
o1 == o2
false jer, bez obzira na to što su definirana dva objekta klase Osoba s istimulaznim parametrima, operator new je svakom dodijelio novu memorijskulokaciju.
Primjer 2.2.7.5
Ako je definirano
Osoba o1 = new Osoba("Marko", "Markovi ć ");Osoba o2 = o1;
tada je vrijednost izraza
o1 == o2
true jer sada o1 i o2 pokazuju na isti memorijski prostor.
Suprotno operatoru ==, operator != na isti način ispituje različitost svojihoperanada.
2.2.8 Logički operatori
Binarni logički operatori && i || služe za povezivanje logi
čkih vrijednostisvojih operanada. Operator && povezuje po pravilu logičke konjunkcije
(logika "i" ), a operator || logičke disjunkcije (logi č ko "ili" ). Ovi operatori imaju jako nizak prioritet (niži od relacijskih operatora).
Primjer 2.2.8.1
izraz1 && izraz2
ima vrijednost true samo ako i izraz1 i izraz2 imaju vrijednost true. Usuprotnome, taj izraz ima vrijednost false.
-
8/16/2019 C i .NET Framework 4.0 Preview
18/22
Str.22§ §2. Poglavlje: OBJEKTNO ORIJENTIRANO PROGRAMIRANJE
Tel: 01 2332 861, Fax: 01 2305 004 e-mail: [email protected] § www.algebra.hr §
Primjer 2.2.8.2
izraz1 || izraz2
ima vrijednost false samo ako i izraz1 i izraz2 imaju vrijednost false. Usuprotnome, taj izraz ima vrijednost true.
Unarni logički operator ! negira logičku vrijednost na koju se primjenjuje i on je operator najvišeg prioriteta.
Primjer 2.2.8.3
!izraz
ima vrijednost false ako izraz ima vrijednost true.
2.2.9 Tekstualni operator
Ako binarnim operatorom + djelujete na operande od kojih je barem jedantekstualnog tipa, tada se radi o konkatenaciji (spajanju) stringova. Tada se ieventualni numerički operand automatski konvertira u svoj tekstualni oblik.
Primjer 2.2.9.1
Ako je definirano
string ime = "Marko";string prezime = "Markovi ć ";
int starost = 21;
tada je vrijednost izraza
"Ja se zovem " + ime + " " + prezime + " i imam " + starost + " godinu."
jednaka
Ja se zovem Marko Markovi ć i imam 21 godinu.
2.2.10 Operator dodjele
U prethodnim primjerima moglo se zaključiti da operator dodjele ("=") imanajniži prioritet. Ponovimo još jednom kako se odvija inicijalizacija varijable:
varijabla = izraz
Dakle, prvo se izračunava vrijednost izraza, a zatim se ta vrijednostdodjeljuje varijabli. Iz toga dalje možete zaključiti da je operator dodjele desno asocijativan.
-
8/16/2019 C i .NET Framework 4.0 Preview
19/22
Str.23§ §C# I .NET FRAMEWORK 2.0
Zagreb - Maksimirska 58a § A L G E B R A §
Primjer 2.2.10.1
Ako je definirano
int x, y;
bool p;string ime, recenica;
tada su izrazi
x = 5; x = x + 1; x = x * 2 + 1; p = (x > 5) && (y < x)ime = "Marko";recenica = "Ja se zovem " + ime;
primjeri ispravno upotrijebljenog operatora dodjele ("=").
Napomena: Programski jezik C# dopušta i korištenje specifičnih operatoradodjele op=, gdje je op neki od aritmetičkih operatora.
Primjer 2.2.10.2
Ako je definirano
int x = 2;
tada operacija
x += 1
vrijednost varijable x povećava za 1 (ekvivalentno operaciji x = x + 1). Čak iako se radi o često potrebnom povećavanju ili smanjivanju vrijednosti nekevarijable za 1, mogu se koristiti i unarni operatori ++ i -- koji imaju postfiksnu i prefiksnu notaciju ( x++, ++x, x--, --x ). Kad je u pitanjupostfiksna notacija, rezultat je vrijednost varijable prije operacije, a kad je upitanju prefiksna notacija, rezultat je vrijednost varijable poslije operacije.
Primjer 2.2.10.3
Ako je definirano
double x = 1.5, y;y = x++;
tada su vrijednosti
x = 2.5y = 1.5
-
8/16/2019 C i .NET Framework 4.0 Preview
20/22
Str.24§ §2. Poglavlje: OBJEKTNO ORIJENTIRANO PROGRAMIRANJE
Tel: 01 2332 861, Fax: 01 2305 004 e-mail: [email protected] § www.algebra.hr §
no ako je definirano
double x = 1.5, y;y = ++x;
vrijednosti su
x = 2.5y = 2.5
2.2.11 Konverzije podataka
Konverzija podataka je prevođenje podataka iz jednog tipa u drugi. Uprogramskom jeziku C# konverzija se može raditi automatski (implicitna konverzija) ili pod kontrolom programera (eksplicitna konverzija).
2.2.11.1 Implicitna konverzija
Dvije su situacije u kojima se primjenjuje implicitna konverzija:
1. pri izračunavanju vrijednosti izraza2. pri dodjeljivanju vrijednosti varijabli.
Primjer 2.2.11.1
double x = 12.34;int y = 10; x = x + y;
U gornjem primjeru pri računanju vrijednosti x + y dolazi do implicitnekonverzije podatka x u tip double. Obrnuta konverzija u programskom jeziku C# nije dopuštena, jer se inače ne bi sačuvala preciznost podataka.Implicitne konverzije najčešće se primjenjuju kod numeričkih tipovapodataka.
Tip Može se implicitno konvertirati usbyte short, int, long, float, double, decimalbyte short, ushort, int, uint, long, ulong, float, double, decimalshort int, long, float, double, decimalushort int, uint, long, ulong, float, double, decimalint long, float, double, decimaluint long, ulong, float, double, decimal
long float, double, decimalchar ushort, int, uint, long, ulong, float, double, decimalfloat doubleulong float, double, decimal
2.2.11.2 Eksplicitna konverzija
Eksplicitna konverzija provodi se operatorom cast ili korištenjem klaseConvert .
Primjer 2.2.11.2
Ako pokušate prevesti sljedeći kod
int x;
-
8/16/2019 C i .NET Framework 4.0 Preview
21/22
Str.25§ §C# I .NET FRAMEWORK 2.0
Zagreb - Maksimirska 58a § A L G E B R A §
double y = 5.32; x = y;
kompajler će javiti grešku:
Cannot implicitly convert type 'double' do 'int'
Ovaj problem možete riješiti eksplicitnom konverzijom pomoću operatoracast :
x = (int)y;
ali morate biti svjesni da tu može doći do gubitka informacije jer, naravno,kad podatak tipa double konvertiramo u tip int , njegov decimalni dio jednostavno se odbacuje.Dakle, operator cast upotrebljava se tako da se u zagradama navede tip ukoji želimo konvertirati vrijednost izraza koji slijedi za operatorom.
Dopušteno "kastanje" numeričkih tipova podataka slijedi u tablici:
Tip Može se eksplicitno konvertirati u
sbyte byte, ushort, uint, ulong, charbyte sbyte, charshort sbyte, byte, ushort, uint, ulong, charushort sbyte, byte, short, charint sbyte, byte, short, ushort, uint, ulong, charuint sbyte, byte, short, ushort, int, charlong sbyte, byte, short, ushort, int, uint, ulong, charulong sbyte, byte, short, ushort, int, uint, long, charchar sbyte, byte, shortfloat sbyte, byte, short, ushort, int, uint, long, ulong, char, decimaldouble sbyte, byte, short, ushort, int, uint, long, ulong, char, float,
decimaldecimal sbyte, byte, short, ushort, int, uint, long, ulong, char, float,
double
Primjer 2.2.11.3
int x = 1;string s1 = (string) x;string s2 = "2";
int y = (int)s2;
Prevođenjem navedenog koda dobili biste sljedeće poruke o greškama:
Cannot convert type 'int' to 'string'Cannot convert type 'string' to 'int'
Eksplicitne konverzije iz ovog primjera nije moguće provesti operatoromcast , već morate upotrijebiti neku od metoda klase Convert .
-
8/16/2019 C i .NET Framework 4.0 Preview
22/22
Str.26§ §2. Poglavlje: OBJEKTNO ORIJENTIRANO PROGRAMIRANJE
U skladu s tim, prethodni primjer mogli biste prepraviti na sljedeći način:
int x = 1;string s1 = Convert.ToString(x);string s2 = "2";int y = Convert.ToInt32(s2);
Naravno, eksplicitna konverzija Convert.ToInt32(s2) bit će uspješna samoako string s2 predstavlja ispravno zapisani cijeli broj. KonverzijuConvert.ToString(x), pak, niste ni morali striktno provoditi, jer zapravo svestrukture kojima su predstavljeni osnovni tipovi sadrže metodu ToString .
Primjer 2.2.11.4
int x = 1;string s = x.ToString();