java.doc

(2254 KB) Pobierz
Technologia Java powstała w firmie Sun Microsystems w 1991 roku jako narzędzie programistyczne utworzone w wyniku małego, anon

Tomasz Krzyżanowski
nr indeksu 116975

MSZ2 gr. 06

 

 

 

 

 

 

 

 

 

 

 

 

Java jako platforma programistyczna


Java, co to takiego?

 

Technologia Java powstała w firmie Sun Microsystems w 1991 roku jako narzędzie programistyczne utworzone w wyniku małego, anonimowego i tajnego przedsięwzięcia o nazwie „the Green Project”.

Tajny zespół „Green Team”, złożony z 13 osób pod przewodnictwem Jamesa Goslinga, zaszył się w biurze zlokalizowanym gdzieś na Sand Hill Road w Menlo Park w stanie Kalifornia i, odcięty od komunikacji z firmą, pracował 24 godziny na dobę przez 18 miesięcy.

Celem zespołu było przewidzenie „nowych trendów” w informatyce i przygotowanie się na ich nadejście. Pierwszy wniosek zakładał, że jednym z ważnych trendów będzie stopniowe łączenie kontrolowanych cyfrowo urządzeń powszechnego użytku i komputerów.

 

Java jest językiem tworzenia programów źródłowych kompilowanych do kodu bajtowego, czyli postaci wykonywanej przez maszynę wirtualną. Język cechuje się silnym typowaniem. Jego podstawowe koncepcje zostały przejęte z języka Smalltalk (maszyna wirtualna, garbage collection) oraz z języka C++ (duża część składni i słów kluczowych).

 

Javy nie należy mylić ze skryptowym językiem JavaScript, z którym ma niewiele wspólnego (głównie składnię podstawowych instrukcji).

 

 

 

Główne koncepcje

 

Autorzy języka Java określili kilkanaście kluczowych koncepcji swojego języka. Najważniejsze z nich to:

 

Obiektowość

 



W przeciwieństwie do proceduralno-obiektowego języka C++, Java jest silnie ukierunkowana na obiektowość. Wszelkie dane i akcje na nich podejmowane są pogrupowane w klasy obiektów. O obiekcie można myśleć jako o samoistnej części programu, która może przyjmować określone stany i posiada określone zachowania, które mogą zmieniać te stany bądź przesyłać dane do innych obiektów. Wyjątkiem od całkowitej obiektowości

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

(jak np. w Smalltalku) są typy proste (int, float itp.).

Jak widać z powyższego, silne typowanie oznacza, że każda wprowadzana zmienna czy pole musi mieć przypisany typ przechowywanych w niej danych (float oznacza typ zmiennoprzecinkowy), a każda metoda musi deklarować, jakiego typu dane zwraca (lub void, jeśli nic nie zwraca). Z przykładu widać też, że w nazwach zmiennych i metod można używać polskich liter - to zasługa wbudowanej obsługi kodowania Unicode. Pokazany w nazwach zmiennych i metod standard kodowania (polegający na pisaniu słów bez spacji, a z kapitalizowaniem drugiego i następnych słów składowych) jest nieobowiązkowy, ale jest jedną z uznanych za dobre praktyk programowania w Javie.

 



W Javie wszystkie obiekty są pochodną obiektu nadrzędnego (jego klasa nazywa się po prostu Object), z którego dziedziczą podstawowe zachowania i właściwości, dzięki czemu wszystkie posiadają wspólny podzbiór podstawowych możliwości, takich jak ich: identyfikacja, porównywanie, kopiowanie, niszczenie czy wsparcie dla programowania współbieżnego.

 

 

 

Choć C++ udostępniał dziedziczenie wielobazowe, projektanci Javy odeszli od tego pomysłu. Java umożliwia jedynie dziedziczenie jednobazowe, a więc wyłącznie jedna klasa może przekazać swoje właściwości i operacje jako podstawę do rozszerzania ich o dodatkowe możliwości. Dzięki temu wyeliminowano możliwość konfliktów między właściwościami przekazywanymi przez klasy nadrzędne.

 

By zrekompensować spadek elastyczności wynikający z pojedynczego dziedziczenia wprowadzono interfejsy. Pozwalają one nazwać pewien określony zbiór operacji, dzięki czemu można określić, że dany obiekt, któremu przypisano dany interfejs (implementujący go), umożliwia wykonanie owego zestawu operacji.

 

Niezależność od architektury

 

Tę właściwość Java posiada dzięki temu, że kod źródłowy programów pisanych w Javie kompiluje się do kodu pośredniego (tzw. bytecode). Powstały kod jest niezależny od systemu operacyjnego i procesora, a wykonuje go tzw. maszyna wirtualna, która (między innymi) tłumaczy kod uniwersalny na kod dostosowany do specyfiki konkretnego systemu operacyjnego i procesora. W tej chwili wirtualna maszyna Javy jest już dostępna dla większości systemów operacyjnych i procesorów.

