Czym różni się biblioteka od frameworka? To jedno z najczęstszych pytań zadawanych przez początkujących programistów, którzy dopiero odkrywają świat korzystania z gotowych programistycznych elementów. Porównajmy więc: framework vs biblioteka.
Najlepszy cytat wyjaśniający te różnicę brzmi:
Programista wywołuje bibliotekę, a framework wywołuje programistę.
Spróbuję to pokazać graficznie:
Używanie biblioteki polega na wywoływaniu jej funkcji w momencie, gdy tego potrzebujemy.
Framework jest pewnym schematem. Większość kodu jest już napisana przez twórców, a programista wypełnia swoim kodem uzupełnia schemat, dodając logikę biznesową, dodatkowe funkcjonalności. Programista może również zmieniać niektóre już istniejące funkcjonalności zapewniane przez framework.
Czym jest biblioteka programistyczna?
Biblioteką (w programowaniu) nazywamy zbiór funkcji (i klas), które służą programiście do ściśle określonego celu.
Biblioteka odpowiada za konkretne zagadnienie, bądź kilka zagadnień będących stosunkowo podobnymi.
Programista używa z biblioteki tylko funkcje, które są mu w danym projekcie potrzebne. Daje to większą kontrolę nad wykonywanym kodem niż w przypadku frameworka.
Gdy potrzebujemy jakiejś metody zaimplementowanej w ramach biblioteki, używamy jej, po czym pełna kontrola wykonania kodu wraca do nas.
Przykłady
Pokażę Ci to na przykładzie kilku popularnych bibliotek Pythona.
Requests
Biblioteka służąca do wykonywania żądań HTTP. Najczęstszym zastosowaniem jest użycie biblioteki do wykonania żądania GET do strony
import requests
r = requests.get('https://kamil.kwapisz.pl')
W tym przypadku programista używa jedynie metody get. Możemy to zapisywać również tak: (chociaż w przypadku tej biblioteki nie jest to zalecane)
from requests import get
r = get('https://kamil.kwapisz.pl')
Numpy
Biblioteka matematyczna. Częstym przykładem jest używanie konkretnej klasy z metody: array – klasy będącej kontenerem danych liczbowych
>>> import numpy as np
>>> matrix = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
>>> print(matrix)
[[1 2 3]
[4 5 6]
[7 8 9]]
Zdarza się również używać konkretnych funkcji biblioteki, lub nawet stałych w niej zdefiniowanych, jak np stała π
>>> import numpy as np
>>> alpha = np.pi / 6 # kąt w radianach
>>> np.sin(alpha)
0.49999999999999994
Frameworki
Framework tłumaczy się jako „szkielet”. I jest to dobra wskazówka do zrozumienia tego pojęcia.
Framework daje programiście „środowiska” do tworzenia jakiejś aplikacji. Weźmy za przykład framework do tworzenia aplikacji internetowych.
Aplikacja webowa, gdy przyjrzymy się jej dokładniej, okazuje się bardzo skomplikowana.
Aplikacja musi uruchomić serwer, obsłużyć przychodzące do niego żądania, obsługiwać wiele sesji, zajmować się plikami cookie, obsłużyć różne adresy URL.
Wszystkie te rzeczy framework robi za nas. Chcąc uzyskać to samo bez wykorzystania frameworka, a jedynie używając bibliotek, to każda z tych operacji powinna być zakodowana przez nas.
Używanie frameworków ułatwia proces tworzenia aplikacji, gdyż nie musimy martwić się o programowanie powtarzalnych rzeczy, które są wymagane do poprawnego działania aplikacji, a możemy skupić się na wdrażaniu logiki biznesowej.
W przypadku frameworka programista ma tylko chwilową kontrolę nad wykonywaniem kodu, po wykonaniu kodu stworzonego programistę kontrolę ponownie przejmuje framework.
Framework vs biblioteka – czego używać?
Oczywiście „to zależy” 🙂
Zarówno biblioteki jak i frameworki są tylko i wyłącznie narzędziami, które trzeba dobierać w zależności od potrzeb w danym projekcie.
Tworząc aplikację internetową zdecydowanie warto skorzystać z frameworka, jednak to nie znaczy, że nie korzysta się wtedy z bibliotek. Wręcz przeciwnie.
Tworząc aplikacje bardzo często korzysta się z frameworka oraz wielu bibliotek.
Sprawa wygląda nieco inaczej w przypadku web scrapingu w Pythonie. Możemy bowiem wyróżnić dwa podejścia:
- Tworzenie scrapera wykorzystując framework Scrapy
- Tworzenie scrapera korzystając z bibliotek Requests, BeautifulSoup
Korzystając ze Scrapy framework zajmie się za nas takimi rzeczami jak zapisywanie pobranych danych, wysyłanie wielu żądań HTTP jednocześnie.
Jednak nie do wszystkich projektów Scrapy będzie najlepszym wyborem. W przypadku mniejszych, bądź bardzo niestandardowych projektów scrapingowych, czasem wygodniej jest samemu obsługiwać wysyłanie żądań np. za pomocą biblioteki Requests.
Podsumowanie
Przytoczę ponownie cytat:
Programista wywołuje bibliotekę, a framework wywołuje programistę.
Biblioteka to zestaw funkcji i klas, które dotyczą konkretnego zagadnienia i problemu, a programista może wykorzystywać je w swoim kodzie.
Framework to cały szkielet aplikacji, w którym programista wypełnia kluczowe elementy dotyczące logiki biznesowej.
Wytłumaczenie Martina Fowlera możecie znaleźć tutaj 🙂
Zostając w temacie bibliotek…
Jeżeli jeszcze nie pobrałeś dokumentu z 20 przydatnymi bibliotekami w Pythonie to koniecznie go pobierz! 😉
Wystarczy, że wejdziesz na stronę główną, klikniesz na okładkę dokumentu i zapiszesz się na newsletter, a otrzymasz link do jego pobrania 🙂
Mam nadzieję, że trochę rozjaśniłem temat frameworków i bibliotek 🙂
Pozdrawiam serdecznie!
Kamil Kwapisz
Zwięźle i na temat, swietny artykuł! A tak na marginesie.. wlasnie przeczytałem praktycznie wszystkie wpisy. Myślę, że przy odrobienie zaparcia, za jakiś czas można będzie skleić całą zawartość bloga w ciekawą książkę 😉
Dzięki bardzo za te miłe słowa! 🙂
Bardzo ciekawy pomysł z tą książką… 😉
Książka taka na czasie why not 😉 ale e-book jeszcze lepsza opcja.
Darmowe ebooki już są, ale to też mega pomysł z takim dłuższym ebookiem 🙂
Hej Kamil,
Fajny artykuł. Jestem ciekaw z jakich frameworków korzystasz lub korzystałeś? Jakie biblioteki są ci najbardziej znane?
Ja poznałem dość dobrze jQuery, ale to jest standard. Co do frameworków to teraz zaczynam uczyć się Django albo Symfony. Jeszcze jestem niezdecydowany.
Pozdrawiam.
Hej Mateusz,
Dzięki!
Zdecydowanie najczęściej z biblioteki Requests, jeżeli chodzi o webówkę to Django, Flask i FastAPI 🙂 W przypadku scrapingu BeautifulSoup, Scrapy, Selenium 🙂
Django na pewno pozwoli bardziej rozwinąć się w Pythonie, według mnie wydaje się również że łatwiej będzie w tej technologii znaleźć pracę 🙂
Pozdrawiam,
Kamil