Objektno programiranje - gradnja razredov

Objektno programiranje - gradnja razredov

Avtor: Ana Rot, pred. M.Lokar, prenos v NAUK Alja Gligić

Uvod

V seminarski nalogi bom predstavila gradnjo razredov v programskem jeziku C#.

Opisala bom kako ustvariti razred v tem programskem jeziku. Izpostavila sem pomembne metode, različne tipe dostopnosti do spremenljivk in vse skupaj ponazorila na primeru. Dodan je tudi primer, kako lahko ustvarjen razred uporabljamo.

Uporaba razreda

Ustvarimo objekt, ki pripada nekemu razredu. Z njim upravljamo kot s celoto. Če pripada objekt x razredu MojRazred, pravimo da je x objekt tipa MojRazred.


Ko kličemo metodo iz nekega razreda, najprej ustvarimo objekt, ki je tipa določenega razreda. Na tem objektu pa kličemo metodo.

Imejmo razred z imenom MojRazred. Objekt ustvarimo tako, da uporabimo new:

MojRazred x = new MojRazred();

x je objekt tipa MojRazred.

Razred Kolo

Za začetek si oglejmo kako ustvariti razred Kolo, ki je prikazan na spodnji sliki.

Ta razred vsebuje 4 javne spremenljivke:

  • stPrestav - opisuje število prestav, ki jih ima kolo
  • barva - opisuje barvo kolesa
  • tip - opisuje tip kolesa
  • stLjudi - opisuje za koliko ljudi je kolo namenjeno

Trenutno ima en konstruktor ter dve metodi.

(slika_pd_2.jpg)
Razred Kolo.

Konstruktor

Pomembna metoda v razredu je konstruktor. Konstruktor mora imeti enako ime kot je ime razreda. Ta metoda se vedno kliče ob tvorbi objekta. Vedno jo kličemo skupaj z new .

Ustvarim nek objekt tipa Kolo:

Kolo objekt = new Kolo()


To pomeni, da se pokliče konstruktor iz razreda Kolo. Na spodnji sliki opazimo, da če pokličemo konstruktor brez parametrov, so vrednosti spremenljivk določene v konstruktorju. To pa ni nujno potrebno. V primeru, da ne podamo vrednosti, se nastavijo privzete vrednosti, ki jih ima določena deklaracija.

Če konstruktorja ne napišemo, se ustvari sam. Čim napišemo vsaj en svoj konstruktor, se dodaten kostruktor ne ustvarja.

(slika_pd_4.jpg)
Primer konstruktorja.


V razredu imamo lahko več konstruktorjev.

V razred Kolo dodam še konstruktor, ki sprejme za parametre vse spremenljivke. Podatki, ki jih konstruktor sprejme za parametre morajo biti smiselni. Zato preden vrednosti parametrov nastavim spremenljivkam, preverim, da so te vrednosti smiselne.

(slika_pd_11.jpg)
Konstruktor v razredu Kolo.


Primer klica konstuktorja z vsemi parametri:

Kolo objekt = new Kolo(24,"zelena","cestno",1)

This

Pri nastavljanju spremenljivk objekta sem uporabljala besedo this. This označuje objekt, ki ga trenutno ustvarjamo. Služi kot sklicevanje na trenutni objekt, ki ga v razredu ustvarjamo.


Ko v metodah upravljamo s temi spremenljivkami pred nje napišemo this, to pomeni določen objekt, s katerim nekaj počnemo (kot imamo v Pythonu self).


Primer:

 MojRazred x = new MojRazred()

 MojRazred y = new MojRazred()


V prvem primeru se this nanaša na objekt x, v drugem primeru pa se this nanaša na objekt y.

Dostop do spremenljivk

Če so spremenljivke javne, torej public, jim lahko neposredno nastavljam vrednosti, kot je prikazano na spodnji sliki.

(slika_pd_3.jpg)
Nastavljanje vrednosti spremenljivkam.

Poznamo več dostopov do spremenljivk:

  • public
  • private
  • protected
  • internal

Omejila se bom na dostop public in private.


Povezava na prosojnico Razred Kolo, kjer je definiran dostop do spremenljivk v tem razredu


