Upload
nemanja-ignjatovic
View
132
Download
0
Embed Size (px)
DESCRIPTION
C# Klase i objekti
Citation preview
Visoka tehniVisoka tehnika ka kola Nikola Ni
.NET tehnologije.NET tehnologije
(7)(7)
Klase i objekti u C#Klase i objekti u C#--uu
dr Zoran Velidr Zoran Velikovikovi, dipl. in, dipl. in. el.. el.
Decembar, 2012.Decembar, 2012.
Studijski program:Studijski program:Savremene raSavremene raunarske tehnologijeunarske tehnologije
Deklaracija klasaDeklaracija klasa Pored ugraenihugraenih tipova, u C#C#-u se mogu graditi slosloenieni korisnikorisniki ki
tipovitipovi podataka koji odgovarajuodgovaraju problemu koji se reava.
Ve znamo da se novinovi tipovitipovi formiraju pomou klasaklasa. InstanceInstance (primerci) klasa se nazivaju objektiobjekti. ObjektiObjekti se formiraju u memorijimemoriji prilikom izvravanja programa. PonaPonaanje, svojstvaanje, svojstva i stanjestanje klasa se odreuju elementimaelementima klasa
(engl. class member).
MetodeMetode (engl. methods) odreuju ponaponaanje klaseanje klase, dok se stanje stanje klasaklasa ispoljava preko poljapolja (engl. fields).
SvojstvaSvojstva (engl. properties) klasa su takoe obeleobelejeje klasa. Klase se prvo deklarideklariuu, pa se tek onda definiu metodemetode i poljapolja. U C#C#-u (isto kao i u Javi) se klase deklarie kljunom reju classclass. U nastavku bie formirana klasa koja pratiprati i prikazujeprikazuje vreme u toku u toku
danadana.
Bie korien objektobjekt koji obezbeuje bibliotekabiblioteka iz imenskog prostora SystemSystem.
Primer deklaracije klase (1)Primer deklaracije klase (1)##regionregion Using directivesUsing directives
usingusing System; using System.Collections.Generic; using System.Text;System; using System.Collections.Generic; using System.Text;##endregionendregionnamespacenamespace TimeClassTimeClass{{
publicpublic classclass TimeTime{{int Year; int Month; int Date; int Hour; int Minute; int int Year; int Month; int Date; int Hour; int Minute; int Second;Second;
publicpublic voidvoid DisplayCurrentTime( )DisplayCurrentTime( ){{
Console.Console.WriteLineWriteLine("stub for DisplayCurrentTime");("stub for DisplayCurrentTime");} }
}} (nastavak na sledeoj stranici)
Jedina metoda deklarisana u Jedina metoda deklarisana u klasi klasi DisplayCurrentTime( )DisplayCurrentTime( )
vravraa tip a tip voidvoid
Privatne promenljive Privatne promenljive klase Timeklase Time
Modifikator pristupa Modifikator pristupa klase Time klase Time -- publicpublic
Primer deklaracije klase (2)Primer deklaracije klase (2)(nastavak sa prethodne stranice)
// Program za testiranje formirane klase// Program za testiranje formirane klase
public public classclass TesterTester{{
static static voidvoid Main( )Main( ){{
TimeTime t = new t = new Time( )Time( );;tt.DisplayCurrentTime.DisplayCurrentTime( );( );
}}}}
}}
Klasa Tester Klasa Tester testiranje klase Timetestiranje klase Time
Instanca klase Time, Instanca klase Time, formira se operatorom formira se operatorom newnew
Objekt Objekt tt klase Timeklase Time
Metoda Metoda DisplayCurrentTime()DisplayCurrentTime() dostupna objektu dostupna objektu tt
Poziv konstruktora Poziv konstruktora klase Timeklase Time
Formiranje objekata (1)Formiranje objekata (1) Objekti su referentnireferentni tipovitipovi, dakle imaju reprezentaciju na
hiphip-u i prave se pomou rezervisane rei newnew.
TimeTime t t = newnew Time()Time();
Instanca tt ne sadrne sadrii vrednost objekta tipa TimeTime, ve adresu adresu objektaobjekta koji se pravi u dinamidinamikoj koj (hip) memoriji.
Promenljiva tt je referencareferenca na objekt tipa TimeTime. Obzirom da programskim kodom nije formirannije formiran konstruktor ove
klase, CLRCLR (ili kompajler) pravi konstruktorpravi konstruktor za nas.
Tek posle izvrizvrenjaenja konstruktorakonstruktora u memoriji se formira valjanvaljan objekt.
Modifikator pristupaModifikator pristupa klase dreuje koje metodemetode i promenljivepromenljive lanice drugih klasa mogu da im pristupemogu da im pristupe.
Prilikom formiranja objekata poziva se Prilikom formiranja objekata poziva se metoda metoda Time()Time() koja se naziva koja se naziva KONSTRUKTORKONSTRUKTOR
Modifikatori pristupaModifikatori pristupaModifikator Modifikator
pristupapristupa Restrikcije Restrikcije
public Apublic A Bez ograniBez ogranienja, vidljive bilo kojoj metodi i klasienja, vidljive bilo kojoj metodi i klasi
private Aprivate A lanovi klase A dostupni su samo metodama klase Alanovi klase A dostupni su samo metodama klase A
protected Aprotected A lanovi klase A dostupni su samo metodama klase A i lanovi klase A dostupni su samo metodama klase A i metodama metodama izvedenimizvedenim iz klase Aiz klase A
internal Ainternal A lanovi klase A dostupni su svim klasama iz lanovi klase A dostupni su svim klasama iz programskog programskog sklopasklopa AA
pprotected internal Arotected internal A Objedinjuje protected i internalObjedinjuje protected i internal
Formiranje objekta (2)Formiranje objekta (2)#region#region Using directivesUsing directives
using System;using System;using System.Collections.Generic;using System.Collections.Generic;using System.Text;using System.Text;
#endregion#endregionnamespacenamespace DeclaringConstructorDeclaringConstructor{{
publicpublic classclass TimeTime{{
int Year; int Month; int Date; int Hour;int Year; int Month; int Date; int Hour;int Minute; int Second;int Minute; int Second;publicpublic voidvoid DisplayCurrentTime( )DisplayCurrentTime( ){{
System.Console.WriteLine( "{0}/{1}/{2} {3}:{4}:{5}",System.Console.WriteLine( "{0}/{1}/{2} {3}:{4}:{5}",Month, Date, Year, Hour, Minute, Second );Month, Date, Year, Hour, Minute, Second );
} }
Privatne promenljive Privatne promenljive lanicelanice
Javne metode za Javne metode za pristup vrednostimapristup vrednostima
Formiranje specijalnog Formiranje specijalnog KonstruktoraKonstruktora
Formiranje objekta (3)Formiranje objekta (3)publicpublic Time Time ((System.DateTimeSystem.DateTime dt)dt)
{{Year = dt.Year; Month = dt.Month; Date = dt.Day;Year = dt.Year; Month = dt.Month; Date = dt.Day;Hour = dt.Hour; Minute = dt.Minute; Second = dt.Second;Hour = dt.Hour; Minute = dt.Minute; Second = dt.Second;
}}}}
publicpublic classclass TesterTester{{
staticstatic voidvoid Main( )Main( ){{
SystemSystem.DateTime.DateTime currentTimecurrentTime = = System.DateTime.NowSystem.DateTime.Now;;Time Time t = new t = new Time (currentTime)Time (currentTime);;t.t.DisplayCurrentTime( )DisplayCurrentTime( );;
} } } }} }
Izlaz:Izlaz:11/10/2009 22:33:1011/10/2009 22:33:10
Konstruktoru se prosleuje Konstruktoru se prosleuje objekt objekt dtdt tipa DateTimetipa DateTime
Poziv statiPoziv statikog svojstva kog svojstva Now Now strukture DateTime, tekustrukture DateTime, tekue vremee vreme
Ovaj objektOvaj objekt dtdt tipa DateTime obezbeuje tipa DateTime obezbeuje biblioteka iz imenskog prostora Systembiblioteka iz imenskog prostora System
Dodeljivanje vrednosti Dodeljivanje vrednosti privatnim promenljivamaprivatnim promenljivama
System.DateTime struSystem.DateTime strukkturturaa// Summary:
// Initializes a new instance of the System.DateTimeSystem.DateTime structure to the specified// year, month, day, hour, minute, and second.// Parameters:Parameters:// year:year:// The year (1 through 9999).// month:month:// The month (1 through 12).// day:day:// The day (1 through the number of days in month).// hour:hour:// The hours (0 through 23).// minute:minute:// The minutes (0 through 59).// second:second:// The seconds (0 through 59).// Exceptions:Exceptions:// System.ArgumentOutOfRangeException:// year is less than 1 or greater than 9999. -or- month is less than 1 or greater// than 12. -or- day is less than 1 or greater than the number of days in month.-or-// hour is less than 0 or greater than 23. -or- minute is less than 0 or greater// than 59. -or- second is less than 0 or greater than 59.//// System.ArgumentException:// Specified parameters evaluate to less than System.DateTime.MinValue or more// than System.DateTime.MaxValue.
public DateTime(int year, int month, int day, int hour, int minupublic DateTime(int year, int month, int day, int hour, int minute, int second);te, int second);
DateTime NowDateTime Now, UtcNow, UtcNow// Summary:// Gets a System.DateTime object that is set to the current date and time on// this computer, expressed as the local timelocal time.//// Returns:// A System.DateTime whose value is the current local date and time.
public public staticstatic DateTime Now { get; }DateTime Now { get; }
//// Summary:// Gets a System.DateTime object that is set to the current date and time on// this computer, expressed as the Coordinated Universal TimeCoordinated Universal Time (UTC).//// Returns:// A System.DateTime whose value is the current UTC date and time.
public public staticstatic DateTime UtcNow { get; }DateTime UtcNow { get; }
StatiStatiko svojstvo ko svojstvo NowNow objekta objekta DateTimeDateTime koje se samo mokoje se samo moe e itatiitati
StatiStatiko svojstvo ko svojstvo UtcUtcNowNow objekta objekta DateTimeDateTime koje se samo mokoje se samo moe e itatiitati
Object Browser: Struktura Object Browser: Struktura DateTimeDateTime
ViVie preklopljenih konstruktora e preklopljenih konstruktora strukture strukture DateTimeDateTime, detalji do , detalji do
kraja lekcijekraja lekcije
Struktura Struktura DateTimeDateTime, svojstvo Now, svojstvo Now
Svojstvo strukture Svojstvo strukture DateTimeDateTime, , NewNew
Help: Struktura Help: Struktura DateTimeDateTime, metode, metodeKonstruktori i metode strukture Konstruktori i metode strukture
DateTimeDateTime
Help: Struktura Help: Struktura DateTimeDateTime, svojstva , svojstva
Properties strukture Properties strukture DateTimeDateTime
Rezervisana reRezervisana re thisthis KonstruktoruKonstruktoru se mogu proslediti inicijalne vrednostiinicijalne vrednosti kako bi
se definisalo popoetnoetno stanje objekta.
Da bi se definisao konstruktordefinisao konstruktor, deklarie se metoda sa istimistimimenomimenom i argumentimaargumentima u pozivu.
Rezervisana re thisthis oznaava tekutekuuu instancu objektainstancu objekta i moe se koristiti na vie naina.
public public classclass CarCar{{public public intint yearBuilt;yearBuilt;publicpublic void void SetYearBuiltSetYearBuilt((int int yearBuilt)yearBuilt){{// // parametar parametar yearBuilt yearBuilt skrivaskriva yearBuilt yearBuilt poljepoljethisthis.yearBuilt = .yearBuilt = yearBuiltyearBuilt;;
}}}}
StatiStatike metode i ke metode i lanovilanovi lanovi klaselanovi klase mogu biti lanovi instancelanovi instance ili statistatiki ki lanovilanovi. StatiStatiki ki lanovilanovi se referenciraju za klaseklase, dok se lanovi lanovi
instanceinstance vezuju za instanceinstance.
StatiStatike metodeke metode se ponaaju kao globalne metodeglobalne metode jer se pozivaju mimo instancemimo instance objekta.
Metoda Main()Main() je statika i radi na nivou klasenivou klase a ne ne nivou objekta.
StatiStatiki konstruktorki konstruktor u klasi e se izvriti prepre pravljenja bilo koje instance.
Primer statistatikogkog konstruktoraStatic Time()Static Time()
{{
Name=Name=TimeTime;;
}}
Nema Nema modifikatora pristupa!modifikatora pristupa!
UniUnitavanje objekata tavanje objekata -- DestruktoriDestruktori C# C# koristi automatsko prikupljanje ubretakoristi automatsko prikupljanje ubreta, meutim ako objekt
koristi resurse kojima ne upravlja .NETne upravlja .NET, oni se eksplicitnoeksplicitno moraju moraju osloboditiosloboditi!
Ovo omoguava destruktordestruktor koji se poziva od strane sakupljaa smea. Destruktor objekta se ne mone moee direktnodirektno pozvati! Deklaracija destruktoradestruktora je sledea:
~~MyClass()MyClass(){{
// na// naredbe za oslobaanje resursaredbe za oslobaanje resursa}}
Ova sintaksasintaksa se zapravo realizuje metodom finalize()finalize() koja se odnosi na dotidotinunu klasu (vie o ovoj metodi kasnije na kursu).
Tilda, oznaTilda, oznaava destruktorava destruktor
Prosleivanje parametaraProsleivanje parametara U C# C# se vrednosni tipovi podrazumevanopodrazumevano prosleuju
metodama po vrednostipo vrednosti.
Dakle, u prosleenoj metodi se formira privremena kopijaprivremena kopija prosleenog objekta.
Ponekad je poeljno objekte proslediti po referencipo referenci.
Modifikator parametra refref omoguava prosleivanje vrednosnih tipova po referencivrednosnih tipova po referenci.
Modifikator parametra outout omoguava prosleivanje vrednosnih tipova po referenci bez incijalizacije pre prosleivanjabez incijalizacije pre prosleivanja.
Modifikator parametra paramsparams omoguava prosleivanje razlirazliitogitog broja parametara.
public void GetTime(public void GetTime(refref int h, int h, refref int m, int m, ref ref int s)int s)
Preklapanje metoda i konstruktoraPreklapanje metoda i konstruktora esto se javlja potreba da se ima viviee razliitih metoda sa istim istim
imenomimenom!
Ovo bi omoguilo vevei broji broj razlirazliitihitih konstruktorakonstruktora za jednu te istuistu klasu!
Na taj nain bi se inicijalizacijanicijalizacija mogla prilagoditi razlirazliitim itim potrebama.
MehanizamMehanizam za realizaciju ove ideje naziva se preklapanje preklapanje (engl. overloading).
Potpis metodePotpis metode se osvaruje preko njenog imenaimena i listomlistomparametaraparametara!
Liste parametaraListe parametara mogu da se razlikuju po tiputipu i/ili brojubrojuparametara.
Preklapanje metoda i konstruktoraPreklapanje metoda i konstruktoravoidvoid MyMethod(int p1)MyMethod(int p1)voidvoid MyMethod(int p1, int p2)MyMethod(int p1, int p2)voidvoid MyMethod(int p1, string s1)MyMethod(int p1, string s1)
Klasa moe imati proizvoljanproizvoljan broj metoda ali sa razlirazliitim itim potpisompotpisom.
Promena tipatipa rezultatarezultata ne povlane povlaii izmenu konstruktora.
RazliRazliiti broj i tip parametaraiti broj i tip parametaraIsto imeIsto ime
Preklapanje konstruktora (1)Preklapanje konstruktora (1)public public classclass TimeTime{{
// privatne promenljive // privatne promenljive lanicelaniceint Year; int Month; int Date; int Hour; int Year; int Month; int Date; int Hour; int Minute; int Second;int Minute; int Second;
// javno dostupna metoda// javno dostupna metodapublic public voidvoid DisplayCurrentTime( )DisplayCurrentTime( )
{{System.Console.WriteLine("{0}/{1}/{2} {3}:{4}:{5}",System.Console.WriteLine("{0}/{1}/{2} {3}:{4}:{5}",Month, Date, Year, Hour, Minute, Second);Month, Date, Year, Hour, Minute, Second);
}}
// Na slede// Na sledeoj strani su prikazani konstruktorioj strani su prikazani konstruktori// sa razli// sa razliitim parametrimaitim parametrima
Preklapanje konstruktora (2)Preklapanje konstruktora (2)// konstruktori// konstruktoripublic Time(public Time(System.DateTimeSystem.DateTime dt)dt)
{{Year = dt.Year;Year = dt.Year;Month = dt.Month;Month = dt.Month;Date = dt.Day;Date = dt.Day;Hour = dt.Hour;Hour = dt.Hour;Minute = dt.Minute;Minute = dt.Minute;Second = dt.Second;Second = dt.Second;
}}public Time(int Year, int Month, int Date, int Hour, int Minute,public Time(int Year, int Month, int Date, int Hour, int Minute, int Second)int Second)
{{this.Year = Year;this.Year = Year;this.Month = Month;this.Month = Month;this.Date = Date;this.Date = Date;this.Hour = Hour;this.Hour = Hour;this.Minute = Minute;this.Minute = Minute;this.Second = Second;this.Second = Second;
}}}}
Konstruktor Konstruktor 22
Konstruktor Konstruktor 11
Preklapanje konstruktora (3)Preklapanje konstruktora (3)publicpublic classclass TesterTester
{static static voidvoid Main( )Main( ){
System.DateTime System.DateTime currentTimecurrentTime = System.DateTime.Now= System.DateTime.Now;Time Time t1t1= new = new Time(currentTime)Time(currentTime);;t1.t1.DisplayCurrentTime( )DisplayCurrentTime( );;
Time Time t2t2 = new = new Time(2011,11,18,11,03,30)Time(2011,11,18,11,03,30);;t2t2.DisplayCurrentTime( )DisplayCurrentTime( );
}}
Poziv Konstruktora Poziv Konstruktora 11 na osnovu na osnovu pozivnih parametarapozivnih parametara
Poziv Konstruktora Poziv Konstruktora 22Isto ime konstruktora, Time()Isto ime konstruktora, Time()
Kapsuliranje podataka svojstvimaKapsuliranje podataka svojstvima SvojstvaSvojstva (engl. properties) omoguavaju pristuppristup stanjima stanjima
klaseklase direktno preko metodapreko metoda koje obezbeuje tata klasa.
Na ovaj nain se skrivaskriva interno stanje klaseinterno stanje klase i omoguava se zapravo indirektan pristupindirektan pristup putem pomenutih metodametoda.
Klase nezavisnonezavisno menjaju odravanje svog internog stanjainternog stanjabez obavezebez obaveze da o tome obavetavaju klijenta.
Dakle, svojstava klijentu izgledaju kaoizgledaju kao promenljivepromenljive lanicelanice, iako su implementirane kao metodemetode.
Svojstva se deklariu imenomimenom a zatim i pristupnim pristupnim metodamametodama koje se uvek nazivaju getget, odnosno, setset.
Na sledeem slajdu je dat primer svojstva HourHour.
Primer: svojstvo HourPrimer: svojstvo Hourpublicpublic intint HourHour
{{getget{{
returnreturn hourhour;}}setset{{
hour = hour = valuevalue;}}
}}
Svojstvo, HourSvojstvo, Hour
Pristupne metodePristupne metode
Test: svojstvo HourTest: svojstvo Hourpublic public classclass TesterTester{{static static voidvoid Main( )Main( ){{System.DateTime System.DateTime currentTimecurrentTime = System.DateTime.Now;= System.DateTime.Now;Time Time tt = = newnew Time(currentTime);Time(currentTime);tt.DisplayCurrentTime();.DisplayCurrentTime();intint theHour = theHour = tt.Hour;.Hour;
System.Console.WriteLine("System.Console.WriteLine("\\nRetrieved the hour: {0}nRetrieved the hour: {0}\\n", theHour);n", theHour);theHour++;theHour++;t.t.HourHour = theHour;= theHour;System.Console.WriteLine("Updated the hour: {0}System.Console.WriteLine("Updated the hour: {0}\\n", theHour);n", theHour);}}
}}
itanje svojstva Houritanje svojstva Hour
Zadavanje svojstva HourZadavanje svojstva Hour
Poziv statiPoziv statikog svojstva kog svojstva Now Now strukture DateTime, tekustrukture DateTime, tekue vremee vreme
Visoka tehnika kola NiDeklaracija klasaPrimer deklaracije klase (1)Primer deklaracije klase (2)Formiranje objekata (1)Modifikatori pristupaFormiranje objekta (2)Formiranje objekta (3)System.DateTime strukturaDateTime Now, UtcNowObject Browser: Struktura DateTimeStruktura DateTime, svojstvo NowHelp: Struktura DateTime, metodeHelp: Struktura DateTime, svojstva Rezervisana re thisStatike metode i lanoviUnitavanje objekata - DestruktoriProsleivanje parametaraPreklapanje metoda i konstruktoraPreklapanje metoda i konstruktoraPreklapanje konstruktora (1)Preklapanje konstruktora (2)Preklapanje konstruktora (3)Kapsuliranje podataka svojstvimaPrimer: svojstvo HourTest: svojstvo Hour