KWALIFIKACJA INF2 + INF3 - CZERWIEC 2014

PYTANIE NR 24.
Jaką nazwę nosi język programowania zorientowany obiektowo, w którym stworzone programy kompilowane są do kodu pośredniego, niezależnego od procesora i uruchamiane na wirtualnej maszynie?
A.
B.
C.
D.
Wyjaśnienie poprawnej odpowiedzi:
Java jest językiem obiektowym, w którym kod źródłowy kompiluje się do bajtkodu. Bajtkod nie jest zależny od procesora ani systemu i jest wykonywany przez maszynę wirtualną Java (JVM). Dlatego opis z pytania odpowiada właśnie Javie. To typowy model "napisz raz, uruchom wszędzie".

Pełne wyjaśnienie:

Opis wskazuje na język, w którym program nie jest uruchamiany bezpośrednio jako kod maszynowy dla konkretnego procesora, lecz najpierw powstaje kod pośredni, a dopiero potem jest on wykonywany przez maszynę wirtualną. Tak działa Java: kompilator tworzy bajtkod, który uruchamia środowisko wykonawcze JVM.

Dlaczego poprawna jest odpowiedź "Java"?

  • W Javie standardowym artefaktem kompilacji jest bajtkod (instrukcje niezależne od konkretnej architektury CPU).
  • Wykonanie programu odbywa się w maszynie wirtualnej (JVM), co ułatwia przenośność między systemami.
  • To podejście jest często streszczane ideą "write once, run anywhere".

Dlaczego pozostałe odpowiedzi są niepoprawne w kontekście opisu?

  • "C++" jest zwykle kompilowany do kodu maszynowego zależnego od procesora i systemu/ABI; nie wymaga typowej maszyny wirtualnej do uruchomienia programu.
  • "Pascal" to nazwa rodziny języków i kompilatorów; w klasycznym ujęciu program jest kompilowany do kodu natywnego (choć istnieją różne implementacje, nie jest to charakterystyczna cecha definiująca język w sposób podany w pytaniu).
  • "Assembler" jest ściśle związany z konkretną architekturą procesora: kod asemblera i wynikowy kod maszynowy są zależne od CPU, więc nie spełniają warunku "niezależnego od procesora".

Wskazówka egzaminacyjna: w pytaniach o kod pośredni i maszynę wirtualną szukaj pojęć typu bajtkod i JVM oraz skojarzenia z wieloplatformowością. Gdy w odpowiedziach pojawia się asembler albo C/C++, zwykle chodzi o kod natywny, a nie o warstwę VM.

Dodatkowe pytania

Dodatkowe pytania (FAQ):
Kod pośredni to forma programu pomiędzy kodem źródłowym a kodem maszynowym. Jest zwykle bardziej przenośny niż kod natywny i może być wykonywany przez środowisko uruchomieniowe, np. maszynę wirtualną, która tłumaczy go na instrukcje procesora podczas działania.
Maszyna wirtualna Java (JVM) uruchamia skompilowany bajtkod. Zapewnia wspólne środowisko wykonawcze niezależne od systemu i procesora, zarządza m.in. ładowaniem klas, pamięcią (GC) i wykonywaniem instrukcji bajtkodu, często z użyciem JIT.
Ponieważ kod po kompilacji ma postać bajtkodu, a nie kodu maszynowego dla jednego CPU. Ten sam bajtkod może działać na różnych systemach, o ile dostępne jest odpowiednie środowisko uruchomieniowe (JVM) dla danej platformy.
Bajtkod to zestaw instrukcji zapisywany m.in. w plikach .class, powstający po kompilacji kodu źródłowego Javy. Nie jest to kod maszynowy konkretnego procesora; jest przeznaczony do wykonania przez JVM, która interpretuje go lub kompiluje JIT.
Typowy program w C++ jest kompilowany do kodu natywnego zależnego od platformy i uruchamiany bezpośrednio przez system operacyjny. Nie wymaga standardowo maszyny wirtualnej do wykonania, więc nie pasuje do opisu "kod pośredni + VM".
W językach z VM często pojawiają się pojęcia: "runtime", "bytecode", "wirtualna maszyna" i przenośność między platformami. W językach kompilowanych natywnie (np. C/C++) wynik to plik wykonywalny dopasowany do konkretnego systemu i architektury CPU.
Najmocniejsze wskazówki to: programowanie obiektowe, kompilacja do kodu pośredniego niezależnego od procesora oraz uruchamianie na maszynie wirtualnej. To klasyczny opis modelu działania Javy: kompilacja do bajtkodu i wykonanie na JVM.
W klasycznym ujęciu Pascal jest kompilowany do kodu natywnego, a nie do przenośnego bajtkodu wykonywanego przez maszynę wirtualną jako cechy definicyjnej języka. Ponieważ istnieją różne implementacje, na egzaminie trzeba kierować się typowym, podręcznikowym modelem.
Asembler jest językiem niskiego poziomu ściśle powiązanym z konkretną architekturą procesora. Instrukcje i składnia zależą od CPU, a wynikowy kod maszynowy działa na danej rodzinie procesorów, więc nie spełnia warunku niezależności od procesora.
Warto umieć: wyjaśnić różnicę między kompilacją do kodu natywnego i do kodu pośredniego, wskazać rolę środowiska uruchomieniowego oraz kojarzyć pojęcia "bajtkod", "JVM", "runtime". Pomaga też wiedza o procesie budowania aplikacji.
info

Statystycznie 64% uczniów zna prawidłową odpowiedź. średnie

Eksperci podkreślają: "Java jest językiem obiektowym, w którym kod źródłowy kompiluje się do bajtkodu."

Źródła:

  • Oracle, The Java Virtual Machine Specification (Java SE 8 Edition) – rozdziały opisujące JVM i format class/bytecode, https://docs.oracle.com/javase/specs/jvms/se8/html/ (dostęp: 2026-02-27)
  • Oracle, Java Platform, Standard Edition – dokumentacja narzędzia javac i procesu kompilacji do plików .class, https://docs.oracle.com/javase/8/docs/technotes/tools/windows/javac.html (dostęp: 2026-02-27)
  • Wikipedia (EN), Java bytecode – opis bajtkodu i uruchamiania na JVM, https://en.wikipedia.org/wiki/Java_bytecode (dostęp: 2026-02-27)

Materiały:

  • Dokumentacja platformy Java (opis JVM i bajtkodu)
  • Podstawowe podręczniki do programowania obiektowego w Javie
  • Materiały o procesie kompilacji i środowiskach uruchomieniowych (VM, runtime)

Aktualizacja pytania: 31.03.2026



Aktualizacja pytania: 31.03.2026
📡 Brak połączenia internetowego