Secondo questo articolo , in programmazione orientata agli oggetti / design iniezione di dipendenza implica
- un consumatore dipendente,
- una dichiarazione delle dipendenze di un componente, definite come contratti di interfaccia,
- un injector che crea istanze di classi che implementano una determinata interfaccia di dipendenza su richiesta.
Consideriamo ora una funzione di ordine superiore in un linguaggio di programmazione funzionale, ad es. la funzione Haskell
filter :: (a -> Bool) -> [a] -> [a]
da Data.List
. Questa funzione trasforma un elenco in un altro elenco e, per eseguire il suo lavoro, utilizza (consuma) una funzione di predicato esterna che deve essere fornita dal relativo chiamante, ad es. l'espressione
filter (\x -> (mod x 2) == 0) [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
seleziona tutti i numeri pari dalla lista di input.
Ma questa costruzione non è molto simile al modello illustrato sopra, dove
- la funzione
filter
è il consumatore dipendente , - la firma
(a -> Bool)
dell'argomento della funzione è il contratto di interfaccia , - l'espressione che utilizza l'ordine superiore è il injector che, in questo caso particolare, inietta l'implementazione
(\x -> (mod x 2) == 0)
del contratto.
Più in generale, è possibile correlare le funzioni di ordine superiore e il loro modello di utilizzo nella programmazione funzionale al modello di iniezione delle dipendenze nei linguaggi orientati agli oggetti?
O nella direzione opposta, l'iniezione di dipendenza può essere paragonata all'utilizzo di qualche tipo di funzione di ordine superiore?