W językach obiektowych opartych o składnie nawiasów klamrowych (C++, C#, Java, ...) mamy zasadniczo trzy możliwości regulowania dostępu do składników klasy: private, protected oraz public. Niektóre języki dorzucają jeszcze inne (np. internal w C#), ale te trzy to podstawa.
Dla przypomnienia: public to elelment klasy dostępny dla wszystkich, także spoza klasy. Private to element prywatny, dostępny tylko w klasie, a protected to prawie to samo co private, z tym że jest dostępny dla klas pochodnych.
Mam propozycję, aby dodać jeszcze jeden regulator w tym zakresie.
Pisząc kawałek kodu zdałem sobie sprawę, że przydatna może być deklaracja, która ogranicza dostęp do elementu klasy, tylko do konkretnego obiektu - tzn. tylko obiekt A (i jego metody) mogą uzyskać dostęp do tak zadeklarowanego elementu A.a. Inne obiekty tej samej klasy, nie mogą uzyskać takiego dostępu. Taki instance-private.
Zalety takiego rozwiązania, to dodatkowy stopień hermetyzacji oraz potencjalne możliwości optymalizacji kodu dla kompilatora, oparte o dokładnej wiedzy kiedy następuje dostęp do składnika klasy.
Jakie są wasz opinie? A może są języki które mają tego typu mechanizm, o których nie wiem?


Komentarze