Artykuł

gru 06 2008
0

Java - charakterystyka platformy i języka

Java jest obecnie jednym z najpopularniejszych języków programowania. Należy do grupy tzw. języków wysokiego poziomu, w których wiele rzeczy wykonywanych jest automatycznie i nie musi ich wykonywać programista. Początki Javy sięgają roku 1995 roku. Wtedy to grupa programistów pod kierownictwem Jamesa Goslinga, rozpoczęła pracę nad nowym obiektowym językiem. Inspiracją programistów stał się język C++. Był to dominujący język na platformę Windows w latach 90siątych. Do dziś cieszy się on wciąż ogromnym zainteresowaniem. Utworzenie Javy okazało się strzałem w dziesiątkę. Dzięki nowoczesnemu obiektowemu charakterowi, przenośności i niezależności od architektury, nowy język w krótkim czasie stał się hitem. W kolejnych akapitach skupię się na poszczególnych cechach języka.

Java a C++

Jeśli sięgniecie po literaturę fachową, szybko przekonacie się co było inspiracją dla autorów Javy. Szczególnie jest to widocznej w bestsellerowej książce Bruce Eckela Thinking in Java. Wspomnianą, nie do końca tajemniczą inspiracją jest język C++. Java jest silnie oparta na tym języku i pomysły czerpane są tutaj dosłownie garściami. Nawet charakterystyczny obiektowy model Javy był budowany w oparciu o ten, który istnieje w C++. Oczywiście nie było to bezmyślne kopiowanie pewnych wzorców i standardów przez zespół Jamesa Goslinga. Skorzystano z ciekawszych elementów,ale wiele napisano też nowego. Postawiono na wygodę pisania i czytelność kodu. I tak np. w Javie, zminimalizowano problem zarządzania pamięcią. Można powiedzieć, że domyślnie wszystko wykonuje się automatycznie. Użytkownik tworzy nowy obiekt, lecz to wirtualna maszyna Javy (patrz akapit przenośność) jest odpowiedzialna za zarządzanie pamięcią i za niszczenie obiektu, gdy ten nie jest dłużej używany. Oczywiście można go zniszczyć również samodzielnie. Część ze zmian, mających zapewnić wygodę obsługi wpłynęła jednak na wydajność. Dlatego występują zauważalne różnice między kodem napisanym w Javie, a kodem napisanym w C++. Nie mniej jednak, jeśli dotychczas byłeś(aś) programistą C++, nie będziesz mieć wielkich problemów w nowym języku.

Obiektowość i paradygmaty programowania obiektowego

Obiektowość jest niewątpliwie jednym z największych aspektów Javy i nowoczesnego programowania. Powoli mijają czasy kiedy aplikacje pisano w językach strukturalnych (np. klasyczny już Pascal), a projekt aplikacji opierał się o proste schematy blokowe. Dziś proces tworzenia oprogramowania wygląda zgoła odmiennie. Do projektu aplikacji wykorzystuje się zaawansowane diagramy UML, a cały kod zapisywany jest w klasach (z ang. class), najważniejszej strukturze danych wykorzystywanej w programowaniu obiektowym. Tematyka opisywana w tym akapicie jest naprawdę szeroka i bez wątpienia byłaby dobrym materiałem na kilka kolejnych artykułów, dlatego aby nie przedłużać postaram się szybko przybliżyć trzy kluczowe paradygmaty programowania obiektowego, które oczywiście zaimplementowano w Javie.

Hermetyzacja

Ważnym aspektem programowania obiektowego jest hermetyzacja. Hermetyzacja pozwala na ograniczenie dostępu do naszego kodu źródłowego, niepowołanym obiektom. Szczególny nacisk położono tutaj na bezpośrednią modyfikację zmiennych składowych klasy. Zaleca się aby zmienne nie były dostępne publiczne, lecz dostęp do nich był realizowany przy pomocy publicznych metod z reguły nazywanych Get (zwraca określoną wartość), Set (ustawia określoną wartość). Aby jednak zarządzać dostępem do poszczególnych elementów, musimy wprowadzić pojęcie modyfikatorów dostępu. Są to specjalne słowa kluczowe Javy określające zasięg określonej zmiennej/obiektu/klasy. Wyróżniamy cztery modyfikatory dostępu:
- domyślny - występuje wtedy kiedy nie został nadany żaden modyfikator. Pozwala na dostęp do elementów w obrębie danego pakietu.
- public - dostęp jest zawsze możliwy. Zarówno w obecnym pakiecie jak i wszystkich innych.
- private - dostęp możliwy tylko w obrębie danej klasy. Elementów prywatnych nie można dziedziczyć (więcej o dziedziczeniu w akapicie poniżej).
- protected - modyfikator bardzo podobny do modyfikatora private. Jedyna ale bardzo kluczowa różnica jest taka, że elementy oznaczone tym modyfikatorem mogą być dziedziczone.

Dziedziczenie

Dziedziczenie przez wielu uważane jest za kluczowy element programowania obiektowego. Pozwala na tworzenie nowych klas w oparciu o istniejące klasy lub klasy abstrakcyjne. Dziedziczenie może być wykonywane wielokrotnie - zasadniczo nie ma żadnych ograniczeń. Aczkolwiek przy każdej iteracji możemy dziedziczyć tylko po jednej klasie naraz. Nic nie stoi oczywiście na przeszkodzie by klasa, po której dziedziczymy, dziedziczyła elementy po innej interesującej nas strukturze. Ważnym zagadnieniem, o którym warto wspomnieć są klasy abstrakcyjne. Są to specjalne struktury, które częściowo zostały wypełniono treścią, a częściowo tylko zadeklarowane. W wolnym tłumaczenie oznacza to mniej więcej tyle: metoda A klasy abstrakcyjnej jest kompletna, natomiast metoda B tej klasy posiada tylko nagłówek i musi być rozszerzona w klasie, która będzie po niej dziedziczyć. Należy tutaj zaznaczyć, że nie jest możliwe tworzenie obiektów klas abstrakcyjnych.

