Ohjauksen inversio ( IoC ) on tärkeä olio -ohjelmointiperiaate , jota käytetään vähentämään kytkentää (kytkentää) tietokoneohjelmissa [1] . Se on myös arkkitehtoninen integraatioratkaisu, joka yksinkertaistaa järjestelmän ominaisuuksien laajentamista, jossa ohjelman ohjausvirtaa ohjaa viitekehys [2] .
Normaalissa ohjelmassa ohjelmoija päättää, missä järjestyksessä proseduurikutsut tehdään. Mutta jos kehys on käytössä , ohjelmoija voi sijoittaa koodinsa tiettyihin suorituspisteisiin (käyttämällä takaisinkutsuja tai muita mekanismeja) ja suorittaa sitten kehyksen "päätoiminnon", joka hoitaa kaiken suorituksen ja kutsuu ohjelmoijan koodia tarvittaessa. Tämän seurauksena koodin suorittamisen hallinnan menetys - tätä kutsutaan ohjauksen käänteiseksi (kehys ohjaa ohjelmoijan koodia, ei ohjelmoija ohjaa kehystä).
Ohjauksen inversio ei tapahdu vain kehyksissä, vaan myös joissakin kirjastoissa (mutta yleensä kirjastot eivät luo ohjauksen käänteistä - ne tarjoavat joukon toimintoja, jotka ohjelmoijan on kutsuttava).
Eräs riippuvuuden hallintaan sovelletun ohjauksen inversion toteutus on riippuvuuden lisäys [ 2 ] [ 3] . Riippuvuusinjektiota käytetään monissa kehyksissä, joita kutsutaan IoC-säiliöiksi.
Alemman tason teknologioihin verrattuna IoC-säilö on linkki , joka ei kerää objektitiedostoja , vaan OOP - objekteja ( luokkainstanssit ) ohjelman suorituksen aikana . Ilmeisesti tällaisen idean toteuttamiseksi oli tarpeen luoda paitsi itse linkkeri, myös esineitä valmistava tehdas . Tällaisen linkerin analogi (tietysti toimivampi) on kääntäjä , jonka yksi tehtävistä on objektitiedostojen luominen. Ajatus ohjelman linkittämisestä suorituksen aikana ei ole uusi. Ohjelmoijan riippuvuuden lisäämistyökalujen tarjoaminen on antanut paljon enemmän joustavuutta kehitykseen ja mukavuutta testauskoodiin [4] .
Kaikilla ohjauksen inversioon perustuvilla lähestymistavoilla on seuraavat kaksi haittaa [5] :