Dostop do spremenljivk v zgornjem primeru je javen. To nam pove besedica public pred deklaracijo in imenom spremenljivke. To pomeni, da lahko kdorkoli spremenljivkam v razredu poljubno nastavlja vrednosti.

Ta način ni najboljši, saj lahko uporabnik spremenljivkam nastavi nesmiselene vrednosti. Konkretno v tem primeru bi lahko uporabnik nastavil prestave na negativno število.


Če je dostop do spremenljivk privaten - private, potem uporabnik ne more neposredno nastavljati vrednosti spremenljivk.

V ta namen napišemo get in set metode, s katerimi lahko pridemo do informacij in omogočajo nastavljanje vrednosti spremenljivkam.

Get metode

Da uporabnik lahko spreminja vrednosti privatnim spremenljivkam oz. dobi informacijo o trenutni vrednosti napišemo get in set metode.


Get metode: v mojem primeru vrnejo vrednost določene spremenljivke. Lahko bi get metoda vrnila tudi vrednost spremenljivke v drugačni obilki. To pomeni, da programer hrani podatke drugače, kot jih vidi uporabnik.

Primer: barve kolesa lahko hranimo kot število. Če barvo kolesa predstavlja šetvilo 1, metoda uporabniku vrne "bela".

(slika_pd_5.jpg)
Get metode v razredu Kolo.


Primer kako v konzolni aplikaciji uporabljamo get metode ter izpis:

(slika_pd_7.jpg)
Primer uporabe get metod.


(slika_pd_8.jpg)
Izpis.


Izpišejo se vrednosti, ki so nastavljene v konstruktorju brez parameterov.

Set metode

Set metode bi lahko napisali na podoben način kot get metode:

public void nastaviPrestave(novaPrestava)
{
this.stPrestav = novaPrestava;
}


Vendar tudi na ta način lahko uporabnik vnaša nesmiselne podatke. Da to preprečimo, v set metodo napišemo tudi omejitve.

Set metode: nastavijo vrednost določeni spremenljivki, če ustreza danim omejitvam. Če podane vrednosti ne ustrezajo danim omejitvam, se sproži izjema.

(slika_pd_6.jpg)
Set metode za vse spremenljivke.


Primer kako v konzolni aplikaciji uporabljamo set metode ter izpis:

(slika_pd_9.jpg)
Primer uporabe set metod.
(slika_pd_10.jpg)
Izpis.

Metoda ToString()

V razred Kolo napišem svojo metodo ToString() . To je metoda, ki ne sprejme nobenih argumentov, vrne pa objekt tipa string.

Ta metoda je definirana že v razredu Object. Zaradi dedovanja jo lahko uporabljamo v vseh razredih. Metoda definirana v razredu Object ne počne nič uporabnega, zato ponavadi podedovano metodo ToString() prekrijem s svojo metodo.

Da metodo ToString() prekrijem iz razreda Object oz. iz katerega drugega razreda iz kjer dedujem, uporabim besedo override.


(slika_pd_12a.jpg)
Metoda ToString().

Primer uporabe:

Ko imamo napisano svojo metodo ToString(), lahko izpišem konkertne podatke o razredu. To storim tako, da ustvarim objekt tipa Kolo in ta objekt izpišemo na zaslon.

(slika_pd_14.jpg)
Uporaba metode ToString().

Pri izpisu objekta trenutno se samodejno pokliče metoda ToString(). Kot vidimo na spodnji sliki, dobimo izpisano besedilo na tak način kakor je napisano v metodi ToString().

(slika_pd_15.jpg)
Izpis metode ToString().

Class Library

Ko imamo napisan nek svoj razred, ga lahko tudi nadalje uporabljamo tako, da ga uvozimo v nek drug dokument okolja Visual Studio. Razrede ponavadi pišemo v zato pripravljen prostor, ki ga imamo v Class Library .

To storimo takole:

  • Odpremo okolje Visual Studio v katerem pišemo programe v jeziku C#.
  • Začnemo z novim projektom.
  • Izberemo Class Library , kot prikazuje spodnja slika.
(slika1.jpg)
Tako odprem okno za pisanje razredov.

