In der Softwareentwicklung gibt es neben den Programmiersprachen zwei weitere Säulen, die Teil fast jedes Softwareentwicklungsprozesses sind – Frameworks und Bibliotheken. Die beiden Begriffe beziehen sich auf unterschiedliche Dinge und werden dennoch sehr oft im gleichen Kontext miteinander verwechselt.
In diesem kleinen Beitrag erklären wir den Unterschied zwischen einem Framwork und einer Programmbibliothek (kurz Bibliothek).
Was ist eine Bibliothek?
Im Gegensatz zu Programmen ist eine Programmbibliothek (kurz: Bibliothek) keine eigenständig ausführbare Einheit, sondern eine Sammlung von Zusatzmodulen, die von einem Programm angefordert werden können.
Bibliotheken sind vereinfacht gesagt Sammlungen von Klassen und Funktionen (Codeschnipsel), weshalb diese vereinzelt auch Komponenten- oder Klassenbibliotheken genannt werden. Mithilfe einer Programmschnittstelle (API / Application Programming Interface), wird der Zugriff auf die nötigen Funktionen aus der Bibliothek ermöglicht. Der Zugriff ist dabei jedoch nur auf die „öffentlichen“ Funktionen begrenzt, Bibliotheken verfügen auch über „private“ Funktionen, die im Hintergrund arbeiten jedoch nach außen verborgen bleiben.
Die Codeabschnitte, die Bibliotheken zur Verfügung stellen, dienen dazu, den Entwicklungsprozess eines Softwareprojekts zu beschleunigen und bieten fertige Lösungen für häufig auftretende Probleme. Bibliotheken helfen Entwicklern, Code effizienter und schneller zu formatieren, als ihn komplett als Vanilla Code schreiben zu müssen.
Metapher für Programmbibliotheken
Eine Bibliothek kann mit der Inneneinrichtung eines Hauses verglichen werden. Dieselben vier Wände können durch die Wahl von Farben oder Tapeten, Bodenbelägen, Möbeln und Dekoration ganz individuell gestaltet werden. Ein Innenarchitekt mischt seine Farbe nicht selbst aus Chemikalien und Farbstoffen oder baut einen Tisch aus Holzblöcken zusammen. Alle Elemente, die die Inneneinrichtung eines Raumes ausmachen, wurden von jemand anderem vorproduziert und vom Designer fachmännisch arrangiert.
In ähnlicher Weise mischt ein Softwareentwickler, der eine Bibliothek verwendet, alle fertigen Codeblöcke, die von der Bibliothek bereitgestellt werden, und kann sie dann nach Belieben anpassen. So wie ein Innenarchitekt einem Möbelstück einen andersfarbigen Anstrich verpasst, damit es besser den gewünschten Effekt erzielt.
Was ist ein Framework?
Ein Framework ist eine besondere Art von Bibliothek, die keine „fertigen“ Funktionen wie eine normale Bibliothek enthält. Frameworks sind vielmehr Programmgerüste, die den Bauplan, aber nicht die fertige Einheit liefern.
Das Framework liefert also den Bauplan und das Grundgerüst und zeigt auch, was der Programmierer noch an Anpassungen vornehmen muss. Das Framework liefert den Ablauf einer Softwareanwendung und teilt dem Entwickler mit, was er benötigt, wobei der vom Entwickler bereitgestellte Code bei Bedarf aufgerufen wird. Wenn eine Bibliothek verwendet wird, ruft die Anwendung den Code aus der Bibliothek auf.
Metapher zum Framework
Sie können sich ein Softwareentwicklungs-Framework wie die Grundstruktur eines Hauses vorstellen, einschließlich der tragenden Säulen und Balken sowie der zentralen Elektro- und Sanitärinfrastruktur.
Das Framework bietet eine Kernarchitektur, die das Potenzial für grundlegende Fehler oder Ineffizienzen weitgehend neutralisiert – das Rad muss nicht neu erfunden werden. Aber es lässt auch viel Spielraum für individuelle Anpassungen.
In unserer Hausmetapher könnten die Bauherren oder der Käufer immer noch wählen, wo die Innenwände platziert werden sollen, welcher Raum wofür verwendet wird (solange dies mit dem Rahmenwerk vereinbar ist, z. B. kann es einige Einschränkungen geben, wo das Badezimmer platziert werden kann, um einen bequemen Anschluss an die Sanitäranlagen zu ermöglichen) und welche Einrichtungsgegenstände verwendet werden.
Die Vorteile eines Frameworks liegen auf der Hand: Nicht nur die erhöhte Effizienz, sondern auch die Bereitstellung einer organisatorischen Basis wird von vielen Entwicklern als großer Vorteil hervorgehoben. Der Code ist zudem gut strukturiert, was aber auch bedeutet, dass die Entwickler weniger Flexibilität haben. Die möglichen Erweiterungen der Programmierung bestimmen daher die Möglichkeiten des Frameworks.
Einige Frameworks bieten mehr Flexibilität als andere. Man hört zum Beispiel, dass das Angular-Framework „eigenwilliger“ ist als Vue.js, ein anderes JavaScript-Framework, das für die Frontend-Entwicklung beliebt ist. Je eigenwilliger ein Framework ist, desto weniger flexibel ist es. Das hat Vor- und Nachteile.
Mehr eigenwillige Frameworks können für große, komplexe Softwareanwendungen von Vorteil sein, da sie zur Wahrung der Konsistenz beitragen. Dies hat jedoch den Preis, dass die Anwendung mit größerer Freiheit angepasst werden kann.
Technisch gesehen sind Frameworks in ihrer Anpassungsfähigkeit eingeschränkt, und der Code muss den für das Framework spezifischen Regeln und Strukturen folgen. Dies schränkt die Freiheit und Flexibilität des Entwicklers ein, trifft aber nicht immer zu. Weniger eigenwillige Frameworks können Entwicklern ein höheres Maß an Freiheit bieten.
Framework vs Bibliothek
Frameworks und Bibliotheken haben dasselbe Ziel: Sie erweitern die Palette der Funktionen, die den Entwicklern zur Verfügung stehen, optimieren ihren Arbeitsaufwand und reduzieren den Rahmen für Fehler und ineffizienten Code. Frameworks und Bibliotheken sind von Dritten entwickelte Code-Blöcke, die bei der Lösung gängiger Probleme in einer bestimmten Programmiersprache helfen.
Es gibt jedoch technische Unterschiede zwischen diesen Systemen. Ein Hauptunterschied zwischen einem Framework und einer Bibliothek ist die Verwendung von Abfragen. Bei der Verwendung einer Bibliothek entscheidet der Programmierer, wann und wo er sie aufruft.
Bei der Verwendung eines Frameworks gibt das Framework dies vor. Es stellt das Grundgerüst zur Verfügung und sagt dem Programmierer, was benötigt wird. Dementsprechend wird der notwendige Code vom Entwickler eingefügt und ergänzt das Framework entsprechend der gewünschten Funktion. Letztendlich ist es aber das Framework, das den Code bei Bedarf aufruft und auch für den Ablauf des Programms verantwortlich ist.
Das folgende Diagramm veranschaulicht diesen zentralen technischen Unterschied zwischen der Funktionsweise eines Frameworks und einer Bibliothek:
Zusammenfassend
Eine Bibliothek ist eine Sammlung von Funktionen, die Entwickler nach Belieben aufrufen können und dabei weiterhin den Ablauf der Softwareanwendung kontrollieren. Die Operationen, die von Bibliotheken ausgeführt werden, sind genau und spezifisch definiert.
Ein Framework ist eine Struktur, in der die Anwendung den Inhalt der Operation definiert, indem sie den Entwickler auffordert, die Lücken auszufüllen. Der Rahmen definiert das Konzept, während die Funktionalität selbst vom Entwickler mit Blick auf den Endbenutzer festgelegt wird.
Frameworks und Bibliotheken sind Code, der von Dritten geschrieben wurde, um regelmäßige/allgemeine Probleme zu lösen oder die Leistung zu optimieren. Ein wesentlicher Unterschied zwischen den beiden ist die Umkehrung der Kontrolle. Bei der Verwendung einer Bibliothek bleibt die Kontrolle beim Entwickler, der der Anwendung sagt, wann sie die Bibliotheksfunktionen aufrufen soll. Bei der Verwendung eines Frameworks ist die Kontrolle umgekehrt, d. h. das Framework sagt dem Entwickler, wo Code bereitgestellt werden muss, und ruft ihn nach Bedarf auf.