Java EE produkcja oprogramowania PPJ PODSTAWY PROGRAMOWANIA W JAVIE PODSTAWY JĘZYKA JAVA 1 Warszawa, 2016Z
2 Ogólna charakterystyka języka Java
3 Java 1/2 Język programowania Java został opracowany przez firmę Sun Microsystems w 1995. Java jest obiektowym językiem programowania. Java umożliwia programowanie współbieżne. Program napisany w języku Java jest kompilowany do kodu bajtowego i uruchamiany w maszynie wirtualnej JVM. Programy napisane w języku Java są przenośne między platformami. W języku Java można budować aplikacje na urządzenia stacjonarne i mobilne, w technologii tradycyjnej i webowej.
4 Java 2/2 Maszyna wirtualna Java zarządza dynamicznie przydzieloną pamięcią. Programowy zarządca Garbage collector automatycznie zwalnia nieużywaną pamięć. Składnia języka Java bazuje na składni języka C++. Język Java jest bardziej złożony niż Python, ale prostszy niż C++. Na języku Java bazuje język C#. W lipcu 2014 roku IEEE (Institute of Electrical and Electronics Engineers) opublikował listę dziesięciu najczęściej używanych języków programowania. Język Java znalazł się na 1. miejscu. Uwaga. Java i JavaScript to dwa RÓŻNE języki programowania.
5 Procesor, język maszynowy Procesor (CPU) jest sekwencyjnym urządzeniem cyfrowym, które pobiera dane z pamięci, interpretuje je i wykonuje jako rozkazy. Procesor wykonuje ciąg instrukcji ze zbioru operacji podstawowych (listy rozkazów procesora). Język maszynowy składa się z instrukcji, które mogą być bezpośrednio wykonywane przez procesor. Większość programów zapisanych w języku wysokiego poziomu (np. Java, C#, C++) nie może być bezpośrednio wykonanych przez procesor. Program musi być przetłumaczony na język maszynowy.
6 Komputer, instrukcje CPU Instrukcja CPU Z = X + Y 1. Odczytaj wartość zapisaną w pamięci o adresie X 2. Odczytaj wartość zapisaną w pamięci o adresie Y 3. Dodaj 4. Wynik zapisz w pamięci o adresie Z Języki programowania wysokiego poziomu są łatwiejsze do stosowania niż instrukcje CPU, ale wymagają tłumaczenia na język maszynowy.
7 Maszyna wirtualna Javy 1/3 Tłumaczenie na język maszynowy może być wykonane przez program komputerowy nazywany kompilatorem. Kompilator czyta program zapisany w języku wysokiego poziomu i tłumaczy na program w języku maszynowym, który może być wykonany przez procesor. Programy w języku Java kompilowane są do kodu maszynowego wirtualnego komputera wirtualnej maszyny Java (JVM, Java Virtual Machine). Kod maszynowy JVM nazywany jest kodem bajtowym.
8 Maszyna wirtualna Javy 2/3 Dla każdego typu komputera i systemu operacyjnego wymagany jest dedykowany interpreter kodu bajtowego Java. Kod bajtowy może być wykonany na każdym komputerze, na którym zainstalowano interpreter, który implementuje JVM. Jest to podstawowa zaleta języka Java program skompilowany do kodu bajtowego może być uruchomiony na dowolnym komputerze, na którym zainstalowano interpreter implementujący JVM.
9 Maszyna wirtualna Javy 3/3 Interpretacja kodu bajtowego jest czasochłonna i dlatego programy napisane we wczesnych wersjach Java wykonywały się wolniej niż programy w innych językach programowania, które korzystały z bezpośredniej kompilacji do kodu maszynowego. Problem został rozwiązany przez wprowadzenie kompilatorów JIT (Just-in-Time). Kompilator JIT kompiluje program do kodu maszynowego przed wykonaniem danego fragmentu kodu. Kompilacja może się odbywać w momencie pierwszego dostępu do kodu zapisanego w pliku lub pierwszego wywołania funkcji.
10 Struktura programu w Javie
11 Syntaktyka, semantyka, pragmatyka Składnia ściśle opisuje język programowania. Reguły składniowe określają słownik języka oraz sposób w jaki program może być skonstruowany. Reguły opisują zasady budowy instrukcji: przypisania, wywołania, powrotu, skoku, blokowe, warunkowe, wyboru, pętle, zasady konstruowania wyrażeń itd. Program zbudowany zgodnie ze składnią języka (syntaktycznie poprawny) może być skompilowany i wykonany. Dla użytkowników i projektantów programu istotne jest, aby program działał i zwracał prawidłowe wyniki zgodnie z wymaganiami, innymi słowy, aby był semantycznie poprawny. Poza składniową i semantyczną poprawnością, ważny jest styl programowania, który powinien uwzględniać dobre praktyki programowania. Styl zamiennie nazywany jest pragmatyką. Styl programowania obejmuje takie zagadnienia jak formatowanie kodu, nazewnictwo: zmiennych, podprogramów, klas, właściwe komentowanie, przejrzysta algorytmika itd.
12 Struktura programu w Javie 1/3 Proces budowy programu w Javie składa się z trzech kolejno wykonywanych kroków: (1) napisania w edytorze tekstu kodu programu i zapisania go w pliku, (2) kompilacji kod źródłowego do kodu bajtowego, (3) wykonania (interpretacji kodu bajtowego na kod maszynowy i wykonanie). Struktura typowego programu jest następująca: public class NazwaProgramu { (opcjonalna lista zmiennych lub procedur) public static void main(string[] args) { (instrukcje) } }
13 Struktura programu w Javie 2/3 Przykładowy kod programu: /** Program wypisuje komunikat * Witaj na studiach Java EE. * na standardowym wyjściu. */ public class Witaj { public static void main(string[] args){ // pierwsza wykonywalna instrukcja programu System.out.println( "Witaj na studiach Java EE."); } }
14 Struktura programu w Javie 3/3 Komentarze pomagają programistom w rozumieniu semantyki programu. Komentarze blokowe rozpoczynają się parą znaków /* i kończą parą znaków */. Komentarze wierszowe rozpoczynają się parą znaków // i kończą znakiem końca wiersza. Komentarze są ignorowane przez kompilator. Tablica args z elementami typu String, zawiera parametry wywołania programu. Przykładowo, jeżeli program w oknie terminala został wywołany poleceniem java witaj na WEiTI to pierwszy element tablicy (args[0]) zawiera wartość witaj, drugi element (args[1]) wartość na, trzeci WEiTI. (Tablice w Javie indeksowane są od zera.)
15 Procedury Procedura jest sekwencją instrukcji, zgrupowanych i identyfikowanych przez nazwę. Nazwa procedury używana jest w wywołaniu procedury. Procedura wbudowana jest częścią języka i jest dostępna dla każdego programu. Przykładowo, polecenie System.out.println wywołuje procedurę wbudowaną. Składania języka Java wymaga, aby wszystkie instrukcje były wewnątrz klasy ( w ciele klasy ).
16 Wywołanie procedury Wywołanie procedury składa się z nazwy procedury i pary nawiasów okrągłych. Jeżeli procedura pobiera parametry, to ich wartości umieszczane są wewnątrz nawiasów i oddzielane przecinkami. Jeżeli procedura zwraca wartość, to wartość może być przypisana do zmiennej lub użyta w wyrażeniu. Wywołanie metody powoduje przejście sterowania do pierwszej instrukcji w metodzie. Jeżeli metoda zwraca wartość, to jej działanie kończy się wywołaniem instrukcji return, która zwraca wartość. Jeżeli metoda nie zwraca wartości, to jej działanie kończy się po wykonaniu ostatniej instrukcji. Po zakończeniu działania procedury, sterowanie powraca do miejsca wywołania procedury.
17 Składania wywołania procedury Metody wywoływane są po utworzeniu obiektu danej klasy 1. Do wywołania metody najczęściej stosowany jest operator kropki (.) 2. Przykład: String tytul = "Java EE"; int ileznakow = tytul.length(); 1 od tej reguły są wyjątki np. metody statyczne (omówione w dalszej części) 2 metody mogą być wywołane także w inny sposób np. z wykorzystanie mechanizmu refleksji
18 Procedura main Wykonanie programu rozpoczyna się od wywołania procedury main. W programie może być tylko jedna procedura main. Nazwa klasy, która zawiera procedurę main jest nazwą programu. W procedurze main mogą znajdować się wyrażenia wołające inne procedury, także procedury zdefiniowane w innych klasach. Procedura main jest zadeklarowana jako publiczna (słowo kluczowe public) co oznacza, że może być wywołana spoza programu (procedurę wywołuje interpreter kodu bajtowego). Procedura nie zwraca wartości (słowo kluczowe void) i jest statyczna (słowo kluczowe static). Pomiędzy parą nawiasów klamrowych znajduje się sekwencja instrukcji tzw. ciało procedury.
19 Klasy Klasy publiczne muszą być zapisane w plikach o takiej samej nazwie jak nazwa klasy i z rozszerzeniem.java (w przykładzie Witaj.java). Po skompilowaniu, kod bajtowy zapisywany jest w plikach z rozszerzeniem.class (w przykładzie Witaj.class). Pozostałe elementy kodu źródłowego (kodu programu) takie jak wcięcia, odstępy, wyrównania itd. określają styl programowania i są przez kompilator ignorowane, ale mają duże znaczenie dla programistów ponieważ zwiększają czytelność kodu, ułatwiają zrozumienie działania programu, ułatwiają serwisowanie i rozbudowę.
20 Kompilacja kodu źródłowego Kompilacja kodu źródłowego programu zapisanego wykonywana jest przez program javac. Parametrami wywołania są pliki z kodem źródłowym (pliki z rozszerzeniem.java). Przykład polecenia kompilacji w wierszu poleceń (w oknie terminala): javac Witaj.java Kod bajtowy zapisywany jest w pliku z rozszerzeniem.class (w przykładzie Witaj.class).
21 Wykonanie programu Kod bajtowy jest interpretowany na kod maszynowy przez program java. Parametrem wywołania programu interpretera jest nazwa programu (nazwa pliku, który zawiera kod bajtowy klasy, w której znajduje się procedura main). Przykład polecenia uruchomienia programu w wierszu poleceń: java Witaj
22 Błędy Błędy można podzielić na błędy: kompilacji błędy w składni kodu źródłowego wykryte podczas kompilacji, wykonania wykryte w czasie działania programu np. dzielenie przez zero, odwołanie do nieistniejącego indeksu tablicy, logiczne wykryte w czasie działania programu np. kiedy wynik działania programu jest inny niż oczekiwany.