1 / 20

Računarski praktikum 3 Vježbe 03

Računarski praktikum 3 Vježbe 03. Vinko Petričević. Nasljeđivanje, polimorfizam, strukture. Nasljeđivanje. Jedna od glavnih prednosti klasa je nasljeđivanje Specijalizacija opće klase (bazne) generalizacija specijaliziranih klasa kojima pristupano kao općima (polimorfizam).

teresa
Download Presentation

Računarski praktikum 3 Vježbe 03

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Računarski praktikum 3Vježbe 03 Vinko Petričević Nasljeđivanje, polimorfizam, strukture

  2. Nasljeđivanje • Jedna od glavnih prednosti klasa je nasljeđivanje • Specijalizacija opće klase (bazne) • generalizacija specijaliziranih klasa kojima pristupano kao općima (polimorfizam)

  3. Primjer nasljeđivanja public class Osoba { protected string Ime, Prezime; public Osoba(string ime, string prezime) { Ime = ime; Prezime = prezime; } } public class Student : Osoba { public string JMBAG; public Student(string ime, string prezime, string jmbag) : base(ime, prezime) { JMBAG = jmbag; } } • konstruktori se ne nasljeđuju. ako nemamo defaultni konstruktor, moramo ga pozvati eksplicitno

  4. Polimorfizam public class Osoba { … public virtual void Ispisi() { Console.WriteLine(“Ime: {0}, Prezime: {1}”, ime, prezime); } } public class Student : Osoba { … public override void Ispisi() { Console.WriteLine(“Ime: {0}, Prezime: {1}, JMBAG: {2}”, ime, prezime, JMBAG); } } public class Profesor : Osoba { … public override void Ispisi() { Console.Write(“prof. ”); base.Ispisi(); } }

  5. Polimorfizam class Program { static void Main(string[] args) { Osoba o = new Osoba("Ivana", "Ivanić"); Student s = new Student("Marko", "Marković", "2123123"); Profesor p = new Profesor("Jozo", "Jozić"); o.Detalji(); s.Detalji(); p.Detalji(); Osoba[] poljeOsoba = new Osoba[3]; poljeOsoba[0] = new Osoba("Ivana", "Ivanić"); poljeOsoba[1] = new Student("Marko", "Marković", "3434"); poljeOsoba[2] = new Profesor("Jozo", "Jozić"); for (int i = 0; i < poljeOsoba.Length; i++) poljeOsoba[i].Detalji(); } }

  6. Zadatak 1 • U prethodnom primjeru uklonite riječ virtual, te objasnit što se događa

  7. override, new • ako ne premostimo (override) neku virtualnu metodu, kompajler će nam dati upozorenje • ako ne želimo dobiti to upozorenje, trebamo metodu navesti sa new public class Profesor : Osoba { … public new void Ispisi() { Console.Write(“prof. ”); base.Ispisi(); } }

  8. Apstraktne klase • ako želimo da izvedena klasa mora implementirati svoju verziju neke metode, u baznoj klasi ju navedemo kao apstraktnu prije deklaracije • apstraktna metoda nema implementaciju • apstraktna metoda učini cijelu klasu apstraktnom, pa prije definicije klase moramo navesti da je apstraktna • iz apstraktne klase se ne mogu stvarati novi objekti, nego moramo koristiti neku konkretnu klasu abstract public void Ispisi(); abstract public class Osoba { … Osoba o = new Student( … )

  9. Zadatak 2 • Napišite apstraktnu klasu lik koja računa površinu i opseg i može ispisati o kojem liku je riječ • napišite klase pravokutniTrokut, kvadrat, pravokutnik, romb i krug • napišite main koji demonstrira rad s tim klasama

  10. Zapečaćena (sealed) klasa • zapečaćena klasa ne dopušta da se iz nje nasljeđuje (dakle suprotno apstraktnom) sealed public class Student …

  11. Korijen svijh klasa - Object • sve klase su zapravo naslijeđene iz klase System.Object • Object ima neke virtualne metode: • Equals() – procjenjuje jesu li dva objekta jednaka • GetHashCode() – dopušta objektima da pruže vlastitu metodu za upotrebu u kolekcijama • GetType() – omogućava pristup objektu tipa • MemberwiseColne() – stvara kopije objekata; naš tip je nikad ne bi smio implementirati • ReferenceEquals() – procjenjuje pokazuju li dva objekta na istu instancu • ToString() – omogućava predstavljanje objekta nizom znakova

  12. Zadatak 3 • U prethodnom primjeru sa osobom, dodajte metodu koja omogućuje ispis podataka pomoću Console.Write • promotrite što se događa ako ništa ne napravimo

  13. Boxing i unboxing • omogućuje tretiranje tipova kao da su referentni • pakiranje je implicitno • prilikom raspakiravanja, moramo eksplicitno navesti kastanje • u posljednjoj naredbi se ponovo j prvo zapakirao u object, pa poslao kao parametar funkciji int i=5; // na stogu object o = i; // boxani i je sada na heapu int j = (int)o; Console.WriteLine(“j: {0}”, j);

  14. Ugniježđene (nested) klase • kao element klase moemo navesti i cijelu novu klasu • ako je vidljiva izvana (deklarirana kao public), njezino ime je • ona vidi sve elemente (i privatne) vanjske klase class VanjskaKlasa { … public class UgnijezdjenaKlasa { … } VanjskaKlasa.UgnijezdjenaKlasa

  15. Zadatak 4 • Napišite klasu polje koja može pamtiti do 100 objekata • napišite podklasu iterator koja omogućava prolazak kroz sve elemente kolekcije

  16. Zadatak 5 • Napišite klasu stog koja predstavlja stog do 100 objekata, s metodama dodaj, skini i gornji • napišite podklasu ispisiStog s metodom ispisi koja ispisuje sve elemente stoga (pri tom kreirajuci novi stog). početni stog na kraju treba ostati nepromijenjen

  17. Strukture • struktura je vrijednosti tip • može imati konstruktore, svojstva, metode, varijable, operatore, ugniježđene tipove, indeksere • ne podržavaju nasljeđivanje • nema inicijalizatora • eksplicitni konstruktor mora inicijalizirati sve varijable • objekte možemo definirati i bez poziva new [modifikator pristupa] structidentifikator [: popis sučelja] { // tijelo klase: definicija svojstava, metoda i događaja }

  18. Strukture public struct Lokacija { private int xVrijednost; private int yVrijednost;   // konstruktor public Lokacija(int xKoordinata, int yKoordinata) { this.xVrijednost = xKoordinata; this.yVrijednost = yKoordinata; }   public int X { get { return xVrijednost; } set { xVrijednost = value; } } public int Y { get { return yVrijednost; } set { yVrijednost = value; } }   public override string ToString() { return this.xVrijednost.ToString() + ", " + this.yVrijednost.ToString(); } }

  19. Strukture class Program { static void TestFunkcija(Lokacija l) { l.X = 300; l.Y = 400; Console.WriteLine("Lokacija u TestFunkciji: {0}", l); } static void Main(string[] args) { // stvaranje nove instance strukture Lokacija Lokacija l1 = new Lokacija(100, 200);// ili Lokacija l1; l1.xVrijednost=100; l1.yVrijednost=200; - moraju biti svi elementi Console.WriteLine("Lokacija prije poziva TestFunkcije: {0}", l1); // poziv testFunkcije TestFunkcija(l1); Console.WriteLine("Lokacija nakon poziva TestFunkcije: {0}", l1); } }

  20. Zadatak 6 • U prethodnom primjeru pokušajte struct zamijeniti sa class

More Related