Inversion of Control
Der Begriff Inversion of Control (IOC; deutsch: „Umkehrung der Steuerung“ oder „Steuerungsumkehr“) bezeichnet ein Umsetzungsparadigma, das in der Objekt orientierte Programmierung Anwendung findet.
Dieses Paradigma beschreibt die Arbeitsweise von Programmiergerüsten oder Frameworks: eine Funktion eines Anwendungsprogramms wird bei einer Standardbibliothek registriert und von dieser zu einem späteren Zeitpunkt aufgerufen. Das wird manchmal als eine Anwendung des „Hollywood-Prinzips“ bezeichnet: "don't call us, we'll call you" (zu deutsch: „Rufen Sie nicht uns an, wir rufen Sie an“): Statt dass die Anwendung den Kontrollfluss steuert und lediglich Standardfunktionen benutzt, wird die Steuerung der Ausführung bestimmter Unterprogramme an das Framework abgegeben.
Somit funktionieren fast alle modernen Programmiersprachen nach dem Prinzip Inversion of Control: Ein vordefiniertes Framework bildet das Hauptprogramm. Der Programmierer, der eine neue Anwendung auf Basis des Frameworks bzw. der Bibliothek erstellen möchte, hat keinen oder nur wenig Einfluss auf die Steuerung dieses Hauptprogramms. Er kann nur bestimmte Funktionen implementieren. Diese werden dann durch das Framework aufgerufen. Dies steht im Gegensatz zum klassischen Programmieransatz, bei dem der Programmierer das Hauptprogramm selber schreibt und einzelne Funktionen aufruft, die aus einer Bibliothek stammen. Im klassischen Ansatz ist die Kontrolle hauptsächlich in dem vom Programmierer erstellten Programm. Dieses wird kurzzeitig an andere vordefinierte Funktionen abgegeben. Bei Inversion of Control liegt die Kontrolle hauptsächlich im Framework, welches dann eine Funktion des Programmierers aufruft und somit kurzzeitig die Kontrolle an diese abgibt.
Inversion of Control ist besonders in der Programmiersprache Java verbreitet. Ein einfaches Beispiel einer solchen Umkehrung sind Listener (gemäß dem Beobachter-Muster), aber auch Applets und Servlets folgen diesem Entwurfsmuster. Plugins und Rückruffunktionen sind weitere Beispiele dafür, die Steuerung einzelner Programmteile einem Framework zu überlassen.
Häufig ist auch bei Bibliotheken, die mit Dependency Injection arbeiten (wie z. B. EJB-Container oder das Spring Framework), von Inversion of Control zu lesen. Hier geht es aber vorwiegend um die Erzeugung von Objektnetzen (siehe auch: Fabrikmethode, Komponentenmodell).