Frameworki i biblioteki na egzaminie INF.04

INF.04 · teoria
autor: redakcja · 24.08.2026
Frameworki i biblioteki w kwalifikacji INF.04: najważniejsze zasady, przykłady i 42 powiązane pytania w banku.
Fra­me­work nie jest więk­szą bi­blio­te­ką. To gotowy szkie­let apli­ka­cji: na­rzu­ca układ ka­ta­lo­gów, cykl życia żą­da­nia i punkty, w któ­rych wolno do­pi­sać własny kod. Za tę wygodę płaci się czę­ścią kon­tro­li nad prze­pły­wem ste­ro­wa­nia, więc wybór między bi­blio­te­ką a fra­me­wor­kiem jest de­cy­zją pro­jek­to­wą. W za­da­niach INF.04 trzeba zwykle roz­po­znać, kto kogo wy­wo­łu­je, gdzie trafia logika biz­ne­so­wa i który plik od­po­wia­da za za­leż­no­ści pro­jek­tu.

Bi­blio­te­ka, fra­me­work i od­wró­ce­nie ste­ro­wa­nia

Bi­blio­te­kę wy­wo­łu­jesz ty: im­por­tu­jesz funk­cję sor­tu­ją­cą i sam de­cy­du­jesz, w której linii ją uru­cho­mić. Fra­me­work wy­wo­łu­je twój kod: re­je­stru­jesz kon­tro­ler pod ścież­ką albo ob­słu­gę zda­rze­nia, a moment uru­cho­mie­nia wy­bie­ra silnik fra­me­wor­ka. Ta za­mia­na kie­run­ku to od­wró­ce­nie ste­ro­wa­nia, znane też jako zasada Hol­ly­wo­od.
Dla­te­go React opi­su­je się jako bi­blio­te­kę do budowy in­ter­fej­su (ro­uting i klien­ta HTTP do­bie­rasz osobno), a An­gu­lar jest fra­me­wor­kiem: w kom­ple­cie daje router, wstrzy­ki­wa­nie za­leż­no­ści, klien­ta HTTP i układ ka­ta­lo­gów wy­mu­szo­ny przez własne na­rzę­dzie wier­sza po­le­ceń. Tę samą rolę pełnią WPF i JavaFX na de­sk­to­pie, Flut­ter i Jet­pack Com­po­se na urzą­dze­niach mo­bil­nych, a po stro­nie ser­we­ra Django, La­ra­vel i Spring Boot.

MVC i MVVM: kto trzyma stan, a kto rysuje

W MVC żą­da­nie trafia do kon­tro­le­ra: ten od­czy­tu­je lub zmie­nia dane w modelu, a potem wska­zu­je widok. Widok nie sięga do bazy, a model nie wie, czy wynik trafi do HTML, czy do JSON. Uwaga na na­zew­nic­two: Django nazywa swój wzo­rzec MTV, więc funk­cja peł­nią­ca rolę kon­tro­le­ra nazywa się tam wi­do­kiem, a sza­blon od­po­wia­da wi­do­ko­wi z MVC.
MVVM za­stę­pu­je kon­tro­ler war­stwą ViewModel i wią­za­niem danych: ViewModel wy­sta­wia wła­ści­wo­ści (czyLaduje, listaZadan) i zgła­sza ich zmiany, więc kon­tro­l­ka od­świe­ża się sama. ViewModel nie zna klasy okna ani kon­tro­lek, dzięki czemu te­stu­je się go bez uru­cha­mia­nia in­ter­fej­su. Wzo­rzec spo­tkasz w WPF, Ava­lo­nii i war­stwie ViewModel na An­dro­idzie.

ORM za­mie­nia wiersz tabeli w obiekt

Ma­po­wa­nie obiek­to­wo-re­la­cyj­ne łączy tabelę z klasą, ko­lum­nę z polem, a wiersz z in­stan­cją. Klucz obcy staje się re­fe­ren­cją: za­miast pisać JOIN, od­czy­tu­jesz zamowienie.klient.nazwisko, a ORM w tle wy­ko­nu­je za­py­ta­nie. War­to­ści tra­fia­ją do za­py­ta­nia jako pa­ra­me­try, co do­myśl­nie zamyka drogę wstrzyk­nię­ciu SQL; ochro­na znika, gdy sam skle­jasz surowy SQL z tekstu użyt­kow­ni­ka.
Ceną wygody jest pu­łap­ka N+1 z le­ni­we­go do­czy­ty­wa­nia po­wią­zań: po­bra­nie 50 za­mó­wień to jedno za­py­ta­nie, ale odczyt klien­ta w pętli do­kła­da 50 ko­lej­nych. Wy­mu­sze­nie po­bra­nia po­wią­za­nych danych z góry spro­wa­dza to do jed­ne­go lub dwóch za­py­tań:
ORM
Me­cha­nizm
Django
select_related, prefetch_related
SQLAlchemy
joinedload, selectinload
Elo­qu­ent (La­ra­vel)
with
JPA / JPQL
JOIN FETCH
Dla­te­go przy ORM za­glą­daj do logu wy­ko­na­nych za­py­tań.

