Zawód: Technik programista
Kategorie: Programowanie Projektowanie aplikacji
Zaprezentowany kod zawiera pola danej klasy. Które pole (pola) mogą być dostępne z poziomu głównego programu poprzez odwołanie w formie nazwaObiektu.nazwaPola?
To jest właśnie sedno sprawy z modyfikatorami dostępu w programowaniu obiektowym, szczególnie w językach takich jak Java czy C#. Kiedy masz pole oznaczone jako public, jak w przypadku p3, to znaczy, że możesz się do niego odwołać z poziomu dowolnego innego kodu, czyli np. z głównego programu poprzez konstrukcję nazwaObiektu.nazwaPola. To jest bardzo wygodne, choć uczciwie mówiąc, nie zawsze bezpieczne – branżowo najczęściej rekomenduje się stosowanie enkapsulacji, czyli raczej private i dostęp przez gettery/settery. Moim zdaniem lepiej rozumieć, dlaczego public coś udostępnia, a protected czy private już nie. Protected pozwala na dostęp tylko w klasach pochodnych, więc w samym głównym programie (po prostu mając obiekt tej klasy) nie masz do niego dostępu. Private – to już w ogóle, jedynie sama klasa może się dobrać do własnych pól, cała reszta odpada. To, co często zaskakuje, to fakt, że nawet jeśli coś jest protected, to nie zrobisz obiekt.protectedPole w zwykłym programie – musiałbyś pisać klasę dziedziczącą. Praktycznie public daje największą swobodę, ale z mojego doświadczenia, jeśli nie musisz, nie rób wszystkiego na public. W tym przykładzie jedynie p3 można bezpośrednio wywołać z głównego programu przez nazwaObiektu.p3 – reszta jest ukryta przez modyfikatory dostępu, i to jest zdecydowanie zgodne ze sztuką programowania obiektowego i zasadą hermetyzacji.