Nazewnictwo

Programowanie w Javie jak w każdym innym języku obiektowym polega na tworzeniu obiektów, które rozmawiają z innymi obiektami i używają ich metod. Każdy obiekt  ma określony swój typ i typ definiowany jest jako klasa albo interfejs.

 

A więc w Javie zazwyczaj mamy do dyspozycji:

  • Klasy  - Wzór określający w jakie stany i jakie zachowania ma dany obiekt i jego typ, który go wspiera.
  • Obiekty-  W czasie wykonywania się programu maszyna wirtualna Javy, gdy napotyka słowo kluczowe newtworzy obiekt na wzór danej klasy. Czyli obiekt jest instancją klasy. Obiekt ma swój stan i  jego dostępność jest określona w klasie.
  • Stany czyli instancje zmiennych  - Każdy obiekt (instancja klasy)  ma swój unikatowy zestaw zmiennych, które są zdefiniowane w klasie .  Zmienne przypisane do danego obiektu wyrażają w pewnym sensie jego stan.
  • Zachowania czyli Metody -  W metodach wykonuje się prawdziwa robota. Są to algorytmy, które manipulują danymi w odpowiedni sposób.

Przejdź do identyfikatorów

Identyfikatory i Słowa Kluczowe:

Wszystkie komponenty danego języka programowania potrzebują identyfikatorów czyli nazw. Dana metoda musi mieć swoją nazwę , zmienną i tak dalej. Tak jak w innych językach nazwy nie mogą być takie same jak zastrzeżone słowa kluczowe. Słowa kluczowe omówię później. Warto też pamiętać o tym , że Java ma swoją własną konwencje nazewnictwa metod i zmiennych.

Dziedziczenie

Mechanizm dziedziczenia pozwala na ponowne użycie jednego kodu w klasie do innej klasy. W Javie można zadeklarować np. super klasę (klasę bazową), która rozszerza swoją funkcjonalność dla specyficznych klas pochodnych. Super klasa nie wie nic o klasach pochodnych ale klasie pochodne muszą zadeklarować dziedziczenie z super klasą.
Klasa pochodna automatycznie dziedziczy po super klasie dane zmienne i metody zadeklarowane w super klasie. Klasa pochodna może też nadpisać metody super klasy aby określić specyficzne zachowanie.
Przykładowo super klasa “SprzętKomputerowy” może definiować generalnie wszystkie metody dostępne dla wszystkich komputerów  ale klasa dziedzicząca po niej “Laptop” mogłaby nadpisywać pewne zachowania.

Interfejs

Interfejsy są to stu procentowe superklasy abstrakcyjne, które definiują, co klasa pochodna musi wspierać ale nie mówią jak. Czyli interfejs “Ssak” może deklarować wszystkie cechy, które klasy muszą implementować jak “SenRem”. Jednak interfejs nie zawiera żadnej logiki tej metody. Oznacza to , że to od programisty zależy jak te metody z interfejsów będą działać.

Układ klas

Klasy muszą być ze sobą spójne. Oznacza to , że każda klasa musi posiadać jeden cel i jedną odpowiedzialność. Zgodnie z pierwszą zasadą S.O.L.I.D i nie tylko. Przykładowo tworząc model klas, który reprezentuje muzeum chciałbyś aby jedne klasy reprezentowały eksponaty , a inne ludzi.
Każdy nawet najprostszy program w Javie używa obiektów z różnych klas. Java organizuje klasy w paczki i używa słowa kluczowego “import” do ich użycia. Ten układ pozwala programiście na łatwiejsze zarządzanie nazwami oraz dostępnością klas.
Egzamin zawiera w sobie dużo pytań na temat paczek o dostępności klas. Zanotuję to sobie , aby w przyszłości stworzyć o tym wpisy.

Cel certyfikatu – Objectives 1.3 and 1.4

Alternate TextDevelop code that declares, initializes, and uses primitives, arrays, enums, and objects as static, instance, and local variables. Also, use legal identifiers for variable names.

Opracuj kod, który deklaruje, inicjuje oraz używa typów prostych, tablic, typów wyliczeniowych oraz obiektów w stanie statycznym, zainicjowanym i jako lokalne zmienne. Używaj również poprawnych identyfikatorów oraz nazw zmiennych.

Develop code that declares both static and non-static methods, and - if appropriate - use method names that adhere to the JavaBeans naming standards. Also develop code that declares and uses a variable-length argument list.

Opracuj kod, który deklaruje statycznie i niestatyczne metody. Nazw metody zgodne z standardem JavaBeans. Również stwórz kod, który deklaruje i używa listy argumentów.

Identyfikatory

