Polimorfizam, Ponovno korišćenje koda
Objektno-orijentisano
programiranje zasniva se na pet osnovnih principa: apstrakciji,
enkapsulaciji (učaurivanju), nasleđivanju, polimorfizmu i ponovnom korišćenju
koda.
Polimorfizam
Polimorfizam u prevodu znači "mnogo oblika". Na primer: ista metoda može da deluje
različito, u zavisnosti od tipa ili broja parametara koji joj se
prosleđuju. Polimorfizam se zasniva na ideji da
metoda koja je deklarisana u osnovnoj klasi može da se implementira na
više različitih načina u različitim izvedenim klasama
Drugačije rečeno, pri obradi geometrijskih figura treba da postoji klasa figura u kojoj je predviđeno izračunavanje površine figure. Za svaku konkretnu vrstu figura treba da postoji potklasa, a u njoj metoda za izračunavanje površine te vrste figura prema odgovarajućoj formuli a na osnovu dimenzija koje su polja klase. Kada se zatraži izračunavanje površine neke figure koristiće se metoda iz potklase kojoj ta figura pripada.
Treba još uočiti da se u zajedničkoj natklasi figura izračunavanje površine i ne može nikako sprovesti. Dok se ne zna o kakvoj vrsti figura se zapravo radi, ne može da se uradi ništa što bi imalo smisla. Ovakve situacije nisu retke u objektno-orijentisanom programiranju.
Metoda za izračunavanje u natklasi je tada prazna, odnosno, stručno rečeno, ona je apstraktna metoda (abstract method). I za samu natklasu se tada kaže da je apstraktna klasa (abstract class), jer nema smisla stvarati objekte tipa takve klase.
U posmatranom
primeru geometrijska figura je apstraktan pojam, jer ne mogu da
postoje geometrijske figure kao takve, već samo krugovi,
pravougaonici i trouglovi. Pojam geometrijska figura služi samo zato
da se objedinjeno iskažu neke zajedničke osobine svih vrsta figura.
Na primer, da im se može izračunavati obim i površina.
Na koji način se to realizuje u programu? ( Način na koji to koristimo na vežbama)
1. način koji ćemo raditi na vežbama:
Polimorfizam se realizuje preko virtualnih metoda.
- za deklaraciju virtuelnih metoda se koristi ključna reč virtual.
- virtualne metode se mogu reimplementirati u izvedenim klasama (kod njih se koristi ključna reč override).
public class Forumas{public virtual void PrikaziForume() {...}}public class Moderator : Forumas{public override void PrikaziForume() {...}}
// jer moderator vidi dodatne (skrivene potforume) koje ne vidi običan forumaš.
Ako imamo takve dve metode, a želimo da iz izvesene klase pozovemo metodu iz bazne klase, onda tada samo koristimo: base.ImeMetode(parametri...);
--> to možemo učiniti pomoću ključne reči sealed , a takve klase se nazivaju zapečaćene klase.
Zapečaćena (sealed) klasa ne može da se koristi kao bazna klasa bilo koje druge klase.
Sintaksa:
- public sealed class ZapecacenaKlasa
- {
- //...
- }
Ponovno korišćenje koda
Radi što efikasnijeg programiranja poželjno je da se jednom napisani programski delovi mogu iskoristiti više puta, i to bez ponovnog pisanja.
U klasičnom, proceduralnom programiranju, to se svodi na upotrebu biblioteka funkcija opšte namene u više programa.
Taj vid ponovnog korišćenja koda postoji i u objektno-orijentisanom programiranju, pri čemu se tu prave biblioteke klasa opšte namene.
Nasleđivanje predstavlja drugi vid ponovnog korišćenja koda. Metode napisane u natklasi nasleđuju se u potklasama, pa ih ne treba ponovo pisati. U potklasama je potrebno napisati samo metode koje obezbeđuju dodatne funkcionalnosti u odnosu na natklasu.