KWALIFIKACJA INF3 - STYCZEŃ 2015

PYTANIE NR 29.
Ukrywanie pewnych pól lub metod obiektów danej klasy tak, aby były one dostępne tylko metodom wewnętrznym tej klasy lub funkcjom zaprzyjaźnionym, to
A.
B.
C.
D.
Wyjaśnienie poprawnej odpowiedzi:
Hermetyzacja (często nazywana też enkapsulacją) polega na ukrywaniu pól i metod klasy oraz kontrolowaniu dostępu do nich, tak aby kod z zewnątrz korzystał z publicznego interfejsu, a szczegóły implementacji pozostały wewnątrz klasy (lub były dostępne tylko dla wskazanych elementów).

Pełne wyjaśnienie:

Hermetyzacja w programowaniu obiektowym oznacza ukrywanie szczegółów implementacji obiektu i udostępnianie na zewnątrz jedynie kontrolowanego interfejsu (np. metod publicznych). W praktyce realizuje się to m.in. przez modyfikatory dostępu, takie jak public/protected/private, dzięki którym pola i metody pomocnicze nie są dostępne dla dowolnego kodu.

To podejście wspiera ukrywanie informacji: zewnętrzny kod nie powinien bezpośrednio zmieniać stanu obiektu w sposób niekontrolowany. Zamiast tego korzysta z metod, które mogą wykonywać walidację, utrzymywać spójność danych i chronić niezmienniki obiektu. Dzięki temu można też później zmienić implementację wewnętrzną bez konieczności zmiany sposobu użycia klasy w innych częściach aplikacji.

Dlaczego pozostałe pojęcia nie pasują?

  • Polimorfizm dotyczy możliwości traktowania obiektów różnych klas przez wspólny typ oraz różnego zachowania tej samej operacji (np. przesłanianie metod). Nie opisuje "ukrywania" pól/metod przed dostępem.
  • Konkatenacja oznacza łączenie (najczęściej) napisów lub sekwencji danych. To pojęcie z innego obszaru niż kontrola dostępu w OOP.
  • Dziedziczenie opisuje tworzenie klasy na podstawie innej klasy i przejmowanie/rozszerzanie jej cech. Może wiązać się z dostępem do składowych, ale nie jest definicją ukrywania elementów klasy przed kodem zewnętrznym.

Wskazówka egzaminacyjna: jeśli w treści pojawia się "ukrywanie pól/metod" oraz "dostęp tylko wewnątrz klasy", najczęściej chodzi o enkapsulację/hermetyzację, a nie o dziedziczenie czy polimorfizm.

Dodatkowe pytania

Dodatkowe pytania (FAQ):
Hermetyzacja to ukrywanie pól i metod klasy oraz udostępnianie kontrolowanego interfejsu (np. metod publicznych). Dzięki temu kod z zewnątrz nie manipuluje stanem obiektu bezpośrednio, tylko przez metody, które mogą wykonywać walidację i dbać o spójność danych.
W praktyce edukacyjnej i w wielu materiałach terminy są używane zamiennie: oba odnoszą się do ukrywania implementacji i kontrolowania dostępu do składowych klasy. W zależności od źródła częściej spotkasz nazwę "enkapsulacja", ale sens pozostaje ten sam.
Hermetyzację realizuje się przez ograniczanie dostępu do składowych, np. ustawiając pola jako prywatne, a na zewnątrz udostępniając metody publiczne. W wielu językach spotyka się poziomy dostępu typu public/protected/private, które regulują, kto może wywołać metodę lub odczytać pole.
Pola publiczne pozwalają na zmianę stanu obiektu bez kontroli, co łatwo prowadzi do niespójnych danych. Gdy pole jest ukryte, klasa może wymusić reguły (np. zakres wartości) w metodach dostępowych, a także bezpiecznie zmienić implementację bez psucia kodu korzystającego z klasy.
Hermetyzacja dotyczy kontroli dostępu i ukrywania implementacji wewnętrznej klasy. Dziedziczenie dotyczy relacji "jest-rodzajem" i tworzenia nowej klasy na bazie innej (przejmowanie i rozszerzanie cech). To dwa różne mechanizmy: jeden porządkuje dostęp, drugi modeluje hierarchię typów.
Hermetyzacja odpowiada za to, co jest widoczne na zewnątrz klasy, a co pozostaje wewnętrzne. Polimorfizm dotyczy tego, że ta sama operacja może działać inaczej dla różnych typów obiektów (np. przesłanianie metod). Polimorfizm nie oznacza ukrywania pól lub metod.
Konkatenacja to łączenie danych (najczęściej napisów), np. sklejanie dwóch ciągów znaków w jeden. Może występować w programach obiektowych, ale nie jest mechanizmem projektowym OOP. Nie dotyczy kontroli dostępu do pól/metod, więc nie opisuje hermetyzacji.
Szukaj sformułowań typu: "ukrywanie pól/metod", "dostęp tylko wewnątrz klasy", "interfejs publiczny", "szczegóły implementacji niewidoczne na zewnątrz". Takie opisy wskazują na hermetyzację/enkapsulację, a nie na dziedziczenie czy polimorfizm.
Ogranicza możliwość niekontrolowanej modyfikacji stanu obiektu, wymusza korzystanie z metod, w których można dodać walidację i logikę biznesową. Zmniejsza to liczbę błędów ubocznych, ułatwia testowanie i refaktoryzację, a także ogranicza zależności między modułami aplikacji.
Wypisz definicje: klasa, obiekt, dziedziczenie, polimorfizm, enkapsulacja, abstrakcja. Rób krótkie ćwiczenia: przerób klasę z polami publicznymi na prywatne i dodaj metody dostępu z walidacją. Ucz się rozpoznawania po słowach-kluczach w treści zadania.
info

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

Źródła:

  • cppreference.com: "C++ access specifiers" (public, protected, private) — https://en.cppreference.com/w/cpp/language/access (dostęp: 2026-03-04)
  • Oracle Java Tutorials: "Encapsulation" — https://docs.oracle.com/javase/tutorial/java/concepts/ (sekcja Encapsulation) (dostęp: 2026-03-04)
  • Wikipedia (PL): "Enkapsulacja" — https://pl.wikipedia.org/wiki/Enkapsulacja (dostęp: 2026-03-04)

Materiały:

  • Dokumentacja języka/środowiska (sekcje o klasach i modyfikatorach dostępu)
  • Materiały kursowe OOP obejmujące enkapsulację, dziedziczenie i polimorfizm
  • Ćwiczenia praktyczne: refaktoryzacja klasy z polami publicznymi do wersji z polami prywatnymi i metodami dostępowymi

Aktualizacja pytania: 31.03.2026



Aktualizacja pytania: 31.03.2026
📡 Brak połączenia internetowego