Download as ppt, pdf, or txt
Download as ppt, pdf, or txt
You are on page 1of 16

Programski jezici

Tematska celina 3/14

APSTRAKTNE KLASE
I INTERFEJSI
Apstraktne klase
 Apstraktna je svaka klasa u kojoj makar jedan
metod nema telo. Dakle, ne da ima prazno telo
(a to izgleda ovako: {}), nego nema telo uopšte!
• Metod bez implementacije naziva se apstraktni metod.
• Ispred definicije apstraktne klase mora da stoji modifikator
abstract.
 Od apstraktne klase ne mogu da se prave objekti.
• Apstraktne klase služe samo da bi bile nasleđivane.
• One služe kao "uzor" svojim nasleđenim klasama.
• I izvedena klasa takođe može biti apstraktna.
• Ako je i ona apstraktna, mora biti obeležena sa abstract.
• Ako nije apstraktna, onda mora imati definicije svih metoda.

Elektronski fakultet u Nišu - Katedra za računarstvo - Mr Martin Jovanović - Programski jezici 2011 Slajd 2
Primer apstraktne klase
 Klasa "Rogljasto telo"
• pamtimo broj strana rogljastog tela,
• pamtimo površinu svake strane,
• konstruktor postavlja samo broj strana, ne i površine,
• napišemo metod koji postavlja površinu datoj strani,
• napišemo metod koji vraća površinu tela,
• ali...
 ...ne možemo da napišemo metod koji vraća
zapreminu tela, jer ne znamo kog oblika je telo.
Zato će nam on biti apstraktan.
• Za bilo koje konkretno telo imaćemo izvedenu klasu
(recimo klasu Kocka, klasu Piramida...), i svaka će imati
svoj metod za zapreminu (sa različitom formulom).
Elektronski fakultet u Nišu - Katedra za računarstvo - Mr Martin Jovanović - Programski jezici 2011 Slajd 3
Rogljasto telo – source code
abstract public class RogljastoTelo
{
private int brojStrana;
private float[] strane;
public RogljastoTelo(int n) { // konstruktor
brojStrana = n;
strane = new float[n];
}
public setStrana( float s, int index )
{
strane[index] = s;
} Ovaj primer može se naći
public float povrsina() među urađenim primerima
{ (kao Eclipse projekat).
float p;
for ( int i = 0; i < brStrana; i++ )
p += strane[I];
return p;
}
abstract public float zapremina(); // nema vitičastih zagrada!
} // SAMO ZAGLAVLJE METODA!

Elektronski fakultet u Nišu - Katedra za računarstvo - Mr Martin Jovanović - Programski jezici 2011 Slajd 4
Zadatak
Na programskom jeziku Java kreirati:
 Apstraktnu klasu Displej koja sadrži zaštićeni podatak cifra
koja predstavlja dekadnu cifru trenutno prikazanu na displeju,
funkciju resetuj koja postavlja cifru na 0, funkciju inkrementiraj
koja povećava sadržaj displeja za 1 (po modulu 2) i apstraktni
metod stampaj koji ispisuje sadržaj displeja na standardni izlaz.
 Klasu MatricniDisplej izvedenu iz klase Displej koja sadrži:
privatni podatak - matricu reda 5x3x2 – dve matrice, gde obe
simbolizuju po jednu cifru na zamišljenom displeju; "upaljeni"
segmenti displeja treba da budu predstavljeni znakom '*', a
"ugašeni" znakom '_'. Ova klasa, naravno, mora da
implementira metod stampaj, i to tako što će za svaki broj
odštampati na ekranu odgovarajuću matricu. Primeri za matrice
dati su na sledećem slajdu.
 U funkciji main kreirati objekat klase MatricniDisplej, resetovati
ga i nakon toga 4 puta inkrementirati. Sadržaj displeja nakon
svake promene ispisati na standardni izlaz.

Elektronski fakultet u Nišu - Katedra za računarstvo - Mr Martin Jovanović - Programski jezici 2011 Slajd 5
Zadatk – dodatno objašnjenje
 Matrice u klasi MatricniDisplej treba da liče na
nešto poput ovoga:

* * * _ _ *
* _ * _ * *
* _ * _ _ *
* _ * _ _ *
* * * _ _ *

0 1
 Ideja je da zvezdice formiraju cifru na displeju.

Elektronski fakultet u Nišu - Katedra za računarstvo - Mr Martin Jovanović - Programski jezici 2011 Slajd 6
Interfejsi
 Interfejs je klasa kod koje su svi metodi apstraktni.
Ona može da sadrži samo:
• apstraktne metode i
• konstante.
 Interfejs ne može da sadrži atribute (promenljive).
 Od interfejsa se ne mogu praviti objekti.

 Kada neka klasa nasleđuje neki interfejs, kaže se


da ga ona implementira.
 Klasa koja implementira interfejs ima 2 mogućnosti:
• ili će da definiše telo svim nasleđenim apstr. metodima,
• ili će da bude apstraktna (ako makar jednom nasleđenom
apstraktnom metodu ne definiše telo).
Elektronski fakultet u Nišu - Katedra za računarstvo - Mr Martin Jovanović - Programski jezici 2011 Slajd 7
Interfejsi
 Definicija interfejsa:
public interface ime_interfejsa
{
telo_interfejsa
}
 U telu postoje samo deklaracije metoda.
• Nije obavezno navoditi ključne reči abstract i public
ispred deklaracija metoda – podrazumeva se da su u
interfejsu svi metodi i apstraktni i javni.
• Ipak, postoji nepisano pravilo da interfejse uvek
definišemo kao javne (public).
 Deklaracija metoda se sastoji od: tipa, imena
metoda i argumenata. Nema velikih zagrada.
Elektronski fakultet u Nišu - Katedra za računarstvo - Mr Martin Jovanović - Programski jezici 2011 Slajd 8
Interfejsi
 Primer interfejsa:
public interface MojInterfejs
{
final int jedna_moja_konstanta = 10;
final float druga_moja_konstanta = 25.47f;

public int prvi_metod (int x, float y, double z);


public void drugi_metod (boolean b, int i);
public void treci_metod ();
}

Elektronski fakultet u Nišu - Katedra za računarstvo - Mr Martin Jovanović - Programski jezici 2011 Slajd 9
Interfejsi
 Definicija klase koja implementira interfejs:
class ime_klase implements ime_interfejsa
{
telo_klase_implementatorke
}

 U programu mogu biti definisane promenljive


tipa interfejsa. Samo promenljive. Ne objekti.

 Tim promenljivama se kasnije dodeljuju objekti


klasa koje implementiraju taj interfejs.

Elektronski fakultet u Nišu - Katedra za računarstvo - Mr Martin Jovanović - Programski jezici 2011 Slajd 10
Interfejsi
 Klasa u Javi može da imlementira više interfejsa.
• U tom slučaju, njeno ponašanje može da se shvati kao
unija skupova metoda tih interfejsa.
• PAŽNJA: to ne važi za nasleđivanje! Za razliku od jezika
C++, u Javi klasa može da ima samo jednu superklasu.
• To znači da u Javi klasa nasleđuje atribute iz samo jedne
hijerarhije, a ponašanje može da nasledi iz više različitih
hijerarhija. Ovim je delimično nadoknađen nedostatak
višestrukog nasleđivanja kod Jave.

 Primer: class B extends A implements I1, I2, I3


{
telo_klase
}
Elektronski fakultet u Nišu - Katedra za računarstvo - Mr Martin Jovanović - Programski jezici 2011 Slajd 11
Fundamentalni zadatak - Iterator
Projektovati interfejs Iterator za manipulaciju kolekcijom podataka
proizvoljnih tipova, koji sadrži metode:
- dodajElement, za ubacivanje novog elementa u kolekciju,
- stampajTrenutni, za štampanje trenutnog elementa na ekran,
- imaJos, koji vraća informaciju o tome da li ima još elemenata,
- sledeci, za prelazak na sledeci element kolekcije,
- naPocetak, za vracanje na prvi element kolekcije.
Projektovati klasu VektorIterator, koja implementira intefejs Iterator i
služi za manipulaciju kolekcijama tipa vektor (elemenata proizvoljnih
tipova). Metod stampajTrenutni treba da pretvara vrednost trenutnog
elementa u tip String i da ga potom štampa na glavni izlaz.
U metodu main testirati sve navedene metode za nekoliko primitivnih
tipova i referentni tip String.

Elektronski fakultet u Nišu - Katedra za računarstvo - Mr Martin Jovanović - Programski jezici 2011 Slajd 12
Fundamentalni zadatak
Bitni aspekti kod ovog zadatka:
1. Protumačiti šta se sve traži u zadatku. U tekstu zadatka nije rečeno
šta sve treba implementirati! Rečeno je šta sve program treba da radi, i
koje klase svakako treba da ima. Međutim, da bi program stvarno radio sve
što se traži, moraju da se implementiraju još neke stvari. Naš posao je da
uvidimo šta se podrazumeva i da to isprogramiramo. Ukoliko dobro
razumemo koncept objektnog programiranja, to nam neće biti teško.

2. Realizovati metod koji radi sa podacima čiji tip unapred ne znamo.


Ovo je čest slučaj u objektnom programiranju i jako je važno znati snaći se
u ovakvoj situaciji.

3. Obezbediti funkcionalnost i za primitivne i za referentne tipove.


Metod koji može da radi sa podacima nepoznatog tipa mora biti u stanju da
radi i sa referentnim tipovima (objektima klasa) i sa primitivnim tipovima.
Objašnjenja se nalaze se u rešenju zadatka, u komentarima u kôdu.
Analizirati kôd počev od onoga što je sigurno prisutno – interfejsa Iterator.

Elektronski fakultet u Nišu - Katedra za računarstvo - Mr Martin Jovanović - Programski jezici 2011 Slajd 13
Iterator EXTENDED
Projektovati interfejs Iterator za manipulaciju kolekcijom podataka
proizvoljnih tipova, koji sadrži metode:
- 4 metoda dodajElement, za ubacivanje novog elementa u kolekciju,
- stampajTrenutni, za štampanje trenutnog elementa na ekran,
- imaJos, koji vraća informaciju o tome da li ima još elemenata,
- sledeci, za prelazak na sledeci element kolekcije,
- naPocetak, za vracanje na prvi element kolekcije.
Metod dodajElement treba da postoji u verziji za tip int, float, double i
za sve referentne tipove.
Projektovati klasu VektorIterator, koja implementira intefejs Iterator i
služi za manipulaciju kolekcijama tipa vektor (elemenata proizvoljnih
tipova). Metod stampajTrenutni treba da pretvara vrednost trenutnog
elementa u tip String i da ga potom štampa na glavni izlaz.
U metodu main testirati sve navedene metode za sve predviđene
primitivne tipove. Isprojektovati proizvoljne klase Kocka i Lopta i
testirati funkcionalnost klase VektorIterator sa njihovim objektima.

Elektronski fakultet u Nišu - Katedra za računarstvo - Mr Martin Jovanović - Programski jezici 2011 Slajd 14
Iterator EXTENDED
 Ovde moramo da vodimo računa o još dve stvari.
• Prvo, moramo obezbediti nekoliko metoda za postavljanje
nove vrednosti u kolekciju (vektor) – jedan metod za
postavljanje int vrednosti, jedan metod za float vrednost
itd. Iz main metoda ćemo u kolekciju slati primitivne tipove
bez obmotavanja u wrapper klase – obmotavanje mora da
se vrši u samim metodima za postavljanje vrednosti.
• Drugo, moramo voditi računa o štampanju objekata naših
klasa. Lako je štampati objekte ugrađenih klasa (kao što je
String), ali za klase koje mi napravimo – mi moramo
isprojektovati način na koji se objekti štampaju. U ovom
slučaju najbolje je da u našim klasama (Kocka i Lopta)
predefinišemo ugrađeni metod toString, tako da on kod
njih funkcioniše (kako mi želimo). Metod stampajTrenutni
će onda moći da poziva toString za sve predviđene tipove.
Elektronski fakultet u Nišu - Katedra za računarstvo - Mr Martin Jovanović - Programski jezici 2011 Slajd 15
Kraj tematske celine 3/14

Hvala na pažnji.
Elektronski fakultet u Nišu - Katedra za računarstvo - Mr Martin Jovanović - Programski jezici 2011 Slajd 16

You might also like