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.

3 Kommentare

  • Pingback: Virtuelle Konstruktoren – Amin Kharchi

  • B. Altmann

    Super, kurz und knapp und sehr verständlich erklärt!

    Leider ist der erste Absatz missverständlich. Da wird nach dem Unterschied gefragt, die Antwort ist dann aber die Definition des Frameworks. Sowohl in der falschen als auch der richtigen Version passt also die Antwort nicht zur Frage. Ansonsten aber top erklärt!

    • amin amin

      Vielen Dank für den Kommentar. Es stimmt, die Frage und Antwort im ersten Absatz passen nicht zusammen. Werde ich mal korrigieren bzw. kürzen, der Unterschied ist ja im Text selbst vorhanden.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.

Blue Captcha Image Refresh

*