Objekti, razredi, ... Od kje in zakaj.

Slides:



Advertisements
Podobne predstavitve
Šolska prehrana IV. osnovna šola Celje.
Advertisements

OKOLICA ŠOLE – DO KODER NAM SEŽE POGLED
ali PREHODI MED AGREGATNIMI STANJI
ANALIZA IZVAJANJA FLEKSIBILNEGA PREDMETNIKA V OE SLOVENJ GRADEC
IZBOLJŠANJE PROCESA PRODAJE S POVEČANO OSREDOTOČENOSTJO NA ODJEMALCE
INFORMATIKA Osnove – temeljni pojmi I.
Kratka navodila za Video
Specialne knjižnice Specialni knjižničarji = informacijski strokovnjaki Predavanje 2 Izr. prof. Primož Južnič
Številski sistemi Desetiški (okoli 3000 p.n.š. – Egipt)
STAVEK IN POVED.
K O M B I N A T O R I K A   Obravnava posebne naloge povezane s končnimi množicami. Kompleksija je podmnožica končne množice Število elementov v kompleksiji.
Tekmovanje mladih raziskovalcev
Naslov projekta Vaše ime | Ime učitelja | Šola
7.predavanje: življenjska doba izdelka in marketiško načrtovanje
My EBSCOhost Vodnik support.ebsco.com.
Podatkovne baze 1 in Osnove podatkovnih baz: priprave za izpit
Posvetovanje ZBDS, Bled, 2007
MANIFEST MOŠKIH (enkrat za vedno)
Najboljše iz obeh svetov: uporaba javanskih knjižnic v .NET
Številski sistemi Desetiški (okoli 3000 p.n.š. – Egipt)
Spomladansko srečanje članov ŽPS
Vektorji.
Postavitev naslova Podnaslov.
Mikrokrmilnik in programiranje
NEOBVEZNI IZBIRNI PREDMETI
Iskanje K-tega najmanjšega el.
DATOTEKE - povzetek open(ime,'w') datPisi = open(ime,'w')
Večkratne vrednosti ali tabele.
Postavitev naslova Podnaslov.
BINKOŠTI homilija d. Ferruccio prevod bojanM.
NEWTONOVI ZAKONI fizika
dLib in slovenska književnost
Uporaba LOGGER PROja Aktiv fizikov SEŠTG
POVRATNI SVOJILNI ZAIMEK
Andrej Kuzman, Matjaž Podpečan
LIMITA ZAPOREDJA LIMITA FUNKCIJE
TUJCI V SLOVENIJI.
Vnos podatkov s tipkovnico
RETORIKA.
Robert Hooke.
Napredno iskanje na spletnem mestu EBSCOhost ~ z enim iskalnim poljem
Ime izdelka.
Spremenljivke, prireditveni stavek
Kartiranje habitata.
TEORIJA ODGOVORA NA POSTAVKO (Item response theory - IRT) ali
Križ je vsak moj trenutek lahko ga sprejmem ali ne.
Kaj je Oddaljeno namizje (ON)?
DK – STEP 7 – Podatkovni bloki
program Lync v Trgovini Windows
VESOLJE.
Objektno programiranje - nadaljevanje
(tehnika in tehnologija, 6. razred)
PRAVICE OTROK.
Beseda življenja Marec 2009.
Metode Funkcije, podprogrami.
Predstavitev s pomočjo
Najkrajše poti in Bellman-Fordov algoritem
Pogostost Danj je seznam klicanih številk
Fire Wall ( Požarni zid )
Interna struktura NTFS
Objektno programiranje
Pripravil: Šolsko leto:
GALAKSIJE.
 LOGOTIP.
Akcijsko raziskovanje za ZDT
NOV PRISTOP NA PODROČJU KAKOVOSTI ZRAKA
Andrej Grah a.k.a. Burgola
VETRNE ELEKTRARNE RAČUNALNIŠKA PREDSTAVITEV
izkoristek Outlookovih funkcij
Zapis predstavitve:

Objekti, razredi, ... Od kje in zakaj

Združevanje podatkov Denimo, da pišemo program, ki bo pomagal upravljati farmo zajcev Za vsakega zajca poznamo: serijsko številko spol težo Kako doseči, da se podatki “držijo” skupaj Tabela ni ustrezna Tabela je zbirka istovrstnih podatkov Sestavimo razred Zajec Opis podatkov, ki sestavljajo poljubnega zajca

Knjižnica razredov Do sedaj Knjižnice razredov Razredi za uporabo znotraj nekega programa Knjižnice razredov

Komentarji // - vrstični komentar /* ... */ : splošen komentar /// dokumentacijski komentar Glej npr: http://www.softsteel.co.uk/tutorials/cSharp/lesson19.html http://www.winnershtriangle.com/w/Articles.XMLCommentsInCSharp.asp http://www.csharphelp.com/archives3/archive598.html

