Prezentace se nahrává, počkejte prosím

Prezentace se nahrává, počkejte prosím

Ing. Lumír Návrat, A1018 Tel: +420 59 732 3252 ICQ: 64100582 Materiály vycházejí z podkladů doc. Ing. Miroslava.

Podobné prezentace


Prezentace na téma: "Ing. Lumír Návrat, A1018 Tel: +420 59 732 3252 ICQ: 64100582 Materiály vycházejí z podkladů doc. Ing. Miroslava."— Transkript prezentace:

1 Ing. Lumír Návrat, A1018 Tel: ICQ: Materiály vycházejí z podkladů doc. Ing. Miroslava Beneše, Ph.D. (  )

2 2 Doporučená literatura Učebnice Eckel, B.: Myslíme v jazyce Java. Grada, Herout, P.: Učebnice jazyka Java. KOPP, Pecinovský R.: Myslíme objektově v jazyku Java 5.0 Internet Studijní materiály k tutoriálu Slidy z předchozích kurzů výuky jazyka JAVA na katedře

3 3 Programové vybavení Java SE Development Kit + dokumentace Nástroj pro správu projektů Vývojová prostředí: Netbeans IDE, Eclipse, Borland JBuilder,Intelli JIdea... Editory: JEdit, PSPad, TextPad, gvim,..., Notepad

4 4 Vznik jazyka Motivace: Jazyk pro tvorbu programového vybavení pro spotřební elektroniku – pračky, diáře, mikrovlnné trouby,... Požadavky: nezávislost na procesoru, spolehlivost, jednoduchost, robustnost James Gosling, Sun – jazyk Oak 1993 – Internet + WWW = nové aplikace Sun HotJava – prohlížeč s applety – JDK 1.0 – první implementace 2004 – JDK 1.5 -> JDK 5 Tiger – nové prvky jazyka prosinec 2006 – JDK 6 – aktuální verze

5 5 Překlad a spuštění programu *.html javac Test.java java Test JIT JIT – Just-In-Time překlad Test.java javap Test zpětný překlad Test.class javadoc Test.java dokumentace zdrojový program výsledky

6 6 Program Ant Implementován v prostředí Java Možnost rozšiřování implementace akcí v jazyce Java definované rozhraní Činnost se řídí souborem v XML build.xml Integrován do vývojových prostředí Eclipse, Netbeans, …

7 7 Struktura řídicího souboru project name default basedir description target name depends if unless description n 1 property name value location 1 n task 1 n

8 8 Struktura řídicího souboru

9 9 Spuštění programu ant řídicí soubor build.xml provedení implicitního cíle ant compile provedení zadaného cíle ant –buildfile test.xml použití zadaného řídicího souboru ant –Dbuild.compiler=jikes nastavení hodnoty vlastnosti ant –logfile build.log uložení logu do souboru

10 10 Základní úlohy Práce se soubory

11 11 Základní úlohy Překlad

12 12 Základní úlohy Spuštění programu

13 13 Zdrojový program package Priklady; // soubor Priklady/Test.java public class Test { public static void main(String args[]) { System.out.println(“Ahoj!”); }

