Programiści języka Java (podobnie jak administratorzy Oracle) mają tendencje do podkreślania swojej elitarności. Trzeba przyznać, że wychodzi im to całkiem nieźle i najczęściej trudno oprzeć się wrażeniu, że od Delphi do Java jest daleka droga.
Moim zdaniem jest wręcz przeciwnie... i o ile różnice są i to zauważalne, to Java w samych założeniach jest językiem prostszym i bardziej przyjaznym programiście. Poza tym nie zapomnijcie, że nie mówimy o domorosłych programistach Delphi, którzy naklikali w IDE aplikacyjkę do przeglądania fotek. ProgramistaGranit to zazwyczaj informatyk po studiach kierunkowych, gdzie programowanie obiektowe było potrzebne jak powietrze do życia. W gruncie rzeczy, to nawet znajomość C++ wystarczy aby programować w Jawie, ale należy je okroić o większość trudnych konstrukcji...
Teza na dziś: jeśli potrafisz przeczytać ze zrozumieniem kod języka JAVA to bez większych problemów możesz w tym języku zacząć pisać.
Najtrudniejszy problem to chyba programowanie obiektowe - a to już nie java a sposób myślenia. Jedni myślą obiektowo inni nieobiektowo... W Delphi też można programować obiektowo, tylko że jest to trudniejsze. Postaram się to jakoś powoli odczarować.
Hasło na dziś to J2EE
Jawowcy robią wszystko aby wydawało się wam, że J2EE jest trudniejszą odmianą języka Java... w pierwszym akapicie wyjaśniłem dlaczego. Prawda jest jednak taka, że J2EE to nic innego, że serwerowa wersja javy dedykowana do programowania komponentów. Podobnie jak Delphi w Granicie jest używane w wersji dedykowanej do obsługi COM+ (komponentów). Już z samej analogii powinniście przyjąć, że to musi być prostsze. I takie faktycznie jest!
Czy ProgramistaGranit może powiedzieć o sobie, że jest programistą Delphi? Zapewne może, ale w wielu przypadkach polegnie jeśli przyjdzie mu omawiać biblioteki TLC czy sposób obsługi połączeń z bazą danych oferowanych przez Delphi. Większość tych "bzdur" jest nieużyteczna w programowaniu "biznesowym". Magiczna wiedza ogranicza się do umiejętności produkcji "klocków" przetwarzających dane wejściowe na oczekiwany efekt.
W języku Java jest jeszcze prościej, nikt nie oczekuje, aby programista J2EE dłubał jakieś formatki i obsługiwał je w jawie. Trzymając się tej tezy, muszę potwierdzić, że nawet obsługa bazy danych jest o wiele prostsza niż to co znacie z Granitu. Ba! Jeśli to prawdziwe J2EE oraz JPA to bazy danych nawet w waszym programie nie widać! Po prostu klepiecie sobie metodę klasy, która używa jeśli potrzebuje obiektów innych klas i każe im się zapisać, odczytać itp... Czyli, żeby już was dłużej nie ściemniać. Nie musicie znać żadnych javnych klas i bibliotek związanych w budowaniem GUI, nie musicie wiedzieć niewiadomo czego o łączeniu się środowiska jawa z serwerami bazy danych czy WWW i innych. Jedyne co musicie umieć, to utworzyć obiekt klasy, wywołać jego metodę, pracować na jego atrybutach i wynikach metod (obiektach lub tablicach/kolekcjach). Jeśli ograniczycie swoją znajomość do tych zagadnień to możecie o sobie mówić, że jesteście programistami J2EE.
Weźcie pod uwagę jeszcze jedną bardzo ważną rzecz. Zmieniając pracę i otrzymując nowe zadanie, nie dostaniecie na dzień dobry zadania postawienia całego środowiska od zera. Trafiacie do działającego projektu, działającej aplikacji, gdzie tylko musicie wcisnąć własny "klocek" w otoczeniu, które już swoją obecnością powoduje, że w umyśle wam się rozjaśnia. Na każdym kroku jest działający przykład, gotowa ściąga czy grupa ludzi, która wie co i jak.
Postaram się wam zaimprowizować zadanie jakie może się trafić w nowej pracy. Zbudować metodę zmieniającą opis urządzenia - uzupełnienie o adres IP (zadanie jest bardzo abstrakcyjne, ale tak też będziecie się czuć w nowej pracy).
public int yourFirstTask(int deviceId){ Device d1 = deviceService.getDeviceById(deviceId); String IP = d1.getIP().toString(); d1.setDescription(d1.getDescription() + " (" + IP + ")"); return deviceService.addModivyDevice(d1); }Nie chcę nikogo obrażać, ale wydaje mi się, że sam kod jest banalny. Nawet nie wiem, czy on jest poprawny, ale oddaje wam kontekst nowych zadań jakie możecie mieć w nowej pracy.
Aby jednak wszystkiego nie bagatelizować, to napiszę co należy sobie przypomnieć i mieć do dyspozycji jeśli zajdzie potrzeba:
- dziedziczenia - w zasadzie w jawie jest wielka moda na budowanie klas i ich specjalizowanie, po prostu dziedziczenie powinno być natywną metodą pojmowania przez was świata
- polimorfizm - mimo iż z teoretycznego punktu widzenia zagadnienie wydaje sią zaawansowane, to tak na prawdę trudne jest ono tylko dla kompilatora języka. Moim zdaniem jest to najbardziej naturalna cecha programowania obiektowego
- typy podstawowe języka Java - nie ma ich tak wiele, ale dają wielką pewność jeśli przyjdzie bo budowania nowych rozwiązań
- kolekcja, zbiory itp. - w zasadzie w aktualnym programowaniu w języku java uwielbiane są kolekcje i wszystkie typy pokrewne. Pętle wyliczeniowe oparte na indeksowaniu ustępują miejsca tym iterującym po kolekcjach np.
List list = new ArrayList(); list.add("Bernadine"); list.add("Elizabeth"); list.add("Gene"); list.add("Elizabeth"); list.add("Clara"); for (String listElem : list) { System.out.print(listElem + " "); }
- klonowanie i serializacja - jedyne rozszerzenie jakie należy poznać. Napiszę o tym jeszcze później.
Na zakończenie postaram się w trzech słowach odczarować wam listę, jaką najczęściej można spotkać w opisach technologii J2EE:
J2EE - sam język java okrojony z wszystkich elementów nie do wykorzystania po stronie serwera. Weźcie też pod uwagę, że najczęściej w firmie nie będziecie jedynym specjalistą od tej technologii. Będzie tam dostępna wiedza techniczna i specjaliści potrafiący skonfigurować środowisko produkcyjne, środowisko pracy programisty i oddalić od was wiele innych trudnych problemów...
Weźcie też pod uwagę, że sam język java powstał aby uprościć to co w innych językach było trudne. Nie musicie przejmować się wskaźnikami, rezerwowaniem i zwalnianiem pamięci i wieloma innymi.
JPA i Hibernate - Tu pojawia się wcześniej wspomniana serializacja... już tłumaczę. Programiści javy uważają, że obiektowość wszystko upraszcza, więc musi też uprościć zapisywanie obiektów do bazy danych. Rozwijając JPA dostaniemy Java Persistance Api - czyli api dla utrwalania obiektów javy. Oznacza to, że każdy obiekt w języku java chcielibyśmy w łatwy sposób zapisać i odtworzyć w "trwałej przestrzeni". W ogólności tę trwałą przestrzeń reprezentuje strumień, który bezpośrednio daje się zmapować np. na plik. Czyli programista java chcąc utrwalić obiekt po prostu wykonuje ZapiszDoStrumienia(obiekt);
Drugim poziomem wtajemniczenia jest zapisanie obiektu do bazy danych. Tu wyjaśnia drugie magiczne słowo Hibernate. Jest to zbiór klas i tzw. adnotacji języka, które potrafią połączyć pola waszych klasy z polami bazy danych. W efekcie zamiast zapisywać do strumienia możemy polecić aby obiekt został zapisany w bazie danych. Dla was najważniejsze jest to, że tę część z reguły robią wyjadacze i na początku nikt nie pozwoli Wam tego dotykać.
Servlets - to chyba najbardziej prehistoryczny element programowania biznesowego. Wywodzi się jeszcze z interfejsu CGI implementowanego w serwerach WWW. Nawet jeśli nie jesteście w grupie programistów WWW to idea ta jest w waszym zasięgu. Servlet robi bardzo prostą rzecz - buduje stronę WWW. Budowanie takie składa się z takich kroków jak:
- interpretacja danych wejściowych - np. pól w formularzu czy wciśniętego linka - są możliwe dwie metody przekazania takich danych i jest prosta klasa pozwalająca je zdekodować
- przetwarzanie danych - czyli zwykłe programowanie, być może wywołanie metody komponentu...
- zbudowanie odpowiedzi - czyli sklejenie i przesłanie treści strony WWW. Najczęściej sama strona ma już swoją budowę i musimy do niej dostarczyć wyprodukowane informacje. Nasza klasa powinna zapisać do strumienia wyjściowego przedefiniowane elementy strony okraszone wynikami przetwarzania lub zbudować plik XML jaki przetworzą i zaprezentują pozostałe elementy witryny.
Spring - w największym uproszczeniu jest to odpowiednik COM w Programowaniu Granitowym. Klasy języka java mogą być zamykane w komponenty - tzw. beany. Podobnie jak w przypadku COM tak i w javie potrzebny jest host dla tych komponentów - to właśnie zapewnia nam Spring. Tu znowu programista nie jest odpowiedzialny za działanie środowiska. Jedyne co ma do wykonania, to zdefiniowanie w prostych zapisach XML jak jego klasa powinna zostać udostępniona. Będzie jeszcze czas o tym napisać. W ogólności wystarczy bardzo powierzchowna znajomość...
Apache Maven - jest to dość pokręcone środowisko zapewniające poprawne buildowanie skomplikowanych aplikacji. Całość sprowadza się do mnogości plików konfiguracyjnych (pom.xml), które opisują zależności między poszczególnymi elementami aplikacji. Na podstawie zależności Apache Maven dokonuje inteligentnego buildowania aplikacji. Z punktu widzenia developera ważna jest umiejętność używania środowiska, czyli wpisywania: MVN INSTALL lub MVN CLEAN COMPILE czy inne...
CSV lub SVN - świat nie używa VSS, ale innych popularniejszych odpowiedników. Ostatecznie okazuje się, że są one prostsze niż sam VSS, a to dlatego, że:
- posiadają bardzo użyteczne dodatki pozwalające na integrację z powłoką MS Windows
- posiadają integrację do środowisk rozwojowych (np. Eclipse)
Apache Tomcat - nie znam go dobrze. W zasadzie po zainstalowaniu ustawia się potrzebne informacje w Eclipsie i dalej już jakoś aplikacja automatycznie zostaje przenoszona na serwer Tomcat. W praktyce należy tylko wiedzieć, że serwer często wywala się w czasie debugowania i należy zaznajomić się z kilkoma sztuczkami - napiszę jeszcze o nich
Eclipse - to jest nasz największy sprzymierzeniec. Gdy pierwszy raz użyłem tego narzędzia do programowania w javie zacząłem się zastanawiać po co było mi to kilkudniowe przypominanie sobie języka. Okazuje się, że środowisko już w czasie pisania wyłapie większość błędów i ,co najciekawsze, zaproponuje kilka propozycji usunięcia błędu. Dodatkowo na bieżąco serwuje podpowiedzi, że nie sposób się pomylić.
Przepraszam za to trochę eklektyczne przedstawienie tematu. W kolejnych postach postaram się odczarowywać szerzej poszczególne elementy.
Dla przypomnienia języka polecam źródełko, jakie mi się wydało godne polecenia:
http://www.cezarywalenciuk.pl/?tag=/Java
Moim zdaniem koleś bardzo przystępnie pisze.
Kolejny odcinek: Beans... JavaBeans.... EnterpriseJavaBeans...
Brak komentarzy:
Prześlij komentarz