Java - Qual è lo "scisma" tra le interfacce e le classi di cui James Gosling ha parlato? [chiuso]

3

Recentemente, mi sono imbattuto in una vecchia intervista con Dennis Ritchie, Bjarne Stroustrup e James Gosling , pubblicata nel 2000. Ognuno di loro parlava del linguaggio con il quale erano più coinvolti, vale a dire C (Ritchie), C ++ (Stroustrup) e Java (Gosling).

È un articolo molto interessante in sé, ma ciò che ha attirato la mia attenzione in particolare è stata la seguente citazione di Gosling (enfasi mia):

Q: If you could go back in time, knowing what you know now, what might you do differently in designing Java? Why?

A: There are a bunch of things that I'd do differently. There are a number of things that I'm not entirely happy with and it's not clear what the right answer is. I'm not really happy with the schism between interfaces and classes; in many ways it feels like the right solution wouldn't get in the way. [...]

Non ha elaborato questo "scisma", ma è abbastanza ovvio (almeno per me) che la sua risposta si riferisca in qualche modo al design del linguaggio Java.

Quindi cosa intendeva Gosling con la citazione di cui sopra, e la situazione è cambiata negli ultimi 18 anni da quando è stato pubblicato l'intervista?

    
posta Miroslav Cetojevic 09.10.2018 - 11:49
fonte

1 risposta

5

Basandoci su altre volte che ne ha parlato, penso che ciò a cui si riferisce sia che le interfacce sono necessarie per risolvere un problema con classi che in teoria non dovrebbero iniziare con le classi. Le classi dovrebbero fornire la possibilità di creare un'interfaccia più astratta definita dalla classe base ed estenderla in un'interfaccia più specifica attraverso l'ereditarietà. Le interfacce sono davvero necessarie solo quando l'intero processo non funziona, come nelle situazioni di ereditarietà multiple perché Java non supporta intenzionalmente l'ereditarietà multipla per le classi.

Penso che Gosling intendesse dire che non ha mai capito come ottenere le classi "giuste" in modo tale che Java potesse cavarsela senza avere interfacce in primo luogo, perché tutte le funzionalità delle interfacce sarebbero incorporate classi stesse. L'ereditarietà di classe in generale è qualcosa che ha menzionato è un difetto in Java, e penso che molti sviluppatori di software in generale concordino sul fatto che l'ereditarietà delle classi può essere problematica in molte situazioni. Uno dei modi in cui ha menzionato la possibilità di risolvere questo problema sarebbe quello di concentrarsi maggiormente sulla delega sull'ereditarietà dell'implementazione, ma come in questa intervista il più delle volte l'ha descritto come un problema per il quale non ha mai trovato una buona soluzione.

    
risposta data 09.10.2018 - 20:58
fonte

Leggi altre domande sui tag