Java

     1 Interfejsy, dziedziczenie
     2 Rozszerzalność
     3 Specyfikacje API JavySE
     4 Tutoriale do JavySE
     5 JavaFX 2
     6 Specyfikacje API JavyEE
     7 Tutoriale do JavyEE
     8 Zestaw przykładów w Javie
     9 Kursy programowania obiektowego w Javie
     10 Książki o Javie

# Wstęp i historia
Zorientowany obiektowo język programowania stworzony w firmie Sun Microsystem (przejęta przez Oracle w 2010 roku) pod kierunkiem Jamesa Goslinga i opublikowany w 1995 roku wraz z Maszyną Wirtualną Java (JVM).

Początkowo język jak i maszyna wirtualna miały stanowić platformę dla telewizji interaktywnej. Jednak ze względu na zbyt duże trudności, m.n. zbyt zaawansowaną i niedostępną w tym czasie technologię, postanowiono stworzyć język, który będzie konkurentem dla C++. Większość elementów składni języka zaczerpnięto z C++, a rozwiązania takie jak maszyna wirtualna czy automatyczne zwalnianie pamięci z Smalltalk.

Od początku firma Sun wyznaczyła najważniejsze cechy Javy jako platformy:

  • powinien być prosty w użyciu, zorientowany obiektowo z "przyjazną" składnią.
  • powinien bezpieczny i "solidny".
  • powinien być neutralny architektonicznie i łatwy w rozszerzeniu.
  • powinien zapewniać wysoką wydajność.
  • powinien być interpretowany, wielowątkowy i dynamiczny.
    # Cechy języka
    Język rzeczywiście posiada uproszczoną w stosunku do C++ składnię. Zrezygnowano też z dualnego dostępu do zmiennych - przez wartość i przez referencję, na rzecz przekazywania obiektów przez referencję. Język nie wspiera przeciążania operatorów (choć operator + został przeciążony dla klasy String ) ani nie umożliwia tworzenia własnych. Jednocześnie na obecnym etapie rozwoju programista ma do dyspozycji mechanizm adnotacji czy typy generyczne, które są bardziej rozbudowane w stosunku do znanej z C++ biblioteki STL.
    Java jest językiem zorientowanym obiektowo ponieważ poza typami obiektowymi posiada też typy proste reprezentujące liczby całkowite, zmiennopozycyjne, wartości logiczne i pojedyncze znaki. W wersji 1.5 języka wprowadzono mechanizm auto-boxingu, który pozwala na swobodne mieszanie typów prostych i ich obiektowych odpowiedników, a to dzięki zamianie typów prostych na obiektowe w trakcie kompilacji.

    Interfejsy, dziedziczenie

    Język Java pozwala na dziedziczenie po jednej klasie nadrzędnej. Wszystkie klasy dziedziczą po klasie Object. Można też tworzyć interfejsy, które jednak nie mogą dostarczać domyślnej implementacji (mixin).
    # Bezpieczeństwo
    Java udostępnia kilka mechanizmów zabezpieczających programistów przed popularnymi błędami. Pierwszym z nich jest automatyczne zwalnianie pamięci. Programista jest dzięki temu "zwolniony" z dbania o usuwanie nieużywanych obiektów. Nie oznacza to jednak, że nie można spowodować wycieku pamięci. Drugim jest silne typowanie oraz konieczność dostarczenia wszystkich użytych klas w czasie kompilacji. Kolejnym jest sposób obsługi wyjątków i wydzielenie grupy wyjątków weryfikowalnych, które muszą zostać obsłużone przez programistę. Ostatnim istotnym elementem jest tzw. security policy czyli zestaw reguł pozwalających na definiowanie dostępnych i zabronionych działań dla programów na danej JVM.
    # Niezależność od architektury
    Java była reklamowana hasłem "napisz raz uruchom wszędzie". Jest to główna cecha rozpoznawcza języka która stała się też celem niewybrednych dowcipów[#]_. Rzeczywistą zaletą jest rozgraniczenie elementów platformy systemowej i elementów dostępnych w języku bez konieczności wywołań systemowych. W toku prac nad językiem zauważono, że można stworzyć zbiór elementów API, które mogą być napisane w Javie bez wykorzystania wywołań systemowych. Ograniczyło to ilość kodu, który trzeba implementować w zależności od platformy. Teoretycznie prosta implementacja JVM powinna wymagać tylko systemowej I/O (system plików, sieć, klawiatura, mysz itp.). W praktyce implementowane są też niektóre operacje takie jak np. <samp>Math.sqrt</samp>.

    Rozszerzalność

    Rozszerzalność platformy Java jest doskonale widoczna jeżeli przyjrzymy się innym językom, które są uruchamiane w ramach JVM. Scala i Groovy doskonale ilustrują fakt, iż język Java i JVM to dwa niezależne byty. Poza rozszerzalnością składni jest też możliwe tworzenie rozszerzeń wprowadzających nowe paradygmaty aspektowy - AspectJ czy funkcyjny Clojure. Istnieją też rozszerzenia architektury pozwalające na swobodne zarządzanie zasobami w ramach działającego JVM - z głównym rozwiązaniem OSGi.
    # Wydajność
    Początkowo Java była uważana za język prosty, ale powolny i zasobochłonny. Jednakże kolejne modyfikacje oraz wprowadzenie kompilatora JIT (Just In Time) spowodowało, że Java stała się językiem w którym niektóre problemy mogą zostać rozwiązane szybciej niż w C[#]_.
    Nadal jednak wydajność jest tematem zażartych dyskusji i flamewarów pomiędzy programistami.
    # Inne cechy języka i platformy
    Kod jest kompilowany do bytekodu, czyli asemblera maszyny wirtualnej, a następnie interpretowany przez JVM. Obecnie dzięki zastosowaniu JIT maszyna wirtualna potrafi wykryć często wykorzystywane fragmenty bytekodu i skompilować je do kodu maszynowego platformy na której jest uruchomiona.
    Java udostępnia API do pisania programów współbieżnych. Jednocześnie nie gwarantuje zachowania reżimu czasowego co czyni ją praktycznie nie przydatną w programowaniu systemów czasu rzeczywistego. Wynika to z niedeterministycznej natury automatycznego odśmiecania pamięci, który nie pozwala na przewidywanie momentu uruchomienia, ani czasu pracy. Istnieją co prawda wersje Garbage Collector, które pozwalają na określenie takich parametrów jak periodyczność uruchomienia, maksymalny czas pracy, wielowątkowe działanie, ale nie są one dostępne w standardowych ustawieniach JVM.

# Materiały dostępne w sieci
Podziękowania dla użytkownika User:Wibowit, który przygotował zestawienie na forum.

Specyfikacje API JavySE

Tutoriale do JavySE

JavaFX 2

Specyfikacje API JavyEE

Tutoriale do JavyEE

Zestaw przykładów w Javie

Kursy programowania obiektowego w Javie

Książki o Javie

.. [#] http://www.davidgrant.ca/java_and_anal_sex
.. [#] http://en.wikipedia.org/wiki/Java_performance

Wydajna zmiana kolorów obrazu

  • 2014-10-09 09:26
  • 0 komentarzy
  • 1680 odsłon

Zagnieżdżone pętle for

  • 2014-05-09 15:12
  • 0 komentarzy
  • 2792 odsłony

Look and Feel w Javie

  • 2012-06-22 08:36
  • 3 komentarzy
  • 4444 odsłony

Kohanowe podejście do bazy danych - Firebird

  • 2011-09-14 19:27
  • 0 komentarzy
  • 5043 odsłony

Java 7 – nowa wersja nadchodzi

  • 2011-09-11 13:25
  • 0 komentarzy
  • 4512 odsłon

Scala

  • 2011-07-09 16:31
  • 0 komentarzy
  • 3002 odsłony

Wprowadzenie do NetBeans IDE

  • 2011-01-27 21:34
  • 6 komentarzy
  • 7996 odsłon

Wprowadzenie do NetBeans - Część 1. Opis IDE

  • 2010-07-01 13:34
  • 3 komentarzy
  • 4575 odsłon

Schemat działania Eventów w Javie

  • 2010-05-01 17:48
  • 0 komentarzy
  • 3055 odsłon

IDE, czyli edytory kodu

  • 2010-02-14 12:41
  • 0 komentarzy
  • 6472 odsłony

JavaFX

  • 2010-01-18 20:43
  • 1 komentarz
  • 1950 odsłon

FlowLayout

  • 2010-01-13 21:39
  • 0 komentarzy
  • 1326 odsłon

CardLayout

  • 2010-01-11 22:25
  • 4 komentarzy
  • 1197 odsłon

Własne Komponenty GWT

  • 2009-12-19 01:12
  • 0 komentarzy
  • 1352 odsłony