Krótka historia Java - it.pwsz-ns.edu.plit.pwsz-ns.edu.pl/~wprzygoda/JEZYK_JAVA_2017.pdf ·...

43
Krótka historia Java Green Project (1991) – Sun Microsystems Pierwotna nazwa: Oak W trakcie projektowania zmieniona na: Java Pierwsze publiczne wydanie 1995 ”Write Once, Run Anywhere”

Transcript of Krótka historia Java - it.pwsz-ns.edu.plit.pwsz-ns.edu.pl/~wprzygoda/JEZYK_JAVA_2017.pdf ·...

Page 1: Krótka historia Java - it.pwsz-ns.edu.plit.pwsz-ns.edu.pl/~wprzygoda/JEZYK_JAVA_2017.pdf · wspierania programowania w Języku JAVA, oraz wielu innych (obecna wersja – „neon”)

Krótka historia Java

• Green Project (1991) – Sun Microsystems• Pierwotna nazwa: Oak• W trakcie projektowania zmieniona na: Java• Pierwsze publiczne wydanie 1995• ”Write Once, Run Anywhere”

Page 2: Krótka historia Java - it.pwsz-ns.edu.plit.pwsz-ns.edu.pl/~wprzygoda/JEZYK_JAVA_2017.pdf · wspierania programowania w Języku JAVA, oraz wielu innych (obecna wersja – „neon”)

Co jest potrzebne?

• http://java.oracle.com• Java SE (Standard Edition) obecnie wersja 8u65/66• JDK (Java Development Kit) – wieloplatformowe

(windows, linux, mac, solaris)• Kompilator: javac, wirtualna maszyna: java

• IDE (najpopularniejsze: http://eclipse.org)• Wieloplatformowa nakładka stworzona z myślą

wspierania programowania w Języku JAVA, oraz wielu innych (obecna wersja – „neon”)

• Należy pobrać właściwą wersję instalacyjną (OS, 32- lub 64-bit)

Page 3: Krótka historia Java - it.pwsz-ns.edu.plit.pwsz-ns.edu.pl/~wprzygoda/JEZYK_JAVA_2017.pdf · wspierania programowania w Języku JAVA, oraz wielu innych (obecna wersja – „neon”)

Niezależność od platformy

JAVA COMPILER

JAVA BYTE CODE

JAVA INTERPRETER

Windows Macintosh Solaris Linux

(translator)

(ten sam dla wszystkich platform)

(na każdym z systemów)

Page 4: Krótka historia Java - it.pwsz-ns.edu.plit.pwsz-ns.edu.pl/~wprzygoda/JEZYK_JAVA_2017.pdf · wspierania programowania w Języku JAVA, oraz wielu innych (obecna wersja – „neon”)

JAVA – język kompilowany i interpretowany

edytor kompilator interpreter

programista

Kod źródłowy

plik .java

Kod bajtowy

plik .class

urządzenie+ system operacyjny

notatnik,emacs, vi,eclipse…

javac javaappletviewerprzeglądarka

Page 5: Krótka historia Java - it.pwsz-ns.edu.plit.pwsz-ns.edu.pl/~wprzygoda/JEZYK_JAVA_2017.pdf · wspierania programowania w Języku JAVA, oraz wielu innych (obecna wersja – „neon”)

Architektura neutralna i przenośna

Kompilator Java – działa na kodzie źródłowym (pliki z rozszerzeniem .java)

Tworzy plik z kodem bajtowym, wykorzystywanym przez maszynę wirtualną

Interpreter jest zależny od konkretnego środowiska i on decyduje jakzostanie wykonany ten sam kod bajtowy.

Można rozwijać dwa rodzaje programów Java:- samodzielne aplikacje - interpreter- aplikacje webowe (aplety) – przeglądarka z interpreterem

javac MojaKlasa.java

java MojaKlasa.class

Page 6: Krótka historia Java - it.pwsz-ns.edu.plit.pwsz-ns.edu.pl/~wprzygoda/JEZYK_JAVA_2017.pdf · wspierania programowania w Języku JAVA, oraz wielu innych (obecna wersja – „neon”)

Java – pierwszy program

• „wszystko jest obiektem” • samodzielny program musi mieć funkcję main

Page 7: Krótka historia Java - it.pwsz-ns.edu.plit.pwsz-ns.edu.pl/~wprzygoda/JEZYK_JAVA_2017.pdf · wspierania programowania w Języku JAVA, oraz wielu innych (obecna wersja – „neon”)

Java – argumenty i ich liczba

Page 8: Krótka historia Java - it.pwsz-ns.edu.plit.pwsz-ns.edu.pl/~wprzygoda/JEZYK_JAVA_2017.pdf · wspierania programowania w Języku JAVA, oraz wielu innych (obecna wersja – „neon”)

Java – zarządzanie pamięcią

• Java zarządza pamięcią automatycznie• GC (Garbage Collector) „odśmiecacz” jest częścią

JVM i działa zwykle jako niezależny wątek, jest procesem bardzo autonomicznym

• Zmienne Javy tworzone na stercie• Dopóki jest jakieś powiązanie z obiektem, nie

zostaje on usunięty• Gdy wszystkie dowiązania do obiektu się kończą,

może on być skasowany przez GC• Zmienne lokalne funkcji lub bloku kodu kończą się

wraz z wykonaniem funkcji, wyjściem z bloku• Można też ustawić zmienną na null (wtedy jej

zasób kwalifikuje się dla GC)

Page 9: Krótka historia Java - it.pwsz-ns.edu.plit.pwsz-ns.edu.pl/~wprzygoda/JEZYK_JAVA_2017.pdf · wspierania programowania w Języku JAVA, oraz wielu innych (obecna wersja – „neon”)

Klasy i obiekty

Każda klasa w osobnym pliku.

Page 10: Krótka historia Java - it.pwsz-ns.edu.plit.pwsz-ns.edu.pl/~wprzygoda/JEZYK_JAVA_2017.pdf · wspierania programowania w Języku JAVA, oraz wielu innych (obecna wersja – „neon”)

Wszystko jest obiektem

Zamiana tablicy znaków w obiekt String

Funkcjonalnie to samo:

Można zrobić odwrotne przekształcenie

Page 11: Krótka historia Java - it.pwsz-ns.edu.plit.pwsz-ns.edu.pl/~wprzygoda/JEZYK_JAVA_2017.pdf · wspierania programowania w Języku JAVA, oraz wielu innych (obecna wersja – „neon”)

Typy zmiennych w Java

Zmienne proste:- Wielkości numeryczne (całko-

wite i zmiennoprzecinkowe)- Pojedyncze znaki (characters)- Zmienne logiczne (true/false)

Zmienne złożone:- Strings- Dates- cokolwiek…

- klasy: nazwa z wielkiej litery- zmienna: nazwa z małej litery

Page 12: Krótka historia Java - it.pwsz-ns.edu.plit.pwsz-ns.edu.pl/~wprzygoda/JEZYK_JAVA_2017.pdf · wspierania programowania w Języku JAVA, oraz wielu innych (obecna wersja – „neon”)

Proste zmienne i konwersje

Zmienne i ich zakresy …oraz... klasy pomocnicze:

Wykonujemy konwersję poprzez stworzenie obiektu i metody:

Brak inicjalizacji prostej zmiennej – domyślna wartość 0.

Page 13: Krótka historia Java - it.pwsz-ns.edu.plit.pwsz-ns.edu.pl/~wprzygoda/JEZYK_JAVA_2017.pdf · wspierania programowania w Języku JAVA, oraz wielu innych (obecna wersja – „neon”)

Problemy z precyzją

dołączamy odpowiedniąbibliotekę (Eclipse potrafinas o tym poinformować)Na wyjściu:

1115.3699999999998908606357872486114501953125

Na wyjściu: Wartosc to 1115.37

Page 14: Krótka historia Java - it.pwsz-ns.edu.plit.pwsz-ns.edu.pl/~wprzygoda/JEZYK_JAVA_2017.pdf · wspierania programowania w Języku JAVA, oraz wielu innych (obecna wersja – „neon”)

Konwersja stratna i „przekręcanie licznika” (rzutowanie)

Page 15: Krótka historia Java - it.pwsz-ns.edu.plit.pwsz-ns.edu.pl/~wprzygoda/JEZYK_JAVA_2017.pdf · wspierania programowania w Języku JAVA, oraz wielu innych (obecna wersja – „neon”)

Operatory

Java ma bardzo podobne operatory jak inne języki (np. C lub C++).Są jednak ciekawostki:

Trzeba też uważać, co się porównuje (po lewej – obiekty, a nie ich zawartość).

Jest też wersja:equalsIgnoreCase

Page 16: Krótka historia Java - it.pwsz-ns.edu.plit.pwsz-ns.edu.pl/~wprzygoda/JEZYK_JAVA_2017.pdf · wspierania programowania w Języku JAVA, oraz wielu innych (obecna wersja – „neon”)

Zmienne znakowe char

klasapomocnicza

Klasy pomocnicze dostarczają szereg użytecznych funkcji statycznych (takich, które można wołać za pomocą klasy, bez konieczności tworzenia obiektu klasy).

Page 17: Krótka historia Java - it.pwsz-ns.edu.plit.pwsz-ns.edu.pl/~wprzygoda/JEZYK_JAVA_2017.pdf · wspierania programowania w Języku JAVA, oraz wielu innych (obecna wersja – „neon”)

Zmienne logiczne (boolean)

klasapomocnicza

}

