Mi sono imbattuto molto nel termine "programmazione su un'interfaccia anziché in un'implementazione" e penso di capire cosa significhi. Ma voglio essere sicuro di capire i suoi benefici e le sue possibili implementazioni.
"Programmare su un'interfaccia" significa che, quando possibile, si dovrebbe fare riferimento a un livello più astratto di una classe (un'interfaccia, una classe astratta o talvolta una superclasse di qualche tipo), anziché fare riferimento a un'implementazione concreta.
Un esempio comune in Java è l'uso di:
List myList = new ArrayList();
invece di ArrayList myList = new ArrayList();
.
Ho due domande al riguardo:
Voglio essere sicuro di comprendere i principali vantaggi di questo approccio. Penso che i benefici siano soprattutto la flessibilità. Dichiarare un oggetto come riferimento di più alto livello, piuttosto che come implementazione concreta, consente una maggiore flessibilità e manutenibilità durante tutto il ciclo di sviluppo e in tutto il codice. È corretto? La flessibilità è il vantaggio principale?
Esistono altri modi di "programmare un'interfaccia"? Oppure "dichiarare una variabile come interfaccia piuttosto che come implementazione concreta" è l'unica implementazione di questo concetto?
Non sto parlando dell'interfaccia costrutto Java . Sto parlando del principio OO "programmazione di un'interfaccia, non di un'implementazione". In questo principio, "interfaccia" mondiale si riferisce a qualsiasi "supertipo" di una classe : un'interfaccia, una classe astratta o una semplice superclasse che è più astratta e meno concreta delle sue sottoclassi più concrete.