Jednak z uwagi na to, że kod pośredni jest interpretowany, taki program jest wolniejszy niż kompilowany do kodu maszynowego. Z tego względu maszynę wirtualną często uzupełnia się o kompilator JIT. Istnieją również niezależne od Suna kompilatory Javy - przykładem podprojekt GCC o nazwie GCJ. W rezultacie powstaje szybszy kod, ale można go uruchamiać na jednej tylko platformie, a więc nie jest przenośny.

 

Sieciowość i obsługa programowania rozproszonego

 

Dzięki wykorzystaniu reguł obiektowości, Java nie widzi różnicy między danymi płynącymi z pliku lokalnego a danymi z pliku dostępnego przez HTTP czy FTP.

 

Biblioteki Javy udostępniają wyspecjalizowane funkcje umożliwiające programowanie rozproszone - zarówno między aplikacjami Javy (RMI) jak i między aplikacją Javy a aplikacjami napisanymi w innych językach (CORBA, usługi web service). Inne biblioteki udostępniają możliwość pisania aplikacji uruchamianych w przeglądarkach internetowych (aplety) oraz aplikacji działających ciągle po stronie serwera (serwlety).

 

Niezawodność i bezpieczeństwo

 

W zamierzeniu Java miała zastąpić C++ - obiektowego następcę języka C. Jej projektanci zaczęli od rozpoznania cech języka C++, które są przyczyną największej liczby błędów programistycznych, by stworzyć język prosty w użyciu, bezpieczny i niezawodny.

 

O ile po pięciu odsłonach Javy jej prostota jest dyskusyjna, o tyle język faktycznie robi dużo, by utrudnić programiście popełnienie błędu. Przede wszystkim Java posiada system wyjątków czyli sytuacji, gdy kod programu natrafia na nieprzewidywane trudności, takie jak np.:

operacje na elemencie poza zadeklarowaną granicą tablicy lub elemencie pustym

czytanie z niedostępnego pliku lub nieprawidłowego adresu URL

podanie nieprawidłowych danych przez użytkownika

 

W innych językach programowania programista oczywiście może wprowadzić wewnętrzne testy sprawdzające poprawność danych, pozycję indeksu tablicy, inicjalizację zmiennych itd., ale jest to jego dobra wola i nie jest to jakoś szczególnie wspierane przez dany język. W Javie jest inaczej - obsługa wyjątków jest obowiązkowa, bez tego program się nie skompiluje. Przy tym obiekty wchodzące w skład pakietu standardowego Javy (i gros obiektów z pakietów pochodzących od poważnych programistów niezależnych) implementują wyjątki w każdym miejscu kodu, którego wykonanie jest niepewne ze względu na okoliczności zewnętrzne.

 

Sama obsługa wyjątków polega na napisaniu kodu, który wykona się w odpowiedzi na taką sytuację nadzwyczajną. Może to być np. podstawienie wartości domyślnej przy natrafieniu na nieprawidłową wartość parametru, zaniechanie danej akcji i powrót do stanu stabilnego czy choćby zapisanie pracy przed wyjściem. W sytuacji wyjątkowej program przerywa normalne wykonanie i tworzy specjalny obiekt wyjątku odpowiedniej klasy, który "wyrzuca" z normalnego biegu programu. Następnie zdefiniowany przez użytkownika kod "łapie" ten obiekt wyjątku i podejmuje odpowiednie działanie. Działanie może być dwojakiego typu: wspomniane wyżej środki zaradcze lub odrzucenie takiego "śmierdzącego jaja" dalej, do bloku programu, który nakazał wykonanie wadliwej operacji. Takie podawanie sobie wyjątku może być wieloetapowe i jeśli skończy się w bloku głównym programu powoduje jego przerwanie i ogłoszenie błędu krytycznego.

 

Oprócz systemu wyjątków Java od wersji 1.4 posiada dwa inne systemy wspomagające pisanie niezawodnych programów: logowanie i asercje. Pierwsze pozwalają na zapisanie w plikach dziennika przebiegu działania programu, z dodatkową możliwością filtrowania zawartości, określenia poziomu logowanych błędów itp. Drugie rozwiązanie pozwala na upewnienie się, że pewne założenia co do określonych wyrażeń (np. że liczba, z której wyciągamy pierwiastek jest nieujemna) są prawdziwe. Asercje są o tyle ciekawe, że działają tylko z odpowiednią opcją wykonania programu, dzięki czemu programista może sprawdzić działanie programu, a później bez wysiłku spowodować pominięcie testowej części kodu po prostu przez ominięcie tej opcji.

 

 

Krytyka i kontrowersje

 

