Splošno navodilo zahteva tudi gradnjo osnovnih metod kot so konstruktorji in ToString metoda. Razred naj vsebuje tudi metode za generiranje naključnih objektov, zapis in branje z datoteke ter izpis tabele.
Besedilo naloge
Splošno navodilo zahteva tudi gradnjo osnovnih metod kot so konstruktorji in ToString metoda. Razred naj vsebuje tudi metode za generiranje naključnih objektov, zapis in branje z datoteke ter izpis tabele.
Lastnosti - splošno
Objekt tipa kolo ima lastnosti:
Do njih ne moremo dostopati neposredno, temveč prek metod set in get a o tem več v nadaljevanju.
Barva in tip kolesa imata le omejeno količino vrednosti. Te vrednosti niso last posameznega kolesa, temveč vseh koles na sploštno.
Naprimer tip kolesa je lahko le gorsko, cestno ali trekking. To velja za vsa kolesa. Zato seznam z možnostmi tipa kolesa razredna statična spremenljivka.
Lastnosti - get in set
Oglejmo si še pobližje delo z lastnostmi. Do lokalne spremenljivke barva kolesa uporabnik razreda kolo nima neposrednega dostopa. To je dobro iz več razlogov. Ima pa posreden dostop prek get in set metod. Lastnost - barvo lahko uporabnik enostavno zahteva z kolo.barva, lahko pa jo tudi nastavi z kolo.barva = "rdeča". V set metodi se preveri, da je barva element seznama barv, torej ustreza nekemu standardu. Če je to res se set izvede, sicer pa se sproži izjema. To je dobro, saj objektu kolo tako ne moremo pripisati nemogoče barve.
Prazen in poln konstruktor
Po splošnem navodilu sem ustvaril tudi prazen in poln konstruktor. Prvi nastavi lastnostim kar privzete vrednosti. Drugi najprej pokliče prazen konsturktor (:this()) nato pa prek set metod nastavi vsako lastnost posebej. Ne pozabimo, da ker ni neposrednega dostopanja do spremenljivk objekta ne moremo spraviti v nesmiselno stanje.
Konstruktor iz niza ter ToString
Metoda ToString predstavi objekt tipa kolo kot niz njegovih lastnosti ločenih z znakom ';'. Posledično se obratna funkcija, konstruktor iz niza, začne z ločevanjem niza v tabelo. Ker ima kolo pet lastnosti, mora imeti tudi tabela pet elementov kar najprej preverim. Če ustreza temu pogoju, potem vsaki lastnosti priredim vrednost iz tabele. Ker do lastnosti dostopam prek set metode, tudi tu objekta ne moremo spraviti v nesmiselno stanje.
ToString in dodajanje na datoteko
Splošno navodilo zahteva sestavo metode ToString in metode za zapis na datoteko. Kot sem že v prejšnji prosojnici povedal, metoda toString vrača niz lastnosti objekta, ločene z znakom ';'. Navodilo zahteva tudi sestavo metode za zapis na datoteko. To metodo sem sestavil tako, da najprej preveri če datoteka že obstaja. Če ne obstaja, jo ustvari in nanjo zapiše objekt kot ga vrne metoda ToString. Če pa datoteka že obstaja nanjo objekt le doda. Taka oblika metode bo v nadaljevanju delala najmanj težav, saj mi nebo potrebno skrbeti ali datoteka že obstaja ali ne.
Branje iz datoteke
Na spodnji sliki je nekaj trivialnih metod, katere zahteva splošno navodilo.
Naključna datoteka
Metoda, ki generira datoteko naključnih koles je še zadnja metoda, ki jo zahteva splošno navodilo.
Tuda ta metoda je precej trivialna; pokaže pa se dobra lastnost razrednih spremenljivk seznam tipov in seznam barv. Če v seznam možnih barv dodam še eno barvo, mi ni potrebno popravljati nobene metode, ki delajo z seznamom barv.
Dober primer je:
barvaKolesa = sezBarv[gen.Next(0, sezBarv.Length)];
Barva kolesa pridobi naključno vrednost neglede na to ali je v seznamu barv ena barva ali jih je deset.
Število barv in prebarvanje
Navodilo s prve strani zahteva sestavo metode, ki v tabeli koles prešteje in izpiše koliko jih je katere barve.
Pri tem najprej ustvarim tabelo števil steviloBarv v katero bom shranjeval število koles iste barve. Z for zanko se zapeljem prek tabele koles. Ker vem, zaradi uporabe set metod, da v tabeli ni koles nemogočih barv, lahko kar za vsako kolo povečam števec za ustrezno barvo. Na koncu barve izpišem.
Metoda prebarvaj se zapelje preko tabele koles. Za vsako kolo preveri barvo. Če je kolo rumene barve, mu barvo spremeni v rdečo. Tako prebarvam vsa rumena kolesa v rdeča.
Število potnikov na cestnih kolesih
Kot kaže so precej pogosta cestna kolesa tipa tandem, ki omogočajo kolesarjenje večim kolesarjem hkrati.
V tabeli preštejem koliko se jih lahko naenkrat pelje s cestnimi kolesi.
Z for zanko se zapeljem prek tabele koles. Če je kolo cestno števcu vsota prištejem število kolesarjev, ki se lahko peljejo z istim kolesom.
Odstrani kolesa starejša od 12 let
Metoda odstrani prejme tabelo koles in iz nje odstrani kolesa starejša od 12 let. Ker bom mogoče prvotno tabelo še potreboval, metoda vrne novo tabelo.
Metodo sem pisal v letu 2012 in letos ne bi več pravilno delovala če ne bi klučnega leta ( danes - 12 let ) izračunal s pomočjo ukaza DateTime.Now.Year, ki vrne trenutno leto. Tako bo metoda lepo delovala tudi čez nekaj let.
Ko izračunam prelomno leto, ki odloča katera kolesa so še dobra, jih najprej preštejem. Zapeljem se prek tabele in pogledam koliko jih je mlajših od 12 let.
Sedaj, ko vem natančno število takih, lahko ustvarim novo tabelo, v katero bom taka kolesa shranjeval.
Še enkrat se zapeljem prek prvotne tabele in vsako ustrezno kolo skopiram v novo tabelo.
Prepiši kolesa po letih izdelave
To je še zadnja metoda v razredu kolo.
Prebere datoteko tako, da pokliče prej opisano metodod PreberiZDatoteke, ki celotno datoteko prebere v tabelo.
Vsako kolo iz te tabele nato zapiše ali doda na datoteko s pomočjo prej opisane metode DodajNaDatoteko. Prej sem navecel, da ta metoda sama preverja če datoteka obstaja. Ta lastnost mi prav v tem primeru prihrani veliko neušečnosti.
Če datoteka z imenom = leto izdelave že obstaja, vanjo kolo le doda. Sicer jo ustvari.
Test konstruktorjev
Najprej testiram konstruktorje:
Vsi trije konstruktorji delujejo lepo:
Pri dostopanju do lastnosti uporabljam get in set metode. Kako prestrezajo nemogoče vnose si lahko pogledate na naslednji prosojnici.
Test lovljenja napak
Testi lovljenja napak poizkuša nastaviti objektu tipa Kolo nemogočo lastnost:
Set metoda se upre in sproži izjemo, ki jo testni program izpiše:
Test metod iz navodila - koda
Testiranje nalog iz navodila je trivialno. Pokličem vsako metodo posebej ter rezultate izpišem na konzolo:
izpišem število kolesarjev na cestnih kolesih
Test metod iz navodila - konzola
Tako izgleda konzola po izvedbi testnega programa: