Inversione del controllo: differenze tra le versioni

Contenuto cancellato Contenuto aggiunto
m Piccole modifiche
Nessun oggetto della modifica
Riga 1:
{{W|informatica|novembre 2010}}
{{S|programmazione}}
{{F|programmazione|novembre 2010|commento=nessuna fonte}}
In [[informatica]] '''Inversion of Control''' ('''IoC''' - ''inversione di controllo'') è una tecnica di [[programmazione (informatica)|programmazione]] della [[Paradigma object-oriented|programmazione orientata agli oggetti]] in cui l'accoppiamento tra gli [[oggetto (informatica)|oggetti]] è realizzato a run-time[[runtime]] attraverso un ''IoC container''.
 
==Descrizione==
Le dipendenze tra i singoli componenti sono dichiarate in modo semplice. Per esempio una classe <code>Automobile</code> che necessita di un'oggetto di tipo <code>Motore</code>, dichiarerà una [[variabile di istanza]] di tipo <code>Motore</code> e un metodo per impostare a run-time il riferimento all'oggetto.
 
Le dipendenze tra i singoli componenti sono dichiarate in modo semplice. Per esempio una classe <code>Automobile</code> che necessita di un'oggetto di tipo <code>Motore</code>, dichiarerà una [[variabile di istanza]] di tipo <code>Motore</code> e un [[metodo (programmazione)|metodo]] per impostare a run-time il riferimento all'oggetto.
Le dipendenze possono quindi essere "iniettate" dall'esterno: non si segue il normale flusso di controllo dei [[Programmazione imperativa|linguaggi imperativi]], in cui, nel momento del bisogno, si richiamano funzioni di classi o librerie esterne. Gli oggetti non istanziano e richiamano gli oggetti dal quale il loro lavoro dipende, ma queste funzionalità vengono fornite da un ambiente esterno tramite dei contratti definiti da entrambe le entità.
 
Le dipendenze possono quindi essere "iniettate" dall'esterno: non si segue il normale flusso di controllo dei [[Programmazione imperativa|linguaggi imperativi]], in cui, nel momento del bisogno, si richiamano [[funzione (informatica)|funzioni]] di [[classe (informatica)|classi]] o [[libreria (informatica)|librerie]] esterne. Gli oggetti non istanziano e richiamano gli oggetti dal quale il loro lavoro dipende, ma queste funzionalità vengono fornite da un ambiente esterno tramite dei contratti definiti da entrambe le entità.
La [[Dependency injection]] è una delle tecniche con le quali si può attuare l'IoC. Essa prende il controllo su tutti gli aspetti di creazione degli oggetti e delle loro dipendenze. La libreria Java Spring usa molto diffusamente la Dependency Injection con il risultato, tra le altre cose, di eliminare dal codice applicativo ogni logica di inizializzazione. Normalmente, senza l'utilizzo di questa tecnica, se un oggetto necessita di accedere ad un particolare servizio, l'oggetto stesso si prende la responsabilità di gestirlo, o avendo un diretto riferimento al servizio, o individuandolo con un "[[Service Locator]]" che gli restituisce un riferimento ad una specifica implementazione del servizio. Con l'utilizzo della dependency injection, l'oggetto ha in sé solamente una proprietà che può ospitare un riferimento a quel servizio, e quando l'oggetto viene istanziato, un riferimento ad una implementazione di questo servizio gli viene iniettata dal framework esterno, senza che il programmatore che crea l'oggetto sappia nulla sul suo posizionamento del servizio o altri dettagli sullo stesso.
 
===Dependency injection===
 
La [[Dependency injection]] è una delle tecniche con le quali si può attuare l'IoC. Essa prende il controllo su tutti gli aspetti di creazione degli oggetti e delle loro dipendenze. La libreria Java Spring usa molto diffusamente la Dependency Injection con il risultato, tra le altre cose, di eliminare dal [[codice sorgente|codice]] applicativo ogni logica di inizializzazione. Normalmente, senza l'utilizzo di questa tecnica, se un oggetto necessita di accedere ad un particolare servizio, l'oggetto stesso si prende la responsabilità di gestirlo, o avendo un diretto riferimento al servizio, o individuandolo con un "[[Service Locator]]" che gli restituisce un riferimento ad una specifica implementazione del servizio. Con l'utilizzo della dependency injection, l'oggetto ha in sé solamente una proprietà che può ospitare un riferimento a quel servizio, e quando l'oggetto viene istanziato, un riferimento ad una [[implementazione]] di questo servizio gli viene iniettata dal [[framework]] esterno, senza che il [[programmatore]] che crea l'oggetto sappia nulla sul suo posizionamento del servizio o altri dettagli sullo stesso.
 
== Implementazioni ed esempi ==