1. Czym jest Java 1.1. Java jako uniwersalny język programowania
Oczywiście, przede wszystkim Java jest uniwersalnym językiem programowania Składniowe podobieństwo do C/C++ czyni ten język łatwy do opanowania przez programistów znających te języki. Jednocześnie Java ma ambicje udoskonalania swoich wzorców. Programista Javy w zasadzie nie musi martwić się zarządaniem pamięcią (w Javie funkcjonuje automatyczne odśmiecanie - "garbage collector", polegające na automatycznym usuwaniu przydzielonych wcześniej a nieużywanych obszarów pamięci). Java nie dopuszcza arytmetyki wskaźnikowej, która pozwala na odwoływanie się do dowolnych obszarów pamięci i jest częstą przyczyną błędów. Ścisła kontrola typów na etapie kompilacji pozwala unikać prostych błędów, a konwersje przeprowadzane w fazie wykonania są bezpieczne, bowiem nigdy nie może powstać sytuacja przekształcenia danych do niewłaściwego dla nich typu (chodzi oczywiście o typy obiektowe, poprawność konwersji typów prostych jest gwarantowana przez kompilator). Wymuszana przez kompilator obsługa wyjątków (inaczej mówiąc - błędów) czyni programowanie w Javie jeszcze bardziej bezpiecznym i niezawodnym, a wbudowane w język podstawowe elementy współbieżności umożliwiają łatwe tworzenie i synchronizowanie równolegle działających wątków (czyli równolegle wykonywanych fragmentów tego samego programu). Wszystkie wymienione wyżej - teraz może dość tajemniczo brzmiące - pojęcia będziemy szczegółowo poznawać w trakcie wykładów. Niewątpliwie jednak najważniejszą cechą Javy jako "czystego języka" jest jej obiektowość. Ogólnie, oznacza to, iż programy pisze się w Javie łatwiej i bardziej niezawodnie niż w językach nieobiektowych. Niestety, Java nie jest językiem w pełni obiektowym. Występują w niej bowiem konstrukcje nieobiektowe (np. typy proste), co powoduje pewne niespójności syntaktyczne i semantyczne. Już w tym wykładzie zaczniemy powoli oswajać się z podejściem obiektowym. Większość innych ważnych cech Javy, o których była mowa wyżej , wynika z wysokich wymogów bezpieczeństwa, stawianych językowi przez jego twórców. Coś za coś - często oznacza to pewne ograniczenie swobody i elastyczności programisty, a także (czasem nadmierne) zwiększanie pracochłonności pisania kodu. Zalety Javy jako czystego języka programowania mogą być dyskusyjne. Ale nie dlatego warto Javy się uczyć, że jest to język idealny (czy w ogóle są takie?). Dużo ważniejsza jest jej uniwersalność we wszelkich zastosowaniach informatycznych. Uniwersalność, zapewniana przez wieloplatformowość Javy oraz wynikającą stąd (zrealizowaną!) możliwośc stworzenia przebogatych standardowych "bibliotek" na tyle zintegrowanych z samą Javą, że praktycznie będących jej synonimem. 1.2. Wieloplatformowość Javy
Java jest językiem interpretowanym, co umożliwia wykonywanie "binarnych" kodów Javy bez rekompilacji praktycznie na wszystkich platformach systemowych. Kod źródłowy (pliki z rozszerzeniem ".java") jest kompilowany przez
kompilator Javy do kodu bajtowego ( B-kodu, pliki z rozszerzeniem ".class"), ten
ostatni zaś jest interpretowany przez tzw. wirtualną maszynę Javy - JVM (jest
to program i/lub odpowiednie biblioteki) , zainstalowaną na danej platformie
systemowej lub wchodzącą w skład przeglądarki WWW. kod kompilacja ładowanie JVM (.java) javac (.class) Oznacza to, teoretycznie, że raz napisany i skompilowany program będzie działal tak samo na wszystkich platformach systemowych. Idea wręcz doskonała (jak wiele wysiłku i kosztów pochłania przenoszenie programów z jednej platformy na drugą). Jej praktyczna realizacja (mimo wielu trudności) jest coraz bliższa i coraz bardziej kusząca (nieunikniona mniejsza efektywność i większa zasobożerność działania aplikacji Javy w porównaniu z apliakacjami natywnymi - czyli napisanymi "pod konkretny system operacyjny" - jest równoważona przez rozwój sprzętu). Sama wieloplatformowość języka interpretowanego nie jest czymś nadzwyczajnym. Ale twórcy Javy wyciągnęli z tej jej cechy bardzo konsekwentne wnioski. Stworzyli mianowicie bogaty zestaw standardowych bibliotek i narzędziowych interfejsów programistycznych (API), które umożliwiają w jednolity, niezależny od platformy sposób programować graficzne interfejsy użytkownika (GUI), dostęp do baz danych, działania w sieci i wiele innych. Podstawowy (ogromny zresztą) zestaw takich bibliotek nazywa się Java Core
API (albo JDK albo Java 2 SDK). Oprócz tego wprowadzono prosty mechanizm
nazywany Java Extension Framework, który umożliwia rozszerzanie standardowego
pakietu o nowe (też standardowe!) biblioteki. 1.3. Java jako uniwersalne środowisko programowania GUI
Java - w swoich standardowych bibliotekach - dostarcza łatwych w użyciu i niezależnych od platformy środków programowania graficznych interfejsów użytkownika. Proste, nieco surowe komponenty wizualne od wielu już lat można było łatwo uzyskać za pomocą części API Javy nazywanej AWT (Abstract Windowing Toolkit). Były one jednak zbyt ubogie dla poważnych aplikacji, ponadto ich wygląd zależał od platformy systemowej. Pojawił się więc projekt Swing, mający głównie na celu wzbogacenie istniejących i dodanie nowych elementów GUI oraz uniezależnienie wyglądu komponentów od platformy systemowej. Swing, zrealizowany początkowo jako dodatek do wersji Javy 1.1, następnie wszedł w skład tzw. J F C ( Java Foundation Classes) - integralnej częsci platformy Java 2 (wersje 1.2.x, 1.3 i 1.4). JFC obejmuje AWT wraz ze wzbogaconą grafiką dwuwymiarową (Graphics2D), Swing oraz mechanizmy "drag and drop" ("przeciągnij i upuść") w aplikacjach Javy i na styku tych aplikacji z natywnymi aplikacjami platformy systemowej. 1.4. Java jako uniwersalne środowisko dostępu do baz danych
W skład standardu Javy wchodzi JDBC API (Java Database Connectivity API) - zestaw środków, umożliwiających łączenie się aplikacji i apletów Javy z (niemal) dowolnymi relacyjnymi bazami danych (systemami zarządzania relacyjnymi bazami danych) i wykonywanie na nich operacji bazodanowych. Środki te są łatwe w użyciu, bazują bowiem na powszechnym standardzie SQL - języka programowania relacyjnych baz danych. Niestandardowy pakiet JavaBlend udostępnia narzędzia łatwego
tworzenia aplikacji biznesowych , integrujących obiekty Javy z relacyjnymi
bazami danych. Umożliwia to realizację podejścia obiektowego w środowisku
relacyjnych baz danych 1.5. Java jako uniwersalne środowisko programowania multimediów
W Java Core API znajdziemy na pewno uniwersalne środki przetwarzania Dotychczasowe standardowe rozszerzenia Javy:
powoli wchodzą do podstawowego standardowego API. Jeśli jako multimedia potraktować telewizję i telefon - to i tu Java dostarcza odpowiednich interfejsów programistycznych: Java TV API oraz JavaPhone API, umożliwiających oprogramowanie TV i telefonów komórkowych. 1.6. Java jako uniwersalne środowisko programowania w sieci (klient-serwer)
Java zawiera standardowe środki tworzenia:
Istnieje również standardowe rozszerzenie Javy służące do obsługi poczty elektronicznej ( JavaMail API). Oparta na Javie technologia Java Server Pages (JSP) umożliwia:
1.7. Java jako środowisko programowania w systemach
rozproszonych
W standardzie Javy zapewniono komunikację z rodzimymi programami platformy systemowej (JNI - Java Native Interface) oraz środki komunikowania się obiektów w środowiskach rozproszonych. Z kolei RMI - Remote Method Invocation - zapewnia komunikację pomiędzy obiektami napisanymi w Javie, funkcjonującymi w równoległych procesach wykonywanywanych w środowisku rozproszonym, np. na dwóch różnych komputerach sieci. Interakcja obiektów Javy i obiektów realizowanych w innych językach programowania zapewniona jest przez implementację przez Javę standardu CORBA ( Common Object Request Broker Architecture. Oznacza to, że Java może być językiem tworzenia tzw. middleware - oprogramowania pośredniczącego i integrującego działanie aplikacji napisanych w różnych językach i na różnych platformach systemowych i sprzętowych. 1.8. Java jako środowisko budowanie programów z gotowych komponentów
Koncepcja budowania programu z gotowych cegiełek, komponentów "wilelokrotnego użycia" ("reusable components"), znalazła w Javie urzeczywistnienie w postaci specyfikacji JavaBeans. Bean - znaczy ziarno, a JavaBean jest właśnie komponentem ponownego użytku (ziarnem Javy). Komponenty takie (wizualne lub odzwierciedlające logikę) mogą być łatwo wykorzystywane przy budowie dużych aplikacji. Wbudowanie ziarna w aplikację odbywa się zwykle w pewnym srodowisku programistycznym, a programowanie polega na: umieszczeniu (załadowaniu) ziarna, połączeniu go z aplikacją i ew. dostosowaniu jego właściwości. Enterprise Java Beans (EJB) jest zestawem ziaren i środków implementacji logiki biznesowej, działających w systemach rozproszonych z obsługą transakcji bazodanowych i hurtowni danych. Przy budowie programów używane są gotowe ziarna ze składnic "problemowych" (np. ubezpieczenia, banki etc.) oraz środki EJB, umożliwiające łatwe tworzenie nowych ziaren "biznesowych". 1.9. Java jako środowisko przetwarzania dokumentów XML
XML - Extended Markup Language - jest rozszerzalnym językiem znacznikowym,
pozwalającym na opisywanie struktury i treści dokumentów i separowanie treści
od jej prezentacji (w przeciwieństwie HTML określa tylko wygląd dokumentu i nie
może być rozszerzony - tzn. zestaw znaczników jest stały). Java okazała się - ze względu na swą obiektowosć i wieloplatformowość - doskonałym językiem do przetwarzania dokumentów XML. Gotowe środki przetwarzanie XML wchodzą w standard Javy (w wersji 1.4). 1.10. Mikro - Java
Do oprogramowania obsługi sprzętu elektronicznego (np. urządzeń domowych,
konsumpcyjnych) o słabych parametrach informatycznych stworzono w Javie
standardową technologię JINI. 1.11. Dlaczego warto uczyć się
Javy?
Cóż... Poznaliśmy co najmniej 10 odpowiedzi na to pytanie. Jeśli nawet uznamy sam "czysty język" za nieco niekonsekwentny czy uciążliwy, to zachętą do przezwyciężenia wszelkich obiekcji jest ogromna uniwersalność Javy. Jak wspomniałem wcześniej - jest to jedyny język programowania tak naprawdę zawierający standardowe i uniwersalne środki realizacji niemal wszelkich zadań informatycznych. To wielkie bogactwo możliwości niewątpliwie skłania do jego poznania. Oczywiście najpierw trzeba zaznajomić się z podstawami Javy. Na tej drodze - pewnie - dużą trudnością będzie obiektowość Javy. Dlatego już za chwilę - ogólnie, na poziomie koncepcyjnym - przyjrzymy się niektórym cechom podejścia obiektowego. Wcześniej jednak - niejako dla porządku - przedstawione zostanie nazewnictwo wersji Javy. 1.12. Wersje Javy
Pierwsze, powszechnie dostępne wersje Javy były numerowane 1.0.x. Ubogi zestaw komponentów GUI, zły model obsługi zdarzeń - to ich główne wady. Nowe wersje numerowane 1.1.x wprowadziły kilka ogromnie ważnych zmian i
dodatków, m.in.: nowy model obsługi zdarzeń, możliwości dynamicznego
kształtowania działania programu (refleksja) oraz JavaBeans. Pojawił się też
Swing z nowymi komponentami. Następna generacja - Java 1.2.x - nie była już tak rewolucyjna. Faktycznie
zintegrowała istniejące już i działające w Javie 1.1.x rozwiązania, dodając
nowe, ciekawe, użyteczne (ale już nie tak rewolucyjne) elementy, m.in.
Graphics2D i kolekcje. Wygląda to mniej więcej tak: ![]()
|