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

Hermetyzacja klas

Aruba Cloud - Virtual Private Server VPS
0 głosów
554 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,610 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,610 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 Mentor (352,580 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 1,291 wizyt
pytanie zadane 25 marca 2021 w Python przez Patryk01 Obywatel (1,270 p.)
+1 głos
1 odpowiedź 1,505 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ź 251 wizyt
pytanie zadane 11 stycznia 2018 w Java przez Ohnne Nowicjusz (180 p.)

93,335 zapytań

142,330 odpowiedzi

322,415 komentarzy

62,669 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

Wprowadzenie do ITsec, tom 1 Wprowadzenie do ITsec, tom 2

Można już zamawiać dwa tomy książek o ITsec pt. "Wprowadzenie do bezpieczeństwa IT" - mamy dla Was kod: pasja (użyjcie go w koszyku), dzięki któremu uzyskamy aż 15% zniżki! Dziękujemy ekipie Sekuraka za fajny rabat dla naszej Społeczności!

...