Inversione del controllo

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

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

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 la 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

Java

  • 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

  • lo Unity Framework in .NET
  • il framework Castle Windsor
  • DryIoc IoC Container per .NET

Note

  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
  3. ^ Inversion of Control
  4. ^ IoC e DI (Inversion of Control e Dependency Injection)
  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.
  Portale Informatica: accedi alle voci di Wikipedia che trattano di informatica

Read other articles:

M. Ardiwinangun M. Ardiwinangun atau M. Adri Winangun adalah seorang politikus Indonesia yang lahir di Mangunrejo-Tasikmalaya pada tanggal 14 April 1900. Ia lulus dari OSVIA Bandung pada tahun 1921. Ia merupakan anggota partai Majelis Syuro Muslimin Indonesia (MASYUMI) Dari 1921 sampai 1925, ia bekerja sebagai A.I.B. dan Menteri di berbagai daerah Karesidenan Priangan. Dari 1925 sampai 1938, ia menjabat sebagai Asisten Wedana Cikalong untuk kemudian dipindahkan ke Malangbong, Kabupaten Garut;...

 

Cet article concerne l'écrivain. Pour l'article sur le joueur de hockey, voir Patrick White (hockey sur glace). Pour les articles homonymes, voir White et Patrick White (homonymie). Patrick White Patrick White vers 1940. Données clés Alias Patrick Victor Martindale Naissance 28 mai 1912 Knightsbridge, Londres (Angleterre) Décès 30 septembre 1990 (à 78 ans) Sydney (Australie) Activité principale écrivain Distinctions prix Miles Franklin 1957 et 1961prix Nobel de littérature ...

 

1964 Italian filmThe Vampire of the OperaItalian film posterDirected byRenato Polselli[1]Screenplay by Ernesto Gastaldi Giuseppe Pellegrini Rentato Polselli[1] Story by Renato Polselli Ernesto Gastaldi[1] Starring Marco Mariani Giuseppe Addobbati[1] CinematographyUgo Brunelli[1]Edited byOtello Colangeli[1]Music byAldo Piga[1]ProductioncompanyNord Inudstrial Film[1]Distributed byNord IndustrialRelease date June 30, 1964&...

Sport where individuals or teams row boats by oar This article is about the sport. For oar powered propulsion in general, see Rowing. Rower redirects here. For other uses, see Rower (disambiguation). RowingAn eight (top) and single sculls (bottom)Highest governing bodyWorld Rowing FederationFirst modern-day competition1715 [a]CharacteristicsContactNoTeam members1, 2, 3, 4, 5 or 9 (depending on boat class and whether there is a coxswain)Mixed-sexSeparate competitionsTypeWater spor...

 

Layla, la dernière WWE Women's Champion, le plus vieux titre de l'histoire de la WWE (créé en 1956) et retiré en septembre 2010. Dans la lutte professionnelle, les championnats sont en compétition dans des histoires scénarisées par les lutteurs sous contrat d'une promotion[1]. La WWE basé à Stamford dans le Connecticut, est une société américaine de divertissement sportif principalement axé sur le catch, fondée en 1952 sous le nom de Capitol Wrestling Corporation (CWC). En 50 an...

 

العلاقات البولندية المنغولية بولندا منغوليا   بولندا   منغوليا تعديل مصدري - تعديل   العلاقات البولندية المنغولية هي العلاقات الثنائية التي تجمع بين بولندا ومنغوليا.[1][2][3][4][5] مقارنة بين البلدين هذه مقارنة عامة ومرجعية للدولتين: وجه المقا...

Koordinat: 22°23′15.29″N 114°11′5.33″E / 22.3875806°N 114.1848139°E / 22.3875806; 114.1848139Wihara Sepuluh Ribu Buddha萬佛寺 (Tionghoa)Pemandangan pagoda wiharaAgamaAfiliasiBuddhismeLokasiLokasiDesa Pai Tau 220, Sha Tin, Hong KongNegaraTiongkokArsitekturDibangun olehYuet KaiRampung1957 Artikel ini memuat Teks Tionghoa. Tanpa bantuan render yang baik, anda mungkin akan melihat tanda tanya, kotak-kotak, atau simbol lainnya bukannya Karakter Tionghoa. ...

 

Cet article est une ébauche concernant le domaine militaire, l’astronautique et la science-fiction. Vous pouvez partager vos connaissances en l’améliorant (comment ?) selon les recommandations des projets correspondants. Une vision pour l’avenir du US Space Command en 2020 : un laser spatial à haute énergie détruisent une cible terrestre La guerre dans l'espace est une forme de conflit armé hypothétique où au moins l'un des belligérants agit dans l'Espace. Concept La...

 

Синелобый амазон Научная классификация Домен:ЭукариотыЦарство:ЖивотныеПодцарство:ЭуметазоиБез ранга:Двусторонне-симметричныеБез ранга:ВторичноротыеТип:ХордовыеПодтип:ПозвоночныеИнфратип:ЧелюстноротыеНадкласс:ЧетвероногиеКлада:АмниотыКлада:ЗавропсидыКласс:Пт�...

BBC News OnlineBBC News Online pada Desember 2017URL BBC News Bbcnewsv2vjtpsuy.onion (Bantuan mengakses tautan) TipeBeritaPerdagangan ?Tidak (iklan disertakan ketika diakses di luar BR)RegistrationDiperlukan untuk beberapa layananSubjek utamaberita SloganWhenever you need to know Langue32 bahasa[1]PemilikBBCDikelola olehBBC News Service entry4 November 1997; 26 tahun lalu (1997-11-04)NegaraInggris Raya Peringkat AlexaWorldwideKeadaanMenyala BBC News Online adalah sebuah situ...

 

ロバート・デ・ニーロRobert De Niro 2011年のデ・ニーロ生年月日 (1943-08-17) 1943年8月17日(80歳)出生地 アメリカ合衆国・ニューヨーク州ニューヨーク市身長 177 cm職業 俳優、映画監督、映画プロデューサージャンル 映画、テレビドラマ活動期間 1963年 -配偶者 ダイアン・アボット(1976年 - 1988年)グレイス・ハイタワー(1997年 - )主な作品 『ミーン・ストリート』(1973年)...

 

2006 World JuniorChampionships in AthleticsTrack events100 mmenwomen200 mmenwomen400 mmenwomen800 mmenwomen1500 mmenwomen3000 mwomen5000 mmenwomen10,000 mmen100 m hurdleswomen110 m hurdlesmen400 m hurdlesmenwomen3000 msteeplechasemenwomen4 × 100 m relaymenwomen4 × 400 m relaymenwomen10,000 m walkmenwomenField eventsHigh jumpmenwomenPole vaultmenwomenLong jumpmenwomenTriple jumpmenwomenShot putmenwomenDiscus throwmenwomenHammer throwmenwomenJavelin throwmenwomenCombined eventsHeptathlonwome...

LaxmiiSutradaraRaghava LawrenceProduserFox Star StudiosCape of Good FilmsShabinaa EntertainmentTushar Entertainment HouseDitulis olehRaghava LawrenceFarhad SamjiSparsh KhetarpalTasha BhambraBerdasarkanKanchana (2011)PemeranAkshay KumarKiara AdvaniPenata musikSkor:Amar MohileLagu:Tanishk Bagchi Shashi–DJ KhushiAnup KumarUllumanatiSinematograferVetri PalanisamyKush ChhabriaPenyuntingRajesh G. PandeyPerusahaanproduksiFox Star StudiosCape of Good FilmsShabinaa EntertainmentTushar Entertai...

 

† Палеопропитеки Научная классификация Домен:ЭукариотыЦарство:ЖивотныеПодцарство:ЭуметазоиБез ранга:Двусторонне-симметричныеБез ранга:ВторичноротыеТип:ХордовыеПодтип:ПозвоночныеИнфратип:ЧелюстноротыеНадкласс:ЧетвероногиеКлада:АмниотыКлада:СинапсидыКласс:�...

 

Questa voce o sezione sull'argomento siti archeologici della Francia non cita le fonti necessarie o quelle presenti sono insufficienti. Puoi migliorare questa voce aggiungendo citazioni da fonti attendibili secondo le linee guida sull'uso delle fonti. Roc-aux-SorciersLocalizzazioneStato Francia LocalitàAngles-sur-l'Anglin Mappa di localizzazione Modifica dati su Wikidata · ManualeCoordinate: 46°42′17.4″N 0°52′38.76″E / 46.704834°N 0.877432°E46.704...

серебряный пеннинг Улафа Трюггвасона 995 года серебряный пеннинг Улафа Харальдссона, датируемый 1023—1028 годами Пе́ннинг (норв. penning) — мелкая серебряная монета, имевшая хождение у скандинавских народов. Имела также широкое распространение у других германских народов: н...

 

Pozières Entrée du village, hommage aux Australiens. Administration Pays France Région Hauts-de-France Département Somme Arrondissement Péronne Intercommunalité CC du Pays du Coquelicot Maire Mandat Dominique Bierwald 2020-2026 Code postal 80300 Code commune 80640 Démographie Gentilé Pozièrois Populationmunicipale 263 hab. (2021 ) Densité 81 hab./km2 Géographie Coordonnées 50° 02′ 29″ nord, 2° 43′ 25″ est Altitude Min. 115 mM...

 

2016年美國總統選舉 ← 2012 2016年11月8日 2020 → 538個選舉人團席位獲勝需270票民意調查投票率55.7%[1][2] ▲ 0.8 %   获提名人 唐納·川普 希拉莉·克林頓 政党 共和黨 民主党 家鄉州 紐約州 紐約州 竞选搭档 迈克·彭斯 蒂姆·凱恩 选举人票 304[3][4][註 1] 227[5] 胜出州/省 30 + 緬-2 20 + DC 民選得票 62,984,828[6] 65,853,514[6]...

 烏克蘭總理Прем'єр-міністр України烏克蘭國徽現任杰尼斯·什米加尔自2020年3月4日任命者烏克蘭總統任期總統任命首任維托爾德·福金设立1991年11月后继职位無网站www.kmu.gov.ua/control/en/(英文) 乌克兰 乌克兰政府与政治系列条目 宪法 政府 总统 弗拉基米尔·泽连斯基 總統辦公室 国家安全与国防事务委员会 总统代表(英语:Representatives of the President of Ukraine) 总...

 

ヨハネス12世 第130代 ローマ教皇 教皇就任 955年12月16日教皇離任 964年5月14日先代 アガペトゥス2世次代 レオ8世個人情報出生 937年スポレート公国(中部イタリア)スポレート死去 964年5月14日 教皇領、ローマ原国籍 スポレート公国親 父アルベリーコ2世(スポレート公)、母アルダその他のヨハネステンプレートを表示 ヨハネス12世(Ioannes XII、937年 - 964年5月14日)は、ロ...