Projektowanie bibliotek, jak ograniczyć dostęp do klas?

0

Jak mogę ograniczyć dostęp zewnętrzny do klas, które mają służyć tylko do wewnętrznego użytku w tworzeonej przeze mnie bibliotece? Czy jedynym sensownym rozwiązaniem jest tworzenie konstruktorów i metod o widoczności w obrębie pakietu? Ale wtedy musiałbym zgromadzić wszystkie klasy biblioteki w jednym pakiecie, co uniemożliwia ich hierarchiczne uporządkowanie :(. Jest jakieś inne wyjście?

0

Przecież możesz same klasy ustawić na dostęp pakietowy. Nikt nich nie dostanie się do nich spoza Twojego pakietu (wtedy jest nawet możliwe wpakowanie wszystkich klas do jednego pliku).
Druga możliwość, to stworzenie swoich klas roboczych jako klasy wewnętrzne lub zagnieżdżone (statyczne w nadklasie). I one też mogą mieć dostępy od publicznych, przez chronione, pakietowe, aż do prywatnych. Wracając do dostępu pakietowego - w jego ramach możesz sobie w jednych pakietach umieszczać inne. I to wszystko będzie niedostępne z zewnątrz.

0
Olamagato napisał(a)

Przecież możesz same klasy ustawić na dostęp pakietowy. Nikt nich nie dostanie się do nich spoza Twojego pakietu (wtedy jest nawet możliwe wpakowanie wszystkich klas do jednego pliku).
Druga możliwość, to stworzenie swoich klas roboczych jako klasy wewnętrzne lub zagnieżdżone (statyczne w nadklasie). I one też mogą mieć dostępy od publicznych, przez chronione, pakietowe, aż do prywatnych. Wracając do dostępu pakietowego - w jego ramach możesz sobie w jednych pakietach umieszczać inne. I to wszystko będzie niedostępne z zewnątrz.

Tak, wiem o tym wszystkim oczywiście, ale Twoje propozycje jeszcze bardziej zmierzają ku ogólnemu chaosowi w bibliotece. Kiedy nie ma jakiejś szczególnej sytuacji, najchętniej trzymam klasy osobno, a nie w jednym pliku czy jako klasy wewnętrzne, bo w ten sposób łatwo można odnaleźć to, czego się szuka. Poza tym wszystko to jednak wymaga, żeby te klasy były zgromadzone w tym samym pakiecie, a ja chciałbym się dowiedzieć, czy można jednocześnie skorzystać z uporządkowania klas, które daje (pseudo)drzewiasta struktura pakietów a jednocześnie zabezpieczyć te klasy przed niepowołanym dostępem?

0

Rozumiem, o co Ci chodzi. Nie wiem jednak dlaczego nie wystarcza Ci stworzenie drzewiastej struktury pakietów i nie dodawanie swoim klasom najwyższego poziomu modyfikatora public. Dostępne są one tylko dla klas w tym samym pakiecie (w tym publicznych). Nie jest więc możliwe dobranie się do nich przez klasy z innego pakietu (spoza drzewa - albo spoza tego samego poziomu drzewa bo nie pamiętam). Tak przecież działają klasy Suna do których odwołują się niby wolne biblioteki JDK/JRE.

0

Ok, dzięki. Przeglądałem też inne profesjonalne biblioteki. Występuje tam struktura pakietów, ale pakiety te zawierają w pewnym sensie niezależne od siebie moduły biblioteki, które nie muszą mieć do siebie nawzajem pełnego dostępu. Będę starał się tego trzymać.

1 użytkowników online, w tym zalogowanych: 0, gości: 1