Powyżej napisałem dwa cele, które musisz spełniać do  egzaminu SCJP. W przyszłości też tak będę robił. Niektóre cele wymagają kilku wpisów ponieważ nie można wszystkiego omówić od razu.
W tym wpisie opowiadam o podstawach języka Java. Dlatego cele 1.3 i 1.4 mogą być tutaj opisanie tylko częściowo. Zajmiemy się teraz nazywaniem i deklarowaniem zmiennych zgodnie ze standardem JavaBeans.
Zakładam, że programujesz w tym języku więc w dużym skrócie o czym trzeba pamiętać jeśli chodzi o identyfikatory w języku Java.

  • Legalność Identyfikatorów – Kompilator zastrzega sobie pewne słowa kluczowe, które nie mogą być użyte jako identyfikatory. Pewne kombinacje znaków też mogą być nieuznane przez kompilator.
  • Konwencja kodu Sun Java – Podobnie jak w innych językach firma  ją symbolizująca nakłada pewne standardy w nazywaniu klas ,metod czy zmiennych. W pytaniach na egzaminie mogą być pewne ukryte pytania związane z tym zagadnieniem. Mimo wszystko jako programista Java powinieneś je znać.
  • Standard JavaBeans – Nie musisz uczyć się JavaBeans do tego egzaminu, jednak musisz znać parę zasad, o których zaraz powiem.

Legalność identyfikatorów

Identyfikator musi składać się tylko z odpowiednich znaków Unicode, liczb, symboli oraz podkreślenia. Zapewne już o tym wiesz więc szybko kolejna lista punktacyjna.

  • Identyfikatory muszą zaczynać się od litery, od znaku waluty $, albo od jedynego łącznika jakim jest symbol podkreślenia ( _ ). Identyfikator nie może zaczynać się od cyfry.
  • Po pierwszym znaku identyfikator może składać się z jakiejkolwiek  kombinacji liter, znaku waluty, liczb czy podkreślenia.
  • Nie ma ograniczenia co do liczby znaków identyfikatora.
  • Słowa kluczowe Java nie mogą być użyte jako identyfikatory.
  • Wielkość liter ma znaczenie . Identyfikatory “A” i “a” reprezentują dwie różne rzeczy.

Oto przykład legalnych identyfikatorów:

int a;
int A;
int $b;
int ____KaszubskiWojownik___;
int _$;
int A_slowo_obiektem_sie_stalo_Wtedy_przyszedl_pan_i_powiedzial;

A oto przykład niewłaściwych identyfikatorów.

int @z
int -x;
int klawo#;
int .e;
int 121a;

Lista słów kluczowych w Javie jest następująca: assert został dodany w wersji 1.4 ,a enum w wersji 1.5

abstractclassextendsimplementsnewstaticthorwsenum
booleanconstfinalimportpackagestrictfptransient 
breakcontinuefinallyinstanceofprivatesupertry 
bytedefaultfloatintprotectedswitchvoid 
casedoforinterfacepublicsynchronizedvolatile 
catchdoublegotolongreturnthiswhile 
charelseifnativeshortthrowassert 

Konwencja kodu Sun Java

Sun stworzył dokument, który zawiera zbiór tych zasad dla Java. Ten dokument może być odnaleziony na java.sun.com albotutaj.

Niektórzy mówią , że wiele pytań na egzaminie nie śledzi konwencji kodu. Wynika to z limitacji silnika testowego. Co gorsza kod może być naprawdę zwężony czyli kilka twierdzeń może znajdować się na tej samej linijce kodu. Jest to niezgodne z konwencją. Odstępy pomiędzy linijkami są  krótsze niż normalnie.

Przykład kodu

Poczuj się ostrzeżony. Kod prezentowany na egzaminie nie będzie taki czytelny, jak ten który widzisz na ekranie. Nikt nie piszę takiego kodu. Chodzi o ułatwienie procedury sprawdzania testu dla maszyny.

Jedyny standard, który jest przestrzegany na egzaminie to nazewnictwo.

  • Klasy i Interfejsy: Pierwsza litera powinna być z dużej litery. Słowa powinny też zaczynać się z dużej litery jeśli zmienna ma formę sentencji (MaszynaMatematyczna) . Klasy nazwy zazwyczaj są rzeczownikami n.p:
      • Kot, Cat
      • Konto, Account
      • DokumentDruku , PrintDocument
    • Interfejsy powinny być czasownikami. Uwaga tylko w C# interfejsy zaczynają się od “I”
      • Serializowany, Serializable
      • Showable
  • Metody:  Pierwsza litera powinna być z małej litery a potem w przypadku sentencji każdy wyraz powinien rozpoczynać się z dużej litery. Metody to zazwyczaj rzeczowniki połączone z czasownikami.
      • getMyData
      • doMath
      • setNewRecord
  • Zmienne: Tak samo jak metody rozpoczynają się z małej litery dla następnych wyrazów są już duże litery. Nazwy te powinny być krótkie i znaczące. Mają brzmieć informacyjnie dla nas.
      • windowWidth
      • legs
      • myNumber
  • Stałe: W Javie stałe są tworzone za pomocą słowa kluczowego static i final. Każdy znak powinien być z dużej litery tak jakbyś wycisną capslocka.  Trzeba dodawać odstępy pomiędzy wyrazami w sentencji za pomocą znaku “_”.
      • NUMBER_PI
      • MIN_WIDTH

 

