Mi sono imbattuto nel termine "programmare un'interfaccia invece di un'implementazione" e credo di capire che cosa significa. Ma voglio essere sicuro di capire i benefici e le 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 qualche volta una superclasse di qualche tipo), invece di riferirsi a un'implementazione concreta.
Un esempio comune in Java, è quello di utilizzare:
List myList = new ArrayList();
anziché ArrayList myList = new ArrayList();
.
Ho due domande a riguardo:
-
Voglio assicurarmi di comprendere i principali vantaggi di questo approccio. Penso che i benefici siano soprattutto la flessibilità. Dichiarare un oggetto come un riferimento di più alto livello, piuttosto che un'implementazione concreta, consente maggiore flessibilità e mantenimento in tutto il ciclo di sviluppo e in tutto il codice. È corretto? La flessibilità è il vantaggio principale?
-
Esistono altri modi per "programmare su un'interfaccia"? Oppure "dichiarare una variabile come interfaccia piuttosto che come implementazione concreta" è l'unica implementazione di questo concetto?
Sono non parlando dell'interfaccia del costrutto Java . Sto parlando del principio OO "programmare un'interfaccia, non un'implementazione". In questo principio, l'interfaccia "mondo" si riferisce a qualsiasi "supertipo" di una classe - un'interfaccia, una classe astratta o una semplice superclasse che sia più astratta e meno concreta delle sottoclassi più concrete.