Úvod do programovacích jazyků (Java)

Podobné dokumenty
Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007

Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007

Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007

Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007

Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007

Příklad : String txt1 = new String( Ahoj vsichni! ); //vytvoří instanci třídy String a přiřadí ji vnitřní hodnotu Ahoj vsichni!

Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007

Programování v Javě I. Leden 2008

Programování v Javě I. Únor 2009

Úvod do programovacích jazyků (Java)

Úvod do programovacích jazyků (Java)

Definice třídy. úplná definice. public veřejná třída abstract nesmí být vytvářeny instance final nelze vytvářet potomky

Teoretické minimum z PJV

Seminář Java II p.1/43

7. Datové typy v Javě

Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007

Definice třídy. úplná definice. public veřejná třída abstract nesmí být vytvářeny instance final nelze vytvářet potomky

Definice třídy. úplná definice. public veřejná třída abstract nesmí být vytvářeny instance final nelze vytvářet potomky

typová konverze typová inference

Seznamy a iterátory. Kolekce obecně. Rozhraní kolekce. Procházení kolekcí

Abstraktní datové typy: zásobník

Fronta (Queue) Úvod do programování. Fronta implementace. Fronta implementace pomocí pole 1/4. Fronta implementace pomocí pole 3/4

Obsah přednášky 7. Základy programování (IZAPR) Přednáška 7. Parametry metod. Parametry, argumenty. Parametry metod.

8 Třídy, objekty, metody, předávání argumentů metod

Počítačové laboratoře bez tajemství aneb naučme se učit algoritmizaci a programování s využitím robotů CZ.1.07/1.3.12/

Datové typy v Javě. Tomáš Pitner, upravil Marek Šabo

Neměnné objekty. Tomáš Pitner, upravil Marek Šabo

7. přednáška - třídy, objekty třídy objekty atributy tříd metody tříd

9. přednáška - třídy, objekty

Výčtový typ strana 67

Algoritmizace a programování

Principy objektově orientovaného programování

Programování v C++ 1, 5. cvičení

Základní pojmy. Úvod do programování. Základní pojmy. Zápis algoritmu. Výraz. Základní pojmy

PŘETĚŽOVÁNÍ OPERÁTORŮ

Seminář Java IV p.1/38

Paměť počítače. alg2 1

Java Výjimky Java, zimní semestr

4. ZÁKLADNÍ POJMY Z OBJEKTOVĚ ORIENTOVANÉHO PROGRAMOVÁNÍ

Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007

1. Programování proti rozhraní

Práce s textem. Třída Character. Třída Character. Třída Character. reprezentuje objekty zapouzdřující hodnotu typu char (boxing / unboxing)

Generické programování

Vytváření a použití knihoven tříd

3. Třídy. Základní pojmy objektového programování. Třídy

Obsah přednášky 9. Skrývání informací. Skrývání informací. Zapouzdření. Skrývání informací. Základy programování (IZAPR, IZKPR) Přednáška 9

ADT/ADS = abstraktní datové typy / struktury

Java Řetězce Java, zimní semestr

Datové typy strana 29

Java Enum Java, zimní semestr ,2017 1

Předmluva k aktuálnímu vydání Úvod k prvnímu vydání z roku Typografické a syntaktické konvence... 20

PREPROCESOR POKRAČOVÁNÍ

Úvod do programování v jazyce Java

Programování v C++ 2, 4. cvičení

Úvod do programování - Java. Cvičení č.4

Jazyk C# (seminář 6)

Algoritmizace a programování

Algoritmizace prostorových úloh

Třída jako zdroj funkcí

Úvod Třídy Rozhraní Pole Konec. Programování v C# Hodnotové datové typy, řídící struktury. Petr Vaněček 1 / 39

Konstruktory a destruktory

Třídy a dědičnost. A0B36PR1-Programování 1 Fakulta elektrotechnická České vysoké učení technické

Objektově orientované programování

KTE / ZPE Informační technologie

Datové struktury. Obsah přednášky: Definice pojmů. Abstraktní datové typy a jejich implementace. Algoritmizace (Y36ALG), Šumperk - 12.

Úvodní informace. Petr Hnětynka 2/2 Zk/Z

5 Přehled operátorů, příkazy, přetypování

11 Diagram tříd, asociace, dědičnost, abstraktní třídy

První kapitola úvod do problematiky

Stromy. Příklady. Rekurzivní datové struktury. Základní pojmy

Zápis programu v jazyce C#

20. Projekt Domácí mediotéka

Java Cvičení 01. CHARLES UNIVERSITY IN PRAGUE faculty of mathematics and physics

