JAVA Evolução de JAVA POO usando JAVA Prof. Rafael Monteiro.
Krótka historia Java - it.pwsz-ns.edu.plit.pwsz-ns.edu.pl/~wprzygoda/JEZYK_JAVA_2017.pdf ·...
Transcript of Krótka historia Java - it.pwsz-ns.edu.plit.pwsz-ns.edu.pl/~wprzygoda/JEZYK_JAVA_2017.pdf ·...
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”
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)
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)
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
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
Java – pierwszy program
• „wszystko jest obiektem” • samodzielny program musi mieć funkcję main
Java – argumenty i ich liczba
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)
Klasy i obiekty
Każda klasa w osobnym pliku.
Wszystko jest obiektem
Zamiana tablicy znaków w obiekt String
Funkcjonalnie to samo:
Można zrobić odwrotne przekształcenie
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
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.
Problemy z precyzją
dołączamy odpowiedniąbibliotekę (Eclipse potrafinas o tym poinformować)Na wyjściu:
1115.3699999999998908606357872486114501953125
Na wyjściu: Wartosc to 1115.37
Konwersja stratna i „przekręcanie licznika” (rzutowanie)
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
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).
Zmienne logiczne (boolean)
klasapomocnicza
}
Drukowanie na ekranie różnych zmiennych
Zmienne prostych typów korzystają z metody ”toString” (w klasie pomocniczej).
Czytanie zmiennych
Czytanie odbywa się w tej funkcji.
Ponadto Java obsługujewyjątki.
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
Struktury warunkowe – switch
Logika działania „switch” taka sama jak np. w C++ ale dodatkowo kluczemmoże być zmienna typu String.
Warto używać enum
enum (typ wyliczeniowy) podobnie jak w innych językach:
Różnego rodzaju pętle (for, while)
Refaktoryzacja
Prosty kalkulator
Za chwilę to proste działanie (dodawanie)zamienimy automatyczniena funkcję.
Przy okazji:Funkcje mogą mieć dowolnąliczbę argumentów (tego samego typu).
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ę
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!
Obiekty String są niezmienialne, więc…
Uwaga:Jest też StringBuffer (adekwatny w przypadku środowiska wielowątkowego).
Kilka użytecznych operacjina łańcuchach znakowychtypu String
Kilka manipulacji z datami i formatami
Korzystajmy z podpowiedzi Eclipse, który wskazujejakie pakiety muszą być (na początku) dołączone.
Tablice
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();
}}
}
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.
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).
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.
Obsługa błędów – wyjątki – dodajemy blok try / catch
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!)
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).
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)
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.
Przykład programu – klasa Osoba i Klasa
Przykład programu – główny program
Zwróćmy uwagę na to, jak Eclipse sprawnie dodaje / zmienia potrzebne ”import”
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.
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!