• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Hermetyzacja klas

Object Storage Arubacloud
0 głosów
491 wizyt
pytanie zadane 27 sierpnia 2015 w C i C++ przez Patrycjerz Mędrzec (192,320 p.)
Witam,

od dłuższego czasu zastanawiam się, jak poprawnie hermetyzować klasy. Czy robić wszystko prywatne i definiować masę getterów i setterów, czy robić tylko prywatne to, co potrzebne? Wg mnie lepszym sposobem jest ten drugi. Ja robię tak (nie wiem, czy słusznie), że hermetyzuję tylko to, co jest składową potrzebną do wewnętrznych operacji w klasie oraz takie składowe, które potrzebują kontroli na wejściu. Co o tym myślicie?

Za wszystkie uwagi, sugestie oraz odpowiedzi będę bardzo wdzięczny.

Pozdrawiam!

3 odpowiedzi

+2 głosów
odpowiedź 27 sierpnia 2015 przez Rogargol Pasjonat (16,600 p.)
wybrane 28 sierpnia 2015 przez Patrycjerz
 
Najlepsza
Ja może dodam, ze poza getami i setami, warto sie starac zeby klasa sama miala metody ktore operuja na danych skladowych, a nie byla tylko "pojemnikiem na dane". Mysl w taki sposob, zeby nie prowadzic dzialan na danych skladowych poza klasa, tylko starac sie funkcje dzialajace na nich implementowac jako metody klasy. Warto tez pamietac o tym, ze klasa powinna byc czytelna nie tylko dla Ciebie, ale takze dla kogo komu chcialbys taka klase "sprezentowac", dlatego wazne zeby mogl operowac na niej metodami, a nie zglbiac kazda zmienna. Tym kims mozesz byc takze Ty za jakiś czas kiedy nie bedziesz juz pamietal dokladnie swojego kodu.
komentarz 27 sierpnia 2015 przez Patrycjerz Mędrzec (192,320 p.)

Dzięki za odpowiedź. Czyli widzę, że tutaj sami zwolennicy rygorystycznej hermetyzacji smiley

komentarz 27 sierpnia 2015 przez Rogargol Pasjonat (16,600 p.)
Ja mialem podobne podejscie jak Ty, ale w momencie jak zaczyna sie uzywac frameworkow, albo uczy od kogos bardzo zaawansowanego i widzi jak fachowo zorganizowane sa klasy, to wtedy widac ile daje taki puryzm w kodowaniu.
+2 głosów
odpowiedź 27 sierpnia 2015 przez adrian17 Ekspert (346,840 p.)

Dodam, że zawsze warto się zastanowić czy getterów/setterów nie można zastąpić bardziej wyspecjalizowanymi metodami, co zwiękza izolację. Prosty przykład:

player.set_x_velocity(player.get_x_velocity()+10);
player.set_x_position(player.get_x_position()+player.get_x_velocity());
// w:
player.accelerate_x(10);
player.move();
+1 głos
odpowiedź 27 sierpnia 2015 przez iwan9449 Pasjonat (20,810 p.)
Żeby zachować zasady hermetyzacji wszystkie składowe klasy powinny być prywatne, a dostęp do nich powinien być za pośrednictwem publicznych metod.

Pozdrawiam!
komentarz 27 sierpnia 2015 przez Patrycjerz Mędrzec (192,320 p.)
edycja 27 sierpnia 2015 przez Patrycjerz
OK, zasady zasadami, ale trzeba też patrzyć na to od strony praktycznej. Po co tworzyć wszystko prywatne dla np. klasy obiektu w grze, jak i tak w kodzie ciągle się coś tam modyfikuje. Nie wiem, czy ktoś w ogóle pisze każdy setter ze skrupulatny sprawdzaniem danych wejściowych. Nawet jeśli, to praca chyba nie jest warta zachodu...

Mam jeszcze pytanie. W bibliotekach np. te settery mają masę ifów? Czy profesjonalnie jest to tak bardzo hermetyzowane i sprawdzane? Jeśli tak, to czy to właśnie jest robione na ifach, czy może na czymś innym?

I dzięki za odpowiedź.
komentarz 27 sierpnia 2015 przez iwan9449 Pasjonat (20,810 p.)
Skłądowe powinny być prywatne dla tego, żeby niechcący nie wpisać tam nieprawidłowych danych, które spowodują wysypanie całego programu. Oczywiście w małych projektach mała szansa, że to się wydarzy, ale w większym projekcie taki błąd może się wkraść i wtedy bardzo trudno go wykryć. Gettery i settery służą temu, żeby wyłapywać takie sytuacje i odpowiednio na nie reagować.

Po prostu w setterach i w getterach jest przeprowadzana walidacja danych, dane jak najbardziej można sprawdzać za pomoca if'ów.

Pozdrawiam!
komentarz 27 sierpnia 2015 przez Patrycjerz Mędrzec (192,320 p.)
Dzięki. Także pozdrawiam!

Podobne pytania

+1 głos
2 odpowiedzi 951 wizyt
pytanie zadane 25 marca 2021 w Python przez Patryk01 Obywatel (1,270 p.)
+1 głos
1 odpowiedź 1,335 wizyt
pytanie zadane 10 marca 2019 w Rozwój zawodowy, nauka, praca przez Teslum_369 Gaduła (4,190 p.)
0 głosów
1 odpowiedź 206 wizyt
pytanie zadane 11 stycznia 2018 w Java przez Ohnne Nowicjusz (180 p.)

92,753 zapytań

141,672 odpowiedzi

320,387 komentarzy

62,100 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...