Aplikacje Internetowe. Najprostsza aplikacja. Komponenty Javy. Podstawy języka Java

Podobne dokumenty
Podstawy języka Java. przygotował:

JAVA W SUPER EXPRESOWEJ PIGUŁCE

Kurs programowania. Wykład 1. Wojciech Macyna. 3 marca 2016

Java: kilka brakujących szczegółów i uniwersalna nadklasa Object

Programowanie obiektowe

Wykład 7: Pakiety i Interfejsy

Java. język programowania obiektowego. Programowanie w językach wysokiego poziomu. mgr inż. Anna Wawszczak

Programowanie obiektowe

Programowanie obiektowe

Laboratorium 03: Podstawowe konstrukcje w języku Java [2h]

Tworzenie aplikacji w języku Java

Kurs programowania. Wykład 2. Wojciech Macyna. 17 marca 2016

Dziedziczenie. dr Jarosław Skaruz

Języki Programowania II Wykład 3. Java podstawy. Przypomnienie

Multimedia JAVA. Historia

Programowanie w Internecie. Java

Polimorfizm, metody wirtualne i klasy abstrakcyjne

2. Składnia, środowisko i konwencje w Javie

Dokumentacja do API Javy.

Programowanie obiektowe

Polimorfizm. dr Jarosław Skaruz

Programowanie obiektowe

Programowanie obiektowe

Interfejsy. Programowanie obiektowe. Paweł Rogaliński Instytut Informatyki, Automatyki i Robotyki Politechniki Wrocławskiej

Platformy Programistyczne Podstawy języka Java

Programowanie urządzeń mobilnych. dr inż. Andrzej Grosser na podstawie wykładu dr inż. Juliusza Mikody

1 Atrybuty i metody klasowe

Java Język programowania

Wykład 6: Dziedziczenie

Klasy abstrakcyjne, interfejsy i polimorfizm

Programowanie obiektowe

Ćwiczenie 1. Przygotowanie środowiska JAVA

Kurs WWW. Paweł Rajba.

Aplikacje w środowisku Java

Aplikacje w środowisku Java

Wykład 2 Wybrane konstrukcje obiektowych języków programowania (1)

Wykład 4: Klasy i Metody

Java - wprowadzenie. Programowanie Obiektowe Mateusz Cicheński

Enkapsulacja, dziedziczenie, polimorfizm

Programowanie obiektowe. Literatura: Autor: dr inŝ. Zofia Kruczkiewicz

WSNHiD, Programowanie 2 Lab. 2 Język Java struktura programu, dziedziczenie, abstrakcja, polimorfizm, interfejsy

public - może być używana w kodzie poza klasą, jedna klasa ModyfikatorKlasy może być kombinacją wyrażeń:

dziedziczenie - po nazwie klasy wystąpią słowa: extends nazwa_superklasy

Wykład 5 Okna MDI i SDI, dziedziczenie

Początki Javy. dr Anna Łazińska, WMiI UŁ Podstawy języka Java 1 / 8

Obszar statyczny dane dostępne w dowolnym momencie podczas pracy programu (wprowadzone słowem kluczowym static),

Wprowadzenie do języka Java

Przykład -

Programowanie obiektowe i język Java

Współbieżność i równoległość w środowiskach obiektowych. Krzysztof Banaś Obliczenia równoległe 1

Akademia ETI. Wprowadzenie do programowania w Javie PG Java User Group Przemysław Kulesza

Definiowanie własnych klas

Podstawy programowania obiektowego w języku Java dla programujących w C++

Java - tablice, konstruktory, dziedziczenie i hermetyzacja

Podstawowe części projektu w Javie

Wątki. Definiowanie wątków jako klas potomnych Thread. Nadpisanie metody run().

Podstawy otwartych języków programowania Przechowywanie danych

UML a kod w C++ i Javie. Przypadki użycia. Diagramy klas. Klasy użytkowników i wykorzystywane funkcje. Związki pomiędzy przypadkami.

Wykład 2: Podstawy Języka

Język JAVA podstawy. Wykład 3, część 3. Jacek Rumiński. Politechnika Gdańska, Inżynieria Biomedyczna