JavaBeans standard

Standard JavaBean powstał po to aby pomóc programistom Java w tworzeniu innych komponentów, które mogą być użyte w narzędziach developerski jak Eclipse czy NetBeans. Jako programista chciałbyś aby zakupione komponenty Java wykorzystywały potencjał narzędzi developerskich. Używając nazewnictwa zgodnie ze specjalizacją JavaBeans gwarantujesz , że dane narzędzia będą rozpoznawane, używane i budowane przez innych programistów.

JavaBeans API to obszerne zagadnienie ale musisz znać tylko parę podstaw.

Po pierwsze klasy Java używają właściwości.  Zmienne wewnątrz klasy  muszą być prywatne zgodnie z zasadą hermetyzacji. Skoro zmienne są prywatne to dostęp do nich może być uzyskany tylko za pomocą metod, które są wewnątrz tej klasy. Metoda,  która zmienia zmienną jest nazywana “setter” , a metoda która tę zmienną pobiera “getter”  .

Zasady nazewnictwa JavaBean potrzebne do egzaminu  są następujące.

  • Jeśli właściwość nie jest typu boolean, metoda getter musi mieć prefiks get. Na przykład “getBackground()” jest poprawną nazwą dla właściwości, która nazywa się “Background”. Nie potrzebujesz zmiennej, która nazywa się “Background” (ale możesz ją mieć). Nazwy właściwości są dziedziczone przez getter i setter ,a nie przez zmienne w twojej klasie. Co zwrócisz w “getBackground” zależy od ciebie.
  • Jeśli właściwość jest typu boolean metoda getter zaczyna się od “is” albo “get. Na przykład metoda getter może być “getVisibility” oraz “isVisible”. Obie te metody są zgodne z JavaBean.
  • Metoda setter musi mieć prefiks “set” np. “setBackground” dla właściwości “Background”.
  • Kompletna nazwa dla metody getter albo setter powinna zawierać nazwę właściwości, która zaczyna się z dużej litery.
  • Metoda setter powinna być oznaczona jako publiczna . Nie może zwracać żadnych argumentów czyli  zwraca void. Potrzebuje argumentu o typie właściwości.
  • Metoda getter też powinna być oznaczona jako publiczna. Nie pobiera żadnych argumentów , a zwraca typ, który pasuje do właściwości.


To jeszcze nie koniec.

Po drugie JavaBean wspiera zdarzenia. Zdarzenia pozwalają komponentom powiadamiać siebie nawzajem, gdy coś się stanie. Model zdarzeniowy jest używany GUI jak np. naciśnięcie klawisza klawiatury czy myszki. Obiekty, które otrzymują informacje o tym , że dane zdarzenie zaszło nazywa się “słuchaczami” (listeners). Do egzaminu musisz wiedzieć , że są metody,  które służą za dodanie bądź usunięcie słuchacza. Oczywiście one muszą przestrzegać nazewnictwa JavaBeans.

  • Nazewnictwo metod słuchaczy (listeners) zawiera nazwę zdarzenia, które ma być zarejestrowane. Przed tą nazwą musi być prefiks informujący o tym, jaki to jest typ słuchacza, Przykładowo “addFunctionListener()” jest poprawną nazwą dla metody, która pozwoli na zarządzanie źródłem zdarzeniowym i pozwoli innym na rejestracje do zdarzeń Function
  • Metody, które usuwają rejestracje muszą mieć prefiks “remove” i muszą zawierać nazwę zdarzenia.
  • Typ słuchacza musi być dodany do metody dodającej i usuwającej i musi pobierać argument do metody.
  • Nazwa słuchaczy musi się kończyć słowem “Listener”.

Poprawne przykłady sygnatur metod zgodne ze standardem JavaBean.

public void setMyNumber(int a)
public int getMyNumber()
public boolean isThisGood()

public void addFunctionListener(FunctionListener m)
public void removeFunctionListener(FunctionListener m)

Oto przykłady niewłaściwego użycia.

void setGameName(String s) 
//musi być publiczny 

public void changeMyDouble(double d) 
//"change" nie jest właściwym słowem 

public void addGXListener(ZXListener m) 
//typ nie pasuje

A teraz czas na podsumowanie tego wpisu.

Punkt widzenia egzaminu

Co mówi egzamin. Musisz wiedzieć jak pisać poprawnie indykatory i jakie mogą być użyte legalnie. Pomimo, iż pewne kombinacje znaków są legalne dla klas, metod zmiennych i tak dalej, to trzeba jeszcze przestrzegać standardów Sun Java i JavaBeans.

Czyli musisz rozpoznawać, które identyfikatory są poprawne oraz które z nich przestrzegają standardów.

W przypadku pytania na temat konwencji nazw, to nie tylko będziesz zapytany czy kod się w ogóle skompiluje ale też możesz   zostać jawnie zapytany o standard JavaBeans.

W następnym odcinku

Deklaracja klas czyli cel numer egzaminu nr 1.1.