I have read in several places that having one programming language mechanism that conflates both is a bad thing. [...] So why is this a bad thing?
Perché in situazioni in cui uno vuole uno di loro e non l'altro, uno è lasciato senza un'opzione (una rifusione del "voleva una banana, ma quello che hai ottenuto era un gorilla che tiene il problema della banana e dell'intera giungla", importare una citazione famosa ). "sottoclasse" come presentato in molte lingue è un'operazione che "significa molto", che ha "troppe operazioni" all'interno, con un requisito "tutto o niente".
Esempio 1 : Supponiamo che un tipo A sia introdotto da una dichiarazione di una classe "grassa" A - una classe le cui istanze richiedono una grande quantità di memoria.
Ora supponiamo che in questo sistema sia richiesto un nuovo sottotipo di A (chiamalo B ), che "estende" A con operazioni extra utilizzate in una nuova area del sistema, ma i cui valori dovrebbero essere anche utilizzato in aree vecchie (dove sono previsti valori di tipo A ). Il requisito finale per B è che anche se i valori di questo tipo si conformano rigorosamente al "contratto" di A , questi valori non hanno bisogno di - o anche non devono - occupare molta memoria.
In una lingua in cui entrambe le operazioni sono confuse in un'operazione "sottoclasse", non c'è alcuna opzione: avere un sottotipo di A utilizzato dove A è previsto, uno deve sottoclasse A e sottoclasse A , uno porta alla sottoclasse un gruppo di cose che non sono solo irrilevanti per la sottoclasse, ma esplicitamente indesiderate. Volevi solo il tipo, ma hai anche la struttura.
Esempio n. 2 : c'è anche il contrario. Cioè, una classe A esiste in un sistema, e si vuole creare una nuova struttura B basata su A ma la cui semantica, per qualche motivo, partirà dal "contratto" di A in alcuni modo ragionevole A causa di tale violazione, per motivi di sicurezza (o anche di semantica) ci si aspetta che i valori di tipo B non debbano essere usati dove sono previsti valori di tipo A (e viceversa). Di nuovo, con solo un'operazione generica di "sottoclasse", questa opzione non è disponibile. Vuoi solo la struttura, ma otterrai anche il tipo.
Mentre questo è comunemente usato attorno a un valore incapsulato di tipo A in B (altrimenti noto come "composizione"), uno è costretto a scrivere tutto il codice di colla artificiale che altrimenti non sarebbe necessario.