Algoritmizace prostorových úloh

Algoritmizace a programování

TŘÍDY POKRAČOVÁNÍ. Události pokračování. Příklad. public delegate void ZmenaSouradnicEventHandler (object sender, EventArgs e);

Datové struktury. alg12 1

Java a XML. 10/26/09 1/7 Java a XML

Programování v C++ 1, 6. cvičení

OOPR_05. Případové studie

Úvodní informace. Petr Hnětynka 2/2 Zk/Z

Algoritmizace a programování

10 Balíčky, grafické znázornění tříd, základy zapozdření

Typický prvek kolekce pro české řazení

KTE / ZPE Informační technologie

Algoritmizace a programování. Terminálový vstup a výstup

1. ÚVOD ZÁKLADY JAZYKA...

KTE / ZPE Informační technologie

Kolekce, cyklus foreach

Regulární výrazy. Vzory

Třídy, polymorfismus. A0B36PR2-Programování 2 Fakulta elektrotechnická České vysoké učení technické

součet cvičení celkem. známka. Úloha č.: max. bodů: skut. bodů:

Programování v C++ 3, 3. cvičení

Algoritmizace a programování

Statické proměnné a metody. Tomáš Pitner, upravil Marek Šabo

Základy jazyka C# Obsah přednášky. Architektura.NET Historie Vlastnosti jazyka C# Datové typy Příkazy Prostory jmen Třídy, rozhraní

Soubor jako posloupnost bytů

Obsah. Úvod 11 Základy programování 11 Objektový přístup 11 Procvičování 11 Zvláštní odstavce 12 Zpětná vazba od čtenářů 12 Errata 13

Abstraktní třída a rozhraní

RMI Remote Method Invocation

Transkript:

Úvod do programovacích jazyků (Java) Michal Krátký Katedra informatiky VŠB Technická univerzita Ostrava Úvod do programovacích jazyků (Java), 2007/2008 c 2006 2008 Michal Krátký Úvod do programovacích jazyků (Java) 1/36

1/3 Ke každému primitivnímu typu náleží třída (object wrapper). Třídy obsahují metody, které můžeme použít pro práci s hodnotami primitivních datových typů. Někdy je nutné pracovat s touto třídou namísto s primitivním datovým typem. Hodnoty v instancích těchto tříd jsou neměnné. c 2006 2008 Michal Krátký Úvod do programovacích jazyků (Java) 2/36

2/3 Primitive type Size [bits] Wrapper class boolean - Boolean char 16 Character byte 8 Byte short 16 Short int 32 Integer long 64 Long float 32 Float double 64 Double void - Void c 2006 2008 Michal Krátký Úvod do programovacích jazyků (Java) 3/36

3/3 Společným předkem tříd Byte, Short, Integer, Long, Float a Double je třída Number. Některé statické metody: Převod hodnoty na řetězec. Např.: String s = Integer.toString(v); Převod řetězce na hodnotu. Např.: int v = Integer.parseInt(str); Některé statické konstanty: MIN_VALUE, MAX_VALUE reprezentují minimální a maximální hodnotu daného typu. Např.: int v = Integer.MIN_VALUE; c 2006 2008 Michal Krátký Úvod do programovacích jazyků (Java) 4/36

Příklad, IntArray.java 1/6 package myapp ; public class I n t A r r a y i n t marray [ ] ; i n t msize ; public I n t A r r a y ( i n t c a p a c i t y ) marray = new i n t [ c a p a c i t y ] ; msize = 0 ; c 2006 2008 Michal Krátký Úvod do programovacích jazyků (Java) 5/36

Příklad, IntArray.java 2/6 public void add ( i n t value ) i f ( msize >= marray. l e n g t h ) r e s i z e ( msize + 1 ) ; marray [ msize ] = value ; msize ++; c 2006 2008 Michal Krátký Úvod do programovacích jazyků (Java) 6/36

Příklad, IntArray.java 3/6 public i n t getvalue ( i n t index ) i n t r e t = 1; i f ( index < msize ) r e t = marray [ index ] ; return r e t ; c 2006 2008 Michal Krátký Úvod do programovacích jazyků (Java) 7/36

Příklad, IntArray.java 4/6 public void p r i n t ( ) for ( i n t i = 0 ; i < msize ; i ++) System. out. p r i n t ( marray [ i ] + " " ) ; System. out. p r i n t ( " \ n " ) ; c 2006 2008 Michal Krátký Úvod do programovacích jazyků (Java) 8/36

