KWALIFIKACJA INF2 + INF3 - STYCZEŃ 2008

PYTANIE NR 28.
Z którym ze słów kluczowych w języku C++ wiąże się pojęcie hermetyzacja danych?
A.
B.
C.
D.
Wyjaśnienie poprawnej odpowiedzi:
Hermetyzacja w C++ polega na kontrolowaniu dostępu do składowych klasy przez specyfikatory dostępu. "protected" ukrywa elementy przed kodem zewnętrznym, ale pozwala na dostęp w klasach pochodnych. "volatile", "const/constant" i "static" nie służą do określania widoczności pól/metod.

Pełne wyjaśnienie:

Hermetyzacja (enkapsulacja) w programowaniu obiektowym oznacza ukrywanie szczegółów implementacji obiektu i kontrolowanie, kto może odczytywać lub modyfikować jego stan. W C++ realizuje się to przede wszystkim przez specyfikatory dostępu w definicji klasy: private, protected i public.

Odpowiedź "protected" jest poprawna, ponieważ jest to specyfikator dostępu, który ustanawia poziom pośredni: składowe oznaczone jako protected są dostępne wewnątrz klasy oraz w klasach pochodnych (dziedziczących), ale nie są dostępne z kodu "z zewnątrz" obiektu. To pasuje do idei hermetyzacji: dane są osłonięte przed przypadkowym użyciem przez klientów klasy, a jednocześnie mogą być bezpiecznie wykorzystywane przy rozszerzaniu klasy przez dziedziczenie.

Pozostałe odpowiedzi nie dotyczą hermetyzacji:

  • "volatile" dotyczy informowania kompilatora o możliwych zmianach wartości poza kontrolą programu (np. sprzęt, wątki) i wpływa na optymalizacje, a nie na widoczność składowych.
  • "constant" nie jest standardowym słowem kluczowym C++ (zwykle chodzi o "const"), a "const" opisuje niezmienność obiektu/zmiennej, nie poziom dostępu.
  • "static" określa m.in. przynależność składowej do klasy (wspólnej dla wszystkich obiektów) lub czas życia/łączenie, ale nie jest mechanizmem kontroli dostępu do pól/metod.

W praktyce, jeśli pole ma być używane przez klasy pochodne, a nie ma być częścią publicznego API, wybiera się "protected". Jeśli ma być ukryte nawet przed dziedziczeniem, stosuje się "private", a jeśli ma być dostępne dla wszystkich użytkowników klasy — "public".

Dodatkowe pytania

Dodatkowe pytania (FAQ):
Hermetyzacja (enkapsulacja) to zasada OOP polegająca na ukrywaniu stanu obiektu i kontrolowaniu dostępu do jego składowych. Zamiast pozwalać na bezpośrednią zmianę pól, udostępnia się kontrolowane metody, a widoczność ustala się specyfikatorami dostępu.
Hermetyzację wspierają specyfikatory dostępu: private, protected i public. Określają one, skąd można użyć pól i metod klasy. Dzięki nim można ukryć implementację (private/protected) i wystawić tylko potrzebne API (public).
"protected" ogranicza dostęp do składowych klasy: kod zewnętrzny nie ma do nich dostępu, ale klasy pochodne mogą z nich korzystać. To pozwala zachować ukrycie danych wobec użytkowników klasy, a jednocześnie umożliwia rozszerzanie zachowania przez dziedziczenie.
"private" daje najsilniejsze ukrycie: składowe są dostępne tylko wewnątrz tej samej klasy. "protected" również ukrywa składowe przed światem zewnętrznym, ale dopuszcza dostęp w klasach pochodnych. Różnica jest kluczowa przy projektowaniu hierarchii dziedziczenia.
Pośrednio tak, bo jest częścią mechanizmu kontroli dostępu, ale "public" nie ukrywa składowych: udostępnia je wszystkim. W projektowaniu klas zwykle dąży się do minimalnego API publicznego, a dane przechowuje się jako private/protected, by zachować hermetyzację.
"static" nie dotyczy widoczności składowych, tylko sposobu ich istnienia i powiązania z klasą lub czasem życia obiektu. Składowa statyczna może być publiczna, protected lub prywatna. O hermetyzacji decyduje specyfikator dostępu, a nie "static".
"volatile" stosuje się, gdy wartość może zmieniać się poza normalnym przepływem programu (np. rejestry sprzętowe, współbieżność) i trzeba ograniczyć optymalizacje kompilatora. To nie kontrola dostępu do składowych klasy, więc nie jest mechanizmem hermetyzacji.
"const" oznacza, że obiektu/zmiennej nie wolno modyfikować (z pewnymi wyjątkami). To kwalifikator niezmienności, a nie widoczności. Element może być jednocześnie const i private/protected/public, więc "const" nie zastępuje specyfikatorów dostępu.
Częsty błąd to wybór słów kluczowych kojarzonych z "bezpieczeństwem" (np. const, static) zamiast tych od dostępu. Inny błąd to mylenie "protected" z "private": oba ukrywają dane, ale "protected" dopuszcza użycie w klasach pochodnych.
Szukaj sformułowań o "dostępie", "widoczności" lub "ukrywaniu składowych klasy". W C++ to niemal zawsze prowadzi do specyfikatorów private/protected/public. Jeśli w odpowiedziach są "static/const/volatile", zwykle są to dystraktory niezwiązane z poziomem dostępu.
info

Około 55% zdających odpowiada poprawnie na to pytanie. średnie

Specjaliści zwracają uwagę: "Hermetyzacja w C++ polega na kontrolowaniu dostępu do składowych klasy przez specyfikatory dostępu."

Źródła:

  • cppreference.com: "Member access control (private, protected, public)" https://en.cppreference.com/w/cpp/language/access (dostęp: 2026-03-01)
  • cppreference.com: "volatile type qualifier" https://en.cppreference.com/w/cpp/language/cv (sekcja volatile) (dostęp: 2026-03-01)
  • cppreference.com: "static (storage class specifier) / static data members" https://en.cppreference.com/w/cpp/language/storage_duration oraz https://en.cppreference.com/w/cpp/language/static (dostęp: 2026-03-01)

Materiały:

  • Dokumentacja cppreference dotycząca specyfikatorów dostępu (private/protected/public)
  • Rozdziały o klasach i dostępie w podręczniku do C++ (np. C++ dla początkujących/średniozaawansowanych)
  • Ćwiczenia: zaprojektuj klasę bazową i pochodną, testując dostęp do pól protected i private

Aktualizacja pytania: 31.03.2026



Aktualizacja pytania: 31.03.2026
📡 Brak połączenia internetowego