Język Java pomimo swoich wielu zalet, posiada wiele wad w tym takie, które wzbudzają liczne kontrowersje:

Najczęściej wymienianą wadą języka Java jest to, że programy pisane w Javie wykonują się wolniej niż programy pisane w językach natywnie kompilowanych (np. C++). Zarzut ten odnosi się szczególnie do starych wersji Javy, kiedy zaawansowane mechanizmy takie jak JIT albo współbieżny odśmiecacz nie były dostępne. Obecnie zdania są mocno podzielone. Można podać przykłady programów zarówno takich, które w Javie będą wykonywały się wolniej niż w C++, jak i takich, które będą wykonywały się szybciej.

Javie zarzuca się, że niezbyt dobrze nadaje się do zastosowań czasu rzeczywistego. Głównym problemem jest brak przewidywalności wydajności oraz nieoczekiwane przestoje powodowane działaniem odśmiecacza. W nowych wersjach Javy ten drugi problem został radykalnie ograniczony.

Często Javie zarzucane jest to, że posiada mniejszą funkcjonalność niż np. C++, co ogranicza programistę. Jako przykład przywołuje się czasami fakt, że aby uruchomić niewielki program trzeba napisać dłuższy kod programu. Niektórzy jednak zwracają uwagę, że również język C++ nie posiada wielu elementów, które można znaleźć w Javie jak np. klasy anonimowe, odśmiecacz, system pakietów, dynamiczne ładowanie klas czy reflection API.

 

 

Dystrybucje języka Java

 

Java nie jest monolitem, lecz składa się z szeregu klas definiujących obiekty różnego typu. Dla przejrzystości klasy te pogrupowane są w hierarchicznie ułożone pakiety. Każdy pakiet grupuje klasy związane z pewnym szerokim zakresem zastosowań języka np. java.io (klasy wejścia-wyjścia), java.util.prefs (klasy użytkowe do obsługi preferencji) czy java.awt (system obsługi trybu graficznego). Hierarchię klas oddają nazwy pakietów, które skonstruowane są podobnie jak ścieżki dostępu do plików. Na przykład klasa Preferences znajdująca się w pakiecie java.util.prefs ma pełną nazwę: java.util.prefs.Preferences, co oznacza:

java - pakiet należy do zestawu standardowych pakietów Javy,

util - to różnego typu klasy użytkowe (pomocnicze) głównie organizujące obsługę różnego typu struktur danych,

prefs - system obsługi preferencji w sposób niezależny od platformy, w którym preferencje systemowe i użytkownika są składowane w postaci hierarchicznego rejestru,

Preferences - konkretna nazwa klasy.

 

Dzięki takiemu systemowi nazwy klas są niepowtarzalne, co pozwala uniknąć niejednoznaczności (np. czy chodzi o klasę List implementującą strukturę listy danych czy o List implementującą graficzną listę wyświetlaną w okienku).

Wszystkie klasy pisane przez programistów niezależnych powinny być umieszczane w innych hierarchiach. Firma Sun często zaleca, by w nazewnictwie klas niestandardowych przed właściwą nazwą pakietu stosować odwróconą nazwę domeny internetowej autora pakietu. Na przykład narzędzie Ant znajduje się w pakiecie org.apache.ant, co zapobiega konfliktom nazw z pakietami innych autorów, którzy również chcieliby nazwać swój pakiet Ant.

 

Domyślnie klasy pakietu nie są możliwe do użycia poza nim. Stąd nie występują konflikty nazw klas przy imporcie różnych pakietów. Klasa pakietu staje się publiczną przy deklaracji public class Foo.

 

 

Gdzie stosuje się Javę?

 

Właśnie z powodu przenośności programów Java jest idealnym programem do pisania klientów baz danych - firmie, która posiada np. zarówno komputery klasy IBM PC jak i Apple wystarczy jeden program. Ponadto, w epoce rozwoju idei Open-source firmy często przesiadają się z drogich systemów operacyjnych firmy Microsoft na bezpłatne i stabilne systemy (np. Linux). Oczywiście Program Javy napisany pod windowsem będzie działał pod Linuxem czy FreeBSD- nawet interfejs będzie wyglądał tak samo). Ponadto, dzięki licznym technologiom opartym o Javę (EJB, JDBC, Swing) pisanie takich klientów jest łatwiejsze niż w jakimkolwiek innym języku.

 