Plik za­leż­no­ści, plik blo­ka­dy i wer­sjo­no­wa­nie se­man­tycz­ne

Eko­sys­tem
Plik za­leż­no­ści
Plik blo­ka­dy
npm
package.json
package-lock.json
Com­po­ser
composer.json
composer.lock
Python
requirements.txt / pyproject.toml
poetry.lock / uv.lock
Plik blo­ka­dy za­pi­su­je do­kład­ne wersje całego drzewa za­leż­no­ści z sumami kon­tro­l­ny­mi: npm ci in­sta­lu­je wy­łącz­nie to, co stoi w blo­ka­dzie, więc dwa kom­pu­te­ry do­sta­ją iden­tycz­ny zestaw. Blo­ka­da należy do re­po­zy­to­rium, ka­ta­log node_modules nie.
Wersja se­man­tycz­na ma postać GŁÓWNA.POBOCZNA.POPRAWKA: po­praw­ka błędu zmie­nia 2.4.1 w 2.4.2, zgodna wstecz funk­cja daje 2.5.0, a zmiana ła­mią­ca API 3.0.0. Zapis ^2.4.1 do­pusz­cza wszyst­ko po­ni­żej 3.0.0, a ~2.4.1 tylko po­ni­żej 2.5.0. Wy­ją­tek: dla ^0.2.3 npm pod­no­si wersję naj­wy­żej do 0.2.x, bo w gałęzi 0.x każda zmiana po­bocz­nej może łamać API.

Testy w pro­jek­cie opar­tym na fra­me­wor­ku

Test jed­nost­ko­wy spraw­dza jedną klasę bez bazy i sieci, a za­leż­ność pod­mie­niasz atrapą, na przy­kład re­po­zy­to­rium zwra­ca­ją­cym usta­lo­ną listę trzech re­kor­dów. Test in­te­gra­cyj­ny uru­cha­mia praw­dzi­wy stos: fra­me­work daje klien­ta te­sto­we­go (Client w Django, TestClient w FastAPI, metoda get w te­stach La­ra­ve­la), który wysyła żą­da­nie do trasy i po­zwa­la spraw­dzić kod od­po­wie­dzi oraz treść JSON.
Po­je­dyn­czy test składa się z przy­go­to­wa­nia, wy­ko­na­nia i spraw­dze­nia. Testów jed­nost­ko­wych pisze się naj­wię­cej, bo trwają mi­li­se­kun­dy; in­te­gra­cyj­nych mniej, bo wy­ma­ga­ją bazy, choćby SQLite w pa­mię­ci. Pa­mię­taj, że SQLite ina­czej niż PostgreSQL trak­tu­je typy i ogra­ni­cze­nia, więc część błędów wyj­dzie do­pie­ro na do­ce­lo­wym sil­ni­ku. Test bez aser­cji albo za­leż­ny od ko­lej­no­ści uru­cho­mie­nia daje złudne po­czu­cie bez­pie­czeń­stwa: po­zio­my i tech­ni­ki sys­te­ma­ty­zu­je ar­ty­kuł o te­sto­wa­niu.

Kiedy fra­me­work do­kła­da zbęd­nej zło­żo­no­ści

Fra­me­work zwraca się w pro­jek­cie utrzy­my­wa­nym latami: ro­uting, wa­li­da­cja, mi­gra­cje, sesje i uwie­rzy­tel­nia­nie są już na­pi­sa­ne, a nowa osoba w ze­spo­le za­sta­je znaną kon­wen­cję. Do­cho­dzi prze­wi­dy­wal­ny cykl wydań: Django pu­bli­ku­je wersję funk­cjo­nal­ną mniej więcej co osiem mie­się­cy, a co trze­cia jest ozna­czo­na jako LTS z trzema latami wspar­cia. Przy skryp­cie na 150 linii, który raz w ty­go­dniu prze­twa­rza plik CSV, ten sam zestaw to głów­nie koszt nauki i ak­tu­ali­za­cji.
Sy­gna­łem nad­mia­ru bywa strona wi­zy­tów­ka ła­du­ją­ca kil­ka­set ki­lo­baj­tów JavaScriptu tam, gdzie wy­star­czy sta­tycz­ny HTML, trzy war­stwy abs­trak­cji nad jednym za­py­ta­niem SQL albo plik kon­fi­gu­ra­cyj­ny dłuż­szy od logiki. De­cy­zję po­dej­muj, po­rów­nu­jąc czas wdro­że­nia i utrzy­ma­nia z czasem na­pi­sa­nia tej samej funk­cji ręcz­nie. Ar­chi­tek­tu­rę samej apli­ka­cji opi­su­je ar­ty­kuł o apli­ka­cjach, a za­da­nia z pro­jek­to­wa­nia znaj­dziesz w ar­ku­szach INF.04.
ZAWODNIK
egzamin zawodowy INF.02 · INF.03 · INF.04
Serwer Discord›
Egzaminy zawodowe IT/Matury/Studia
@yastor
© 2026 Zawodnik · by Yastor
Arkusze i zasady oceniania pochodzą z CKE. Serwis nie jest powiązany z Centralną Komisją Egzaminacyjną.