Polimorfizm

Aby zdefiniować pojęcie polimorfizmu, musimy zrozumieć czym jest interfejs. Z pozoru jest to struktura, która przypomina klasę, jednak w odróżnieniu od klasy zawiera ona tylko nagłówki metod. Jak widać jest to podobna struktura do klasy abstrakcyjnej, z tym że tutaj ŻADNA z metod nie może być wypełniona treścią. Dla wielu osób często na początku zrozumieć różnicę między tymi dwoma strukturami.

Tworząc interfejsy wymuszamy na programiście, który będzie implementował te interfejsy wypełnienie treścią zadeklarowanych metod. Dzięki temu możemy w określonej w grupie klas uzyskać te same metody, które będą wykonywać podobne działania. Dobra informacją jest możliwość implementacji kilku interfejsów naraz. Nie ma tutaj ograniczenia, które występowało przy dziedziczeniu klas.

Przenośność

Drugim czynnikiem, który zadecydował o dużej popularności Javy jest jej przenośność. Założenie języka jest proste: kod piszemy raz i uruchamiamy go wszędzie. I tak właśnie jest w przypadku Javy. Piszemy aplikację na Windows, a uruchamiamy pod Linuksem czy MacOSem. Jak to wszystko jest możliwe? Odpowiedź jest prosta: dzięki JRE.

Środowisko uruchomieniowe Javy (bo tak właśnie tłumaczymy rozwinięcie skrótu JRE), jest specjalną platformą, którą musi zainstalować każdy, kto chce skorzystać z aplikacji napisanych w Javie na swoim komputerze. Kod źródłowy napisany przez programistę jest kompilowany do kodu pośredniego nazywanego w Javie kodem bajtowym (z ang. byte-code). Właściwa kompilacja następuje na komputerze użytkownika za pomocą wbudowanej w JRE, wirtualnej maszyny Javy (z ang. JVM), którą możemy nazwać dla uproszczenia sprawy kompilatorem. Ponieważ operacja kompilacji dokonuje się w locie, ma to duży wpływ na wydajność Javy. Dlatego też mobilność kodu, wiąże się z wolniejszym jego działaniem.

Niezależność od architektury

Jeśli ktoś jeszcze ma wątpliwości jak bardzo Java rozpanoszyła się, to mam dla niego kolejną wiadomość. Java nie jest domeną tylko komputerów osobistych i laptopów, ale także wszelakich urządzeń mobilnych. Wszędzie tam gdzie możliwe jest zainstalowanie wirtualnej maszyny Javy, możliwe jest również korzystanie z Javy. Tak więc z aplikacjami napisanymi w tym języku można spotkać się miedzy innymi w telefonach komórkowych (tutaj nazywane midletami), palmfonach, palmtopach itp.

Platforma Java Enterprise Edition

Platforma JEE, jest stosunkowo nowym i ciągle dynamicznie rozwijanym i dopieszczanym tworem. Jest to zbiór technologii pozwalających na tworzenie wydajnych, bezpiecznych i zaawansowanych technicznie aplikacji biznesowych. Platformę JEE tworzą trzy kluczowe elementy: Serwlety, dokumenty JSP i komponenty Enterprise Java Beans. Nie będę opisywał czym konkretnie jest ta technologia ponieważ temat jest naprawdę szeroki i bez wątpienia nadawałby się na odrębny artykuł. Mogę tylko powiedzieć, że platforma JEE bardzo dobrze radzi sobie na rynku komercyjnych, biznesowych aplikacji internetowych i posiada mniej więcej połowę udziałów w tym rynku. Tym samym stanowi olbrzymią konkurencję dla platformy .Net z językiem ASP na czele.

Literatura

Powyższy artykuł miał zachęcić was szanownych czytelników do niezwykłej technologii jaką jest Java. Ponieważ jest to naprawdę rozbudowany język o szerokich możliwościach zachęcam do sięgnięcia do literatury fachowej. Przed zakupem książki do Javy (a książki informatyczne, to zwykle nie mały wydatek), zachęcam do zapoznania się z treścią przykładowego rozdziału, lub opiniami innych czytelników. Można to uczynić np. na stronie Helionu. Poniżej przedstawiam przykładowe pozycje.
- Thinking in Java - Bruce Eckel - jedna z najpopularniejszych publikacji poświęconych Javie. Przez wielu uważana za najlepszą, przez innych negowana. Jeśli jednak komuś spodoba się styl pisania autora, to pozycja ta będzie dla niego niezwykle atrakcyjna.
- Język Java - Podstawy Programowania - Jacek Rumiński - książka prezentująca podstawy języka, idealna dla początkujących programistów, którzy nie mieli styczności z programowaniem.
- Praktyczny kurs Java - Marcin Lis - autor wykorzystując proste przykłady wprowadza nas w świat Javy.
- Java. Kompendium programisty - Herbert Schildt - niezwykle udana książka. Szczegółowo opisane zostały tutaj poszczególne klasy Javy. Nie zabrakło również praktycznych przykładów, dzięki którym zrozumienie przedstawionej tutaj teorii będzie niezwykłe łatwe.

Data ostatniej modyfikacji: 05.06.2011, 17:16.

Podoba Ci się ten wpis? Powiedz o tym innym!

Send to Kindle

Komentarze

blog comments powered by Disqus