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

Podobné dokumenty
Úvod do programovacích jazyků (Java)

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

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

Základní datové struktury

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

ADT/ADS = abstraktní datové typy / struktury

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

Datové struktury. alg12 1

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

Abstraktní datové typy: zásobník

Úvod do programovacích jazyků (Java)

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

Abstraktní datové typy

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

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

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

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

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

Algoritmizace prostorových úloh

Šablony, kontejnery a iterátory

Šablony, kontejnery a iterátory

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

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

Algoritmizace a programování

Lineární datové struktury

Konstruktory a destruktory

Algoritmizace prostorových úloh

KTE / ZPE Informační technologie

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

Programování v Javě I. Leden 2008

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

boolean hasnext() Object next() void remove() Kolekce

7. Dynamické datové struktury

Úvod do programovacích jazyků (Java)

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

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

1. Téma 12 - Textové soubory a výjimky

Více o konstruktorech a destruktorech

Dynamické datové struktury I.

Abstraktní datové typy FRONTA

7. Datové typy v Javě

Výčtový typ strana 67

Generické programování

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

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

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

Spojová implementace lineárních datových struktur

Lineární datové struktury

V případě jazyka Java bychom abstraktní datový typ Time reprezentující čas mohli definovat pomocí třídy takto:

Kolekce, cyklus foreach

2) Napište algoritmus pro vložení položky na konec dvousměrného seznamu. 3) Napište algoritmus pro vyhledání položky v binárním stromu.

Správa paměti. doc. Ing. Miroslav Beneš, Ph.D. katedra informatiky FEI VŠB-TUO A-1007 /

typová konverze typová inference

Principy objektově orientovaného programování

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

Michal Krátký. Úvod do programování. Cíl kurzu. Podmínky získání zápočtu III/III

Struktura programu v době běhu

5 Rekurze a zásobník. Rekurzivní volání metody

ABSTRAKTNÍ DATOVÉ TYPY (ADT)

IB111 Programování a algoritmizace. Objektově orientované programování (OOP)

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

Abstraktní třídy, polymorfní struktury

Správa paměti. Karel Richta a kol. Katedra počítačů Fakulta elektrotechnická České vysoké učení technické v Praze Karel Richta, 2016

Teoretické minimum z PJV

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

PREPROCESOR POKRAČOVÁNÍ

IRAE 07/08 Přednáška č. 7. Začátek (head)

Příklad aplikace Klient/Server s Boss/Worker modelem (informativní)

Iterator & for cyklus

DobSort. Úvod do programování. DobSort Implementace 1/3. DobSort Implementace 2/3. DobSort - Příklad. DobSort Implementace 3/3

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

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

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

Rozklad problému na podproblémy

Zadání k 2. programovacímu testu

Pokročilé programování v jazyce C pro chemiky (C3220) Třídy v C++

Algoritmizace a programování

Textové soubory. alg9 1

Seminář Java II p.1/43

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

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

3 KTE / ZPE Informační technologie

Pokročilé programování v jazyce C pro chemiky (C3220) Operátory new a delete, virtuální metody

Obsah přednášky. 12. Dokumentace zdrojového kódu Tvorba elektronické dokumentace UML. Co je diagram tříd. Ing. Ondřej Guth

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

Google Web Toolkit. Martin Šurkovský, SUR března Katedra informatiky

Řídicí struktury. alg3 1

Maturitní otázky z předmětu PROGRAMOVÁNÍ

Dynamické struktury a Abstraktní Datový Typy (ADT)

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

Dynamické datové struktury III.

Část 1 Spojové struktury (stromy) Dynamické struktury a Abstraktní Datový Typy (ADT) Část 2 Abstraktní datový typ. Část 3 Příklad ADT Prioritní fronta

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/

Soubor jako posloupnost bytů

4. Rekurze. BI-EP1 Efektivní programování Martin Kačer

Abstraktní datové typy

prohled av an ı graf u Karel Hor ak, Petr Ryˇsav y 16. bˇrezna 2016 Katedra poˇ c ıtaˇ c u, FEL, ˇ CVUT

7 Formátovaný výstup, třídy, objekty, pole, chyby v programech

Jazyk C++, některá rozšíření oproti C

Datové struktury obsah přednášky 1. Úvod 2. Třídy Type-wrapper (obalový typ) pro primitivní typy automatické převody 3. Automatické převody mezi

Transkript:

Ú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