Java - wprowadzenie

2008-12-26 , Papiewski Łukasz , Software / Oprogramowanie / Narzędzia

Poniżej krótki FAQ dla tych którzy zamierzają programować w Javie. Dalej przykładowy dość rozbudowany kod wraz z najnowszą implementacją wykorzystującą style systemowe. Następnie przejdziemy do zaawansowanych możliwości Javy i jej wirtualnego systemu.

Historia

Czym jest Java? Java jest językiem, platformą,a architekturą, środowiskiem, specyfikacją oraz implementacją. Powstała 1991 roku jako nieudany projekt aplikacji webowych 'Oak'. W 1995 roku ukazała się wersja zorientowana obiektowo. Nie była to żadna nowość jak na te czasy. Dużo rzeczy zaczerpnięto z gotowych wzorców jak C++. Nacisk został położony na wyeliminowanie wszelkich niedoskonałości związanych ze skłonnością do pojawiania się przeróżnych nieoczekiwanych błędów jaka to ma miejsce w C++, gdzie programista musi mieć na uwadze wiele krytycznych aspektów jak wyjątki, wskaźniki zerowe. Jak się można przekonać, kompilator Javy wymusza pewien schemat implementacji który ma nas przed takimi niespodziankami uchronić. Nie tylko poprawiono obsługę wyjątków ale także odciążono programistów od uciążliwego zarządzanie pamięcią. W samym języku zawarto wspomaganie programowanie wielowątkowego, dodano bezpieczną kontrolę typów.

FAQ

Od czego zacząć?

