22 lutego 2008

SCJP - Standardy nazewnicze ziaren JavaBeans

Standardy nazewnicze ziaren JavaBeans, czyli streszczenie sekcji "JavaBeans Standards" – kontynuacja działań zapowiedzianych w artykule "Przygotowania do SCJP czas zacząć". Będzie więc o tym, co mówi specyfikacja JavaBeans w zakresie nazw identyfikatorów.

Ziarna JavaBean to klasy będące kolekcją właściwości (ang. properties). Właściwość definiujemy w ziarnie JavaBean tworząc publiczne metody set<NazwaWłaściwości> oraz get<NazwaWłaściwości>. Dla właściwości typu boolean dopuszczalna jest także metoda postaci is<NazwaWłaściwości> zamiast get<NazwaWłaściwości>, ale mogą też być obie, choć nie wiadomo jaki miałoby to mieć sens. Przykładowo, dla właściwości typu boolean o nazwie allowed będzie to setAllowed i isAllowed (albo getAllowed) a dla właściwości prop dowolnego innego typu setProp i getProp. Wystarczy przy tym, że obecna jest tylko jedna z tych metod. Mamy wtedy do czynienia z właściwością tylko do zapisu (metoda set) lub tylko do odczytu (metoda get albo is). Co prawda nie musi być tak, że każdej właściwości odpowiada zmienna prywatna ziarna ale przeważnie tak właśnie jest. W Książce nie jest to powiedziane, ale właściwości obowiązują zapewne te same reguły nazewnicze, co zmienne. To, jakie są konwencje nazewnicze dla zmiennych opisałem w artykule "SCJP - Poprawne identyfikatory i konwencje nazewnicze". Właściwości definiuje się – jak już napisałem, poprzez metody – w ten sposób, że zmieniamy pierwszą literę pożądanej nazwy właściwości na wielką i dodajemy przedrostek set, get albo is. Dodatkowo, mimo że nie dotyczy to już stricte nazewnictwa obowiązują następujące reguły:

- Metody set muszą być publiczne (modyfikator public), nie mogą zwracać żadnego rezultatu (tj. zwracać typ void) i muszą akceptować pojedynczy argument o typie właściwości.

- Metody get i is muszą być również publiczne, nie mogą akceptować żadnych argumentów i muszą zwracać typ odpowiedni dla danej właściwości.

Książka o tym nic nie mówi, ale zerknąłem do specyfikacji JavaBeans i wyczytałem tam, że jeśli nasza właściwość jest typu tablicowego (ang. array) postaci <TypElementów>[], to można dodatkowo zdefiniować metody tej postaci:

public <TypElementów> get<NazwaWłaściwości>(int i);
public void set<NazwaWłaściwości>(int i, <TypElementów> elem);

Znaczenie takich metod jest chyba oczywiste – służą do pobierania i ustawiania wartości zapisanej na podanej pozycji w tablicy.

Specyfikacja JavaBeans opisuje też zasady dotyczące klas implementujących model zdarzeń (ang. events), a konkretnie chodzi o nazwy metod służących do rejestrowania i derejestrowania klas obserwatorów (ang. listeners) w klasach generujących zdarzenia (ang. event source). Metody te powinny być tej postaci:

public void add<KlasaObserwatora>(<KlasaObserwatora> listener);
public void remove<KlasaObserwatora>(<KlasaObserwatora> listener);

Dodatkowo, klasa będąca klasą obserwatora, tj. konsumująca zdarzenia powinna mieć w nazwie słowo 'Listener' na końcu, np. MouseEventListener.

Brak komentarzy: