Каква концептуална разлика между черти и множествено наследяване?

От това, което прочетох и видях, считам множественото наследяване за лоша практика, не само по себе си, а защото кара начинаещите да използват навсякъде, където по-елегантните модели на дизайн могат да бъдат полезни и по-смислени.

Някои езици са избрали да не прилагат множествено наследяване и след това са избрали да прилагат характеристики (напр. PHP). Единствената интересна и съществена разлика, която виждам между множественото наследство и чертите, които виждам, е лингвистична: докато „наследството“ показва някакъв вид споделена природа, „черта“ означава повече характеристики.

Има ли някаква друга важна разлика, която пропускам, която би обяснила защо някои смятат, че множественото наследяване е неподходящо и че сега чертите са подходящи?


person AsTeR    schedule 19.06.2013    source източник
comment
възможен дубликат на PHP: характеристики срещу интерфейси   -  person Kye    schedule 23.07.2013


Отговори (1)


Можете да използвате черти, за да фалшифицирате множествено наследяване, но аз вярвам, че основната разлика е концептуална. Връзката родител-дете е връзката "е-е".

Ако имате клас Furniture с дете Table и дете PicknickTable, имате Picknicktable is-a Table is-a Furniture (хм, мебелите броим ли се така? nvrmnd).

С характеристиките просто казвате: Мразя да продължавам да пиша кода, за да поставя неща върху повърхността, така че пиша характеристиката „putStuffOnThisThing“ и те я имат. Това не е наследство! Основната грешка зад подобно разсъждение може да е, че искате да гледате на чертите като на различен начин за показване на йерархии, докато не трябва. Това не е заместител на действително добър дизайн, това е трик в кутията с инструменти, с който можете да злоупотребите за множествено наследяване, но може да е по-добре да го използвате като начин да избегнете писането на някои редове няколко пъти.

Така че в защита на сравнението: характеристиките имат някои от същите проблеми като множественото наследяване, като проблема, който трябва да адресирате с псевдоним в случай на множество неща с едно и също име. Въпреки че това не е точно проблемът с диаманта, той е много близо.

person Nanne    schedule 11.12.2013