Page 18: Krótka historia Java - it.pwsz-ns.edu.plit.pwsz-ns.edu.pl/~wprzygoda/JEZYK_JAVA_2017.pdf · wspierania programowania w Języku JAVA, oraz wielu innych (obecna wersja – „neon”)

Drukowanie na ekranie różnych zmiennych

Zmienne prostych typów korzystają z metody ”toString” (w klasie pomocniczej).

Page 19: Krótka historia Java - it.pwsz-ns.edu.plit.pwsz-ns.edu.pl/~wprzygoda/JEZYK_JAVA_2017.pdf · wspierania programowania w Języku JAVA, oraz wielu innych (obecna wersja – „neon”)

Czytanie zmiennych

Czytanie odbywa się w tej funkcji.

Ponadto Java obsługujewyjątki.

Page 20: Krótka historia Java - it.pwsz-ns.edu.plit.pwsz-ns.edu.pl/~wprzygoda/JEZYK_JAVA_2017.pdf · wspierania programowania w Języku JAVA, oraz wielu innych (obecna wersja – „neon”)

Kopiowanie pliku bajt po bajcie

Bloki try {

} catch ( ) {

} to obsługa sytuacji wyjątkowych.Zostaną omówione dalej.

Czytanie i zapis wykonamyna porcjach 1024 bajtów orazz użyciem obiektów FileInputStream orazFileOutputStream

Page 21: Krótka historia Java - it.pwsz-ns.edu.plit.pwsz-ns.edu.pl/~wprzygoda/JEZYK_JAVA_2017.pdf · wspierania programowania w Języku JAVA, oraz wielu innych (obecna wersja – „neon”)

Struktury warunkowe – switch

Logika działania „switch” taka sama jak np. w C++ ale dodatkowo kluczemmoże być zmienna typu String.

Page 22: Krótka historia Java - it.pwsz-ns.edu.plit.pwsz-ns.edu.pl/~wprzygoda/JEZYK_JAVA_2017.pdf · wspierania programowania w Języku JAVA, oraz wielu innych (obecna wersja – „neon”)

Warto używać enum

enum (typ wyliczeniowy) podobnie jak w innych językach:

Page 23: Krótka historia Java - it.pwsz-ns.edu.plit.pwsz-ns.edu.pl/~wprzygoda/JEZYK_JAVA_2017.pdf · wspierania programowania w Języku JAVA, oraz wielu innych (obecna wersja – „neon”)

Różnego rodzaju pętle (for, while)

Page 24: Krótka historia Java - it.pwsz-ns.edu.plit.pwsz-ns.edu.pl/~wprzygoda/JEZYK_JAVA_2017.pdf · wspierania programowania w Języku JAVA, oraz wielu innych (obecna wersja – „neon”)

Refaktoryzacja

Page 25: Krótka historia Java - it.pwsz-ns.edu.plit.pwsz-ns.edu.pl/~wprzygoda/JEZYK_JAVA_2017.pdf · wspierania programowania w Języku JAVA, oraz wielu innych (obecna wersja – „neon”)

Prosty kalkulator

Za chwilę to proste działanie (dodawanie)zamienimy automatyczniena funkcję.

Przy okazji:Funkcje mogą mieć dowolnąliczbę argumentów (tego samego typu).

Page 26: Krótka historia Java - it.pwsz-ns.edu.plit.pwsz-ns.edu.pl/~wprzygoda/JEZYK_JAVA_2017.pdf · wspierania programowania w Języku JAVA, oraz wielu innych (obecna wersja – „neon”)

Prosty kalkulator – refaktoryzujemy kilka działań…

Uwaga nt sposobuprzekazywania parametrów do wnętrza funkcji:- proste typy są przekazywane przez kopię- złożone typy (np. tablice)są przekazywane przez referencję- String – przez kopię

Page 27: Krótka historia Java - it.pwsz-ns.edu.plit.pwsz-ns.edu.pl/~wprzygoda/JEZYK_JAVA_2017.pdf · wspierania programowania w Języku JAVA, oraz wielu innych (obecna wersja – „neon”)

Szybkie definiowanie metod

Eclipse bardzo ułatwia pisaniekodu, tam gdzie brakuje definicji jakiejś metody, proponuje rozwiązanie i utworzenie szkieletu brakującej funkcji.

Dzięki temu „nudneoperacje” pisania kodusą dla nas wykonane,a my możemy skupić sięna zawartości!

Page 28: Krótka historia Java - it.pwsz-ns.edu.plit.pwsz-ns.edu.pl/~wprzygoda/JEZYK_JAVA_2017.pdf · wspierania programowania w Języku JAVA, oraz wielu innych (obecna wersja – „neon”)

Obiekty String są niezmienialne, więc…

Uwaga:Jest też StringBuffer (adekwatny w przypadku środowiska wielowątkowego).

Kilka użytecznych operacjina łańcuchach znakowychtypu String

Page 29: Krótka historia Java - it.pwsz-ns.edu.plit.pwsz-ns.edu.pl/~wprzygoda/JEZYK_JAVA_2017.pdf · wspierania programowania w Języku JAVA, oraz wielu innych (obecna wersja – „neon”)

Kilka manipulacji z datami i formatami

Korzystajmy z podpowiedzi Eclipse, który wskazujejakie pakiety muszą być (na początku) dołączone.

Page 30: Krótka historia Java - it.pwsz-ns.edu.plit.pwsz-ns.edu.pl/~wprzygoda/JEZYK_JAVA_2017.pdf · wspierania programowania w Języku JAVA, oraz wielu innych (obecna wersja – „neon”)

Tablice

Page 31: Krótka historia Java - it.pwsz-ns.edu.plit.pwsz-ns.edu.pl/~wprzygoda/JEZYK_JAVA_2017.pdf · wspierania programowania w Języku JAVA, oraz wielu innych (obecna wersja – „neon”)

Refaktoryzacja kodu – kilka klas

import java.io.*;

