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?
risposta
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.
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.
il codice client è accoppiato all'interfaccia. non è accoppiato all'implementazione. è possibile modificare l'implementazione senza compilare il codice client o l'interfaccia.
vedere http://en.wikipedia.org/wiki/Dependency_inversion_principle e http://en.wikipedia.org/wiki/Open/closed_principle
- 1. Java - Interfacce di implementazione
- 2. Implementazione di un interfaccia Java in Scala
- 3. Java ha inventato le interfacce?
- 4. Una classe deve aderire al contratto documentato di un'interfaccia per implementare tale interfaccia
- 5. Implementazione di Super e interfacce secondarie in una classe (classe A implementa SuperInterface, SubInterface)
- 6. Implementazione di interfacce Java non sicure
- 7. Come denominare il repository e le interfacce di servizio?
- 8. Interfaccia di implementazione con tipo generico meno vincolata di quella di un metodo Devo chiamare
- 9. Interfaccia: implementazione della classe anonima in C#?
- 10. Come si ottiene l'indirizzo ethernet usando Java?
- 11. implementazione di interfacce dopo il fatto
- 12. Implementazione di interfacce incompatibili
- 13. Cosa significa "contratto" di una classe significa
- 14. Quando sono necessarie le interfacce?
- 15. C#: come si ottiene una classe base di classe?
- 16. Quando utilizzare le interfacce o classi astratte? Quando usare entrambi?
- 17. Come implementare parzialmente un contratto in una classe base astratta?
- 18. interfaccia Java: Chiamare una classe di implementazione basata su tipi di oggetti
- 19. Implementazione delle dipendenze e implementazione di un'interfaccia esplicita
- 20. Costruttori in classi interne (implementazione di interfacce)
- 21. Java Reflection: creare una classe di implementazione
- 22. Architettura di onion: interfacce e implementazione di servizi business
- 23. Che cos'è una classe di contratto e come viene utilizzata
- 24. Come definire le relazioni quando si utilizzano le interfacce
- 25. Dattiloscritto: nuovo() Contratto di interfaccia non applicato
- 26. Iniettare Sia interfaccia e implementazione in AutoFixture
- 27. Implementazione del metodo di interfaccia comune in java
- 28. Come si ottiene un const_iterator usando auto?
- 29. relativo a interfacce in Java
- 30. Interfaccia come tipo in Java?
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