Wpis z mikrobloga

Mam pytanie na szybko z #programowanie. Chyba trochę głupie, ale zaryzykuje. xD
Czytam sobie o getterach i setterach w #java. Z tego co przeczytałem mam rozumieć, że są to po prostu zwykłe metody do ustalania wartości atrybutów w klasie? Ale czy same gettery i settery są zdefiniowane w standardzie języka Java, czy są to tylko zwykłe metody? Bo zauważyłem, że każda metoda, która jest setterem zaczyna się od "set" a potem jest nazwa atrybutu. Ale czy jest to wymagane przez standard języka, że jeżeli chcemy utworzyć setter, to nazwę metody zaczynamy od "set", czy to tylko taka umowa, żeby było wiadomo, że mamy do czynienia z setterem (tak jak przyjęło się, że nazwy klas zaczynamy z dużej litery)?

#naukaprogramowania
  • 10
@maciorqa: W zwykłej Javie SE jest to umowa, sytuacja trochę się komplikuje we frameworkach, albo nawet w tzw. konwencji JavaBean. Tam mamy do czynienia nie z polami klasy, ale propertiesami, np. jak mamy setter setId(long num), to id jest propertiesem typu long, ale samo pole klasy opisujące id może być trzymane w innym typie, a sam setter oprócz ustawiania pola może realizować jakiś algorytm, np hashowanie napisu.
Frameworki czasem nie zadziałają,
@zajety_login: To może ja rozwinę za kolegę wyżej. Chodzi o to, że klasy nie powinny udostępniać swoich pól do odczytu, ani tym bardziej zapisu (wyjątkiem są DTO). Podstawą programowania obiektowego jest to, że klasy stanowią połączenie danych i operacji na nich.
W czystym programowaniu obiektowym nie powinieneś mieć dostępu do właściwości (one powinny być ustawiane jedynie w konstruktorze). Później już tylko powinieneś móc wywoływać metody, które dokonują przekształceń na tych danych.
@maciorqa: poza tym co @dog_meat dobrze podsumował, dzięki getterom i setterom jesteś w stanie rozdzielić które pola można zmieniać, a które są tylko do odczytu. Jest to super ważne w przypadku definiowania klas Immutable.

Dodatkowym małym praktycznym bonusem jest łatwość refaktoryzacji - prościej sprawdzić, które pola i jak są wykorzystywane dzięki sprawdzeniu wywołań getterów i setterów. Inaczej bez wsparcia IDE może to być problematyczne (miałem takie pytanie na rozmowie rekrutacyjne