100 likes | 277 Views
SVEUČILIŠTE JOSIPA JURJA STROSSMAYERA U OSIJEKU. ELEKTROTEHNIČKI FAKULTET OSIJEK. ZAVOD ZA RAČUNARSTVO. OBJEKTNO ORIJENTIRANO PROGRAMIRANJE. Vježba 4. Apstrakcija. Sučelja. Osijek, 2007. APSTRAKCIJA. Apstrakcija predstavlja princip objektno orijentiranog programiranja
E N D
SVEUČILIŠTE JOSIPA JURJA STROSSMAYERA U OSIJEKU ELEKTROTEHNIČKI FAKULTET OSIJEK ZAVOD ZA RAČUNARSTVO OBJEKTNO ORIJENTIRANOPROGRAMIRANJE Vježba 4. Apstrakcija. Sučelja. Osijek, 2007.
APSTRAKCIJA • Apstrakcija predstavlja princip objektno orijentiranog programiranja • Naznačava se u Javi ključnom riječi abstract • Klase i metode mogu biti apstraktne • Apstraktna klasa predstavlja "nedovršenu" klasu koja se ne može instancirati, već ju je potrebno naslijediti i implementirati u naslijeđenoj klasi • Apstraktna klasa ne sadrži konstruktor • Apstraktna klasa sadrži barem jednu apstraktnu metodu • Apstraktne metode ne sadrže tijelo, tj. nemaju implementaciju • Apstraktna klasa sadrži osnovne koncepte nekog skupa objekata • Apstraktna klasa može sadržavati implementirane metode • Svrha apstrakcija jest organizacija i preglednost koda • Apstrakcija • Sučelja • Zadatak • Dodatni zadatak
APSTRAKCIJA • public abstract class Instrument {private String trenutniTon;private int tempo;public String getTrenutniTon() {return trenutniTon; } • public abstract void ustimaj(); • public abstract void svirajTon(); • public abstract void svirajAkord(); • public abstract void setTempo(int tempo); • public abstract int getFrekvencijaOsnovnogTona(); • } • Apstrakcija • Sučelja • Zadatak • Dodatni zadatak
APSTRAKCIJA • public class Klavir extends Instrument {public void svirajTon() { //implementacija stisnute tipke klavijature } • public void ustimaj() { //implementacija metode ustimaj() } • public void svirajAkord() { //implementacija metode svirajAkord() } • public void setTempo(int tempo) { //implementacija metode setTempo() } • public int getFrekvencijaOsnovnogTona() { //implementacija metode getFrekvencijaOsnovnogTona()return 1; }} • Apstrakcija • Sučelja • Zadatak • Dodatni zadatak
SUČELJA • Sučelje (eng. interface) predstavlja kolekciju neimplementiranih metoda • Ne sadrži atribute (osim deklaracija konstanti) • Označava se ključnom riječi interface • Implementacija se vrši u klasi koja implementira sučelje, naznačava se ključnom riječi implements. Potrebno je implementirati sve metode sučelja u klasi koja ga implementira. • Jedna klasa može implementirati više sučelja (ne može naslijediti više klasa) - način višestrukog nasljeđivanja • Sve metode sučelja su implicitno apstraktne, stoga nije nužno deklarirati metodu sučelja kao apstraktnu ključnom riječi abstract • Apstrakcija • Sučelja • Zadatak • Dodatni zadatak
SUČELJA • public interface Writeable {public static final char delimiter = (char)0x21;public boolean writeASCII();public boolean writeBinary();} • public interface MessageUtils {public void writeDebugEntry();public void writeErrorEntry();public void writeInfoEntry();} • public class MessageWriter implements Writeable, MessageUtils {private String message; • public MessageWriter(String message) {this.message = message; } • publicboolean writeASCII() { //implementacija writeASCII() metodereturntrue; } • public boolean writeBinary() { //implementacija writeBinary() metodereturn true; } • public void writeDebugEntry() { //implementacija writeDebugEntry() metode • } • Apstrakcija • Sučelja • Zadatak • Dodatni zadatak
SUČELJA • public void writeErrorEntry() { //implementacija writeErrorEntry() metode } • public void writeInfoEntry() { //implementacija writeInfoEntry() metode } • } • Apstrakcija • Sučelja • Zadatak • Dodatni zadatak
ZADATAK • Stvoriti apstraktnu klasu Shape, koja ima atribut ime, te metode setIme(String ime) i getIme(). Također, definirati dvije apstraktne metode: povrsina() – za računanje površine like i crtaj() – za grafičko iscrtavanje. • Zatim kreirati klasu Trokut koja nasljeđuje apstraktnu klasu Shape. Kao atribute, klasa Trokut koristi koordinate triju točaka (x1, y1, x2, y2, x3, y3). Njih je, zajedno s nasljeđenim atributom ime, potrebno postaviti putem konstruktora. Klasa Trokut mora implementirati metode povrsina() i crtaj() koje je nasljedila od apstraktne klase Shape. • Stvoriti sučelje ShapeInterface koje definira konstantu PI te metode setIme(String ime), getIme(), povrsina() i crtaj(). • Kreirati klase Krug i Pravokutnik koje implementiraju sučelje ShapeInterface, te u njima implementirati sve metode koje to sučelje nalaže. Osim toga, klasa Krug će posjedovati atribute ime i radijus, dok u klasi Pravokutnik trebaju biti definirani atributi ime, a i b, gdje a i b predstavljaju dužine stranica pravokutnika. U obje klase, atributi se postavljaju putem konstruktora. • Klasu Start koja služi za pokretanje aplikacije i klasu Crtac koja se korisiti kao pomoć pri iscrtavanju likova, nije potrebno implementirati, već samo iskoristiti ovdje navedene primjere. • Apstrakcija • Sučelja • Zadatak • Dodatni zadatak
ZADATAK • Apstrakcija • Sučelja • Zadatak • Dodatni zadatak
DODATNI ZADATAK • Dodatni zadatak nadovezuje se na zadatak s vježbe. • Potrebno je kreirati novu klasu Elipsa, koja nasljeđuje apstraktnu klasu Shape. Atributi te klase trebaju biti poluosX i poluosY, koji se, uz ime, postavljaju putem konstruktora. Također je potrebno implementirati i metode povrsina() i crtaj() koje nalaže nasljeđena apstraktna klasa. • Apstraktnu klasu Shape zatim proširiti s novom apstraktnom metodom opseg() koja će se koristiti za računanje obujma pojedinog lika. • Na sličan način proširiti i sučelje ShapeInterface s metodom opseg(). • Kako klase Trokut i Elipsa nasljeđuju apstraktnu klasu Shape, potrebno je u njima implementirati novu metodu opseg() iz klase Shape. • Isto tako, klase Krug i Pravokutnik moraju implementirati dodatnu metodu opseg() pošto je ona postala dio sučelja ShapeInterface. • Klasu Start proširiti sa stvaranjem novog objekta tipa Elipse, te za taj objekt ispisati ime, povrsinu, opseg, te elipsu iscrtati. Ispis ostalih likova proširiti s rezultatom metode opseg(). • Klasu Crtac nije potrebno mijenjati, u njoj je već predviđeno i iscrtavanje elipse. • Apstrakcija • Sučelja • Zadatak • Dodatni zadatak