Class Library

Dobim vzorec za pisanje razredov. Standardne knjižnice so že uvožene. Pod napisom public class Kolo , med vijugastimi oklepaji, pišemo metode.

Ko odpremo okno za pisanje razredov imamo razred poimenovan Class1 , lahko ga poljubno preimenujemo. Sama sem ga preimenovala v Kolo .

(slika_pd_13.jpg)
Vzorec za pisanje razredov.

V nadaljevanju je tudi predstavljeno, kako ustvarimo razred. Ter tudi njegova uporaba.

Primer naloge:

Napišite razred Kolo, s katerim predstavite kolesa. Vsako kolo ima neko število prestav, barvo, tip (gorsko, cestno, treking), in za koliko ljudi je namenjeno. Napišite osnovni konstruktor (sami določite privzete vrednosti), dva dodatna konstruktorja, ustrezne get/set metode.


Rešite naslednje probleme:

  • Izpišite koliko koles posamezne barve je v tabeli koles.
  • Vsa kolesa rumene barve prebarvajte v rdeče.
  • Koliko ljudi se lahko hkrati pelje s cestnimi kolesi, ki so v tabeli?


Datoteka z razredom Kolo

Rešen primer v filmčku:

Kako uvoziti svojo knjižnjico

Nekatere objekte imamo že vgrajene v knjižnicah, definiramo pa lahko tudi svoje objekte.

Primer objektov, ki so že v standardni knjižnici jezika C#:

  • System.Console – to je objekt, ki predstavlja standardni izhod. Ko želimo kaj izpisati na zaslon, na tam objektu pokličemo metodo Write oz. WriteLine.
  • System.IO – če želimo kaj napisati na datoteko, na tem objektu pokličemo metodo StreamWriter. Če pa želimo prebrati iz datoteke, pa pokličemo metodo StreamReader.
  • In še mnoge druge.


Vedno, ko želimo nekaj izpisati na zaslon uporabimo System.Console.Write(…). Da nam ni potrebno vedno klicati knjižnice System, na vrhu okna, kjer pišemo program uvozimo to knjižnico. To storimo tako, da napišemo using System; .


Pri vgrajenih knjižnicah je to dovolj. Kadar pa sami napišemo program v razredu in hočemo tega uvoziti, pa moramo najprej podati referenco. V zgornji orodni vrstici poiščemo Project in v dobljenem padajočem seznamu izberemo Add Reference… . Kliknemo na zavihek Browse, poiščemo mapo, kjer je shranjen program. V tej mapi poiščemo datoteko z končnico dll in jo izberemo. Sedaj pa lahko napišemo using in ime programa.

(slika7.jpg)
To je primer dll datoteke, ki jo izberemo.

Preverjanje delovanja programa

Kviz

1. Kako ustvarimo objekt x, ki je tipa MojRazred?

Preveri


2. Kakšno mora biti ime konstruktorja?

Preveri


3. Kaj nam določa this?

Preveri


4. Kako imenujemo dostop do spremenljivk, pri katerem ne moremo neposredno dostopati do spremenljivk?

Preveri


5. Kako dostopamo do spremenljivk, ki imajo privaten dostop?

Preveri


6. Kaj počne metoda ?

Preveri


7. Kje v C# imamo prostor za pisanje razredov?

Preveri

Pravilno

Odgovor je pravilen.

Naprej

Narobe

Odgovor ni pravilen.

Ponovno

Pravilno

Odgovor je pravilen.

Naprej

Narobe

Odgovor ni pravilen.

Ponovno

Pravilno

Odgovor je pravilen.

Naprej

Narobe

Odgovor ni pravilen.

Ponovno

Pravilno

Odgovor je pravilen.

Naprej

Narobe

Odgovor ni pravilen.

Ponovno

Pravilno

Odgovor je pravilen.

Naprej

Narobe

Odgovor ni pravilen.

Ponovno

Pravilno

Odgovor je pravilen.

Naprej

Narobe

Odgovor ni pravilen.

Ponovno

Pravilno

Odgovor je pravilen.

Naprej

Narobe

Odgovor ni pravilen.

Ponovno

Viri

0%
0%