public class Calculator2 {

public static void main(String[] args) {String s1 = getInput("Enter a numeric value: ");String s2 = getInput("Enter a numeric value: ");String op = getInput("Enter 1=Add, 2=Subtract, 3=Multiply, 4=Divide");

int opInt = Integer.parseInt(op);double result = 0;

switch (opInt) {case 1: result = addValues(s1, s2);

break;case 2: result = subtractValues(s1, s2);

break;case 3: result = multiplyValues(s1, s2);

break;case 4: result = divideValues(s1, s2);

break;

default: System.out.println("You entered anincorrect value");

return;}

System.out.println("The answer is " + result);}private static double divideValues(String s1, String s2) {

double d1 = Double.parseDouble(s1);double d2 = Double.parseDouble(s2);double result = d1 / d2;return result;

}

private static double multiplyValues(String s1, String s2) {double d1 = Double.parseDouble(s1);double d2 = Double.parseDouble(s2);double result = d1 * d2;return result;

}private static double subtractValues(String s1, String s2) {

double d1 = Double.parseDouble(s1);double d2 = Double.parseDouble(s2);double result = d1 - d2;return result;

}private static double addValues(String s1, String s2)

throws NumberFormatException {double d1 = Double.parseDouble(s1);double d2 = Double.parseDouble(s2);double result = d1 + d2;return result;

}private static String getInput(String prompt) {

BufferedReader stdin = new BufferedReader(new InputStreamReader(System.in));

System.out.print(prompt);System.out.flush();

try {return stdin.readLine();

} catch (Exception e) {return "Error: " + e.getMessage();

}}

}

Page 32: Krótka historia Java - it.pwsz-ns.edu.plit.pwsz-ns.edu.pl/~wprzygoda/JEZYK_JAVA_2017.pdf · wspierania programowania w Języku JAVA, oraz wielu innych (obecna wersja – „neon”)

Tworzymy dodatkowe klasy

Tworzymy klasę MathOp i przenosimy do niej (copy/pastez zamianą private na public) metody. Następnie odpowiednio modyfikujemy kod w klasie podstawowej.

Page 33: Krótka historia Java - it.pwsz-ns.edu.plit.pwsz-ns.edu.pl/~wprzygoda/JEZYK_JAVA_2017.pdf · wspierania programowania w Języku JAVA, oraz wielu innych (obecna wersja – „neon”)

Tworzymy dodatkowe klasy

Tworzymy klasę InputOp i przenosimy do niej (copy/paste z zamianą private na public) metodę GetInput, zmieniamy kod w klasie Hello. Odpowiednie ”import…” w pliku InputOp pojawią się same.

W pliku Hello.java można usunąć (uporządkować) niepotrzebne import: Ctrl+Shift+O (Organize imports).

Page 34: Krótka historia Java - it.pwsz-ns.edu.plit.pwsz-ns.edu.pl/~wprzygoda/JEZYK_JAVA_2017.pdf · wspierania programowania w Języku JAVA, oraz wielu innych (obecna wersja – „neon”)

Obsługa błędów - wyjątki

Dwa rodzaje błędów – błędy kompilacji (składniowe) i błędy wykonania. Gdy nastąpi ten drugi błąd, w Java tworzony jest obiekt „wyjątku”, który można „przechwycić” i obsłużyć.

Powyższy program powoduje wyjście indeksu tablicy poza zakres.

Page 35: Krótka historia Java - it.pwsz-ns.edu.plit.pwsz-ns.edu.pl/~wprzygoda/JEZYK_JAVA_2017.pdf · wspierania programowania w Języku JAVA, oraz wielu innych (obecna wersja – „neon”)

Obsługa błędów – wyjątki – dodajemy blok try / catch

Page 36: Krótka historia Java - it.pwsz-ns.edu.plit.pwsz-ns.edu.pl/~wprzygoda/JEZYK_JAVA_2017.pdf · wspierania programowania w Języku JAVA, oraz wielu innych (obecna wersja – „neon”)

Obsługa błędów – wyjątki – obsługa

Z informacji drukowanejwidać, że program dalejdziała, że metoda printStackTrace() drukuje użyteczną informację i np. można podmienić ogólny typ wyjątkuException na szczegółowy np. ArrayIndexOutOfBoundsExceptionOczywiście programista musi sam usunąć błąd (niepoprawne działanie programu, wyjście indeksu poza zakres tablicy!)

Page 37: Krótka historia Java - it.pwsz-ns.edu.plit.pwsz-ns.edu.pl/~wprzygoda/JEZYK_JAVA_2017.pdf · wspierania programowania w Języku JAVA, oraz wielu innych (obecna wersja – „neon”)