14 14 Cílový program public class Priklady.Test extends java.lang.Object { public Priklady.Test(); Code: 0: aload_0 1: invokespecial #1; //Method java/lang/Object." ":()V 4: return public static void main(java.lang.String[]); Code: 0: getstatic #2; //Field java/lang/System.out:Ljava/io/PrintStream; 3: ldc #3; //String Ahoj! 5: invokevirtual #4; //Method java/io/PrintStream.println:(Ljava/lang/String;)V 8: return }

15 15 Datové typy Primitivní datové typy booleanFalse, True char‘A’, ‘\n’ int, long123, 5L float, double3.14f, 6.67e-19 Referenční datové typy String“abc”, “ab\tcd” poleString[ ], int[ ] [ ] Objekty Boolean, Integer, Float, … objektové obálky primitivních typů. Od verze 5.0 existuje automatická konverze

16 16 Operátory Aritmetické x+y, x-y, x*y, x/y, x%y, -x Relační x == y, x != y, x y, x >= y Logické x && y, x || y, !x Přiřazení x = y x += y, …, x++, x--

17 17 Příkazy Podmíněný příkaz if ( podmínka ) příkaz if ( podmínka ) příkaz else příkaz Cyklus while( podmínka ) příkaz do příkaz while ( podmínka )

18 18 Příkazy for( inicializace; podmínka; krok ) příkaz for( int i = 0; i < 10; i++ ) { System.println(“i=“ + i); } for( Item i : kolekce) { System.println(“i=“ + i.toString()); } //Od verze JAVA 5.0 break, continue for( int i = 0; i < 10; i++ ) { if( a[i] == x ) break; } - +

19 19 public class VypisParametru { public static void main(String[] args) { for( int i = 0; i < args.length; i++ ) { System.out.println(i + ”: “ + args[i]); } } Program

20 Praktické cvičení – cviceni1.zip Úloha 1 - Překlad a spuštění ukázkové třídy Rozbalte v pracovním adresáři soubor priklad1.zip. Prostudujte soubor Pokus.java. Spusťte program ant, jenž vytvoří soubor Pokus.class a spustí jej. Úloha 2 - Vytvoření vlastního programu Na základě ukázkového programu vytvořte program pro řešení kvadratické rovnice, který z hodnot proměnných a, b, c typu double vypočítá hodnoty kořenů rovnice ax^2+bx+c=0. Hodnoty proměnných a, b, c nastavte přímo v programu. Pro výpočet druhé odmocniny použijte volání funkce Math.sqrt(x).

21 21 Řešení: Kvadratická rovnice static void kr(double a,double b,double c) { double d = b * b – 4 * a * c; if( d < 0 ) System.out.println(“ Nemá reálné kořeny ”); else if( d == 0 ) { double x = - b / (2*a); System.out.println("x=" + x); } else { double x1 = (-b + Math.sqrt(d)) / (2*a); double x2 = (-b – Math.sqrt(d)) / (2*a); System.out.println("x1=" + x1); System.out.println("x2=" + x2); } }

22 Praktické cvičení – cviceni2.zip Úloha 1 – Prostudování práce s parametry příkazového řádku Rozbalte v pracovním adresáři soubor priklad2.zip. Prostudujte a vyzkoušejte způsob práce s parametry příkazové řádky, včetně chybové vstupu (Priklad1.java) Úloha 2 – Seřazení obsahu pole Vytvořte program, který vytiskne seřazené pole celočíselných hodnot zadaných jako parametry. (Priklad2.java) Úloha 3 – Práce se standardním vstupem Prostudujte práci se standardním vstupem Upravte program pro výpočet kvadratické rovnice, aby načítal data ze vstupu.

23 Dotazy

24 24 Třídy a objekty O T E C

25 25 Co mají společného? Vlastnosti (stav) souřadnice středu x, y barva obsah, obvod Operace (chování) přesunutí na jinou pozici n-násobné zvětšení a zmenšení vykreslení na obrazovku Vztahy sousedí, překrývají se,...

26 26 V čem se liší? Druh obrazce čtverec, trojúhelník, elipsa Specifické vlastnosti délka strany čtverce velikosti poloos elipsy Hodnoty vlastností konkrétní souřadnice, barva,... Způsob provedení operací vykreslení na obrazovku

27 27 Grafická reprezentace třídy Zlomek čitatel jmenovatel Zlomek přičti(Zlomek jinýZlomek) Zlomek násob(Zlomek jinýZlomek) void normalizuj() Jméno třídy Vlastnosti Operace

28 28 Objekt = instance třídy Zlomek čitatel jmenovatel Zlomek přičti(Zlomek jinýZlomek) Zlomek násob(Zlomek jinýZlomek) void normalizuj() z1 : Zlomek čitatel = 2 jmenovatel = 3 z2 : Zlomek čitatel = -6 jmenovatel = 4 z3 : Zlomek čitatel = 1 jmenovatel = 2

29 29 Třídy v jazyce Java class Zlomek { // instanční proměnné int citatel; intjmenovatel; // metody Zlomek nasob(Zlomek jiny) { citatel *= jiny.citatel; jmenovatel *= jiny.jmenovatel; } }

30 30 Vytvoření instance třídy public static void main(String[] args) { Zlomek z = new Zlomek(); // nastavení instančních proměnných z.citatel = 2; z.jmenovatel = 3; // volání metody z.nasob(z);// z *= z } reference

31 31 Jak se instance zruší? Pascal, C, C++ – je třeba volat speciální operaci, která uvolní paměť: Pascal: Dispose(ptr) C: free(ptr); C++: delete ptr; Java,.NET – automatická správa paměti (garbage collector) paměť se uvolní automaticky, pokud na ni neexistuje žádný odkaz

32 32 Inicializace objektu Zajištění definovaného stavu objektu po jeho vytvoření všechny proměnné objektu se nastaví na nulu je-li uvedena inicializace, provede se nastavení class Test { int x;// poč. hodnota je 0 int y = 10;// poč. hodnota je 10 int m() { int z;// POZOR! zde to neplatí! return z + 1;// chyba – neinicializovaná }// proměnná ‘z’ }

33 33 Konstruktor Zajištění inicializace objektu po vytvoření public class Zlomek { Zlomek(int citatel, int jmenovatel) { this.citatel = citatel; this.jmenovatel = jmenovatel; } … } Zlomek z1 = new Zlomek(3, 4);// ¾ Zlomek z2 = z1.pricti(new Zlomek(1,2)); není typ výsledku! odkaz na aktuální objekt

34 34 Příklad public class Citac { int hodnota = 0; Citac(int pocatek) { hodnota = pocatek; } void krok() { hodnota++; } public static void main(String args[]) { Citac c = new Citac(10); c.krok(); System.out.println(c.hodnota);// 11 }

35 35 Jak si hlídat svá data? public class Citac { // veřejné metody public void nastavHodnotu(int nova) { hodnota = nova; } public int vratHodnotu() { return hodnota; } public void krok() { hodnota++; } // soukromá proměnná private int hodnota = 0;...

36 36 Jak si hlídat svá data? public class Test { public static void main(String args[]) { Citac c = new Citac(); // c.hodnota = 10; -- není přípustné c.nastavHodnotu(10); c.krok(); System.out.println( c.vratHodnotu() ); }

37 37 Statické členy třídy Instanční proměnné a metody jsou vázané vždy na nějaký objekt obj.proměnná, obj.metoda() Proměnné a metody třídy společné pro všechny instance Třída.proměnná, Třída.metoda() označují se klíčovým slovem static static int počet; static void main(String[] args) {…}

38 38 Příklad public class Test { private static int pocet = 0; // vrátí počet vytvořených instancí třídy public static int pocetInstanci() { return pocet; } public Test() { pocet++; }...

39 Příklad - pokračování... public static void main(String args[]) { System.out.println(“Počet instanci = “ + Test.pocetInstanci()); Test t2 = new Test(); System.out.println(“Počet instanci = “ + Test.pocetInstanci()); }

40 40 Dědičnost Obrazec int x int y presun(x1, y1) Čtverec int a Elipsa int a int b

41 41 Dědičnost class Obrazec { int x, y; void presun(int x, int y) { this.x = x; this.y = y; } } class Ctverec extends Obrazec { int a; }

42 42 Dědičnost Je-li něco čtverec, pak je to i obrazec Je-li něco obrazec, nemusí to být čtverec Ctverec c = new Ctverec(); c.presun(10, 20);// dědí metodu presun() Obrazec o = c;// lze přiřadit Obrazec o = new Ctverec(); // o.a = 5;// nepřípustné // Ctverec c = o;// nepřípustné

43 43 Dědičnost Není-li uvedena bázová třída, použije se java.lang.Object String toString() převod objektu na textovou reprezentaci boolean equals(Object obj) porovnání s jiným objektem int hashcode() číselný kód objektu Object clone() vytvoření kopie objektu

44 44 Zapouzdření prvků třídy Soukromé proměnné/metody – private přístupné pouze z vlastních metod Chráněné proměnné/metody – protected přístupné i z metod zděděných tříd Veřejné proměnné/metody – public přístupné i z metod jiných objektů

45 45 Konstruktory a dědičnost Konstruktor musí nejprve zavolat zděděný konstruktor – zajištění správné inicializace class Obrazec { public Obrazec(int x, int y) { this.x = x; this.y = y; } protected int x, y; } class Ctverec extends Obrazec { public Ctverec(int x, int y, int a) { super(x, y); this.a = a; } protected int a; }

46 46 Konstruktory a dědičnost Není-li zděděný konstruktor zavolán, zajistí se volání implicitního konstruktoru class Citac { public Citac() { hodnota = 10; } protected int hodnota; } public class CitacSKrokem extends Citac { public CitacSKrokem(int krok) { // super() -- zavolá se automaticky this.krok = krok; } protected int krok; public void volitelnyKrok() { nastavHodnotu(vratHodnotu()+krok); } }

47 Příklad class Test { public static void main(String[] args) { CitacSKrokem lepsiCitac = new CitacSKrokem(5); lepsiCitac.volitelnyKrok(); System.out.println(lepsiCitac.vratHodnotu()); lepsiCitac.krok(); System.out.println(lepsiCitac.vratHodnotu()); }

48 48 Konstruktory a dědičnost Neexistuje-li žádný konstruktor, vytvoří se prázdný implicitní konstruktor class Citac { // public Citac() {} -- vytvoří se protected int pocet; } Jak zajistit, aby nebylo možné vytvořit instanci třídy voláním operátoru new? class Citac { private Citac() {}... }

49 49 Evidence osob public class Osoba { public String login; public String jmeno; public String prijmeni; } Problémy? Osoba os = new Osoba(); System.out.println(os); os.login = “bon007”;

50 50 1. problém - inicializace class Osoba { public Osoba(String l,String jm,String p) { login = l; jmeno = j; prijmeni = p; } … } Osoba os = new Osoba(“aaa000”, “Johnny”, “Walker”);

51 51 2. problém - zobrazení System.out.println(os); class Osoba { … public String toString() { return jmeno + " " + prijmeni; } } System.out.println("os = " + os); os = Johnny Walker Kdo je to?

52 52 3. problém - zapouzdření public class Osoba { … private String login; public String getLogin() { return login; } public void setLogin(String login) { // tady by měla být kontrola this.login = login; } … }

53 53 4. problém - identita Osoba o1 = new Osoba(“007”,“James”,“Bond”); Osoba o2 = new Osoba(“007”,”James”,”Bond”); Platí o1 == o2 ? public boolean equals(Object obj) { if( obj instanceof Osoba ) return login.equals(((Osoba)obj).login); return false; } Ne! Různé objekty

54 54 Příklad - Dědičnost class Student extends Osoba { public Student(String login, String jmeno, String prijmeni, String obor) { super(login, jmeno, prijmeni); this.obor = obor; } public String getObor() { return obor; } public void setObor(String ob) { obor = ob; } private String obor; }

55 55 Praktické cvičení – cviceni3.zip Úloha 1 – Práce s třídami a objekty Rozbalte v pracovním adresáři soubor cviceni3.zip. Prostudujte a vyzkoušejte způsob práce s třídou Zlomek (Priklad1.java) Vytvořte třídu Complex, která bude reprezentovat komplexní číslo s operacemi sčítání, odčítání a násobení Upravte řešení kvadratické rovnice tak, aby pracovalo s typem Complex

56 56 Příklad - Obrazce Obrazec Kruh Obdélník Čtverec obvod() obsah() r a, b

57 57 Definice třídy Obrazec class Obrazec { double obvod() { return 0.0; } double obsah() { return 0.0; } Jak vypadá Obrazec? Je to ABSTRAKCE!

58 58 Abstraktní třídy abstract class Obrazec { public abstract double obvod(); public abstract double obsah(); } class Kruh extends Obrazec { Kruh(double r) { this.r = r; } double obvod() { return 6.28 * r; } double obsah() { return 3.14 * r * r; } double r; } new Obrazec()

59 59 Abstraktní třídy class Obdelnik extends Obrazec { Obdelnik(double a, double b) { this.a = a; this.b = b; } double obvod() { return 2*(a+b); } double obsah() { return a*b; } } class Ctverec extends Obdelnik { Ctverec(double a) { super(a, a); } }

60 60 Rozhraní interface Obrazec { double obvod(); double obsah(); } class Kruh implements Obrazec { Kruh(double r) { this.r = r; } double obvod() { return 6.28 * r; } double obsah() { return 3.14 * r * r; } double r; }

61 61 Rozdíly Abstraktní třída může obsahovat instanční proměnné může obsahovat konkrétní metody lze rozšiřovat pouze jednu třídu Rozhraní nesmí obsahovat proměnné všechny metody jsou public abstract lze implementovat více rozhraní

62 62 Pozdní vazba static boolean vetsi(Obrazec o1, Obrazec o2) { return o1.plocha() > o2.plocha(); } Která metoda plocha() se volá? Včasná vazba výběr volané metody v době překladu podle typu reference, přes kterou metodu voláme Pozdní vazba výběr volané metody v době běhu podle typu objektu, na který reference ukazuje

63 63 Příklad použití pozdní vazby void print(Object obj) { print obj.toString(); } class Object { public String toString() {…} } class Osoba extends Object { public String toString() {…} Johnny Walker }

64 64 Přetěžování operací Public class Citac { int hodnota = 0; void krok() { n++; } void krok(int d) { hodnota += d; } } přetížená operace “abcd” + “efgh” přetížený operátor +

65 65 Praktické cvičení – cviceni3.zip Úloha 3 – Rozšíření schopností třídy Complex Upravte třídu Complex tak aby implementovala zde uvedené přetížené metody class Complex { public Complex() { … } public Complex(double r) { … } public Complex(double r, double i) { … } public add(Complex c) { … } public add(double r) { … } public add(double r, double i) { … } … }

66 66 Prostory jmen – motivace spolupráce více programátorů na jednom projektu class MojeTrida ??? možnost distribuce knihoven tříd použití implementací z různých zdrojů v jedné aplikaci new Seznam() ???

67 67 Prostory jmen Jak zajistit jednoznačnost názvů? konvence pro pojmenování class MB_Trida centrální přidělování nerealizovatelné využití existujících jednoznačných názvů jméno domény organizace cs.vsb.cz, sun.com,...

68 68 Jména balíků tříd (packages) java.lang. String. substring() jméno balíkujméno třídy jméno metody cz.vsb.cs.katis. Student. getLogin() jméno balíkujméno třídy jméno metody

69 69 Vyhledávání balíků umístění přeložených tříd soubory.class archivy.jar (odpovídá formátu.zip) nastavení cest pro vyhledávání set CLASSPATH=.;c:/java/lib;c:/java/lib/mylib.jar java –classpath./classes vyuka.java.Priklad1 struktura adresáře odpovídá jménu balíku./classes/vyuka/java/Priklad1.class

70 70 Definice příslušnosti k balíku package cz.vsb.cs.katis; public class Student { String login; public String getLogin() { return login; }... }

71 Příklad package mujbalicek; public class Citac {...

72 72 1. Plně kvalifikované jméno 2. Příkaz import – dovoz jedné třídy 3. Příkaz import – dovoz celého balíku 4. Příkaz import – statický import (nově JAVA 5.0) Přístup k prvkům balíku java.util.Date = new java.util.Date(); import java.util.Date; … Date = new Date(); import java.util.*; … Date = new Date(); import static java.math.PI; double r = cos(Math.PI * theta); double r = cos(PI * theta);

73 73 Zapouzdření prvků v balíku Třídy a rozhraní označené public přístupné ze všech balíků v souboru.java může být pouze jeden prvek označený public; jméno se musí shodovat se jménem zdrojového souboru Třídy a rozhraní bez označení public přístupné pouze ze stejného balíku v souboru.java jich může být libovolný počet

74 74 Zapouzdření prvků ve třídě private dostupné pouze v rámci těla třídy protected dostupné v rámci stejného balíku + třídám, které z aktuální třídy dědí public dostupné z libovolné třídy libovolného balíku bez označení dostupné z libovolné třídy téhož balíku

75 75 Kolize ve jménech Odkaz musí být jednoznačný Pozn.: Co když chybí příkaz package? implicitní balík – vše funguje i bez public! import cz.vsb.cs.util.*; import java.util.*; … Date today = new Date(); java.util.Date today = new java.util.Date();

76 76 Standardní balíky JDK java.lang nepotřebuje příkaz import, doveze se automaticky základní třídy (Object, Class, String, System, Math, Integer, Thread,...), rozhraní (Comparable,...) a výjimky (Exception,...) System.exit(1); System.out.println( str.toLowerCase() ); int val = Integer.parseInt(str); double rnd = Math.random(); if( Character.isDigit(c) ) …

77 77 Standardní balíky JDK java.util pomocné třídy (Currency, Calendar, Date, Random), rozhraní a implementace abstraktních datových typů (List, Set, Map, LinkedList, TreeSet, TreeMap) import java.util.*; System.out.println(new Date()); Arrays.sort(arr);

78 78 Standardní balíky JDK java.io práce s datovými proudy (soubory, bloky paměti, řetězce, roury,...) java.net podpora síťových aplikací (třídy URL, Socket,...) java.rmi vzdálené volání metod (rozhraní Remote)

79 79 Standardní balíky JDK java.applet podpora appletů – aplikací běžících v prohlížeči na straně klienta (IE, Netscape,...) java.awt jednoduchá knihovna komponent grafického uživatelského rozhraní javax.swing pokročilá knihovna komponent grafického uživatelského rozhraní

80 80 Standardní balíky JDK java.sql, javax.sql jednotný přístup k SQL databázím javax.xml.parsers, javax.xml.transform analýza XML souborů a jejich transformace java.security, javax.security kryptografie a bezpečnost aplikací

81 81 Řešení příkladu ze cvičení package cviceni3; public class Complex { private double re; private double im; public double getRe() { return re; } public double getIm() { return im; } public double abs() { return Math.sqrt(re * re + im * im); }

82 82 Řešení příkladu ze cvičení public Complex() {} public Complex(double re) { this.re = re; this.im = 0.0; } public Complex(double re, double im) { this.re = re; this.im = im; }

83 83 Řešení příkladu ze cvičení public void add(Complex c) { re += c.re; im += c.im; } public static Complex add(Complex c1, Complex c2) { double re = c1.re + c2.re; double im = c1.im + c2.im; return new Complex(re, im); }

84 84 Řešení příkladu ze cvičení public String toString() { return im == 0.0 ? Double.toString(re); : re == 0.0 ? im + “i” : re + (im < 0.0 ? "" : "+“) + im + "i"; } public boolean equals(Object obj) { if( obj instanceof Complex ) { Complex c = (Complex)obj; return re == c.re && im == c.im; } return false; } }

85 85 Praktické cvičení – cviceni4.zip Úloha 1 – Práce s rozhraními Rozbalte v pracovním adresáři soubor cviceni4.zip. Prostudujte jakým způsobem je zajištěno třídění bulbinkovou metodou objektů typu Zlomek(Priklad.java) Rozšiřte třídu Complex o implementaci rozhraní Porovnatelny Úloha 2 – Práce s rozhraními Comparable, Comparator Prostudujte v JAVA API tyto dvě rozhraní Upravte třídy v baličku cviceni4 tak, aby používaly dané rozhraní.


Stáhnout ppt "Ing. Lumír Návrat, A1018 Tel: +420 59 732 3252 ICQ: 64100582 Materiály vycházejí z podkladů doc. Ing. Miroslava."

Podobné prezentace


Reklamy Google