Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Pitanje o nasledivanju

[es] :: Pascal / Delphi / Kylix :: Pitanje o nasledivanju

Strane: 1 2

[ Pregleda: 8983 | Odgovora: 21 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

Milan Milosevic

Član broj: 67
Poruke: 932
*.dynamic.isp.telekom.rs.



+31 Profil

icon Re: Pitanje o nasledivanju19.10.2013. u 09:16 - pre 127 meseci
Potpuno se slazem sa tvojim videnjem stvari BugA.
Primer dva resava problem kad je ponekad potrebno smanjiti funkcionalnost osnovne klase.
Jedino sto to nije previse prakticno ukoliko je Super klasa dosta razradena, a ti zelis da eliminises samo
neznatni deo funkcionalnosti super klase koji prosto nije logican da postoji u tvojoj novoj klasi.
Tad je po meni bolje ostaviti nelogicnu funkciju ili osobinu nego dodavati stotine starih fukcija i procedura.
 
Odgovor na temu

((BugA))
Igor Djordjevic
Bor, Srbija

Član broj: 29241
Poruke: 196
*.dynamic.sbb.rs.

ICQ: 66516695
Sajt: www.MalamutKlub.com


+17 Profil

icon Re: Pitanje o nasledivanju19.10.2013. u 11:09 - pre 127 meseci
Potpuno si u pravu.

E sad, sa teorijske tacke gledista, ako dodjes u takvu situaciju onda znaci da tvoja super klasa nije dovoljno generalizovana za potomka koji ti je potreban (tj. nasledjujes "pogresnu" klasu). To sto si nazvao "razradjenim", ja bih rekao da je u stvari klasa prenatrpana. Cim odredjenu klasu pocnes previse da specijalizujes (razradjujes za sve uzi moguci upotrebni scenario), sve je veca sansa da ce ti takva klasa sve manje vrsiti posao u globalu, a da ces sve vise imati potrebu da neke stvari iz nje jednostavno "vuces" kao repove samo zato sto su se u njoj vec nasli. Mislim da je mnogo bolja praksa da imas razgranatiju strukturu nasledjivanja gde ce svaka klasa u hijerarhiji imati manji "obim posla", neophodan za odredjeni nivo apstrakcije, nego li da sve nasledjujes od jedne "super" klase (karikiram, bitna je poenta).

Cak, u slucaju da imas kontrolu nad klasama, u slucaju tvog problema mozda je bolje da postojecu klasu "razbijes" na dve klase (roditelj i naslednik), gde ce naslednik u stvari imati sve ono sto trenutna klasa ima (sto zbog nasledjivanja od roditelja, sto zbog zadrzavanja specificne funkcionalnosti - a zadrzace i naziv klase), a u roditelja ces izvuci sve ono sto je zajednicko postojecoj klasi i novoj klasi koju zelis da napravis, pa ce tvoja nova klasa naslediti samo ovog novog roditelja. Drugim recima, tvoja nova klasa potomka nece imati nepotrebnu funkcionalnost iz (velike) stare klase jer ce ona ostati u staroj klasi (sada potomku nove roditeljske klase), a ti ces iz nove roditeljske klase za svoju novu klasu potomka naslediti samo ono sto ti zaista treba.

Mozda zvuci malo konfuzno, evo primera. Na pocetku imamo:
Code:
TMajmun = class
  Usi;
  Nos;
  Rep;
end;

... i zelimo da nasledimo Usi i Nos za klasu TCovek, ali nam je Rep ovde visak. Da ne bismo samo nasledili klasu TMajmun i Rep nepotrebno vukli kroz novu (i sve buduce klase), mozemo uraditi sledece:
Code:
TPredak = class
  Usi;
  Nos;
end;

TMajmun = class(TPredak)
  Rep;
end;

TCovek = class(TPredak)
end;

Da me ne shvatis pogresno, ovo vise pisem zbog svih onih koji mozda citaju ovu temu a koji jos uvek nemaju mnogo iskustva sa stvarima o kojima diskutujemo, tek da mozda steknu malo bolji uvid u to kako bi neke stvari (teoretski) trebalo raditi, i zasto je to tako (manje glavobolja kako projekat bude rastao).

U praksi, potpuno te razumem :D Nisu retke situacije kada nesto (iz ko zna kog razloga) ne mozes uraditi kako bi bilo najbolje - u konkretnom primeru mozda nemas pristup pocetnoj klasi TMajmun kako bi je razbio na TPredak i TMajmun. Kompromisi su deo realnog zivota (potpomognuti specificnim neobicnim zahtevima i rokovima), a na nama je da iskoristimo svoju dovitljivost i sto manje sebi (ili onome ko dolazi iza nas) zakomplikujemo buducnost :) Mislim da je bitno samo da uvek imamo na umu sta bi bilo najbolje i da tome tezimo, a da li je to skroz u trenutnoj situaciji izvodljivo je vec manje vazno i zavisi od same situacije.

Rekoh, veoma zanimljiva tema :)
 
Odgovor na temu

[es] :: Pascal / Delphi / Kylix :: Pitanje o nasledivanju

Strane: 1 2

[ Pregleda: 8983 | Odgovora: 21 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.