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 :)