następny punkt »

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
żródłowy -------------> B-kod --------------> wykonanie (Win Unix OS/2 ...)

(.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

  • grafiki i obrazów (2D),
  • dżwięków i muzyki (m.in. pliki WAV, AU, MIDI)

Dotychczasowe standardowe rozszerzenia Javy:

  • Java 3D (tworzenia i przetwarzania grafiki trójwymiarowej),
  • Java Media Framework (przetwarzanie zaawansowanych formatów multimedialnych - m.in. filmy,  RealStream)

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:

  • apletów - programów wykonywanych w środowisku przeglądarki i umożliwiających:
    • interakcję z użytkownikiem w rozbudowanym GUI,
    • transakcje klient-serwer, w tym - poprzez JDBC - bazodanowe
  • serwletów - zapewniających obsługę i zarządzanie transakcjami po stronie serwera (standardowe rozszerzenie: Java Servlet API), w szczególności dynamiczne tworzenie stron WWW,
  • aplikacji "wolnostojących" mogących sięgać do Inter- i intranetu za pomocą wbudowanych w Core API "bibliotek" sieciowych

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:

  • tworzenie dynamicznych stron WWW,
  • separację wyglądu stron od dynamicznie zmieniającej się treści,
  • łatwe programowanie serwera, niezależne od sprzętu i platformy.
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).
XML staje się obecnie ważnym środkiem komunikacji biznesowej i wymiany dokumentów.

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.
Jest to technologia połączeń "impromptu" - połączeń sieciowych pomiędzy składnikami bez instalacji i interwencji. Programy Javy są interpretowane przez niewielką, specjalną maszynę wirtualną Javy KJVM przeznaczoną dla urządzeń o ekstremalnie słabych parametrach pamięciowych. Java do "maszynek do kawy" jest dostępna jako platforma Java 2 Micro Edition, przejmująca doświadczenia - także dalej rozwijanych - interfejsów programistycznych PersonalJava i EmbeddedJava.

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.
Pomyślane głównie jako środowisko budowy apletów, tak naprawdę nie nadawały się do budowy większych aplikacji (ani też jakichś bardziej użytecznych apletów).

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.
Wersje 1.1.x były prawdziwym przełomem.

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.
Można jednak powiedzieć, że w tym momencie Java dojrzała, co wyraziło się w zmianie nazewnictwa.
Mówi się w tej chwili o platformie Java 2, a interfejs programistyczny zmienił swoją nazwę z JDK (Java Devoleper Kit) na Java 2 SDK (Software Developer Kit).
Platforma Java 2 ma swoje trzy edycje: standardową, biznesową i mikro. W każdej z nich mamy kolejne wersje Javy.

Wygląda to mniej więcej tak:

Java wersje


 następny punkt »