Technopedia Center
PMB University Brochure
Faculty of Engineering and Computer Science
S1 Informatics S1 Information Systems S1 Information Technology S1 Computer Engineering S1 Electrical Engineering S1 Civil Engineering

faculty of Economics and Business
S1 Management S1 Accountancy

Faculty of Letters and Educational Sciences
S1 English literature S1 English language education S1 Mathematics education S1 Sports Education
teknopedia

teknopedia

teknopedia

teknopedia

teknopedia

teknopedia
teknopedia
teknopedia
teknopedia
teknopedia
teknopedia
  • Registerasi
  • Brosur UTI
  • Kip Scholarship Information
  • Performance
  1. Weltenzyklopädie
  2. Inversione del controllo - Teknopedia
Inversione del controllo - Teknopedia
Abbozzo
Questa voce sull'argomento programmazione è solo un abbozzo.
Contribuisci a migliorarla secondo le convenzioni di Teknopedia.
Niente fonti!
Questa voce o sezione sull'argomento programmazione non cita le fonti necessarie o quelle presenti sono insufficienti.
Commento: nessuna fonte

Puoi migliorare questa voce aggiungendo citazioni da fonti attendibili secondo le linee guida sull'uso delle fonti.

In programmazione, soprattutto quella ad oggetti, l'inversione del controllo (in inglese inversion of control, abbreviato in IoC) è un design pattern per cui un componente di livello applicativo riceve il controllo da un componente appartenente a una libreria riusabile. Può essere ulteriormente descritto come un design pattern nella quale un componente software è designato per ricevere le sue dipendenze da una fonte esterna, anziché crearsi le proprie.[1] Questo schema ribalta quello tradizionale della programmazione procedurale, dove il codice applicativo svolge i propri compiti richiamando (e quindi passando il controllo a) procedure di libreria[2][3][4].

Descrizione

[modifica | modifica wikitesto]

L'obiettivo dell'inversione del controllo è lo stesso dell'abstract factory: rendere le componenti software il più indipendenti possibile, affinché sia possibile modificarne una parte senza dover modificare le altre.

Le dipendenze tra i singoli componenti sono dichiarate in modo semplice. Per esempio una classe Automobile che necessita di un oggetto di tipo Motore, dichiarerà una variabile di istanza di tipo Motore e un 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 linguaggi imperativi, in cui, nel momento del bisogno, si richiamano funzioni di classi o librerie esterne[5]. 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à.

Dependency injection

[modifica | modifica wikitesto]
Lo stesso argomento in dettaglio: Dependency injection.

La dependency injection è una delle tecniche con le quali si può attuare l'inversione del controllo. Essa prende il controllo su tutti gli aspetti di creazione degli oggetti e delle loro dipendenze. Il framework Java Spring usa molto diffusamente questa tecnica 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 posizionamento del servizio o altri dettagli dello stesso.

Implementazioni ed esempi

[modifica | modifica wikitesto]

Java

[modifica | modifica wikitesto]
  • il framework Spring è una delle implementazioni più diffuse e popolari dell'Inversione del Controllo (IoC) nel mondo Java. Il framework ha giocato un ruolo cruciale nel promuovere il pattern IoC e ha una comunità ampia e attiva, rendendolo uno standard de facto per la gestione delle dipendenze e lo sviluppo di applicazioni modulari ed estensibili
  • il framework Quarkus offre tempi di avvio più rapidi e un utilizzo della memoria più efficiente rispetto a Spring, rendendolo ideale per applicazioni cloud-native e ambienti serverless, ottimizzando le performance per container e microservizi
  • la specifica Contexts & Dependecy Injection for Java che è parte di Java EE
  • il framework KumuluzEE offre un avvio rapido e un footprint leggero, rendendolo ideale per applicazioni cloud-native e microservizi, in particolare quando la semplicità e la conformità agli standard Jakarta EE sono preferibili rispetto alla maggiore complessità e personalizzazione offerte da Spring
  • il framework Guice
  • il Pico Container

.NET

[modifica | modifica wikitesto]
  • lo Unity Framework in .NET
  • il framework Castle Windsor
  • DryIoc IoC Container per .NET

Note

[modifica | modifica wikitesto]
  1. ^ Inversion of Control (IoC) Design principle ., su www.linkedin.com. URL consultato il 21 agosto 2024.
  2. ^ Inversion of Control Containers and the Dependency Injection pattern, su martinfowler.com.
  3. ^ Inversion of Control, su msdn.microsoft.com.
  4. ^ IoC e DI (Inversion of Control e Dependency Injection), su mrwebmaster.it.
  5. ^ (EN) Stefan Sobernig e Uwe Zdun, Inversion-of-Control Layer (PDF), in EuroPLoP '10: European Conference on Pattern Languages of Programs, New York, Association for Computing Machinery, 7 luglio 2010, ISBN 978-1-4503-0259-3. URL consultato il 28 giugno 2023.
V · D · M
Design pattern
CreazionaliAbstract factory · Builder · Factory · Prototype · Singleton
StrutturaliAdapter · Bridge · Composite · Container pattern · Decorator · Façade · Flyweight · Proxy
ComportamentaliChain-of-responsibility · Command · Interpreter · Iterator · Mediator · Memento · Observer · State · Strategy · Template method · Visitor
Pattern di concorrenzaActive object · Balking · Binding properties · Double-checked locking · Event-based asynchronous · Guarded suspension · Join · Lock · Monitor · Proactor · Reactor · Read write lock · Scheduler · Thread pool · Thread-local storage
Pattern architetturaliFront controller · Interceptor · MVC · n-tier · Specification · Publish–subscribe · Naked objects · Service locator · Active record · Identity map · Data Access Object · Data transfer object · ADR · Inversione del controllo
Altri
pattern
Blackboard · Business delegate · Composite entity · Dependency injection · Intercepting filter · Lazy loading · Mock object · Null object · Object pool · Servant · Twin · Type tunnel
LibriDesign Patterns · Enterprise Integration Patterns
PersoneChristopher Alexander · Erich Gamma · Ralph Johnson · John Vlissides · Grady Booch · Kent Beck · Ward Cunningham · Martin Fowler · Robert Martin · Jim Coplien · Douglas Schmidt · Linda Rising
ComunitàThe Hillside Group · The Portland Pattern Repository
  Portale Informatica: accedi alle voci di Teknopedia che trattano di informatica
Estratto da "https://it.wikipedia.org/w/index.php?title=Inversione_del_controllo&oldid=147973788"

  • Indonesia
  • English
  • Français
  • 日本語
  • Deutsch
  • Italiano
  • Español
  • Русский
  • فارسی
  • Polski
  • 中文
  • Nederlands
  • Português
  • العربية
Pusat Layanan

UNIVERSITAS TEKNOKRAT INDONESIA | ASEAN's Best Private University
Jl. ZA. Pagar Alam No.9 -11, Labuhan Ratu, Kec. Kedaton, Kota Bandar Lampung, Lampung 35132
Phone: (0721) 702022