Izvedbo projekta je omogočilo sofinanciranje Evropskega socialnega sklada Evropske unije in Ministrstva za šolstvo in šport. Fakulteta za matematiko in fiziko http://up.fmf.uni- lj.si Zgled – člani športnega kluba • Denimo, da bi radi napisali program, ki vodi evidenco o članih športnega kluba. Podatki o članu obsegajo ime, priimek, letnico vpisa v klub in vpisno številke (seveda je to poenostavljen primer). Torej objekt, ki predstavlja člana kluba, vsebuje štiri podatke: public class Clan { public string ime; public string priimek; public int letoVpisa; public string vpisnaStevilka; } 1
Zgled – člani športnega kluba. Denimo, da bi radi napisali program, ki vodi evidenco o članih športnega kluba. Podatki o članu obsegajo ime, priimek, letnico vpisa v klub in vpisno številke (seveda je to poenostavljen primer). Torej objekt, ki predstavlja člana kluba, vsebuje štiri podatke: - PowerPoint PPT Presentation
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Izvedbo projekta je omogočilo sofinanciranje Evropskega socialnega sklada Evropske unije in
Ministrstva za šolstvo in šport.
Fakulteta za matematiko in fiziko
http://up.fmf.uni-lj.si
Zgled – člani športnega kluba• Denimo, da bi radi napisali program, ki vodi evidenco o članih
športnega kluba. Podatki o članu obsegajo ime, priimek, letnico vpisa v klub in vpisno številke (seveda je to poenostavljen primer). Torej objekt, ki predstavlja člana kluba, vsebuje štiri podatke:
public class Clan { public string ime; public string priimek; public int letoVpisa; public string vpisnaStevilka; }
1
Izvedbo projekta je omogočilo sofinanciranje Evropskega socialnega sklada Evropske unije in
Ministrstva za šolstvo in šport.
Fakulteta za matematiko in fiziko
http://up.fmf.uni-lj.si
Klub - uporabausing MojaKnjiznica;public class TestKlub {
public static void Main(string[] args) {
Clan a = new Clan();a.ime = "Janez";a.priimek = "Starina";a.letoVpisa = 2000;a.vpisnaStevilka = "2304";
Clan b = new Clan();b.ime = "Mojca";b.priimek = "Mavko";b.letoVpisa = 2001;b.vpisnaStevilka = "4377";
Izvedbo projekta je omogočilo sofinanciranje Evropskega socialnega sklada Evropske unije in
Ministrstva za šolstvo in šport.
Fakulteta za matematiko in fiziko
http://up.fmf.uni-lj.si
Zgled – športni klub, nadaljevanje• Spremenimo sedaj naš razred Clan tako, da bomo uporabili
konstruktorpublic class Clan { public string ime; public string priimek; public int letoVpisa; public string vpisnaStevilka; public Clan(string i, string p, int l, string v) {
Izvedbo projekta je omogočilo sofinanciranje Evropskega socialnega sklada Evropske unije in
Ministrstva za šolstvo in šport.
Fakulteta za matematiko in fiziko
http://up.fmf.uni-lj.si
Razred Datum• Denimo, da v naših programih pogosto delamo z datumi.• Zato bomo sestavili ustrezni razred• Načrt razreda:
– Podatki dan (število) mesec (izbira: število ali pa niz) Leto (število)
– Metode Konstruktorji Izpiši Povečaj za 1 dan Je datum smiselen Je leto prestopno Nov datum za toliko in toliko dni pred/za danim datumom Dan v tednu ...
16
Izvedbo projekta je omogočilo sofinanciranje Evropskega socialnega sklada Evropske unije in
Ministrstva za šolstvo in šport.
Fakulteta za matematiko in fiziko
http://up.fmf.uni-lj.si
Datum – podatki in konstruktorpublic class Datum { public int dan; public string mesec; public int leto;
public Datum() { dan = 1; mesec = "januar" leto = 2000; } // privzeti datum je torej 1.1.2000
17
Izvedbo projekta je omogočilo sofinanciranje Evropskega socialnega sklada Evropske unije in
Ministrstva za šolstvo in šport.
Fakulteta za matematiko in fiziko
http://up.fmf.uni-lj.si
Dodatni konstruktorjipublic Datum(int leto) : this() { this.leto = leto; // this je nujen} // datum je torej 1.1.leto
public Datum(int d, string m, int l) : this(l){ // leto smo že nastavili this.mesec = m; // this ni nujen this.dan = d; } // datum je torej d.m.l (na primer 12.3.2006 ali // 12. marec 2006)
18
Izvedbo projekta je omogočilo sofinanciranje Evropskega socialnega sklada Evropske unije in
Ministrstva za šolstvo in šport.
Fakulteta za matematiko in fiziko
http://up.fmf.uni-lj.si
Prestopno• Zanima nas, ali je leto prestopno
public bool JePrestopno() { int leto = this.leto; if (leto % 4 != 0) return false; if (leto % 400 == 0) return true; if (leto % 100 == 0) return false; return true;}
19
Izvedbo projekta je omogočilo sofinanciranje Evropskega socialnega sklada Evropske unije in
Ministrstva za šolstvo in šport.
Fakulteta za matematiko in fiziko
http://up.fmf.uni-lj.si
Dodaj en danpublic void PovecajZaEnDan() { dan = dan + 1; if (dan < 29) return; if (dan == 29 && mesec != "februar") return; if (dan == 29 && mesec == "februar" && this.JePrestopno()) return;
// lahko nehamo, mesec in leto sta ok string[] meseciPo30 = {"april","junij","september", "november"}; if (dan == 31) { if (meseciPo30.IndexOf(mesec) > 0){ mesec = mesec + 1; if (mesec == 13) { mesec = 1; leto++; } return; } // če je 32 dni, je zagotovo
20
Smiselno je, da je tudi mesec int!
Ponovno za "risalno desko" – razred spremnimo tako, da je mesec int.
Dokončaj za vajo!
Sintaktično prav, a semantično narobe – mesec je niz!
Narobe, mesec je string
Izvedbo projekta je omogočilo sofinanciranje Evropskega socialnega sklada Evropske unije in
Ministrstva za šolstvo in šport.
Fakulteta za matematiko in fiziko
http://up.fmf.uni-lj.si
Uporaba razreda• Ugotovi, če je letošnje leto prestopno!using MojiRazredi;
public class JeLetosPrestopnoLeto { Datum danes = new Datum(5, 3, 2009); if (danes.jePrestopno()) { Console.WriteLine("Je prestopno leto"); } else { Console.WriteLine("Ni prestopno leto"); }}
21
Izvedbo projekta je omogočilo sofinanciranje Evropskega socialnega sklada Evropske unije in
Ministrstva za šolstvo in šport.
Fakulteta za matematiko in fiziko
http://up.fmf.uni-lj.si
Sprememba razreda• Imamo
if (enClan.letoVpisa > drugClan.letoVpisa) { …
• Spremenimo razred Clan, tako, da vodimo datum vpisa
public class Clan { public string ime; public string priimek; public Datum datumVpisa; public string vpisnaStevilka; public Clan() {
ime = "Ne vem";priimek = "Ne vem";datumVpisa = new Datum();vpisnaStevilka = "Ne vem";
}
22
Clan y = new Clan();
y Ime: "Ne vem"Priimek: "Ne vem"datumVpisavpisnaStevilka: "Ne vem"
dan: 1mesec: 1leto: 2000
Izvedbo projekta je omogočilo sofinanciranje Evropskega socialnega sklada Evropske unije in
Ministrstva za šolstvo in šport.
Fakulteta za matematiko in fiziko
http://up.fmf.uni-lj.si
Sprememba razreda public Clan(string i, string p, Datum d, string v) : this() {
ime = i;priimek = p;datumVpisa = d;vpisnaStevilka = v;
public bool SpremeniLetoVpisa(int l) { if ((2000 <= leto) && (leto <= 2020)) { this.datumVpisa.leto = l; return true; //leto je smiselno, popravimo stanje objekta in vrnemo true } return false; // leto ni smsielno, ne spremnimo inč in vrnemo false }}
24
Izvedbo projekta je omogočilo sofinanciranje Evropskega socialnega sklada Evropske unije in
Ministrstva za šolstvo in šport.
Fakulteta za matematiko in fiziko
http://up.fmf.uni-lj.si
Sprememba razreda public Clan(string i, string p, Datum d, string v) : this() {
ime = i;priimek = p;datumVpisa = d;vpisnaStevilka = v;
this.datumVpisa.OpisDat() + " (" + this.vpisnaStevilka + "); }public bool SpremeniLetoVpisa(int l) { if ((2000 <= leto) && (leto <= 2020)) { this.datumVpisa.leto = l; return true; //leto je smiselno, popravimo stanje objekta in vrnemo true } return false; // leto ni smiselno, ne spremenimo nič in vrnemo false }}
26
Izvedbo projekta je omogočilo sofinanciranje Evropskega socialnega sklada Evropske unije in
Ministrstva za šolstvo in šport.
Fakulteta za matematiko in fiziko
http://up.fmf.uni-lj.si
Način programiranja• Seveda zaradi spremembe if (enClan.letoVpisa > drugClan.letoVpisa) { …
• ne deluje več!• Kako popraviti?
27
Izvedbo projekta je omogočilo sofinanciranje Evropskega socialnega sklada Evropske unije in
Ministrstva za šolstvo in šport.
Fakulteta za matematiko in fiziko
http://up.fmf.uni-lj.si
Že v prvotnem razredupublic class Clan { public string ime; public string priimek; public int letoVpisa; public string vpisnaStevilka; public bool SpremeniLetoVpisa(int leto) { if ((2000 <= leto) && (leto <= 2020)) { this.letoVpisa = leto; return true; } return false; // leto ni smiselno, ne spremnimo nič in vrnemo false } public int VrniLetoVpisa() { return this.letoVpisa; }}
28
if (enClan.VrniLetoVpisa() > drugClan.VrniLetoVpisa()) { …
Izvedbo projekta je omogočilo sofinanciranje Evropskega socialnega sklada Evropske unije in
Ministrstva za šolstvo in šport.
Fakulteta za matematiko in fiziko
http://up.fmf.uni-lj.si
Ob spremembi razreda Clan• Le metodo public int VrniLetoVpisa() { return this.letoVpisa; }
• zamenjamo z
public int VrniLetoVpisa() { return this.datumVpisa.leto; }
29
Enak podpis, enak tip rezultata – spremembe v uporabniških programih niso potrebne