Razred Zajec Prevedemo public class Zajec { public string serijska; public bool spol; public double masa; } S tem imamo napisan opis, kako je določen poljuben zajec Načrt, kakšni so zajci Ni to konkreten zajec Ni metode Main, dejansko se NIČ ne izvede, ... Ni namenjeno poganjanju kot program Hisa.cs Načrt, kako je videti hiša Kot ga je pripravil projektant Prevedemo Hisa.dll (naš zgled: MojiRazredi.dll) Še vedno načrt, kakšna naj bo hiša V obliki, kot ga lahko uporabijo tisti, ki bodo po tem načrtu izdelali konkretno hišo

Uporaba razreda Zajec Program, kjer delamo z zajci: Potrebuje datoteko MojiRazredi.dll (ker vsebuje definicijo razreda Zajec) Napovemo uporabo te datoteke Project / Add reference

Uporaba razreda Zajec Program, kjer delamo z zajci: using MojiRazredi; Če v programu potrebujemo konkretnega zajca, ga “ustvarimo” z new new Zajec() Ustvaril se je konkreten zajec po navodilih za razred Zajec (ta zajec ima torej tri podatke / lastnosti / komponente) Metoda je vrnila naslov, kje ta konkretni zajec je Zajec rjavko = new Zajec(); V spremenljivki rjavko je naslov, kje je novo ustvarjeni zajec (objekt)