Kolejnym javowym rozwiązaniem, które pozostaje praktycznie bezkonkurencyjne, są Applety. Są to programy, które można umieścić na stronach WWW. Kiedy potrzebna jest np. zmieniająca się na żywo mapa meteorologiczna, zwykle stosuje się Javę. Microsoft próbował konkurować z Javą na tym polu wprowadzając ActiveX, jednak poniósł sromotną porażkę - doszło do tego, ze przeglądarka IE (dziecko Microsoftu) ostrzegało przed stronami zawierającymi te kontrolki - były one bardzo niebezpieczne - programista mógł np. uzyskać listę plików (wszystkich) z dysku klienta, który wszedł na stronę zawierającą kontrolkę. Technologia ta umarła śmiercią tragiczną. W ciągu ostatnich lat wyrósł jednak javie nowy konkurent - flash. Od kiedy programiści firmy Macromedia napisali klasę XMLSocket (wersja 5.0 - dwa lata temu) we flashu można np. utrzymywać łączność z serwerem. Jednak aplikacje flasha są wolniejsze od Javy.

 

Inną popularną gałęzią jest generowanie stron www. Służą do tego dwie pokrewne technologie Javowe: JSP i serwlety. W Europie popularniejsze od nich jest php, lecz w USA jsp jest bardziej popularna.

 

Następcy Javy

 

W 2007 roku firma Sun ogłosiła swe plany wprowadzenia nowego języka skryptowego o nazwie JavaFX Script. Cele przyświecające temu językowi są podobne do tych które zawsze towarzyszyły Javie:

prostota tworzenia aplikacji

niezależność od architektury

platformą uruchomieniową mają być komputery PC oraz urządzenia przenośne (np. telefony komórkowe)

 

Język JavaFX Script nie jest zupełnie nowym produktem, lecz rozszerzeniem wcześniejszej Javy. Nowe aplikacje będą funkcjonować bez żadnych modyfikacji na każdej maszynie wirtualnej Javy.

 

Tym posunięciem firma Sun stara się dorównać konkurencji, która promuje takie rozwiązania jak:

technologia Flex (Adobe)

Silverlight (Microsoft)

 

 

Dziś, po prawie dziesięciu latach od jej utworzenia, z platformy Java korzystają ponad 4 miliony programistów we wszystkich głównych segmentach branży komputerowej na świecie. Java jest obecna w najróżniejszych urządzeniach, komputerach i sieciach wykorzystujących każdą technikę programowania.

 

Dzięki uniwersalności, wydajności, przenośności i bezpieczeństwu Java stała się idealną technologią sieciową. Obecnie z technologii Java korzysta ponad 2,5 miliarda urządzeń:

ponad 700 milionów komputerów PC;

ponad miliard telefonów komórkowych i innych urządzeń przenośnych (źródło: Ovum);

1,25 miliarda kart chipowych;

oraz dekodery TV, drukarki, kamery internetowe, gry, samochodowe systemy nawigacji, terminale loteryjne, urządzenia medyczne, parkomaty itp.

Technologia Java jest obecna w najróżniejszych sieciach i urządzeniach — od Internetu i naukowych superkomputerów po laptopy i telefony komórkowe, od symulatorów giełdowych pozwalających zagrać na Wall Street po konsole do gier i karty kredytowe — niemal wszędzie.

 

 

Dlaczego programiści wybierają technologię Java?

 

Język programowania Java został już dopracowany, poszerzony, przetestowany i z powodzeniem wykorzystany przez ponad cztery miliony programistów aktywnie uczestniczących w rozwoju technologii Java.

 

Stabilna, niezwykle solidna i zaskakująco uniwersalna technologia Java stała się niezastąpionym narzędziem umożliwiającym programistom:

uruchamianie programów pisanych na jednej platformie na praktycznie dowolnej innej platformie;

tworzenie programów, możliwych do uruchomienia z poziomu przeglądarki internetowej i usług sieciowych;

opracowywanie aplikacji serwerowych obsługujących fora internetowe, sklepy internetowe, ankiety, formularze HTML i wiele innych;

łączenie aplikacji lub usług opartych na technologii Java w celu tworzenia aplikacji lub usług najlepiej dostosowanych do potrzeb użytkownika;

Pisanie efektywnych aplikacji dla telefonów komórkowych, procesorów zdalnych, tanich produktów powszechnego użytku oraz praktycznie każdego innego urządzenia opartego na układach cyfrowych.

 


Bibiografia

 

1. Oficjalna strona produktu:

http://www.java.com/pl/  

 

2. Wolna  encyklopedia internetowa

http://pl.wikipedia.org/wiki/Java

 

3. Internetowa gazeta  „Echo dni”

http://www.igf.waw.pl/2006/09/20/echo-dnia-od-debu-do-kawy-czyli-historia-jezyka-java/  

 

4. Strona prywatnej firmy Ehelp.pl

http://www.ehelp.pl/modules/tinycontent/index.php?id=11  

 

5. E-point SA internetowy software house

http://www.e-point.pl/u235/navi/28259 

 

6. Kompletny kurs Javy 

http://java.sun.com/docs/books/tutorial/  

 

...
Zgłoś jeśli naruszono regulamin