Java: otwórz okienko. Programowanie w językach wysokiego poziomu. mgr inż. Anna Wawszczak

Programowanie urządzeń mobilnych

Programowanie w Javie - wykład 3

Podstawy Języka Java

Programowanie wieloplatformowe w Java

KOTLIN. Język programowania dla Androida

Java: interfejsy i klasy wewnętrzne

Wykład 8: Obsługa Wyjątków

JAVA. Platforma JSE: Środowiska programistyczne dla języka Java. Wstęp do programowania w języku obiektowym. Opracował: Andrzej Nowak

Dziedziczenie. Tomasz Borzyszkowski

1. Co można powiedzieć o poniższym kodzie (zakładając, że zaimportowano wszystkie niezbędne klasy)?

Programowanie obiektowe i zdarzeniowe

AXIS2 - tworzenie usługi sieciowej i klienta Axis Data Binding. dr inż. Juliusz Mikoda mgr inż. Anna Wawszczak

Programowanie w Javie wykład 9 Klasy wewnętrzne, klasy anonimowe Klasy opakowujące

Na przykładzie języków Java, C# i odrobiny C++ Dariusz Brzeziński. Politechnika Poznańska, Instytut Informatyki

JAVA. Java jest wszechstronnym językiem programowania, zorientowanym. apletów oraz samodzielnych aplikacji.

Programowanie obiektowe

Język JAVA podstawy. Wykład 4, część 3. Jacek Rumiński. Politechnika Gdańska, Inżynieria Biomedyczna

Obiektowe programowanie rozproszone Java RMI. Krzysztof Banaś Systemy rozproszone 1

Java Podstawy JUST JAVA Michał Bereta Intytu Modelowania Komputerowego Wydział Fizyki, Matematyki i Informatyki Stosowanej

Programowanie w środowiskach graficznych. Wykład 3 Język C#

Język JAVA podstawy. Wykład 4, część 1. Jacek Rumiński. Politechnika Gdańska, Inżynieria Biomedyczna

JAVA- wykład 2 Klasy

Współbieżność w środowisku Java

Systemy Rozproszone - Ćwiczenie 6

Platformy Programistyczne Wykład z Javy dla zaawansowanych

Wstęp do ruby dla programistów javy

Programowanie obiektowe

Programowanie w Javie wykład 8 Interfejsy

Kurs programowania. Wykład 13. Wojciech Macyna. 14 czerwiec 2017

1. Co będzie wynikiem wykonania poniŝszych instrukcji? g2d.gettransform().scale(1, -1); g2d.gettransform().translate(4, -8); g2d.drawline(4, 0, 4, 4);

Metody Metody, parametry, zwracanie wartości

Klasy. dr Anna Łazińska, WMiI UŁ Podstawy języka Java 1 / 13

Informatyka I. Dziedziczenie. Nadpisanie metod. Klasy abstrakcyjne. Wskaźnik this. Metody i pola statyczne. dr inż. Andrzej Czerepicki

Kurs programowania. Wstęp - wykład 0. Wojciech Macyna. 22 lutego 2016

Informatyka I. Klasy i obiekty. Podstawy programowania obiektowego. dr inż. Andrzej Czerepicki. Politechnika Warszawska Wydział Transportu 2018

Java Programowanie Obiektowe Ćwiczenie 1- wprowadzenie

Programowanie obiektowe

Języki i metody programowania Java INF302W Wykład 2 (część 1)

Programowanie, algorytmy i struktury danych

Transkrypt:

Aplikacje Internetowe Podstawy języka Java Najprostsza aplikacja class Hello { public static void main(string[] args) { System.out.println("Hello World!"); Komponenty Javy JRE Java Runtime Environment Maszyny wirtualne na różne platformy JDK Java Development Kit JDK Java Development Kit Kompilator, biblioteki i narzędzia 1

Uruchomienie pierwszej aplikacji javac Hello.java java Hello lub javaw Hello Hello.java Rozszerzenia plików Java *.java kod źródłowy *.class definicja klasy w byte-code *.jar archiwum z wieloma klasami (może to być cała aplikacja lub pakiet) *.war aplikacja internetowa - jar o trochę innej strukturze Przekazywanie parametrów class Hello2 { public static void main(string[] args) { if(args.length==2) System.out.println("Parametry:"+ args[0]+","+args[1]); Hello2.java 2

Liczenie sumy parametrów class HelloSum { public static void main(string[] args) { if(p.length!=2) { System.out.println("Podaj parametry!"); System.exit(0); int a = Integer.parseInt(p[0]); int b = Integer.parseInt(p[1]); System.out.println("Suma: "+(a+b)); HelloSum.java Obsługa wyjątków class HelloSum2 { public static void main(string[] args) { if(p.length!=2) { System.out.println("Podaj parametry!"); System.exit(0); try{ int a = Integer.parseInt(p[0]); int b = Integer.parseInt(p[1]); System.out.println("Suma: "+(a+b)); catch (NumberFormatException e) { System.out.println("Nie podałeś liczb!"); HelloSum2.java Typy zmiennych Typy proste (int, double) int, short, long float, double boolean char, byte Typy obiektowe (oparte na klasach) String, Vector 3

Typy proste Problem: nie można ich traktować jak obiektów nie mogą mieć wartości null nie mają przypisanych metod Rozwiązanie: każdy typ prosty ma swoją klasę opakowującą double -> Double int -> Integer klasa opakowująca zawiera użyteczne metody konwersji Kalkulator kredytowy Obliczenie wysokości miesięcznej raty spłaty kredytu na podstawie jego kwoty, oprocentowania rocznego i liczby rat miesięcznych oproc /12 rata = kwota* 1 1 1+ ( oproc /12) liczba _ rat Kalkulator kredytowy class Kredyt { try{ double kwota = Double.parseDouble(p[0]); d bl bl bl ( [1]) double procent = Double.parseDouble(p[1]); double lat = Double.parseDouble(p[2]); double rata = kwota * (procent/12)/ (1-(1/Math.pow(1+procent/12,lat*12))); System.out.println("Rata "+rata); catch (NumberFormatException e) { System.out.println("Nie podałeś liczb!"); Kredyt.java 4

Tworzenie funkcji class Kredyt { try{ double rata = liczrate(double.parsedouble(p[0]), Double.parseDouble(p[1]), Double.parseDouble(p[2])); System.out.println("Rata "+rata); catch (NumberFormatException e) { System.out.println("Nie podałeś liczb!"); Tworzenie funkcji/metody class Kredyt2 { double liczrate(double kwota, double procent, double lat) { double proc_m = procent/12; double rat = lat*12; double wsp = 1/Math.pow(1.0+proc_m,rat); wsp = 1 - wsp; wsp = proc_m / wsp; return kwota * wsp; Kredyt2.java Tworzenie funkcji class Kredyt2 { double liczrate(double kwota, double procent, double lat) { double proc_m = procent/12; double rat = lat*12; double wsp = 1/Math.pow(1.0+proc_m,rat); wsp = 1 - wsp; wsp = proc_m / wsp; return kwota * wsp; Kredyt2.java 5

Static members Class Foo{ int x; Foo f1=new Foo(); Foo f2=new Foo(); f1.x=1; f2.x=2; println(f1.x+, +f2.x); Class Foo{ static int x; Foo f1=new Foo(); Foo f2=new Foo(); f1.x=1; f2.x=2; println(f1.x+, +f2.x); 1,2 2,2 Tworzenie funkcji class Kredyt3 { Kredyt3 k = new Kredyt3(); try{ double rata = k.liczrate(double.parsedouble(p[0]), Double.parseDouble(p[1]), Double.parseDouble(p[2])); System.out.println("Rata "+rata); catch (NumberFormatException e) { System.out.println("Nie podałeś liczb!"); Kredyt3.java Konstruktor class Kredyt4 { double rata; try{ Kredyt4 k = new Kredyt4(Double.parseDouble(p[0]), Double.parseDouble(p[1]), Double.parseDouble(p[2])); System.out.println("Rata "+k.rata); catch (NumberFormatException e) { public Kredyt4(double kwota, double procent, double lat) { double wsp = 1-1/Math.pow(1.0+procent/12,lat*12); wsp = proc_m / wsp; rata = kwota * wsp; Kredyt4.java 6

Metoda typu getter class Kredyt5 { double rata; try{ Kredyt5 k = new Kredyt5(Double.parseDouble(p[0]), Double.parseDouble(p[1]), Double.parseDouble(p[2])); System.out.println("Rata "+k.getrata()); catch (NumberFormatException e) { public Kredyt5(double kwota, double procent, double lat) { public double getrata() { return rata; Kredyt4.java Standardy nazewnictwa Klasy dużą literą MojaKlasa Metody i pola małą literą camelcase addcar(), firstname Stałe dużymi literami static final TIMEOUT Pakiety małymi literami com.comarch.kurs Standardy nie są obowiązkowe Kalkulator kredytowy Obliczenie wysokości miesięcznej raty spłaty kredytu na podstawie jego kwoty, oprocentowania rocznego i liczby rat miesięcznych oproc /12 rata = kwota* 1 1 1+ ( oproc /12) liczba _ rat 7

class Kredyt5 { double wsp; Parametryzacja kwoty Kredyt5 k = new Kredyt5(procent, lata); System.out.println("Rata "+k.getrata(kwota)); public Kredyt5(double procent, double lat) { wsp = 1-1/Math.pow(1.0+procent/12,lat*12); wsp = (procent / 12) / wsp; public double getrata(double kwota) { return wsp*kwota; Kredyt5.java Kalkulator class Kalkulator { try{ Kredyt k = new Kredyt(Double.parseDouble(p[1]), Double.parseDouble(p[2])); p System.out.println("Rata"+ k.getrata(double.parsedouble(p[0]))); catch (NumberFormatException e) { System.out.println("Nie podałeś liczb!"); Kalkulator.java Klasa Kredyt class Kredyt { double wsp; public Kredyt(double procent, double lat) { wsp = 1-1/Math.pow(1.0+procent/12,lat*12); p wsp = (procent / 12) / wsp; double getrata(double kwota) { return wsp * kwota; Kredyt.java 8

------Kalkulator.java---------------------------------------- class Kalkulator { try{ Kredyt k = new Kredyt(Double.parseDouble(p[1]), Double.parseDouble(p[2])); System.out.println("Rata"+ k.getrata(double.parsedouble(p[0]))); catch (NumberFormatException e) { System.out.println("Nie podałeś liczb!"); ------Kredyt.java---------------------------------------- class Kredyt { double wsp; public Kredyt(double procent, double lat) { wsp = 1-1/Math.pow(1.0+procent/12,lat*12); wsp = (procent / 12) / wsp; double getrata(double kwota) { return wsp * kwota; Klasa Kredyt class Kredyt { double wsp; public Kredyt(double procent, double lat) { wsp = 1-1/Math.pow(1.0+procent/12,lat*12); t/12 t*12) wsp = (procent / 12) / wsp; double getrata(double kwota) { return wsp * kwota; Widoczność elementów class Kredyt { private double wsp; public Kredyt(double procent, double lat) { 1 1/M th (1 0+ t/12 l t*12) wsp = 1-1/Math.pow(1.0+procent/12,lat*12); wsp = (procent / 12) / wsp; public double getrata(double kwota) { return wsp * kwota; 9

Instrukcje pętli while(warunek) { instrukcje; int i=0; while(i<10) {System.out.println("A");i++; for(inicjalizacja; warunek; iteracja) for(int i=0;i<10;i++) {System.out.println("A"); do { instrukcje; while(warunek) int i=0; do {System.out.println("A");i++; while(i<10); Pętla pytająca boolean koniec = false; while(!koniec) { //tu wyliczanie kredytu if(warunek) koniec = true; Tablice Deklaracja: Typ[ ] nazwa int[] tablica; Definicja: new Typ[wielkosc] tablica = new int[20]; Można w jednej linijce: int[] tablica = new int[20]; Typ elementów tablicy może być prosty lub obiektowy: String[ ] tablica, MojaKlasa[ ] tablica 10

Tabela kredytów class Kalkulator1 { int N = 10; Kredyt[] kredyty; for(int i=0; i<n; i++ ) { kredyty[i] = new Kredyt(0.02, i+1); Tabela kredytów class Kalkulator1 { int N = 10; Kredyt[] kredyty; kredyty = new Kredyt[N]; for(int i=0; i<n; i++ ) { kredyty[i] = new Kredyt(0.02, i+1); Tabela kredytów class Kalkulator1 { int N = 10; Kredyt[] kredyty = new Kredyt[N]; for(int i=0; i<n; i++ ) { kredyty[i] = new Kredyt(0.02, i+1); Kalkulator1.java 11

Tabela kredytów class Kalkulator1 { int N = 10; Kredyt[] kredyty = new Kredyt[N]; for(int i=0; i<n; i++ ) { kredyty[i] = new Kredyt(0.02, i+1); for(int i=0; i<n; i++ ) { System.out.println("Lata: "+(i+1)+ " Rata: "+kredyty[i].getrata(10000)); Kalkulator1.java Klasa Kredyt class Kredyt { private double wsp; public Kredyt(double procent, double lat) { wsp = 1-1/Math.pow(1.0+procent/12,lat*12); wsp = (procent / 12) / wsp; public double getrata(double kwota) { return wsp * kwota; Zmiana Chcemy przechowywać wszystkie dane na temat kredytu (kwota, oproc, ile lat) Rozwiązanie: dodadnie nowych pól kwota rata oproc ilerat 12

Nowa klasa Kredyt class Kredyt { private double procent; private double kwota; private double rata; private double ilrat; public Kredyt(double kwota, double procent, double lat) { this.kwota = kwota; this.procent = procent; this.ilrat = lat*12; this.obliczrate(); gettery i settery Gettery i settery (bez setrata()!) public double getkwota() { return kwota; public void setkwota(double kwota) { this.kwota = kwota; public double getprocent() { return procent; public void setprocent(double procent) { this.procent = procent; public double getilrat() { return ilrat; public void setilrat(double ilrat) { this.ilrat = ilrat; Obliczanie raty void obliczrate() { double wsp = 1-1/Math.pow(1.0+procent/12,ilRat); wsp = (procent / 12) / wsp; rata = wsp * kwota; // powinno być wywoływane przy każdej zmianie parametrów!!! public void setkwota(double kwota) { this.kwota = kwota; obliczrate(); 13

Gotowy Kredyt Pola dostępne przez gettery i settery Trochę logiki (ale niedostępnej bezpośrednio z zewnątrz) Tak oto powstał nasz pierwszy BEAN (ziarenko) Rozszerzenia kredytu Kredyt walutowy dodatkowo informacje o walucie i przeliczniku na PLN Konieczne stworzenie nowej klasy Możemy jednak użyć klasy już istniejącej i tylko ją rozszerzyć Nowa klasa będzie dziedziczyła po klasie bazowej Zapis w kodzie: class KredytWalutowy extends Kredyt Klasa KredytWalutowy Rozszerza klasę Kredyt Dwa nowe pola: waluta i przelicznik gettery i settery do nowych pól N k k! Nowy konstruktor! Modyfikacja metody getrata() uwzględnić przelicznik! zakładamy, że rata podawana jest zawsze w złotówkach Nowa metoda getratawaluta() podaje ratę w walucie kredytu 14

Konstruktory Każda klasa bez konstruktora ma domyślny konstuktor pusty Stworzenie własnego konstruktora usuwa konstruktor pusty! Może być klika konstruktorów z innymi parametrami Wywołanie konstuktora klasy bazowej: super(parametry) Rozszerzenie przykładu Klasa Klient numer nazwa adres telefon mail Podklasy Osoba (dodatkowo: imię, data urodzenia) Firma (dodatkowo: NIP, REGON) Stworzenie różnych klientów Klient k = new Klient(); k.setnumer(1); k.setnazwa("aaa"); Osoba os = new Osoba(); os.setnumer(2); os.setnazwa("kowalski"); os.setimie("adam"); Firma f = new Firma(); f.setnumer(3); f.setnazwa("krzaczek Sp. z o.o."); f.setregon("12345"); 15

Tablica klientów Klient[] klienci = new Klient[3]; klienci[0] = k; klienci[1] = os; klienci[2] i[2] = f; for(int i=0;i<3;i++) { System.out.println("Klient "+klienci[i].getnazwa()); // jak sprawdzić jakiej klasy są klienci? Klasa Object Każda klasa w Javie dziedziczy po klasie Object Klasa object zawiera kilka użytecznych metod getclass() tostring() equals() clone() wait() notify() Sprawdzenie klasy Odczyt klasy z obiektu obj.getclass() Sprawdzenie czy obiekt z danej klasy if(obj instanceof NazwaKlasy) Rzutowanie obiektu na klasę NazwaKlasy x = (NazwaKlasy)obj; 16

Tablica klientów Klient[] klienci = new Klient[3]; klienci[0] = k; klienci[1] = os; klienci[2] i[2] = f; for(int i=0;i<3;i++) { System.out.println("Klient "+klienci[i].getnazwa()); System.out.println("Klasa> "+klienci[i].getclass()); Jak użyć metod klasy Tablica obiektów typu Klient klienci[i].getimie() nie działa! Należy wykonać rzutowanie: Osoba oo = (Osoba)klienci[i]; i[i] Teraz oo.getimie() działa! Uwaga jeśli obiekt w tabeli nie jest typu Osoba mamy ClassCastException! Sprawdzenie klasy String opis = klienci[i].getnazwa(); if(klienci[i] instanceof Osoba) { Osoba oo = (Osoba)klienci[i]; opis += " imie: " + oo.getimie(); if(klienci[i] instanceof Firma) { Firma ff = (Firma)klienci[i]; opis += " regon: " + ff.getregon(); System.out.println(opis); 17

Sprawdzenie klasy (2) String opis = klienci[i].getnazwa(); if(klienci[i] instanceof Osoba) { opis += " imie: " + ((Osoba)klienci[i]).getImie(); if(klienci[i] instanceof Firma) { opis += " regon: " + ((Firma)klienci[i]).getRegon(); System.out.println(opis); Uwagi dodatkowe Jeśli obiekt jest instanceof Osoba to zawsze także jest instanceof Klient O rzutowaniu (cast) nie wolno zapomnieć! Metoda getclass() jest zaimplementowana w klasie Object po której dziedziczą wszystkie klasy w Javie Przesłanianie metod Przesłanianie = overriding W klasie podrzędnej tworzona jest nowa implementacja metody z klasy nadrzędnej Przykład: metoda tostring() w klasie Klient public String tostring() { return numer+" "+nazwa; metoda tostring() w klasie Osoba public String tostring() { return numer+" "+imie+" "+nazwa; 18

Użycie w programie Niezależnie od typu: for(int i=0;i<3;i++) { String opis = klienci[i].tostring(); System.out.println(opis); Wystarczy tak (metoda tostring() jest domyślna): for(int i=0;i<3;i++) { System.out.println(klienci[i]); W zależności od typu uruchamiana jest inna metoda Modyfikatory abstract klasa - obiekty tej klasy nie mogą być inicjalizowane, muszą być klasy dziedziczące metoda - musi zostać przesłonięta w podklasie final klasa po tej klasie nie można dziedziczyć metoda - nie może zostać przesłonięta w podklasie zmienna wartość nie może być zmieniana static final int TIMEOUT = 200; // stała w programie Klasy i interfejsy Klasa zawiera metody i pola Interfejs zawiera tylko nagłówki metod, które muszą zostać zaimplementowane w klasach Dzięki wspólnemu interfejsowi różne klasy mogą być traktowane tak samo Klasa może rozszerzać tylko jedną inną klasę ale może implementować dowolną liczbę interfejsów Dzięki interfejsom program uniezależnia się od konkretnych implementacji klas 19

Interfejs MojeInfo Interfejs: public interface MojeInfo { public String info(); Klasy implementujące: class Klasa1 implements MojeInfo { class Klasa2 implements MojeInfo { Użycie w programie: MojeInfo x = (MojeInfo)obj; //cast do interfejsu! String txt = x.info(); 20