Obsługa błędów – wyjątki – deklaracja

Zróbmy małą refaktoryzację kodu, wydzielając metodę i deklarując, jaki rodzaj wyjątkumoże ona zgłosić. Eclipse znacząco pomaga w wyborze (Ctrl+Spacja). Potem zaznaczamy metodę getArrayIndex i opakowujemy w try/catch (Alt+Shift+Z).

Page 38: Krótka historia Java - it.pwsz-ns.edu.plit.pwsz-ns.edu.pl/~wprzygoda/JEZYK_JAVA_2017.pdf · wspierania programowania w Języku JAVA, oraz wielu innych (obecna wersja – „neon”)

Pakiety

Pakiety fizycznie są podkatalogami. Dobrze jest organizować kod w ten sposób, że tworzymyPrzemyślaną strukturę pakietów. Zmodyfikujemy teraz nasz kod „kalkulatora”, w którym były3 klasy, tworząc nowy pakiet i robiąc refaktoryzację (Alt+Shift+T) lub od razu (przenosząc)(Alt+Shift+V) do nowego pakietu.Każda klasa w pakiecie innymi niż domyślny (default) wymaga deklaracji w jakim pakiecie sięznajduje, np.

W głównym programie też muszą się pojawić wtedy odpowiednie ”import” (Eclipse wstawiaje automatycznie za pomocą Ctrl+Shift+O)

Page 39: Krótka historia Java - it.pwsz-ns.edu.plit.pwsz-ns.edu.pl/~wprzygoda/JEZYK_JAVA_2017.pdf · wspierania programowania w Języku JAVA, oraz wielu innych (obecna wersja – „neon”)

Przykład programu – z klasami, składowymi, metodami

Rozwińmy klasę Osoba i zobaczmy jak prosto dodać funkcje typu „get” i „set”:

W Java nie ma const jest za to final.

Page 40: Krótka historia Java - it.pwsz-ns.edu.plit.pwsz-ns.edu.pl/~wprzygoda/JEZYK_JAVA_2017.pdf · wspierania programowania w Języku JAVA, oraz wielu innych (obecna wersja – „neon”)

Przykład programu – klasa Osoba i Klasa

Page 41: Krótka historia Java - it.pwsz-ns.edu.plit.pwsz-ns.edu.pl/~wprzygoda/JEZYK_JAVA_2017.pdf · wspierania programowania w Języku JAVA, oraz wielu innych (obecna wersja – „neon”)

Przykład programu – główny program

Zwróćmy uwagę na to, jak Eclipse sprawnie dodaje / zmienia potrzebne ”import”

Page 42: Krótka historia Java - it.pwsz-ns.edu.plit.pwsz-ns.edu.pl/~wprzygoda/JEZYK_JAVA_2017.pdf · wspierania programowania w Języku JAVA, oraz wielu innych (obecna wersja – „neon”)

Dziedziczenie i polimorfizm

Język Java pozwala na pojedyncze dziedziczenie.Na klasę nadrzędną mówi się zwykle superclass, a na klasę dziedziczącą subclass.Polimorfizm działa podobnie jak w C++. Warto metodę z klasy bazowej oznaczyć @Override

pisząc jej wersję specjalizowaną w klasie potomnej.

Page 43: Krótka historia Java - it.pwsz-ns.edu.plit.pwsz-ns.edu.pl/~wprzygoda/JEZYK_JAVA_2017.pdf · wspierania programowania w Języku JAVA, oraz wielu innych (obecna wersja – „neon”)

Aplety

Aplety to programy Java ale wykonywane w JVM w przeglądarce (najczęściej webowej).

Analogiczny przykład:http://journals.ecs.soton.ac.uk/java/tutorial/getStarted/applet/

W sieci można znaleźć „tysiące” samouczków, dzięki którym można rozwinąći pogłębić swoją wiedzę na temat programowania.

Najbardziej efektywnym sposobem jest zdobywanie doświadczenia, poprzeznieustanne wprawki, ćwiczenia – samodzielne pisanie kodu.P o w o d z e n i a!