Z którym ze słów kluczowych programowania obiektowego wiąże się dostęp do pól i metod tylko z poziomu klasy, w której są zdefiniowane?
A.
constB.
publicC.
privateD.
staticOpracowane na podstawie zadania CKE, czerwiec 2021 (arkusz E.14-SG-21.06): W JavaScript nie ma słowa kluczowego private (pola prywatne oznacza się znakiem #) - pytanie dotyczy programowania obiektowego ogólnie.
Słowo kluczowe private oznacza prywatny dostęp do składników klasy, czyli pól i metod widocznych tylko wewnątrz tej samej klasy, w której zostały zdefiniowane. To jest klasyczny mechanizm enkapsulacji, czyli hermetyzacji danych. W praktyce chodzi o to, żeby nie pozwalać każdemu fragmentowi programu na bezpośrednie grzebanie w stanie obiektu. Moim zdaniem to jedna z ważniejszych zasad OOP, bo dzięki niej kod jest łatwiejszy do utrzymania i mniej podatny na przypadkowe błędy. Przykładowo pole haslo, saldoKonta albo konfiguracjaPolaczenia nie powinno być dowolnie zmieniane z zewnątrz. Lepiej zrobić prywatne pole private i udostępnić kontrolowany dostęp przez publiczną metodę, np. ustawHaslo(), pobierzSaldo() albo zmienEmail(). W PHP zapis private $nazwa; sprawia, że dostęp do tego pola z poziomu innego obiektu lub zwykłego kodu poza klasą zakończy się błędem. Dobra praktyka branżowa jest taka, żeby domyślnie ograniczać dostęp tak mocno, jak się da, a dopiero gdy jest realna potrzeba, robić coś public. To poprawia czytelność interfejsu klasy i zmniejsza zależności między częściami aplikacji.
W tym pytaniu chodzi o modyfikator dostępu, a nie o ogólne słowo kluczowe związane z programowaniem. const kojarzy się ze stałą wartością, czyli czymś, czego po przypisaniu nie powinno się zmieniać, ale nie opisuje ono samo z siebie prywatności pól i metod klasy. W różnych językach może występować w klasach, na przykład jako stała klasowa, jednak jego głównym sensem jest niezmienność wartości, a nie kontrola widoczności. public działa wręcz odwrotnie niż wymaganie z pytania: oznacza dostęp publiczny, czyli taki składnik klasy można wywoływać z zewnątrz, o ile język i kontekst na to pozwala. To przydaje się przy metodach tworzących interfejs obiektu, ale nie do ukrywania danych. static też często bywa mylone z dostępem, bo pojawia się obok public, private czy protected w definicjach metod, szczególnie w PHP. Jednak static oznacza przynależność do klasy, a nie do konkretnej instancji obiektu. Metoda statyczna może być publiczna, prywatna albo chroniona, więc samo static nie mówi, kto ma do niej dostęp. Typowy błąd myślowy polega tu na tym, że ktoś widzi słowa używane w deklaracjach klas i traktuje je jako jedną kategorię. A w OOP trzeba rozróżniać modyfikatory dostępu od cech takich jak stałość wartości czy statyczność. Jeśli pole albo metoda ma być dostępna tylko wewnątrz klasy, poprawnym określeniem jest private. Z mojego doświadczenia warto zapamiętać prostą zasadę: public pokazuje na zewnątrz, private chowa do środka, a static mówi, że coś należy do klasy jako całości.