orijentirano programiranje 5. Apstraktne klase i sučelja Apstrakcija • proces skrivanja detalja implementacije i pokazivanja korisniku samo funkcionalnosti.
• Apstrakcija nam dopušta da se fokusiramo na to što objekt radi
umjesto na kako to radi.
• Postoje dva načina za postizanje apstrakcije u javi
o Apstraktna klasa (0 do 100%) o Sučelje (eng. interface)(100%) Apstraktne klase (1) • Klasa koja je definirana sa ključnom riječi abstract • može imati apstraktne i ne-apstraktne metode • ne može biti instancirana tj. nije moguće kreirati objekt apstraktne klase • mora biti naslijeđena i njene metode ako su apstraktne moraju biti implementirane • Svaka klasa koja sadrži jednu ili više apstraktnih metoda mora biti deklarirana kao apstraktna • modifikator abstract mora biti primijenjen na svaku apstraktnu metodu. Apstraktne klase (2) Zašto bismo imali apstraktan razred? • Zato što možemo imati „zajednički nazivnik” za konkretne artikle
• apstraktni razred može imati metode koje su zajedničke za
više artikala ili čak za sve vrste artikala.
• public abstract String getTipArtikla();
• Klasa Artikl koja mora biti apstraktna Apstraktne klase (3) • Svaka klasa koji nasljeđuje roditeljsku klasu će imati svoju verziju metode getTipArtikla().
• kad pozovemo apstraktnu metodu?
o polimorfizam => metoda je virtualna, poziva se konkretna implementacija
• Apstraktni razredi mogu imati konstruktore, ali se ne može
direktno stvoriti primjerak s: new NazivApstraktneKlase() o Konstruktor biva pozvan prilikom stvaranja objekta koji ga nasljeđuje. Apstraktne metode • Klasu možemo proglasiti apstraktnim čak i ako nema nijednu apstraktnu metodu.
• Apstraktne metode nemaju kod
• Iza naziva metode stavljamo ; umjesto koda u vitičastim zagradama public abstract String getTipArtikla (); Sučelja (eng. interface) (1) • Specifikacija metoda koje klasa mora imati naziva se sučelje i ne modelira kao klasa (class), već kao sučelje (interface) • klase se nasljeđuju, sučelja se implementiraju.
• Sučelje može naslijediti neko drugo sučelje.
• U Javi sva sučelja počinju slovom I (nije obveza, već praksa).
• Klase u Javi mogu naslijediti samo jednu klasu, ali mogu
implementirati više sučelja. Sučelja (eng. interface) (2) Definicija: public interface IPrimjerSucelja{ //deklaracija svih metoda //metode se samo navode, nemaju tijelo } Sučelja (eng. interface) (3) • mehanizam za postizanje potpune apstrakcije
• Ako klasa nasljeđuje klasu koja već implementira neko
sučelje, onda je automatski to sučelje implementirano i u podrazredima.
• Sučelje može naslijediti drugo sučelje.
• Sučelje može imati članske varijable. Definira se kao obična
varijabla, ali smatraju se statičkim i finalnim • Sljedeće predavanje : 6. Iznimke