Vežba 3 - nasleđivanje
Proširiti klasu Tačka iz prethodne vežbe, izvedenom klasom Krug. U klasi Krug definisati atribut radius koji sadrži informacije o poluprečniku kruga, kao i metode za izračunavanje površine i obima kruga. Zatim, iz klase Krug izvesti klasu Valjak. U njoj definisati atribut visina, predefinisati metodu za izračunavanje površine i dodati metodu za izračunavanje zapremine. U glavnom programu formirati dva objekta tipa krug i odštampati vrednosti njihovih površina, a zatim dva objekta tipa valjak i odštampati vrednosti njihovih površina i zapremina.
Postupak kako uraditi zadatak:
0. U cilju utvrđivanja i prakse, kreiraćemo novi projekat, a ne da samo nastavimo gde smo stali prošli put.
1. Otvoriti folder u kojem će biti naš projekat (folder učenika, podfolder Zadatak3 u ovom primeru)
2. View - Terminal : dotnet new console
3. Kreiraće se projekat u kojem se nalazi Program.cs - C# program sa klasom Program u kojoj se nalazi glavna metoda Main. - ovo zasad nećemo dirati - već ćemo prvo da kreiramo klase koje nam trebaju.
4. Kreirati fajl u istom folderu Tacka.cs i u njemu će da se nalazi klasa Tacka (možete i kopirati iz prethodnog zadatka)

U prvom redu se nalazi: "using System;" - naviknite se da to treba prvo da se piše.
"namespace Zadatak3" - sve radimo u istom prostoru imena, pa ako imate više klasa / objekata u istom projektu, zapamtite da, bar u početku, svi treba da koriste isti prostor imena, šro je u našem slučaju Zadatak3. Prostor imena možete nazvati kako god hoćete, dokle god su sve klase koje pravite u istom.
U klasi Tacka imamo 2 privatna atributa, x i y, koji su tipa double - to su brojevi sa decimalnom tačkom, kao i float, samo što double ima više cifara posle decimalne tačke, i može da prikaže mnogo veći opseg brojeva.
Sledeće što u klasi Tacka imamo su dva konstruktora: imaju isto ime kao i klasa (Tacka), imaju ispred napisano public - parametar pristupa, jer se pomoću njih kreiraju objekti tipa Tacka - konkretni objekti. Nemaju povratnu vrednost, jer konstruktori ne mogu da vraćaju vrednost - oni kreiraju objekte.
Prvi konstruktor nema parametre i ako se kreira objekat ove klase, i ako se ne navedu parametri unutar zagrada, to znači da se poziva ovaj konstruktor bez parametara, i da će da kreira objekat (novu tačku) sa koordinatama (0,0).
Drugi konstruktor ima dva parametra, koji su tipa double (isti tip kao i x i y), i ako se kreira objekat klase Tacka (nova tačka) i ako se navedu dva parametra unutar zagrada, onda će ta dva parametra da budu koordinate te nove tačke. - Bilo je pitanja zašto u zagradama ne stoji x i y? pa, nema smisla, jer već imamo x i y....
5. Kreirati još jedan fajl: Krug.cs gde će se nalaziti klasa Krug, ali obratite pažnju da je klasa Krug izvedena od klase Tacka, pa zato nakon imena klase pišemo dvotačku i naziv klase "roditelja", [to je u na[em yadatki klasa Tacka:

- Pošto je u pitanju nasleđivanje, klasa Krug treba samo da uvede atribut radius (poluprečnik).
- prilikom kreiranja objekta neke klase u C#, prvo se poziva odgovarajući konstruktor date klase, a nakon toga i konstruktor klase "roditelja". U konstruktoru koji nema parametara, ( Krug() ) se navodi dvotačka pa base() što znači da se poziva konstruktor "mama klase" koji nema parametre. To će na kraju dovesti do toga da se prvo postavi radijus na 0, a zatim da se i x i y postave na 0.
- u drugom konstruktoru ove klase navode se svi parametri redom: koordinate centra kruga i radijus, a posle dvotačke se navodi koji konstruktor iz "mama klase" se navodi. Ono što na kraju se dobije je da se u ovom konstruktoru postavlja vrednost radijusa na zadatu, a x i y se postavljaju pozivom konstruktora klase "roditelja".
- unutar klase Krug imamo 2 metode - funkcije koje nešto rade. Povrsina() - izračunava površinu kruga. Koristimo klasu iz System-a : Math koja u sebi ima mnogo ugrađenih funkcija za matematička izračunavanja. Math.Pow radi stepenovanje - prvi parametar na stepen koji je naveden kao drugi parametar : Math.Pow(4,2) bi bili 4 na kvadrat, Math.PI bi bila konstanta PI.
Nakon ovog objašnjenja bi trebalo da bude jasno šta i kako rade funkcije Povrsina() i Obim() ....
6. sledeći fajl koji se kreira je Valjak.cs:

7. I, na kraju, najvažniji deo: kreiramo konkretne objekte od klasa koje smo napravili:
dve tačke, dva kruga i dva valjka, da bismo mogli da uradimo ono što zadatak traži:
