Przestrzeń nazw vs klasa ze statycznymi polami / funkcjami

0

Witam,
W C++ mamy możliwość deklarowania przestrzeni nazw, a w nich zmiennych lub funkcji globalnych. Z drugiej strony mamy możliwość zadeklarowania klasy, wrzucenia do nich metod statycznych i pól statycznych. Efekt będzie raczej ten sam, bo przecież klasa stanowi własną przestrzeń nazw. Moim zdaniem klasy z metodami statycznymi są ładniejsze i wolę ich używać. Gdzie podejście namespace, a gdzie class + static jest lepsze.
Pozdrawiam,

0

Przy namespace'ach możesz zrobić using jakieś_tam_namespace i tym samym tak jakby połączyć tą namespace lokalnie z lokalną namespace.

0

Właśnie, ale to w przypadku bardzo dużej ilości zmiennych funkcji (ale std ma sens). W przeciwnym wypadku, gdy tych funkcji / zmiennych jest kilka static + klasa wydaje mi się o wiele lepszym rozwiązaniem, chyba że o czymś nie wiem?

0
TeaLow napisał(a):

Moim zdaniem klasy z metodami statycznymi są ładniejsze i wolę ich używać.,
Dlaczego?
Skoro twierdzisz, że zastosowanie klasy tylko w celu zamknięcia metod statycznych w jej przestrzeni jest "ładniejsze" od przestrzeni nazw to nie rozumiesz po co w ogóle klasy powstały. Klasa jest typem złożonym. Metody oraz pola, które zawiera "opisują" ten typ - umożliwiają np modelowanie pewnego fragmentu rzeczywistości. To, że zamykają one swoje składowe w przestrzeni nazw jest poniekąd "skutkiem ubocznym" i nie do tego one służą. To co uważasz za "ładniejsze" jest w rzeczywistości nieintuicyjne gdyż definiując klasę spodziewam się iż w większości przypadków mogę utworzyć jej obiekt bądź w jakiś sposób rozszerzyć ją przy pomocy mechanizmów obiektowych. Poza tym najważniejsza różnica między przestrzeniami, a klasami: do przestrzeni możesz dodawać nowe elementy, a specyfikacja klas jest poniekąd "zamknięta".

0

Dzięki, przemyśle to jeszcze i przetestuje w praktyce.

Przy okazji, wchodzę w Jave więc zapytam. Zostałem przekonany, że to nie jest najlepsze podejście dla C++ - klasa tam, gdzie tworzymy instancje obiektu, w szczególności tam gdzie autorowi zależy na dziedziczeniu. W przeciwnym przypadku: namespace.

Ale czy mój punkt widzenia (klasa z grupą staticów) będzie słuszny w Javie, gdzie nie można tworzyć zmiennych globalnych? Wydaje mi się, że tak.

0

W java zastosowanie czy też filozofia przestrzeni nazw jest realizowana przy pomocy pakietów.

0
matek3005 napisał(a):

W java zastosowanie czy też filozofia przestrzeni nazw jest realizowana przy pomocy pakietów.

Ale oczywiście funkcje / zmienne globalne muszą być składnikami klas wchodzącymi w skład tych pakietów w przeciwieństwie do C++?

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