Wpis z mikrobloga

#programowanie #java #mozeinnejezyki

Może ktoś wytłumaczyć dlaczego używanie metod statycznych jest takie be? Bo czytając internety przeważnie napotykam się na takie opinie.

Czy jak np mam klasę, w której umieszczam metody używane w różnych miejscach aplikacji to lepiej mieć je statyczne czy może za każdym razem inicjować tą klasę?
  • 5
@siemanko:

Bo:

- ideowo: statyczna metoda jest niczym innym jak publiczną metodą z języka C, więc jest tak naprawdę wyłomem w całej idei programowania obiektowego,

- testowalność: statyczna metoda jest testowalna, ale jeśli coś z niej korzysta, to za każdym razem kiedy testujesz to coś, uruchamiasz metodę statyczną. To potrafi utrudnić znacznie testowanie, a nie da się ich przesłonić/zastąpić mockiem,

- decoupling: po prostu zwiększają powiązania między modułami.
@losiul: Co do ostatniego to rozumiem, że należy tego unikać, ale jaka jest różnica między np.:

TemplateLoader.load(path);

a:

TemplateLoader loader = new TemplateLoader();

loader.load(path);

Edit:

Przecież w obu przypadkach istnieje powiązanie?
@siemanko: Dwie:

- TemplateLoader możesz utworzyć poza miejscem użycia, a w teście podstawić mock'a,

- to drugie jest teoretycznie ciapkę wolniejsze. W praktyce, prawie nie ma miejsc w których miałbyś się tym przejmować, zwłaszcza kiedy programujesz w Javie ; ).
@siemanko: Dodatkowe wady:

- nie można takiej metody przeciążyć ani użyć polimorfizmu

- zależności na ten kod nie widać w deklaracji metody (obiekt nie musi być przekazywany do funcji ani zwracany). Najlepsze do testowania / przenoszenia są funkcje "czyste" - czyli takie, które nie mają efektów ubocznych. Dla każdego wywołania z takimi samymi argumentami zwracają dokładnie te same wyniki.