29
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

  • Upload
    cala

  • View
    58

  • Download
    0

Embed Size (px)

DESCRIPTION

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

Citation preview

Page 1: Zgled – člani športnega kluba

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

Page 2: Zgled – člani športnega kluba

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";

 Clan c = b;c.ime = "Andreja";

 Console.WriteLine("Clan a:\n" + a.ime + " " + a.priimek + " " + a.letoVpisa + " (" + a.vpisnaStevilka + ")\n");

 Console.WriteLine("Clan b:\n" + b.ime + " " + b.priimek + " " + b.letoVpisa + " (" + b.vpisnaStevilka + ")\n");

  Console.WriteLine("Clan c:\n" + c.ime + " " + c.priimek +

" " + c.letoVpisa + " (" + c.vpisnaStevilka + ")\n");Console.ReadLine();

}}

2

Page 3: Zgled – člani športnega kluba

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

Zakajpublic class TestKlub {

public static void Main(string[] args) { 

Clan a;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";

 Clan c;

c = b;c.ime = "Andreja";

 Console.WriteLine("Clan a:\n" + a.ime + " " + a.priimek + " " + a.letoVpisa + " (" + a.vpisnaStevilka + ")\n");

 Console.WriteLine("Clan b:\n" + b.ime + " " + b.priimek + " " + b.letoVpisa + " (" + b.vpisnaStevilka + ")\n");

  Console.WriteLine("Clan c:\n" + c.ime + " " + c.priimek +

" " + c.letoVpisa + " (" + c.vpisnaStevilka + ")\n");Console.ReadLine();

}}

3

a

ime: Janezpriimek: Starina

b

ime: Mojcapriimek: Mavko

c

ANDREJA

Page 4: Zgled – člani športnega kluba

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) {

this.ime = i;this.priimek = p;this.letoVpisa = l;this.vpisnaStevilka = v;

}}

4

Page 5: Zgled – člani športnega kluba

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

Šprtni klub - test• Bo naš testni program OK?• Poženimo• Napake!– Kako, rekli smo, da spreminjanje razreda ne vpliva

na uporabniške programe– Spremenili smo način uporabe– V testnem programu: Clan()

Tega sedaj ni– C# ga naredi sam le, če nismo napisali nobenega konstruktorja

5

Page 6: Zgled – člani športnega kluba

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

Popravljeni zgledpublic class Clan { public string ime; public string priimek; public int letoVpisa; public string vpisnaStevilka;  public Clan() {

this.ime = "Ne vem";this.priimek = "Ne vem";this.letoVpisa = 0;this.vpisnaStevilka = "Ne vem";

}  public Clan(string i, string p, int l, string v) {

this.ime = i;this.priimek = p;this.letoVpisa = l;this.vpisnaStevilka = v;

}}

6

Page 7: Zgled – člani športnega kluba

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

Poskus testa• Ni težav!• Zakaj ves ta napor, če pa je na koncu le isto ...• Preglednost!– In priprava za naprej

7

Page 8: Zgled – člani športnega kluba

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

Primerjava: brez / s konstruktiorjempublic 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";

 Clan c = b;c.ime = "Andreja";

... 

