Úvod do programovacích jazyků (Java) Michal Krátký Katedra informatiky VŠB Technická univerzita Ostrava Úvod do programovacích jazyků (Java), 2006/2007 c 2006 Michal Krátký Úvod do programovacích jazyků (Java) 1/27
Ukazatel 1/7 Ukazatel neobsahuje data, obsahuje adresu v paměti, kde jsou data uložena. Příklad: / / C++ i n t a = 6 0 ; i n t pa = & a ; 0x1232 0x1235 0x1285 a 60 pa 0x1232 60 c 2006 Michal Krátký Úvod do programovacích jazyků (Java) 2/27
Ukazatel, Java 2/7 Primitivní vs objektové datové typy. 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 Michal Krátký Úvod do programovacích jazyků (Java) 3/27
Ukazatel, C++ 3/7 Příklad: public void Compute ( ) i n t a = 6 0 ; Set (&a ) ; / / a = 80 public void Set ( i n t pa ) pa = 8 0 ; c 2006 Michal Krátký Úvod do programovacích jazyků (Java) 4/27
Ukazatel, Java 4/7 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 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 Michal Krátký Úvod do programovacích jazyků (Java) 5/27
Ukazatel, Java 5/7 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 ) ; value 0x1232 0x1232 0x1282 c 2006 Michal Krátký Úvod do programovacích jazyků (Java) 6/27
Ukazatel, Java 6/7 public void Compute ( ) i n t a = 6 0 ; i n t [ ] i n t A r r a y = new i n t [ 1 ] ; i n t A r r a y [ 0 ] = a ; Set ( i n t A r r a y ) ; / / a = 60 a = i n t A r r a y [ 0 ] ; / / a = 80 public void Set ( i n t [ ] array ) array [ 0 ] = 8 0 ; c 2006 Michal Krátký Úvod do programovacích jazyků (Java) 7/27
Ukazatel, Java 7/7 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 ) ; I n t e g e r [ ] i n t A r r a y = new I n t e g e r [ 1 ] ; i n t A r r a y [ 0 ] = value ; Set ( i n t A r r a y ) ; a = value. i n t V a l u e ( ) ; / / a = 6 0 value = i n t A r r a y [ 0 ] ; a = value. i n t V a l u e ( ) ; / / a = 8 0 public void Set ( I n t e g e r [ ] array ) array [ 0 ] = new I n t e g e r ( 8 0 ) ; c 2006 Michal Krátký Úvod do programovacích jazyků (Java) 8/27
Instance primitivních datových typů jsou ukládány na zásobník. Pomocí operátoru new alokujeme pamět na haldě (angl. heap), která je přidělována operačním systémem. c 2006 Michal Krátký Úvod do programovacích jazyků (Java) 9/27
MyString, MyString.java 1/6 package mystring ; public class MyString char marray [ ] ; i n t msize = 0 ; public MyString ( i n t c a p a c i t y ) marray = new char [ c a p a c i t y ] ; c 2006 Michal Krátký Úvod do programovacích jazyků (Java) 10/27
MyString, MyString.java 2/6 / / P r i d e j retezec na konec. public void Append ( S t r i n g s ) boolean r e t = true ; Resize ( msize + s. l e n gth ( ) ) ; i n t newsize = msize+s. l e n g th ( ) ; for ( i n t i = msize ; i < newsize ; i ++) marray [ i ] = s. charat ( i msize ) ; msize = newsize ; c 2006 Michal Krátký Úvod do programovacích jazyků (Java) 11/27
MyString, MyString.java 3/6 / / Zmen v e l i k o s t, pokud j e to nutne. private void Resize ( i n t size ) i f ( size > marray. l e n g t h ) / / v y t v o r nove pole char [ ] tmparray = new char [ s ize ] ; / / z k o p i r u j znaky z puvodniho for ( i n t i = 0 ; i <marray. l e n g t h ; i + + ) tmparray [ i ] = marray [ i ] ; / / puvodni pole zahod marray = tmparray ; c 2006 Michal Krátký Úvod do programovacích jazyků (Java) 12/27
MyString, MyString.java 4/6 / / Zmen v e l i k o s t pokud j e to nutne, v2. private void Resize2 ( i n t size ) i f ( size > marray. l e n g t h ) / / v y t v o r nove pole char [ ] tmparray = new char [ s ize ] ; / / z k o p i r u j znaky z puvodniho System. arraycopy ( marray, 0, tmparray, 0, marray. l e n g t h ) ; / / puvodni pole zahod marray = tmparray ; c 2006 Michal Krátký Úvod do programovacích jazyků (Java) 13/27
MyString, MyString.java 5/6 / Vypis retezec. / 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 Michal Krátký Úvod do programovacích jazyků (Java) 14/27
MyString, TestMyString.java 6/6 package mystring ; public class TestMyString public s t a t i c void main ( S t r i n g [ ] args ) MyString s = new MyString ( 3 ) ; s. Append ( " a " ) ; s. P r i n t ( ) ; s. Append ( " bcde " ) ; s. P r i n t ( ) ; c 2006 Michal Krátký Úvod do programovacích jazyků (Java) 15/27
1/4 V programování je rekurze představována funkcí nebo procedurou, která uvnitř těla funkce nebo procedury obsahuje volání téže funkce nebo procedury. Říkáme, že funkce nebo procedura volá samu sebe. Princip rekurze si ukážeme na výpočtu faktoriálu čísla n. Funkce faktoriál je definována 1 pro n = 0 f (n) = f (n f (n 1)) pro n 1 c 2006 Michal Krátký Úvod do programovacích jazyků (Java) 16/27
, faktoriál 2/4 f (n) = f (n f (n 1)) = f (n f ((n 1) f ((n 2)))) = = = f (n f ((n 1) f ((n 2) f (1 f (0))... )) což vede ke známému vyjádření n! = n (n 1)! = n (n 1)(n 2)! = = n (n 1) (n 2) 1 0! c 2006 Michal Krátký Úvod do programovacích jazyků (Java) 17/27
- faktoriál 3/4 i n t f a c t o r i a l ( i n t n ) i f ( n = = 0 ) return 1 ; else return ( n f a c t o r i a l ( n 1 ) ) ; c 2006 Michal Krátký Úvod do programovacích jazyků (Java) 18/27
, volání funkcí 4/4 c 2006 Michal Krátký Úvod do programovacích jazyků (Java) 19/27
, 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 Michal Krátký Úvod do programovacích jazyků (Java) 20/27
, 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 Michal Krátký Úvod do programovacích jazyků (Java) 21/27
, 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 Michal Krátký Úvod do programovacích jazyků (Java) 22/27
Datové struktury Datová struktura je implementace množiny, často dynamická. Klasifikace: lineární (pole, zásobník, seznam,...), nelineární (stromy). c 2006 Michal Krátký Úvod do programovacích jazyků (Java) 23/27
Datové struktury podporují různé operace pro vkládání prvků, vyhledávání prvků, rušení prvků. Abstraktní datové typy v Javě: Dictionary, Vector - dynamické heterogenní pole, Stack (zásobník, LIFO), Queue (fronta, FIFO), Priority Queue. c 2006 Michal Krátký Úvod do programovacích jazyků (Java) 24/27
Vector Úvod do programovacích jazyků (Java), 11 Dynamické heterogenní pole. Metody: add(object o) - vložení prvku, elementat() - získání prvku, remove() - zrušení prvku. c 2006 Michal Krátký Úvod do programovacích jazyků (Java) 25/27
Vector, příklad 1/2 import java. u t i l. ;... f i n a l i n t size = 1 0 ; Vector v = new Vector ( ) ; for ( i n t i = 0 ; i < size ; i ++) v. add ( " s t r i n g : " + i ) ; for ( i n t i = 0 ; i < size ; i ++) v. add (new I n t e g e r ( i + size ) ) ; c 2006 Michal Krátký Úvod do programovacích jazyků (Java) 26/27
Vector, příklad 2/2 for ( i n t i = 0 ; i < v. size ( ) ; i ++) Object o = v. elementat ( i ) ; S t r i n g s t r = " " ;... i f ( o instanceof S t r i n g ) s t r = ( S t r i n g ) o ; else i f ( o instanceof I n t e g e r ) s t r = " " + ( ( I n t e g e r ) o ). i n t V a l u e ( ) ; System. out. p r i n t l n ( s t r ) ; c 2006 Michal Krátký Úvod do programovacích jazyků (Java) 27/27