Příklad, IntArray.java 5/6 public i n t FindMax ( ) i n t max = I n t e g e r. MIN_VALUE ; i n t index = 1; for ( i n t i = 0 ; i < msize ; i + + ) i f ( max < marray [ i ] ) max = marray [ i ] ; index = i ; return index ; c 2006 2008 Michal Krátký Úvod do programovacích jazyků (Java) 9/36

Příklad, IntArray.java 6/6 public s t a t i c void main ( S t r i n g [ ] args ) I n t A r r a y array = new I n t A r r a y ( 1 0 ) ; for ( i n t i = 0 ; i < args. l e n g th ; i + + ) i n t v = I n t e g e r. p a r s e I n t ( args [ i ] ) ; array. add ( v ) ; array. p r i n t ( ) ; i n t maxindex = array. FindMax ( ) ; System. out. p r i n t l n ( " Maximalni prvek j e : " + array. getvalue ( maxindex ) + ", na p o z i c i : " + m c 2006 2008 Michal Krátký Úvod do programovacích jazyků (Java) 10/36

Příklad, myapp, kompilace, spouštění Kompilace: javac myapp \ I n t A r r a y. java Spouštění: java myapp. I n t A r r a y Dopsat metody: resize(int) add(int[] array) c 2006 2008 Michal Krátký Úvod do programovacích jazyků (Java) 11/36

Hodnota vs ukazatel 1/4 Primitivní vs objektové datové typy a pole. Příklad: public void Compute ( ) i n t a = 6 0 ; Set ( a ) ; / / a = 60 0x1232 0x2437 60 a 60 80 public void Set ( i n t b ) b = 8 0 ; c 2006 2008 Michal Krátký Úvod do programovacích jazyků (Java) 12/36

Hodnota vs ukazatel 2/4 Primitivní datové typy (int, float,... ) jsou odkazovány hodnotou, pole a instance objektových datových typů jsou odkazovány ukazateli. Příklad: public void Compute ( ) i n t pole [ ] = new i n t [ 1 ] ; pole [ 0 ] = 6 0 ; Set ( pole ) ; / / pole [ 0 ] = 8 0 public void Set ( i n t [ ] pole ) pole [ 0 ] = 8 0 ; / / pole 0x1232 Zásobník: 60 0x1232 c 2006 2008 Michal Krátký Úvod do programovacích jazyků (Java) 13/36

Hodnota vs ukazatel 3/4 Příklad: public void Compute ( ) i n t a = 6 0 ; IntNumber value = new IntNumber ( a ) ; Set ( value ) ; a = value. i n t V a l u e ( ) ; / / a = 8 0 public void Set ( IntNumber v a l ) v a l. s e t I n t ( 8 0 ) ; c 2006 2008 Michal Krátký Úvod do programovacích jazyků (Java) 14/36

Hodnota vs ukazatel 4/4 public void Compute ( ) i n t a = 6 0 ; I n t e g e r value = new I n t e g e r ( a ) ; Set ( value ) ; a = value. i n t V a l u e ( ) ; / / a = 60 public void Set ( I n t e g e r v a l ) v a l = new I n t e g e r ( 8 0 ) ; c 2006 2008 Michal Krátký Úvod do programovacích jazyků (Java) 15/36

Řízení přístupu Přístup ke členům třídy může být specifikován: public, protected, private nebo není specifikován (implicitní přístup default). public - přístupný z libovolné třídy, protected - přístupný z podtřídy a z jiné třídy stejného balíčku, default - přístupný z libovolné třídy stejného balíčku, private - přístupný pouze ve třídě, kde je člen definován. Při předefinování metody v podtřídě, musí být metoda deklarována se stejným nebo více volnějším přístupem než metoda v nadtřídě. c 2006 2008 Michal Krátký Úvod do programovacích jazyků (Java) 16/36

Dědičnost a konstruktory 1/2 Konstruktory nejsou děděny. Podtřída musí definovat vlastní konstruktory. Konstruktory podtřídy mohou volat konstruktor nadtřídy pomocí klíčového slova super. class Bod public Bod ( i n t x, i n t y ) this. x = x ; this. y = y ;... class ColorPoint extends Bod public ColorPoint ( i n t x, i n t y, i n t c ) super ( x, y ) ; / / v o l a n i k o n s t r u k t o r u n a d t r i d y c o l o r = c ;... c 2006 2008 Michal Krátký Úvod do programovacích jazyků (Java) 17/36

Dědičnost a konstruktory 2/2 Když není volán žádný konstruktor nadtřídy v konstruktoru podtřídy, je použit konstruktor bez parametrů. Tato konstrukce je vložena na začátek konstruktoru. super ( ) ;... Pokud konstruktor není ve třídě definován (at již implicitně nebo explicitně) konstruktor bez parametrů, pak dojde k chybě při překladu. c 2006 2008 Michal Krátký Úvod do programovacích jazyků (Java) 18/36

Konstanty 1/2 Konstanty jsou deklarovány klíčovým slovem final. f i n a l i n t MOVE_UP = 1 ; Hodnota takto deklarované konstantě může být přiřazena pouze při deklaraci. V případě instační proměnné také v konstruktoru. Pokud se pokusíme přiřadit hodnotu na jiném místě, překladač nahlásí chybu. MOVE_UP = 1 0 ; / / Chyba p r i prekladu Konstanty často deklarujeme jako třídní (static), v tomto případě existuje pouze jedna kopie pro všechny instance. s t a t i c f i n a l i n t NUMBER = 1 0 ; c 2006 2008 Michal Krátký Úvod do programovacích jazyků (Java) 19/36

Konstanty 2/2 Konvence: Jména konstant zapisujeme velkýmy znaky a znaky _. V kódu používáme názvy deklarovaných konstant místo celočíselných hodnot. Vyvarujeme se možných chyb a kód získá na čitelnosti. Konvence: konstanty se stejné množiny mají společný prefix, např. DIRECTION_UP, DIRECTION_DOWN,... c 2006 2008 Michal Krátký Úvod do programovacích jazyků (Java) 20/36

1/4 můžeme porovnat pomocí operátorů == a!=: Výsledek operátoru == je true pokud obě reference ukazují na stejný objekt nebo jsou obě null. V jiném případě je výsledek false. Operátor!= je negací operátoru ==. Point a = new Point ( 1 0, 2 0 ) ; Point b = new Point ( 1 0, 2 0 ) ; System. out. p r i n t l n ( a = = b ) ; / / f a l s e Object c = a ; System. out. p r i n t l n ( a = = c ) ; / / t r u e c 2006 2008 Michal Krátký Úvod do programovacích jazyků (Java) 21/36

, equals() 2/4 Třída java.lang.object je nadtřídou všech tříd na platformě Java. public boolean equals(object obj) Tato metoda třídy java.lang.object může být použita pro porovnání dvou různých objektů. Pokud metoda není v potomcích předefinována, pak se jedná o test (this == obj). c 2006 2008 Michal Krátký Úvod do programovacích jazyků (Java) 22/36

, equals() 3/4 class Point private i n t x, y ; public boolean equals ( Object obj ) i f (! ( obj instanceof Point ) ) return false ; Point p = ( Point ) obj ; return ( x = = p. x && y = = p. y ) ; public Point ( i n t x, i n t y ) this. x = x ; this. y = y ; c 2006 2008 Michal Krátký Úvod do programovacích jazyků (Java) 23/36

, equals() 4/4 Point a = new Point ( 1 0, 2 0 ) ; Point b = new Point ( 1 0, 2 0 ) ; Point c = new Point ( 3 0, 2 0 ) ; System. out. p r i n t l n ( a = = b ) ; / / f a l s e System. out. p r i n t l n ( a. equals ( b ) ) ; / / t r u e System. out. p r i n t l n ( a. equals ( c ) ) ; / / f a l s e c 2006 2008 Michal Krátký Úvod do programovacích jazyků (Java) 24/36

1/6 Řetězec je posloupnost znaků (primitivních typů char). V API existují dvě třídy reprezentující řetězec (obě v balíku java.lang): String a StringBuffer. Všechny řetězcové literály, např. "abc", jsou reprezentovány jako instance třídy String. Tyto instance jsou konstantní, jejich hodnota nemůže být po vytvoření měněna. StringBuffer představuje proměnný řetězec. String není pole řetězců. Tzn. char[] není String a opačně. Avšak, obě třídy String a StringBuffer používají pole řetězců pro vnitřní implementaci řetězce. c 2006 2008 Michal Krátký Úvod do programovacích jazyků (Java) 25/36

, třída String 2/6 Nejjednodušší způsob jak vytvořit řetězec: String s = "abc"; Přestože operátor new není implicitně volán, je vytvořena instance String. Třída obsahuje celou řadu konstruktorů. char data [ ] = a, b, c ; S t r i n g s = new S t r i n g ( data ) ; char data2 [ ] = a, b, c, d, e, f ; S t r i n g t = new S t r i n g ( data2, 2, 3 ) ; / / t = " cde " ; c 2006 2008 Michal Krátký Úvod do programovacích jazyků (Java) 26/36

, třída String 3/6 Významné metody: int length() vrací délku řetězce. char charat(int index) vrací znak na specifikované pozici. boolean equals(object obj) porovnává dva řetězce. S t r i n g s = " abcdef " ; System. out. p r i n t l n ( s. l e n g t h ( ) ) ; / / 6 System. out. p r i n t l n ( s. charat ( 5 ) ) ; / / f System. out. p r i n t l n ( s. equals ( " abcdef " ) ) ; / / t r u e System. out. p r i n t l n ( s. equals ( " h e l l o " ) ) ; / / f a l s e c 2006 2008 Michal Krátký Úvod do programovacích jazyků (Java) 27/36

, třída StringBuffer 4/6 Třída StringBuffer implementuje proměnný řetězec. Důležité metody: int length() void setlength(int newlength) char charat(int index) void setcharat(int index, char ch) int capacity() void ensurecapacity(int minimumcapacity) c 2006 2008 Michal Krátký Úvod do programovacích jazyků (Java) 28/36

, třída StringBuffer 5/6 Při práci s instancí String je velmi často volán operátor new. Použití třídy StringBuffer je tedy často efektivnější než použití třídy String. Konstruktory: StringBuffer() StringBuffer(int length) StringBuffer(String str) c 2006 2008 Michal Krátký Úvod do programovacích jazyků (Java) 29/36

, třída StringBuffer 6/6 Důležité metody: append - přidání řetězce na konec, insert - přidání řetězce na specifikovaný index. S t r i n g B u f f e r b = new S t r i n g B u f f e r ( " abcd " ) ; b. append ( " ef " ) ; / / b obsahuje abcdef b. i n s e r t ( 3, " ghi " ) ; / / b obsahuje abcghidef Obsah instance může být převeden na instanci String: S t r i n g s = b. t o S t r i n g ( ) ; / / abcghidef c 2006 2008 Michal Krátký Úvod do programovacích jazyků (Java) 30/36

Vyhledání podřetězce 1/3 public class SearchApp public SearchApp ( ) public s t a t i c void main ( S t r i n g [ ] args ) SearchApp app = new SearchApp ( ) ; i n t index = app. Search ( " Hello world! ", " Hello " ) ; / / index = 0 index = app. Search ( " Hello world! ", " h e l l o " ) ; / / index = 1 c 2006 2008 Michal Krátký Úvod do programovacích jazyků (Java) 31/36

Vyhledání podřetězce 2/3 i n t Search ( S t r i n g zdroj, S t r i n g vzor ) i n t r e t = 1; i n t length = z d r o j. l e n g t h ( ) vzor. l e n g t h ( ) ; for ( i n t i = 0 ; i < l e n g t h ; i ++) boolean f l a g = true ; for ( i n t j = 0 ; j < vzor. l e n g t h ( ) ; j ++) c 2006 2008 Michal Krátký Úvod do programovacích jazyků (Java) 32/36

Vyhledání podřetězce 3/3 i f ( z d r o j. charat ( i + j )! = vzor. charat ( j ) ) f l a g = false ; break ; i f ( f l a g ) r e t = i ; break ; return r e t ; c 2006 2008 Michal Krátký Úvod do programovacích jazyků (Java) 33/36

Rekurze, příklad 1/3 package DirReader ; import java. i o. ; public class DirReader S t r i n g mrootdirectory ; public DirReader ( S t r i n g d i r e c t o r y ) mrootdirectory = d i r e c t o r y ; public void Read ( ) Read ( mrootdirectory ) ; c 2006 2008 Michal Krátký Úvod do programovacích jazyků (Java) 34/36

Rekurze, příklad 2/3 private void Read ( S t r i n g d i r e c t o r y ) F i l e f i l e = new F i l e ( d i r e c t o r y ) ; S t r i n g [ ] l i s t = f i l e. l i s t ( ) ; for ( i n t i = 0 ; i < l i s t. l e n gth ; i + + ) F i l e c u r r e n t F i l e = new F i l e ( d i r e c t o r y + " \ \ " + l i s t [ i ] ) ; i f ( c u r r e n t F i l e. i s F i l e ( ) ) System. out. p r i n t l n ( c u r r e n t F i l e. getpath ( ) ) ; else Read ( c u r r e n t F i l e. getpath ( ) ) ; c 2006 2008 Michal Krátký Úvod do programovacích jazyků (Java) 35/36

Rekurze, příklad 3/3 public s t a t i c void main ( S t r i n g args [ ] ) DirReader dirreader = new DirReader ( " f : \ \ d i r " ) ; dirreader. Read ( ) ; c 2006 2008 Michal Krátký Úvod do programovacích jazyků (Java) 36/36