Przejdź do głównej treści

Kwalifikacja: INF.03 - Tworzenie i administrowanie stronami i aplikacjami internetowymi oraz bazami danych

Zawód: Technik informatyk, Technik programista

Kategorie: Programowanie webowe Algorytmy i podstawy informatyki

Hermetyzacja to zasada programowania obiektowego mówiąca o tym, że

A. typy pól w klasach/obiektach mogą być dynamicznie zmieniane w zależności od danych im przypisywanych.
B. pola i metody wykorzystywane tylko przez daną klasę/obiekt są ograniczane zasięgiem private lub protected.
C. klasy/obiekty mogą współdzielić ze sobą funkcjonalność.
D. klasy/obiekty mogą mieć zdefiniowane metody wirtualne, które są implementowane w pochodnych klasach/obiektach.

Pytanie z egzaminu CKE, czerwiec 2017 (arkusz E.14-X-17.06).

Hermetyzacja polega na ukrywaniu szczegółów działania klasy i kontrolowaniu dostępu do jej danych oraz metod. Dlatego odpowiedź o ograniczaniu pól i metod zasięgiem private lub protected jest właściwa. W praktyce chodzi o to, żeby obiekt nie pozwalał każdemu fragmentowi programu grzebać bezpośrednio w jego stanie wewnętrznym. Na przykład klasa KontoBankowe może mieć prywatne pole saldo, a publiczne metody wplac(), wyplac() i pobierzSaldo(). Dzięki temu nie da się przypadkiem ustawić salda na wartość bez sensu, np. -999999, tylko każda zmiana przechodzi przez kontrolowaną logikę. To jest bardzo ważna dobra praktyka w OOP, spotykana w Javie, C#, PHP, TypeScript czy C++. Warto pamiętać, że private oznacza dostęp tylko wewnątrz danej klasy, a protected pozwala też korzystać z elementu w klasach dziedziczących. Moim zdaniem to jedna z tych zasad, które na początku wydają się formalnością, ale przy większym projekcie ratują porządek w kodzie. Hermetyzacja wspiera zasadę niskiego sprzężenia, ułatwia testowanie, zmniejsza ryzyko przypadkowych zmian i pozwala zmienić implementację klasy bez psucia reszty programu.
W tym pytaniu łatwo pomylić kilka filarów programowania obiektowego, bo wszystkie brzmią dość podobnie i często występują razem w tych samych klasach. Współdzielenie funkcjonalności między klasami lub obiektami kojarzy się raczej z dziedziczeniem, kompozycją albo użyciem traitów, zależnie od języka. To nie jest sedno hermetyzacji. Jeśli klasa Samochod dziedziczy po klasie Pojazd metodę rusz(), to faktycznie wykorzystuje wspólną funkcjonalność, ale nie mówi to jeszcze nic o ukrywaniu pól i kontroli dostępu. Dynamiczna zmiana typów pól to z kolei temat typowania dynamicznego, znany np. z JavaScript albo PHP. Zmienna może raz przechowywać liczbę, a później tekst, ale to dotyczy systemu typów, nie ochrony stanu obiektu. Mylenie tego z hermetyzacją wynika często z tego, że oba zagadnienia dotyczą danych w programie, tylko na zupełnie innym poziomie. Metody wirtualne implementowane w klasach pochodnych są związane głównie z polimorfizmem i mechanizmem nadpisywania metod. Dzięki nim można wywołać tę samą metodę na obiekcie bazowego typu, a program wykona wersję z konkretnej klasy pochodnej. To bardzo przydatne, ale nadal nie jest hermetyzacją. Hermetyzacja odpowiada na pytanie: kto ma prawo odczytać lub zmienić dane obiektu i przez jakie metody ma to zrobić. W dobrym kodzie obiekt nie wystawia wszystkiego publicznie, tylko udostępnia przemyślany interfejs, a szczegóły zostawia schowane wewnątrz klasy.

Wymagane logowanie

Ocenianie trudności pytań jest dostępne tylko dla zalogowanych użytkowników. Zaloguj się, aby skorzystać z pełni możliwości platformy.

Twoja ocena pomoże innym uczniom w przygotowaniu do egzaminu, a Tobie pozwoli na dostęp do spersonalizowanych statystyk.

Zgłoś błąd w pytaniu

Rozwiń sekcję i zmień pole, którego dotyczy błąd. Wysłane zostaną tylko zmienione sekcje.

Błędna kwalifikacja
Błąd w treści pytania
Błąd w treści odpowiedzi
Błąd w obrazie
Dane kontaktowe (opcjonalnie)
Podaj email, jeśli chcesz otrzymać informację o rozpatrzeniu zgłoszenia.