Kurs: Core Windows Forms Technologies Materijali vezani uz ovu lekciju: - Test klase i objekti - Klase i objekti (PDF dokument) Definisanje klaseKlasa predstavlja apstraktnu predstavu skupa objekata koji imaju iste osobine. Sastoji se od atributa i metoda. Atributi i metode se nazivaju članice klase.Objekat predstavlja konkretan primerak- instancu klase. Klasu treba shvatiti kao skicu na osnovu koje će kasnije biti kreirani objekti. U nastavku je prikazana klasa AutomatNovca koja ima dva javna atributa imePrezime i stanje.
Da bi se klasa definisala koristi se ključna reč class ispred imena klase. Preporuka je da ime klase počinje velikim slovom. Ako se ime klase sastoji iz više reči tada svaka sledeća reč počinje velikim slovom. Klasa je korisnički definisani tip. Instanciranje klase , tj. kreiranje objekata klase vrši se upotrebom službene reči new. Funkcija koja se nalazi iza ključne reči new naziva se podrazumevani konstruktor i kao što joj samo ime kaže služi za konstruisanje objekata. Atributima objekta pristupa se preko operatora .("tačka"). Ovde je kreiran objekat označen sa an.
Metode klase Metoda klase je funkcija - članica klase. Svaka metoda treba da definiše tip podataka koji vraća ili ukoliko metoda ne vraća ništa onda se povratni tip metode označava sa void. Ukolika metoda vrća neku vrednost onda se unutar tela metode koristi službena reč return. Svaka metoda ima svoje ime. Uobičajeno da ime metode počinje malim slovom. Metoda može imati listu parametara ili može biti bez parametara. Metoda prikazana u primeru ima ime podizanjeNovca, ima jedan ulzni parametar tipa double i vraća rezultat tipa double.
Metoda se koristi za postavljanje vrednosti atributa stanje (koji se nalazi unutar iste klase kojoj pripada i metoda podizanjeNovca). Prevedeno na poslovnu terminologiju stanje na računu se samnjuje za podignuti iznos.
Primer klase Data je definicija klase AutomatNovca koja služi za rad sa nekim tekućim računom. Klasa ima dva atributa imePrezime i stanje, gde atribut stanje predstavlja stanje na računu korisnika čije je ime i prezime sadržano u atributu imePrezime. Klasa ima dve metode uplata i podizanjeNovca. Svakom uplatom povećava se stanje na računu korisnika za određeni iznos a svakim podizanjem novca vrednost na računu se smanjuje.
Pozivanje metode Da bi se metoda klase pozvala potrebno je napraviti objekte te klase a zatim se metodi klase pristupa korišćenjem operatora .("tačka"). Ovo važi za tzv. javne metode klase, odnosno metode uz koje stoji službena reč public. Ovde je kreiran tekući račun tj. objekat klase AutomatNovca za korisnika pod imenom "Mika Mikic" . Zatim su izvršene dve uplate na račun korisnika pozivanjem metode uplata. Obratiti pažnju da metoda uplata ima ulazni parametar tipa double i da ne vraća nikakvu vrednost. Na kraju je izvršeno jedno podizanje novca korišćenjem metode podizanjeNovca. Ova metoda ima ulazni parametar tipa double i vraća rezultat tipa double. Rezultat izvršavanja metode je prihvaćen u promenljivoj tipa double pod nazivom trenutniIznos.
Definisanje konstruktoraKonstruktor je specijalna metoda klase koja se koristi za kreiranje objekata tj. instanciranje te klase. Konstruktor ima isto ime kao i klasa. Konstruktor ne vraća nijedan tip, čak ni void. Ukoliko se unutar klase ne definiše konstruktor onda okruženje obezbeđuje podrazumevani (default) konstruktor. Podrazumevani konstruktor nema parametre. Može se iskoristiti za inicijalizaciju atributa klase prilikom kreiranja objekata. Pored podrazumevanog konstruktora moguće je definisati i tzv. parametarske konstruktore. U jednoj klasi se može definisati veliki broj konstruktora. U nastavku je dat primer definisanja podrazumevanog i parametarskog konstruktora:
Kada se u klasi definišu metode koje imaju isto ime a različit potpis tj. listu ulaznih parametara onda se kaže da je izvršen overloading metode. Kada se u klasi definiše više konstruktora radi se o overloading-u konstruktora.
Poziv konstruktora U primeru je prikazan način poziva parametarskog i podrazumevanog konstruktora. Prilikom pozivanja parametarskog konstruktora, atributi odgovarajućeg objekta koji je konstruisan bivaju inicijalizovani.
Kod podrazumevanog konstruktura to nije slučaj već se atributi objekta inicijalizuju pristupanjem preko operatora .("tačka").
Predavanje parametara po vrednosti Ponovo je kreiran deo klase AutomatNovca koja ima atribut stanjeNaRacunu. Da bi se ilustrovalo predavanje parametara po vrednosti nekoj funkciji, napravljena je metoda vratiStanjePrekoParametaraVred koja ima jedan ulazni parametar tipa double. Unutar tela metode se vrednost tog ulaznog parametra inicijalizuje na vrednost atributa stanjeNaRacunu. Pokušava se da se metodi prosledi neka promenljiva po vrednosti tako da ona posle izvršavanja te metode sadrži vrednost atributa stanjeNaRacunu. Objekat klase AutomatNovca označen sa an je kreiran primenom paremetarskog konstruktora tako da su atributi tog objekta inicijalizovani. Metodi vratiStanjePrekoParametaraVred je prosleđena promenljiva trenutoStanje koja je prethodno inicijalizovana na vrednost nula.
Ako se sada odštampa vrednost promenljive trenutno stanje da li će njena vrednost biti jednaka vrednosti atributa stanjeNaRacunu?
Rezultat predavanja paremetara po vrednosti Promenljiva trenutnoStanje će i posle pozivanja metode imati vrednost 0. Razlog toga je što se unutar f-je vratiStanjePrekoParametaraVred kreira lokalna kopija promenljive trenutnoStanje , dok sama promenljiva ostaje ne promenjena. Dakle ako se želi promena vrednosti spoljašnje promenljive (koja nije članica klase) tada je ne treba prosleđivati metodi klase po vrednosti.
Predavanje parametara po referenci Spoljašnji objekat ili promenljiva koja je argument funkcije se može promeniti samo ako se predaje po referenci. Predavanje vrednosti po referenci vrši se korišćenjem službene reči ref. Tada se prilikom pozivanja metode ne pravi lokalna kopija promenljive već se radi sa referencom na objekat. Referencu treba shvatitia kao nadimak (engl. alias) za stvarni objekat i sve što se dešava sa referencom dešava se i sa stvarnim objektom.
Primer predavanja parametara po referenci Pri pozivu metode kojoj se promenljiva prosleđuje po referenci se takođe koristi službena reč ref. Promenljiva trenutoStanje prethodno inicijalizovana na nulu se prosleđuje po referenci. Posle izvršavanja ove metode vrednost promenljive trenutoStanje se menja.
Promenljiva koja se prosleđuje po refrenci mora biti inicijalizovana. Ukoliko se ne želi prethodna inicijalizacija promenljive koja će biti predata po referenci onda se koristi službena reč out.
Objekat kao argument funkcijeObjekti klase se uvek predaju nekoj funkciji po referenci, što znači da objekat može promeniti vrednost svojih atributa ako se preda nekoj funkciji. U nastavku je prikazana klasa Omotac koja ima samo jedan atribut tipa double, objekti ovakve klase se često nazivaju "umotani double".
Unutar klase AutomatNovca je sada napravljena metoda koja kao ulazni parametar ima objekat klase Omotac. U telu metode se njegovom atributu omotacStanja dodeljuje vrednost atributa stanjeNaRacunu klase AutomatNovca.
Primer prosleđivanja objekta kao argumenta funkcije
U primeru su najpre instancirane klase AutomatNovca i klasa Omotac. Objekat klase Omotac označen sa umotaniDouble se prosleđuje metodi vratiStanjePrekoObjekta. Zbog činjenice da se objekti prosleđuju po referenci atributi objekta umotaniDouble se menjaju što se može proveriti štampanjem vrednosti atributa na standardnom izlazu.
Funkcija koja vraća objekat Unutar klase se može napraviti metodakoja kao povratnu vrednost ima objekat neke druge klase. To je slučaj i ovde sa metodom vratiObjekat unutar klase AutomatNovca. Ova metoda vraća objekat klase Omotac. Unutar tela metode se vrednost jedinog atributa ove klase setuje na vrednost stanjeNaRacunu klase AutomatNovca. Iščitavanjem vrednosti atributa vraćenog objekta se može pročitati vrednost atributa stanjeNaRacunu klase AutomatNovca.
Statički članovi klase Statički članovi klase pripadaju klasi a ne objektima klase. Inicijalizuju se pre nego što se kreira instanca klase. Pristupa im se preko imena klase. Statički mogu biti i atributi i metode klase. Svi objekti klase dele statičke članove klase. Deklarišu se korišćenjem službene reči static. Dat je primer upotrebe statičkog člana klase.
Atribut brojRacuna je statički što znači da ga dele svi objekti klase AutomatNovca. U konstruktoru klase AutomatNovca inkrementira se ovaj statički član. Kad god se kreira objekat klase AutomatNovca inkrementira se statički član brojRacuna tako da je vrednost ovog člana u svakom trenutku jednaka broju kreiranih objekata klase AutomatNovca tj. broju kreiranih tekućih računa.
Upotreba statičkog člana Statički član se inicijalizuje na vrednost 20 pre kreiranja objekata klase. Zatim se kreiraju dva objekta klase AutomatNovca. Sada je vrednost statičkog člana 22.
Definisanje prava pristupa članovima klase Korišćenjem modifikatora može se definisati pravo pristupa članovima klase unutar aplikacije. Tabela 1: Prava pristupa Kod public prava pristupa, pristup nije ograničen. Svaka druga klasa može pristupati javnim članovima date klase. Privatnim članovima klase mogu pristupati samo drugi članovi te iste klase. Internal pravo pristupa je ograničeno na prostor imena. Kod protected prava pristupa pristup je ograničen na članove pripadajuće klase kao i na članove klase koja je izvedena iz te klase.
Svojstva (Properties)Svojstva su članovi klase koji omogućavaju pristup člnovima objekta neke klase. Svojstva se prave da bi se korisniku olakšao pristup privatnim članovima klase. Privatnom članu klase se ne može pristupiti spolja preko operatora tačka. Da bi se pročitala vrednost privatnog člana potrebno je napraviti javnu metodu članicu klase koja to može da uradi , pa mu se pristupa indirektno preko pristupne odnosno aksesorske metode. Slično je i sa setovanjem vrednosti privatnog člana. Property ili svojstvo u sebi objedinjuje ove dve funkcionalnosti. On ima get deo pomoću kga se čita vrednost privatnog člana i set deo pomoću koga se setuje vrednost privatnog člana. Oznaka stanjeNaRacunu = value označava da će promenljiva stanjeNaRacunu biti setovana na vrednost sa desne strane jednakosti. Properti ima povratni tip kao i promenljiva za koju se pravi. Obično se označava velikim početnim slovom. Uočiti da property nema male zagrade kao metoda.
Korišćenje Property-ja U nastavku je ilustrovana upotreba propertija Stanje definisanog u prethodnom primeru. Kada se napiše izraz an.Stanje = 23000 koristi se set deo propertija stim što je value = 23000. Ukoliko posle pozivanja propertija nema znaka jednakosti i izraza na desnoj strani koristi se get deo propertija.
|