Naukę Javy najlepiej zacząć z dobrym IDE. Z faktu, że Java przez swoją wirtualną maszynę jest między platformowa, proponował bym natywne rozwiązanie pod tą technologię czyli NetBeans, który w tymże języku jest napisany. Innym analogicznym rozwiązaniem jest Eclipse. Oba narzędzia programistyczne wspomagają (mogą wspomagać po zainstalowaniu plugin'ów) także C, C++, Hibernate itp. Oczywiście nie zapominajmy o Vim'ie który także po wgraniu paru skryptów pozwala na nieskrępowaną pracę z kodem Javy.

W takich narzędziach powinniśmy znaleźć wszystkie niezbędne rzeczy, których potrzeba do szybkiego i efektywnego tworzenia aplikacji. Dodatkowo wiele pomocy, wyjaśnień klas, narzędzi do automatycznego generowania kodu i łatwego nim manipulowania (np. plikami 'xml')

Na co zwracam uwagę to niezbędna funkcja uzupełniania klas i kodu. Java ma bardzo rozbudowaną obiektywność i wszelkie klasy np. do czytanie i pisania tekstu są mocno rozgałęzione, przez co utrudniają na początku zapamiętanie czasem przydługich nazw. Chociaż cała specyfika Javy wraz z pewnymi standardami pisania (Camel Case, długie czytelne nazwy procedur, funkcji i zmiennych) są wbrew pozorom jej mocnymi cechami, to jednak bez dobrego edytora i uzupełniania składni się nie obejdzie. Warto też wyrobić sobie pewne jednorodną konwencje pisania, postaram się równocześnie zaprezentować takową, przeze mnie obraną.

A jak z kwestią wydajności programów?

Mówi się, że programy tworzone w Java'ie nie są tak szybkie jak w C++ oraz że zabierają sporo pamięci. To drugie związane jest to z polityką zarządzania pamięcią maszyny wirtualnej, która jest dość rozrzutna i każdy uruchamiany program dostaje jej przydzielonej z nadwyżką. Jeśli chodzi o szybkość, wiele gotowych dobrze zaimplementowanych bibliotek wchodzących w skład środowiska uruchomieniowego znacznie przyspiesza jego wykonywanie, ale raczej nie można stwierdzić, że jest konkurencyjny z dobrze napisanym i skompilowanych plikiem binarnym języków C.

Java vs C++ | Java && C++

Zagorzałym zwolennikom C, C++ trzeba powiedzieć, że czasem bardziej ogólnikowe i obiektowe ujęcie danego projektu, cechujące się bardziej na przemyśleniu ogólnej struktury, API (tzw. projektowanie Bottom Down ) jest w większości przypadków o wiele bardziej wydajne. Nic nie stoi na przeszkodzie aby rozpocząć w projekt w Javie, a gdy będzie potrzeba większego dopasowania, wydajności, lepszego dopasowania algorytmów lub czasem nawet pedantycznie przyspieszających wstawek asembler'owych ( np. w cyfrowym przetwarzaniu sygnałów ), wykonać wersję w innym języku. Dobrze być sceptycznie nastawionym ale nie fanatycznie. Dodatkowo wiedza z zakresu nowego języka i rozwiązań z nim związanych na pewno wyjdzie na zdrowie. Każdy język służy troszeczkę innym celom i to właśnie od projektu zależy, który z nich będzie najwydajniejszy, a od doświadczenia programisty aby to dostrzec.

Definitywne plusy

Wchodząc w szranki z C++, Java może wychodzi raczej blado, to jednak biorąc pod uwagę inne języki wysokiego poziomu jest to na pewno opcja godna uwagi.
  • logiczny, spójny, obiektowy język
  • multiplatformowość - zastosowanie w PDA i telefonach
  • wiele gotowych bibliotek oferujących gotowe rozwiązania
  • proste API soketów, połączeń internetowych
  • bogate funkcje GUI, możliwość dopasowywania stylistyki do systemu (integracja ze stylami wewnętrznymi GTK+, windowsa czy Mac'a)
  • powszechnie wykorzystywany ostatnio w branży jako wymóg pracodawcy

Krótka referencja po klasach

rmi - jest to następca RPC (remote procedure call) pozwala aby cały obiekt wykonał się zdalnie, a nie tylko funkcja. Podobieństwa można szukać w takich rozwiązaniach jak CORBA i DCOM. Choć na ten moment są już troszeczkę przestarzałe (mówi się o następcy : projekcie ICE)

activation - aktywuje
    dgc - odśmiecacz
    server - używane gdy nasz sewer przyjmuję obiekty od klientów
security - bezpieczenstwo
   cert
   interfaces
   spec

sql - udostepnia interfejs JDBC oraz umożliwia wykonywanie komend w sql, wmaga zainstalowanego drivera dla bazy z którą się łączymy

text - ułatwia pracę z datami, różnorakimi formatami tekstow

util - asortyment niezwykle przydatnych klas

java.util.Date--Representation of time and date.
 java.util.Calendar--Localized formatting, parsing, and interpretation of date and
 time fields. A subclass of Calendar is provided for the Gregorian calendar, and future
 support is intended for various lunar and national calendars.
 java.util.Bitset--Arbitrary-length bit arrays.
 Properties and resources--Management of persistent properties and locale-specific
 resources (such as localized messages).
 java.util.StringTokenizer--A simple tokenizer for extracting words from
 strings.
 java.util.Random--Random number generation.
 The Collections Classes--Classes for lists, arrays, balanced trees, sets, and
 hashmaps--so you never have to reinvent those particular wheels.
 zip
 jar

swing - wprowadzony wraz z JDK1.2, następca AWT, 1200 klas, krótko najbardziej rozbudowany toolkit do tworzenia GUI

Cytaty

- Simplicity is the ultimate sophistication. - Leonardo da Vinci,
- Popularny człowiek wzbudza zawiść potężnych - Thufir Hawat o Leto Atrydzie (na Kaladanie),
- Szczęście następuje po smutku, a smutek po szczęściu; człowiek jest naprawdę wolny, gdy przestaje rozróżniać między smutkiem a szczęściem, między dobrem a złem - Aforyzmy buddyjskie.