Dostop do podatkov v objektu rjavko.spol = true; rjavko.serijska = “BRGH_17_A”; rjavko.masa = 3.2; public class Zajčnik { public static void Main(string[] ar) { Zajec z1 = new Zajec(); z1.serijska = "1238-12-0"; z1.spol = false; z1.masa = 0.12; z1.masa = z1.masa + 0.3; Console.WriteLine("Zajec ima ser. št.:" + z1.serijska); }

Razred Zajec S tipom Zajec lahko "počnemo vse", torej tudi ustvarimo tabelo spremenljivk tipa Zajec public class FarmaZajcev { public static void Main(string[] ar) { Zajec[] zajci = new Zajec[10]; // na farmi imamo do 10 zajcev int i = 0; while (i < 10) { zajci[i] = new Zajec(); // “rodil” se je nov zajec zajci[i].serijska = "1238-12-" + i; zajci[i].spol = false; zajci[i].masa = 0.12; i++; } ... Zajcev (objektov) še nimamo! – imamo le tabelo, kamor jih bomo shranjevali (ozroma kamor bomo shranjevali njihove naslove) V spremenljivki zajci je naslov, ki kaže na tabelo, ki lahko vsebuje naslove 10 objektov tipa Zajec

Še končni pogled na naslove Potem bomo malček "popustili" ;-) Zajec[] tabZ; Ustvarili smo spremenljivko tabZ. V spremenljivki tabZ lahko shranimo naslov tabele, v katero bomo lahko shranjevali naslove objektov tipa Zajec. Trenutno v tej spremenljivki ni nobenega naslova. tabZ = new Zajec[200]; Operator new je nekje ustvaril tabelo, v kateri je prostor za 200 naslovov objektov, v katerih lahko shranimo podatke o posameznem zajcu. Naslov tega prostora za tabelo smo shranili v spremenljivko tabZ. V tem trenutku ne obstaja še noben objekt tipa Zajec. tabZ[0] = new Zajec(); Operator new je nekje ustvaril prostor za objekt tipa Zajec. Naslov tega objekta se je shranil v 0-to celico tabele, katere naslov je shranjen v spremenljivki tabZ. Seveda pa bomo govorili ... V tabeli tabZ je na mestu 0 zajec ... spol: masa: serijska: tabZ

Razred – shramba podatkov public class Ulomek { public int stevec; public int imenovalec; } Prevedemo in dobimo Ulomek.class Kaj sedaj? Uporabljamo v drugih programih (razredih) Ulomek x = new Ulomek(); Kako “napolniti” stevec in imenovalec? x.stevec : spremenljivka tipa int! x.imenovalec : enako x.stevec = 1; x.imenovalec = x.stevec + 1;

Povzetek Definicija razreda Običajno v knjižnici! public class ImeRazreda { public podatkovni tip element1; public podatkovni tip element2; … public podatkovni tip elementn; }

Povzetek Uporaba razreda Ustvari prostor in pove, kje ta prostor je Če potrebujemo primerek razreda new ImeRazreda() Ustvari prostor in pove, kje ta prostor je Naslov prostora shranimo v neko spremenljivko (tipa ImeRazreda), denimo mojaSpTipaImeRazreda Dostop do prostorov za hranjenje Operator . imeObjekta.elementi imeObjekta.imeKomponente mojaSpTipaImeRazreda.starost

Konstruktorji Ob tvorbi objekta bi radi nastavili začetno stanje spremenljivk in morda opravili še kaj – o tem kasneje Konstruktor – metoda, ki jo pokličemo ob tvorbi objekta z new Brez tipa rezultata! Ime kot je ime razreda Kličemo jo skupaj z new Klic: new Zajec();

Razred Zajec Zajca “ustvarimo” z new public class Zajec { public String serijska; public boolean spol; public double masa; // konstruktor public Zajec() { this.spol = true; // vsem zajcem na začetku določimo m. spol this.masa = 1.0; // in tehtajo 1kg this.serijska = “NEDOLOČENO”; } Zajca “ustvarimo” z new new Zajec() Ustvaril se je konkreten zajec po navodilih iz konstruktorja Zajec() (ta zajec ima torej tri podatke z vrednostmi, kot je predpisano v konstruktorju) Kaj je this?

this Pomeni objekt, ki ga "obdelujemo" V konstruktorju – objekt, ki ga ustvarjamo this.spol Lastnost/komponenta spol objekta, ki se ustvarja Zajec rjavko = new Zajec(); Zajec belko= new Zajec(); Pri prvem klicu se je v konstruktorju this nanašal na rjavko, pri drugem na belko.

this v ostalih metodah Kasneje – pisali bomo metode, ki se bodo uporabljale nad razredi Random ng = new Random(); Random g2 = new Random(); Console.WriteLine(ng.Next(1,10)); Kako so napisali kodo metode, da se je vedelo, da pri metodi Next mislimo na uporabo generatorja ng in ne na g2? Kako se v metodah razreda sklicati na ta objekt (objekt, nad katerim je izvajana metoda)? Razred MojRazred in v njem komponenta starost. Napišimo metodo MetodaNeka(), ki izpiše starost objekta, nad katerim izvajamo metodo. Klici bodo npr.: objA.MetodaNeka(), objC.MetodaNeka() Kako v postopku za MetodaNeka povedati, da gre Prvič za objekt z imenom objA drugič za objekt z imenom objC

this v ostalih metodah  Kako povedati, da naj se ob klicu objA.MetodaNeka() uporabi starost objekta objA, ob klicu objC.MetodaNeka() pa starost objekta objC? Console.WriteLine("Starost je: " + ?????.starost); Ob prvem klicu je ???? objA, ob drugem pa objC. To "zamenjavo" dosežemo z this. Napišemo Console.WriteLine("Starost je: " + this.starost); Ob prvem klicu this pomeni objA, ob drugem pa objC.

Konstruktorji Če konstruktorja ne napišemo (kot ga nismo prej), ga “naredi” prevajalnik sam (a metoda ne naredi nič) public Zajec() { } Lahko imamo več konstruktorjev Konstruktorjev ne moremo klicati posebej (kot ostale metode) Le ko tvorimo objekt new Za vzpostavitev začetnega stanja Enako ime kot razred Nimajo tipa rezultata (tudi void ne!) Ni stavka return

Več konstruktorjev Uporabniki bi poleg privzetega zajca, radi še možnost, da bi takoj, ko zajca naredijo, temu določili še serijsko številko. Radi bi torej konstruktor public Zajec(string serijskaSt) Poleg tega pa včasih na farmo dobijo tudi pošiljko samic. Torej potrebujejo še konstruktor public Zajec(bool spol) Včasih pa so zajci "nestandardni" public Zajec(string serijskaSt, bool spol, double teza) Potrebujemo več načinov nastavljanja začetnega stanja objekta Več konstruktorjev: Več metod z enakim imenom Je to možno?

Preobteževanje Več metod z enakim imenom Preobteževanje Je to možno? Preobteževanje Overloading Velja tudi splošno, za vse metode Metode se morajo razlikovati ne v imenu, ampak podpisu Podpis metode Podpis: ime + število in tipi parametrov! public static int NekaMetoda(double x) Podpis (poenostavljeno): NekaMetoda_double Tip rezultata (return tip) NI del podpisa! Tip rezultata

Podpisi metod Podpis metode: Kaj je lahko sočasno: public static int NekaMetoda(double x) Podpis: NekaMetoda_double “interno” ime public Zajec(string serijskaStev, bool spol, double masa) Podpis: Zajec_String_bool_double Kaj je lahko sočasno: public static int NekaMetoda() public static int NekaMetoda(double y) public static double NekaMetoda(double x) public static int NekaDrugaMetoda(double y)

Konstruktorji razreda Zajec public Zajec() { this.spol = true; // vsem zajcem na začetku določimo m. spol this.masa = 1.0; // in tehtajo 1kg this.serijska = “NEDOLOČENO”; } public Zajec(string serijskaStev):this() { this.serijska = serijskaStev; : this() – klic konstruktorja Zajec() Izvede se pred vsemi ukazi v konstruktorju

Sklicevanje na konstruktorje public Zajec(string ser, bool sp, double t) : this(ser) { this.spol = sp; this.masa = t; }

this this( Za klic konstruktorja pred začetkom drugega konstruktorja this() this(<parametri>) Uporabimo lahko le kot PRVI stavek v konstruktorju this. Za dostop do lastnosti this.serijska Če ni možnosti zamenjave, lahko izpustimo serijska this.spol = spol; Obstajala je že DRUGO ime spol Ločiti med spremenljivko spol, ki je parameter in lastnostjo objekta z imenom spol "Prednost" ima bolj "lokalna" stvar – torej parameter spol = spol;