Library und Framework, was ist der Unterschied?

Frage ich viele erfahrene Java-Kollegen (teilweise Projektleiter!) „was denn der Unterschied zwischen einer Library und Framework sei?“, erhalte ich meistens die falsche Antwort: „Es ist eine Sammlung von Bibliotheken die ein bestimmtes Thema umfassen.“.

Programm benutzt eine Bibliothek.

Benutzung einer Library

Wenn wir eine Bibliothek (API) benutzen, rufen wir für gewöhnlich selbst den Code auf. Unser Programm entscheidet wann und wo wir API-Code aufrufen. Der Kontrollfluss geht von der oberen zur unteren Schicht. Das ist erstmal nichts schlechtes, so lange wir uns der Abhängigkeit zu dieser API bewusst sind.

Programm benutzt ein Framework.

Benutzung eines Framework

Anders bei einem Framework: Wir geben einer API die Aufrufkontrolle.
Unser Programm hat bestimmte Funktionen und Klassen, registriert diese dann beim Framework und irgendwann werden sie von diesem aufgerufen.

Was die Frameworks machen, hat sich unter dem Begriff Inversion of Control-Prinzip (Umkehrung der Kontrolle) etabliert, kurz IoC. Vor dem Aufkommen des Architektur- und Pattern-Hypes nannte man diese Methodik schärzhaft das Hollywood-Prinzip:

„Don’t call us, we’ll call you!“.

Damit sollte endgültige klar werden, was ein Framework ausmacht.
Zum Thema IoC werde ich in nächster Zeit mehr und genaueres schreiben.