public class TestClan{ public static void Main(string[] args) { Clan a = new Clan("Janez", "Starina", 2000, "2304");

Clan b = new Clan("Mojca", "Mavko", 2001, "4377"); Clan c = b;

c.ime = "Andreja"; ...

8

Page 9: Zgled – člani športnega kluba

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

Objektne metode• V definicijo razreda običajno spadajo tudi metode• Klic objektnih metod:

– imeObjekta.imeMetode(parametri)– System.Console.WriteLine("To naj se izpiše");– besedilo.Equals(primerjava)

• Metoda v razredu Clan public string Inicialke() {

return this.ime[0] + "." + this.priimek[0] + ".";

}

9

Page 10: Zgled – člani športnega kluba

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 metodeusing MojiRazredi; // knjižnica z razredom Clanpublic class TestClan{ public static void Main(string[] args) { Clan a = new Clan("Janez", "Starina", 2000, "2304"); String inicialkeClanaA = a.Inicialke(); Console.Write("Clan a:\n" + a.ime + " " + a.priimek + " " + a.letoVpisa + " (" + a.vpisnaStevilka + ") "); Console.WriteLine("ima inicialke: " + inicialkeClanaA); }}

10

Klic metode

Page 11: Zgled – člani športnega kluba

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 metodepublic class Clan { public string ime; public string priimek; public int letoVpisa; public string vpisnaStevilka;  public Clan() {

ime = "Ne vem"; priimek = "Ne vem"; letoVpisa = 0; vpisnaStevilka = "Ne vem";

}  public Clan(string i, string p, int l, string v) : this() { ime = i;

priimek = p; letoVpisa = l; vpisnaStevilka = v;

} public string Inicialke() {

return this.ime[0] + " " + this.priimek[0]; }}

11

Spremembe v TestClan niso potrebne!

Page 12: Zgled – člani športnega kluba

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

Metoda, ki vrača objekt iz Razreda• Vemo, da z – a = b;

• kjer sta a in b obe spremenljivki tipa Clan, v a ne shranimo kopije objekta b, ampak sedaj a in b označujeta isti objekt.

• Metoda, ki naredi kopijo objekta. a = b.Kopija();

– V a je nov objekt, ki pa ima iste podatke kot b.

12

Page 13: Zgled – člani športnega kluba

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

Kopijapublic Clan Kopija() { Clan nov = new Clan(); nov.ime = this.ime; nov.priimek = this.priimek; nov.letoVpisa = this.letoVpisa; nov.vpisnaStevilka = this.vpisnaStevilka; return nov; }

13

Page 14: Zgled – člani športnega kluba

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 metoda za izpispublic void Izpis() { Console.WriteLine("Clan:\n" + this.ime + " " + this.priimek + " " + this.letoVpisa + " (" + this.vpisnaStevilka + ")\n");}

ali pa še

public string Opis() { return this.ime + " " + this.priimek + " " + this.letoVpisa + " (" + this.vpisnaStevilka + ");}

14

Page 15: Zgled – člani športnega kluba

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

Uporabapublic class TestKlub {

public static void Main(string[] args) { 

Clan a = new Clan("Janez", "Starina", 2000, "2304");  Clan b = new Clan("Mojca", "Mavko", 2001, "4377");  Clan c = b;

c.ime = "Andreja"; Clan d = b.Kopija(); d.ime = "Tadeja"; 

Console.WriteLine("Clan a"); a.Izpis();  Console.WriteLine("Clan b:\n" + b.Opis());

Console.WriteLine("Clan c:\n" + c); Console.WriteLine("Clan d"); d.Izpis();

Console.ReadLine();}

}

15

Page 16: Zgled – člani športnega kluba

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

Page 17: Zgled – člani športnega kluba

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

Page 18: Zgled – člani športnega kluba

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

Page 19: Zgled – člani športnega kluba

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

Page 20: Zgled – člani športnega kluba

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

Page 21: Zgled – člani športnega kluba

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

Page 22: Zgled – člani športnega kluba

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

Page 23: Zgled – člani športnega kluba

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 string Inicialke() { return this.ime[0] + "." + this.priimek[0] + ".";

}

  public Clan Kopija() { Clan nov = new Clan(); nov.ime = this.ime; nov.priimek = this.priimek; nov.datumVpisa = this.datumVpisa.Kopija(); nov.vpisnaStevilka = this.vpisnaStevilka; return nov;

}  public void Izpis() {

Console.WriteLine("Clan:\n" + this.ime + " " + this.priimek + " " + this.datumVpisa.OpisDat() + " (" + this.vpisnaStevilka + ")\n");

}

23

Metoda Kopija iz razreda Datum!!!!Nima zveze z metodo Kopija iz razreda Clan

Page 24: Zgled – člani športnega kluba

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 string Opis() {

return this.ime + " " + this.priimek + " " + this.datumVpisa.OpisDat() + " (" + this.vpisnaStevilka + ");

}

  public string ToString() {

return this.Opis(); }

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

Page 25: Zgled – člani športnega kluba

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 string Inicialke() {

return this.ime[0] + "." + this.priimek[0] + "."; }  public Clan Kopija() { Clan nov = new Clan(); nov.ime = this.ime; nov.priimek = this.priimek; nov.datumVpisa = this.datumVpisa.Kopija(); nov.vpisnaStevilkaevilka = this.vpisnaStevilka; return nov;

25

Page 26: Zgled – člani športnega kluba

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 razredapublic void Izpis() { Console.WriteLine("Clan:\n" + this.ime + " " +

this.priimek + " " + this.datumVpisa.OpisDat() + " (" + this.vpisnaStevilka + ")\n");

}public string Opis() { return this.ime + " " + this.priimek + " " +

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

Page 27: Zgled – člani športnega kluba

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

Page 28: Zgled – člani športnega kluba

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()) { …

Page 29: Zgled – člani športnega kluba

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