Jos nekako sam skontao , sta je nasljeđivanje i kako se providi , shvatio i sta je polimorfizam i kako ga napraviti i onda sretnem pojam VIŠESTRUKI POLIMORFIZAM !! Molio bi ako ko ima kakvih spoznaja da napise , i eventualno neki primijer HVALA . (veoma je hitno )
nasljedjivanje , polimorfizam i višestruki poliformizam ??
Zaključano
Zakačeno
Kada iz klase Zivotinja nasledis klasu Macka, postigao si da sve osobine koje mogu pokazivati zivotinje u globalu, automatski postaju i osobine macke, pa tebi ostaje da se u klasi Macka bavis samo specificnostima same macke. Ako si istovremeno i paralelno razvijao klase koje opisuju kvalitet dlake kod zivih bica, mozda si se nasao u situaciji da imas klase Kratkodlaki, Dugodlaki, Celavi...
Polimorfizam je kada ti svoju Macku nasledis i iz klase Zivotinja i iz klase Kratkodlaka. Sada se u samoj klasi Macka ne moras baviti ni dlakom macke, kao sto si ranije postigao i sa zivotinjskim osobinama.
Nadam se da primer nije potpuno nerazumljiv, a ako jeste - reci, nije mi tesko da smislim i nesto blize zdravom razumu ;)
Kod visestrukog nasledjivanja treba paziti na membere koji se na neki nacin definisu i u jednoj i u drugoj klasi iz koje se nasledjuje, na problem konstruktora (ako postoji problem sa redosledom pozivanja) i sa preklopljenim metodama.
Ako zelis dublje da udjes u pricu, dacu ti neke linkove ili meni karakteristicno baljezganje sa mackama i psima :), mada ni pametniji autori nemaju mnogo srecnije paralele...
Na kraju samo da znas da vecina objektno orjentisanih jezika krece od pretpostavke da visestruko nasledjivanje uopste nije potrebno i da se svi takvi problemi mogu resiti i na nacin koji nije toliko podlozan greskama. Ovo nije kompletna istina, ali ostaje cinjenica da to resenje nije idealno i da ostavlja mogucnost zavlacenja gresaka koje se tesko pronalaze... Neces biti mnogo hendikepiran ukoliko ovu temu naucis samo informativno, a u praksi je potpuno izbegnes. S druge strane, mnogi C++ programeri povlace ovaj argument da bi dokazali Java programerima koliko je njihov jezik nadmocan...
Polimorfizam je kada ti svoju Macku nasledis i iz klase Zivotinja i iz klase Kratkodlaka. Sada se u samoj klasi Macka ne moras baviti ni dlakom macke, kao sto si ranije postigao i sa zivotinjskim osobinama.
Nadam se da primer nije potpuno nerazumljiv, a ako jeste - reci, nije mi tesko da smislim i nesto blize zdravom razumu ;)
Kod visestrukog nasledjivanja treba paziti na membere koji se na neki nacin definisu i u jednoj i u drugoj klasi iz koje se nasledjuje, na problem konstruktora (ako postoji problem sa redosledom pozivanja) i sa preklopljenim metodama.
Ako zelis dublje da udjes u pricu, dacu ti neke linkove ili meni karakteristicno baljezganje sa mackama i psima :), mada ni pametniji autori nemaju mnogo srecnije paralele...
Na kraju samo da znas da vecina objektno orjentisanih jezika krece od pretpostavke da visestruko nasledjivanje uopste nije potrebno i da se svi takvi problemi mogu resiti i na nacin koji nije toliko podlozan greskama. Ovo nije kompletna istina, ali ostaje cinjenica da to resenje nije idealno i da ostavlja mogucnost zavlacenja gresaka koje se tesko pronalaze... Neces biti mnogo hendikepiran ukoliko ovu temu naucis samo informativno, a u praksi je potpuno izbegnes. S druge strane, mnogi C++ programeri povlace ovaj argument da bi dokazali Java programerima koliko je njihov jezik nadmocan...
Potpis
De si Deda...
Svakako hvala na trudu , ali ovdije je bilo rijeci ne o visestrukom nasljedjivanu ,nego o
VIŠESTRUKI POLIMORFIZAM . Znaci trebalo bi mi nesto o VIŠESTRUKOM POLIMORFIZAM . Mada se uglavnom slažem s tobom o korisnosti svega ovoga .
VIŠESTRUKI POLIMORFIZAM . Znaci trebalo bi mi nesto o VIŠESTRUKOM POLIMORFIZAM . Mada se uglavnom slažem s tobom o korisnosti svega ovoga .
Pretpostavljam posto se nisam susretao sa terminom da je u pitanju sledece:
Klasa C nasledjuje Klasu A i Klasu B znaci da imamo visestruko nasledjivanje ...
E sad, posto znamo da je polimorfizam sledece:
Klasu C mozemo koristiti tamo gde se ocekuje Klasa A
onda to prevodimo u ovu visestruku terminologiju:
Klasu C mozemo koristiti tamo gde se ocekuje Klasa A ili Klasa B, samim tim imamo visestruki polimorfizam.
Da li ovo ima smisla?
Klasa C nasledjuje Klasu A i Klasu B znaci da imamo visestruko nasledjivanje ...
E sad, posto znamo da je polimorfizam sledece:
Klasu C mozemo koristiti tamo gde se ocekuje Klasa A
onda to prevodimo u ovu visestruku terminologiju:
Klasu C mozemo koristiti tamo gde se ocekuje Klasa A ili Klasa B, samim tim imamo visestruki polimorfizam.
Da li ovo ima smisla?
Moj omiljeni primer koji demonstrira i VIRTUELNI polimorfizam ( tacnije receno virtuelno nasledjivanje).
Mozemo dodati i PrskanaJabuka pa na kraju napraviti PrljavaPrskanaCrvljivaJabuka gde bi metoda vratila false.
Code:
class Jabuka
{
public: virtual bool ocisti()=0;
int boja a;
};
class PrljavaJabuka // pokupljena sa zemlje
: virtual Jabuka
{
public: bool ocisti(){ /*pranje*/; return true; }
};
class CrvljivaJabuka // ova je ubrana sa drvete i zato nije prljava
: virtual Jabuka
{
public: void ocisti(){ /* vadjenje crva*/; return true; }
};
class PrljavaCrvljivaJabuka // malo je duze stajala na zemlji
: public CrvljivaJabuka
: public PrljavaJabuka
{
public: void ocisti(){ CrvljivaJabuka::ocisti(); PrljavaJabuka::ocisti(); /*dodatno pranje*/}
};
class Jabuka
{
public: virtual bool ocisti()=0;
int boja a;
};
class PrljavaJabuka // pokupljena sa zemlje
: virtual Jabuka
{
public: bool ocisti(){ /*pranje*/; return true; }
};
class CrvljivaJabuka // ova je ubrana sa drvete i zato nije prljava
: virtual Jabuka
{
public: void ocisti(){ /* vadjenje crva*/; return true; }
};
class PrljavaCrvljivaJabuka // malo je duze stajala na zemlji
: public CrvljivaJabuka
: public PrljavaJabuka
{
public: void ocisti(){ CrvljivaJabuka::ocisti(); PrljavaJabuka::ocisti(); /*dodatno pranje*/}
};
Mozemo dodati i PrskanaJabuka pa na kraju napraviti PrljavaPrskanaCrvljivaJabuka gde bi metoda vratila false.
Potpis
AKA DDMM