KWALIFIKACJA INF3 - CZERWIEC 2021 (test 2)

PYTANIE NR 9.
Z którym ze słów kluczowych programowania obiektowego w języku JavaScript wiąże się dostęp do pól i metod tylko z poziomu klasy, w której są zdefiniowane?
A.
B.
C.
D.
Wyjaśnienie poprawnej odpowiedzi:
Prywatność w OOP oznacza, że pole lub metoda są dostępne tylko wewnątrz klasy, w której je zdefiniowano. Tę ideę opisuje modyfikator private. W JavaScript efekt ten uzyskuje się przez prywatne pola/metody z prefiksem #, a dostęp spoza klasy jest niedozwolony.

Pełne wyjaśnienie:

W programowaniu obiektowym (OOP) kluczową rolę odgrywa enkapsulacja, czyli ukrywanie szczegółów implementacji obiektu i kontrolowanie dostępu do jego stanu. Jeśli pole lub metoda ma być dostępna wyłącznie z poziomu klasy, w której jest zdefiniowana, mówimy o dostępie typu private.

W JavaScript prywatność jest realizowana wprost przez język za pomocą prywatnych pól i metod klas oznaczanych prefiksem #, np. this.#pole. Taki element jest "hard private" – nie da się go odczytać ani wywołać z kodu znajdującego się poza ciałem klasy; próba użycia go spoza klasy skutkuje błędem składniowym.

Dlaczego pozostałe odpowiedzi są niepoprawne?

  • static – określa składowe należące do klasy (a nie do instancji). Nie ogranicza to widoczności: składowa statyczna może być używana z zewnątrz, jeśli jest dostępna.
  • public – w JavaScript nie jest wymagane słowo kluczowe do oznaczania publiczności; składowe bez prefiksu # są domyślnie publiczne. Sama etykieta "public" nie jest tu typowym mechanizmem kontrolowania dostępu.
  • const – służy do deklarowania wiązań, których nie można ponownie przypisać. To nie jest modyfikator dostępu do pól/metod klasy i nie mówi nic o widoczności z innych miejsc kodu.

Wskazówka egzaminacyjna: nie myl prywatności (kto może uzyskać dostęp) z niemodyfikowalnością (czy wartość można zmienić) oraz ze statycznością (czy składowa należy do klasy czy do instancji).

Dodatkowe pytania

Dodatkowe pytania (FAQ):
Prywatne pola i metody to składowe klasy dostępne wyłącznie wewnątrz tej klasy. W JS zapisuje się je z prefiksem #, np. #sekret lub #metoda(). Kod spoza klasy nie może ich odczytać ani wywołać.
Prefiks # tworzy prywatny identyfikator. Dostęp odbywa się tylko w ciele klasy, np. this.#privateField. Próba użycia obiekt.#privateField poza klasą kończy się błędem, bo język wymusza enkapsulację.
JavaScript historycznie nie miał modyfikatorów dostępu jak Java/C#. Zamiast tego wprowadzono mechanizm prywatności dla klas poprzez prefiks #. Dlatego "private" bywa nazwą koncepcji, ale w praktycznym kodzie JS stosuje się składnię z hashem.
static oznacza składową należącą do klasy, a nie do instancji (wywołujesz ją na nazwie klasy). To nie jest ograniczenie widoczności. Prywatność dotyczy tego, kto ma dostęp, a statyczność tego, do czego składowa jest przypisana.
W typowym JavaScript składowe bez prefiksu # są domyślnie publiczne, więc nie trzeba używać osobnego słowa kluczowego. Najważniejsze jest rozróżnienie: bez # = publiczne, z # = prywatne.
Nie. const dotyczy deklaracji zmiennych/wiązań, których nie można ponownie przypisać. Nie kontroluje widoczności pól i metod klasy. Częsty błąd to mylenie "niezmienności" z "prywatnością".
Najczęściej: (1) mylą konwencję _pole z prawdziwą prywatnością, (2) próbują odczytać obj.#pole poza klasą, (3) myślą, że static oznacza "ukryte". Warto ćwiczyć krótkie przykłady klas.
Pola z prefiksem # są projektowane jako "twardo prywatne". Parser języka rozpoznaje je jako prywatne identyfikatory i nie pozwala na użycie ich poza ciałem klasy. To chroni enkapsulację i ogranicza przypadkowe użycie API wewnętrznego.
Zwróć uwagę na sformułowanie: "dostęp tylko z poziomu klasy" dotyczy widoczności (prywatność). Jeśli jest o "należy do klasy, nie do instancji" – to static. Jeśli o "nie można przypisać ponownie" – to const.
Przećwicz: definicję klasy, konstruktor, metody instancji, metody static, pola publiczne i prywatne #. Rób mini-zadania: ukryj stan w #polu, dodaj metodę publiczną do odczytu, a potem sprawdź, co stanie się przy dostępie z zewnątrz.
info

Około 47% zdających odpowiada poprawnie na to pytanie. trudne

Według specjalistów z branży: "Prywatność w OOP oznacza, że pole lub metoda są dostępne tylko wewnątrz klasy, w której je zdefiniowano."

Źródła:

  • MDN Web Docs: "Private class fields" (JavaScript), https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Classes/Private_properties (dostęp: 2026-02-18)
  • MDN Web Docs: "class" (JavaScript reference), https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/class (dostęp: 2026-02-18)
  • ECMA-262 (ECMAScript Language Specification) – sekcje dotyczące definicji klas i składni pól/metod klas, https://tc39.es/ecma262/ (dostęp: 2026-02-18)

Materiały:

  • MDN Web Docs: dokumentacja klas w JavaScript oraz pól prywatnych (Private class fields)
  • Specyfikacja ECMAScript (ECMA-262): rozdziały dotyczące składni klas
  • Materiały TC39 dotyczące wprowadzenia pól klas (class fields) i prywatnych elementów

Aktualizacja pytania: 31.03.2026



Aktualizacja pytania: 31.03.2026
📡 Brak połączenia internetowego