2/ většina jazyků lepší nástroj pro reusable kódu jak dědičnost nemá (Java), některé nemají dokonce ani rozhraní (C++) (Překvapivě takový odsuzovaný jazyk jako je PHP ano.)
Myslel som si, že nemáte skúsenosti iba s aktuálnym C++, ale vy ich pravdepodobne nemáte ani s tým základným.
O abstraktných triedach ste niekedy počuli?
To, že C++ nemá kľúčové slovo interface neznamená, že nepodporuje ten koncept, alebo že nerealizuje požiadavky, ktoré realizuje to, čo sa volá rozhranie.
Rozhranie je realizácia požiadavky a tou je definícia kontraktu.
Rozšírenie rozhrania je tiež realizáciou požiadavky a tou je prevzatie kontraktu z rozširovanej triedy a jeho doplnenie.
Obe tieto požiadavky sa dajú realizovať už od Simuly a to práve abstraktnými triedami. Bez implementácie a bez dátových zložiek.
Používa sa na to dedičnosť. Ale v jej všeobecnom význame.
Dedičnosť je vo svojej podstate prevzatie od predka. (V bežnom živote v určitej situácii.)
Zdalo sa byť rozumné použiť to slovo aj v oblasti vývoja softvéru, ktorá je analógií s bežným svetom plná. A to na opakované použitie.
A teraz je otázka: prevzatie/opakované použitie čoho?
Možnosti, čo sa v tejto súvislosti dá prevziať máte minimálne dve: iba kontrakt alebo kontrakt aj s implementáciou.
Je rozšírenie rozhrania niečím iným ako prevzatím kontraktu z rozširovaného rozhrania a jeho doplnením? Nie je.
Je dedenie abstratnej triedy niečím iným ako prevzatím kontraktu zo základnej triedy a jeho doplnením? Tiež nie je.
To, že okrem prevzatia kontraktu môžete prevziať aj implementáciu je v tomto kontexte absolútne nepodstatné. V základnej triede totiž implementácia nemusí vôbec existovať.
A v súvislosti s týmto sa už desiatky rokov hovorí o dedičnosti rozhrania a o dedičnosti implementácie.
Nakoniec, existujú o tom kvantá literatúry, napríklad už na prelome ticícročí o COM od Microsoftu.