2013-10-20 8 views
7

Come è associato l'accoppiamento libero alle interfacce quando siamo obbligati a creare una classe di implementazione a prescindere? La classe di implementazione è costretta ad implementare tutti quei metodi definiti nell'interfaccia. Non capisco come questo permetta di perdere l'accoppiamento? Sono nuovo alla programmazione orientata agli oggetti e alla progettazione del software, quindi se potessi fare un po 'di luce su questo argomento sarebbe di grande aiuto. Un esempio sarebbe totalmente la ciliegina sulla torta.Come si ottiene un accoppiamento libero usando le interfacce in Java quando una classe di implementazione è obbligatoria e vincolata al contratto di interfaccia?

+1

mi raccomando guardando il [Javadocs] (http://download.oracle.com/javase/7/docs/api/) e poi il codice sorgente per le implementazioni 'list' , come ['ArrayList'] (http://grepcode.com/file/repository.grepcode.com/java/root/jdk/openjdk/6-b14/java/util/ArrayList.java) e [' LinkedList' ] (http://grepcode.com/file/repository.grepcode.com/java/root/jdk/openjdk/6-b14/java/util/LinkedList.java). La 'interface list' specifica cosa devono fare i metodi, e quindi le implementazioni portano le operazioni in due modi distinti. – chrylis

risposta

10

Il punto chiave è che un'interfaccia non ti consente solo di scrivere una classe che la implementa, ma ti permette di scrivere diversi.

Quando si ha un codice che interagisce con una classe utilizzando un'interfaccia, quel codice è in grado di funzionare insieme a qualsiasi classe che implementa detta interfaccia, indipendentemente da come la implementa. Ciò ti consente di alimentare diverse classi con lo stesso codice senza doverle modificare.

Si noti che le interfacce non sono l'unico modo per raggiungere un accoppiamento lento di componenti. L'accoppiamento lento significa solo che i componenti sono in grado di lavorare insieme senza assumere nulla circa i meccanismi interni l'uno dell'altro. Lo fai perché più i tuoi componenti si trattano a vicenda come scatole nere, più diventa facile fare cambiamenti su un componente senza influire sugli altri. Le interfacce possono essere uno strumento per lavorare verso questo obiettivo, ma non sono nemmeno richieste, né sono l'unico strumento che merita di essere menzionato a questo riguardo.

8

La classe di implementazione è in grado di scegliere COME implementare la funzionalità.

public interface PersonRepository { 
    Person getPerson(String name); 
} 

Potrebbe essere implementato leggendo un file CSV o interrogando un database. L'oggetto che ha bisogno della persona non si cura di come la persona viene trovata o caricata solo per quello che è.

Quindi si ritiene che sia strettamente accoppiato.

Se era strettamente accoppiato avrebbe bisogno di sapere come costruire una query SQL o leggere un file CSV.

Problemi correlati