Úvod do programovacích jazyku˚ (Java), 1/12
Základní informace Algoritmus, program ˇ Císelné soustavy Úvod do jazyka Java
Úvod do programovacích jazyku˚ (Java) Michal Krátký Katedra informatiky VŠB–Technická univerzita Ostrava
Úvod do programovacích jazyku˚ (Java), 2007/2008
c
2006–2008
Michal Krátký
Úvod do programovacích jazyku˚ (Java)
1/33
Úvod do programovacích jazyku˚ (Java), 1/12
Základní informace Algoritmus, program ˇ Císelné soustavy Úvod do jazyka Java
Michal Krátký
tel.: +420 596 993 239 místnost: A1004 mail:
[email protected] web: http://www.cs.vsb.cz/kratky/ http://www.cs.vsb.cz/kratky/courses/ 2007-08/upr/
c
2006–2008
Michal Krátký
Úvod do programovacích jazyku˚ (Java)
2/33
Úvod do programovacích jazyku˚ (Java), 1/12
Základní informace Algoritmus, program ˇ Císelné soustavy Úvod do jazyka Java
Projekty a zápoˇcet
ˇ bude ukonˇcen klasifikovaným zápoˇctem. Pˇredmet Maximálneˇ 100b. Z 1. projektu je nutné získat minimálneˇ 10b (ze 20b), z 2. semestrálního projektu pak 21b (ze 40b). Projekty budou kontrolovány samostatným úkolem, jehož trvání bude cˇ asoveˇ omezeno (1.5h). ˇ bude ukonˇcen písemným testem. Minimálneˇ 20b Pˇredmet ze 40b možných.
c
2006–2008
Michal Krátký
Úvod do programovacích jazyku˚ (Java)
3/33
Úvod do programovacích jazyku˚ (Java), 1/12
Základní informace Algoritmus, program ˇ Císelné soustavy Úvod do jazyka Java
Algoritmus ˇ J. Dvorský, E. Ochodková, D. Duráková. Algoritmy. Skripta, VŠB-Technická univerzita Ostrava, http://www.cs.vsb.cz/dvorsky/Opora.html, 2007. Název algoritmus pochází ze zaˇcátku devátého století z Arábie. V letech 800 až 825 napsal perský matematik Muhammad ibn Músá al Chwárizmí dveˇ knihy, z nichž jedna se v latinském pˇrekladu jmenovala Algoritmi dicit, cˇ esky Tak praví al Chwárizmí. Byla to kniha postupu˚ pro poˇcítání s cˇ ísly. Pojem algoritmus tedy vznikl z latinizovaného Al-Gorizmí.
c
2006–2008
Michal Krátký
Úvod do programovacích jazyku˚ (Java)
4/33
Úvod do programovacích jazyku˚ (Java), 1/12
Základní informace Algoritmus, program ˇ Císelné soustavy Úvod do jazyka Java
Algoritmus
ˇ jako pˇredpisu pro ˇrešení nejakého ˇ Algoritmu mužeme ˚ rozumet problému. Jako pˇríklad lze uvést pˇredpis pro výpoˇcet obsahu obdélníku. Pokud rozebereme ˇrešení takovéto úlohy, musí ˇ obsahovat tˇri veci: 1
hodnoty vstupních dat (délky stran a, b),
2
pˇredpis pro ˇrešení, vzorec S = a × b.
3
požadovaný výsledek, tj. výstupní data (obsah obdélníku S).
c
2006–2008
Michal Krátký
Úvod do programovacích jazyku˚ (Java)
5/33
Úvod do programovacích jazyku˚ (Java), 1/12
Základní informace Algoritmus, program ˇ Císelné soustavy Úvod do jazyka Java
Algoritmus
Algoritmus se skládá z kroku, ˚ poskytuje na základeˇ vstupních data požadovaná data výstupní. ˇ ke Algoritmus musí se stejnými vstupními daty dospet stejnému výsledku. Každý pˇredpis je složen z kroku, ˚ které na sebe navazují. Postup kroku˚ je jednoznaˇcný.
c
2006–2008
Michal Krátký
Úvod do programovacích jazyku˚ (Java)
6/33
Úvod do programovacích jazyku˚ (Java), 1/12
Základní informace Algoritmus, program ˇ Císelné soustavy Úvod do jazyka Java
Zápis programu
Algoritmus se zapisuje v programovacím jazyce, zápisem programu. Program je postup ˇrešení ’ˇcitelný’ pro poˇcítaˇc. ˇ orientovali i Program musí být natolik cˇ itelný, aby se v nem ostatní programátoˇri.
c
2006–2008
Michal Krátký
Úvod do programovacích jazyku˚ (Java)
7/33
Úvod do programovacích jazyku˚ (Java), 1/12
Základní informace Algoritmus, program ˇ Císelné soustavy Úvod do jazyka Java
Programování Programováním rozumíme: 1
Správné pochopení zadání úlohy, které vyústí v pˇresný popis možných situací a návrh vstupních a výstupních dat.
2
Sestavení algoritmu ˇrešení.
3
ˇ Detekování úseku, ˚ které budou ˇrešeny samostatne.
4
Zápis zdrojového textu úlohy v programovacím jazyce, ˇ odladení.
5
Pˇremýšlení nad hotovým dílem, vylepšování (ovšem bez ˇ v návrhu vstupu a výstupu). zmen
c
2006–2008
Michal Krátký
Úvod do programovacích jazyku˚ (Java)
8/33
Úvod do programovacích jazyku˚ (Java), 1/12
Základní informace Algoritmus, program ˇ Císelné soustavy Úvod do jazyka Java
Vyšší programovací jazyky Vyšší programovací jazyky poskytují cˇ tyˇri nástroje pro zápis algoritmu: 1
Primitivní výrazy, tj. data (ˇcísla, znaky, apod.) a procedury (sˇcítání, násobení, logické operátory apod.).
2
ˇ Mechanismus pro sestavování složitejších výrazu˚ z jednodušších.
3
ˇ Mechanismus pro pojmenování složitejších výrazu˚ a tím zprostˇredkování možnosti pracovat s nimi stejneˇ jako ˇ s primitivními výrazy (definování promenných a nových procedur).
4
Konstrukce jazyka – cykly apod.
c
2006–2008
Michal Krátký
Úvod do programovacích jazyku˚ (Java)
9/33
Úvod do programovacích jazyku˚ (Java), 1/12
Základní informace Algoritmus, program ˇ Císelné soustavy Úvod do jazyka Java
Pojmenování hodnot
Podstatnou vlastností programovacího jazyka je asociování jmen a hodnot. Napˇríklad: int a = 486. Jméno a je svázáno s hodnotou cˇ ísla 486 ˇ v desítkové soustave. int b = a + 37. Jméno + je svázáno s procedurou pro sˇcítání (hodnotou jména + je procedura). Uživatel pˇri psaní zdrojového textu pracuje ve výrazech se jmény, interpret (pˇrekladaˇc) jazyka text zpracuje a poˇcítá s hodnotami.
c
2006–2008
Michal Krátký
Úvod do programovacích jazyku˚ (Java)
10/33
Úvod do programovacích jazyku˚ (Java), 1/12
Základní informace Algoritmus, program ˇ Císelné soustavy Úvod do jazyka Java
ˇ Císelné soustavy - motivace Napˇr. µ-procesor AMD Opteron obsahuje 16 základních 64b registru, ˚ do kterých se zapisuje/ˇcte pomocí instrukcí strojového kódu. ˇ Ve vyšších programovacích jazycích jsme sice odstíneni od programování ve strojovém kódu, nicméneˇ je vhodné ˇ ˇ ˇ mít povedomí o tom, co se v poˇcítaˇci behem provádení ˇ programu deje. Do 32b registru poˇcítaˇce mužeme ˚ uložit cˇ íslo, které ve dvojkové soustaveˇ obsahuje 32 cifer. Primitivní datové typy a operace jsou cˇ asto mapovány na registry a strojové instrukce µ-procesoru. ˚
c
2006–2008
Michal Krátký
Úvod do programovacích jazyku˚ (Java)
11/33
Úvod do programovacích jazyku˚ (Java), 1/12
Základní informace Algoritmus, program ˇ Císelné soustavy Úvod do jazyka Java
Pˇrirozené cˇ íslo v poˇcítaˇci az = an z n + an−1 z n−1 + ... + a2 z 2 + a1 z 1 + a0 z 0 kde a je cˇ íslo vyjádˇrené v cˇ íselné soustaveˇ o základu z. ˇ z je základ cˇ íselné soustavy, z je celé kladné cˇ íslo vetší ˇ než jedna. Císlo zi , kde i = 0, 1, ..., n se nazývá jednotka rˇádu i, nebo také jednotka i-tého ˇrádu. ˇ platí 0 ≤ ai ≥ z − 1. ai jsou cˇ íselné koeficienty pro než Nazýváme je cˇ íslice neboli cifry ; o cˇ íslici ai ˇríkáme, že je cˇ íslicí i-tého ˇrádu, neboli cˇ íslicí ˇrádu i. ˇ n je poˇcet ˇrádových míst. Císlo az je n + 1 ciferné v soustaveˇ o základu z. Tento zápis nazýváme rozvojem cˇ ísla a v soustaveˇ o základu z. c
2006–2008
Michal Krátký
Úvod do programovacích jazyku˚ (Java)
12/33
Úvod do programovacích jazyku˚ (Java), 1/12
Základní informace Algoritmus, program ˇ Císelné soustavy Úvod do jazyka Java
Desítková soustava
a10 = an 10n + an−1 10n−1 + ... + a2 102 + a1 101 + a0 100 372510 = 3 × 103 + 7 × 102 + 2 × 101 + 5 × 100 = 3 × 1000 + 7 × 100 + 2 × 10 + 5 × 1 ˇ cˇ íselná soustava. Nejrozšíˇrenejší
c
2006–2008
Michal Krátký
Úvod do programovacích jazyku˚ (Java)
13/33
Úvod do programovacích jazyku˚ (Java), 1/12
Základní informace Algoritmus, program ˇ Císelné soustavy Úvod do jazyka Java
Dvojková, osmiˇcková a šestnáctková soustava Dvojková (binární), osmiˇcková (oktantová), šestnáctková (hexadecimální) soustava. a2 = an 2n + an−1 2n−1 + ... + a2 22 + a1 21 + a0 20 a8 = an 8n + an−1 8n−1 + ... + a2 82 + a1 81 + a0 80 a16 = an 16n + an−1 16n−1 + ... + a2 162 + a1 161 + a0 160 0010 0110 0001 11012 = 230358 = 261D16 Maximální hodnota v registru velikosti n je 2n − 1. Napˇr. pro 8b registry je maximální hodnota 255. c
2006–2008
Michal Krátký
Úvod do programovacích jazyku˚ (Java)
14/33
Úvod do programovacích jazyku˚ (Java), 1/12
Základní informace Algoritmus, program ˇ Císelné soustavy Úvod do jazyka Java
Pˇrevody do desítkové soustavy
20123 = 2×33 +0×32 +1×31 +2×30 = 2×27+0+3+2 = 5910 1101102 = 1 × 25 + 1 × 24 + 0 × 23 + 1 × 22 + 1 × 21 + 0 × 20 = 32 + 16 + 4 + 2 = 5410 D416 = 13 × 161 + 4 × 160 = 208 + 4 = 21210
c
2006–2008
Michal Krátký
Úvod do programovacích jazyku˚ (Java)
15/33
Úvod do programovacích jazyku˚ (Java), 1/12
Základní informace Algoritmus, program ˇ Císelné soustavy Úvod do jazyka Java
Pˇrevody ze dvojkové do 16 a 8 soustav 975710 ˇ Ctveˇ rice bitu˚ (od nejníže platného bitu) tvoˇrí cifry v ˇ hexadecimální soustave. 0010 0110 0001 1101 = 261D16 Napˇr. 1101 = 8 + 4 + 0 + 1 = 1310 = D16 Trojice bitu˚ (od nejníže platného bitu) tvoˇrí cifry v oktantové ˇ soustave. 0 010 011 000 011 101 = 0230358 = 230358 Napˇr. 101 = 4 + 0 + 1 = 510 = 58
c
2006–2008
Michal Krátký
Úvod do programovacích jazyku˚ (Java)
16/33
Úvod do programovacích jazyku˚ (Java), 1/12
Základní informace Algoritmus, program ˇ Císelné soustavy Úvod do jazyka Java
Sˇcítání binárních cˇ ísel
+ 1
1101 0010 0000
0+0 0+1 1+1 1+1+1
1100 0110 0011
1010 1011 0110
1110 0011 0001
= = =
5649410 990710 6640110
=0 =1 = 0, pˇrenos do dalšího ˇrádu = 1, pˇrenos do dalšího ˇrádu
c
2006–2008
Michal Krátký
Úvod do programovacích jazyku˚ (Java)
17/33
Úvod do programovacích jazyku˚ (Java), 1/12
Základní informace Algoritmus, program ˇ Císelné soustavy Úvod do jazyka Java
Bitové posuny Pravý a levý bitový posun. Pozor nejedná se o rotaci! 1010 1110 >> 1 0010 1110 << 1 1000 0000 >> 7 0000 0001 << 7
= = = =
0101 0111 0101 1100 0000 0001 1000 0000
Aplikace: ˇ poˇctu bitu˚ registru. Zjištení ˇ Rychlé celoˇcíselné delení/násobení cˇ íslem 2n , kde n je poˇcet bitu˚ posunu. Napˇr. 1010 1110 >> 1 = 0101 0111, 17410 / 2 = 8710 .
c
2006–2008
Michal Krátký
Úvod do programovacích jazyku˚ (Java)
18/33
Úvod do programovacích jazyku˚ (Java), 1/12
Základní informace Algoritmus, program ˇ Císelné soustavy Úvod do jazyka Java
Bitový OR
OR
1101 0010 1111
1100 0110 1110
1010 1011 1011
1110 0011 1111
Pravdivostní tabulka: 0 OR 0 = 0 0 OR 1 = 1 1 OR 0 = 1 1 OR 1 = 1
c
2006–2008
Michal Krátký
Úvod do programovacích jazyku˚ (Java)
19/33
Úvod do programovacích jazyku˚ (Java), 1/12
Základní informace Algoritmus, program ˇ Císelné soustavy Úvod do jazyka Java
Bitový AND
AND
1101 0010 0010
1100 0110 0100
1010 1011 1010
1110 0011 0010
Pravdivostní tabulka: 0 AND 0 = 0 0 AND 1 = 0 1 AND 0 = 0 1 AND 1 = 1
c
2006–2008
Michal Krátký
Úvod do programovacích jazyku˚ (Java)
20/33
Úvod do programovacích jazyku˚ (Java), 1/12
Základní informace Algoritmus, program ˇ Císelné soustavy Úvod do jazyka Java
NOT - bitová negace
NOT =
1101 0010
1100 0011
1010 0201
1110 0011
Pravdivostní tabulka: NOT 0 = 1 NOT 1 = 0
c
2006–2008
Michal Krátký
Úvod do programovacích jazyku˚ (Java)
21/33
Úvod do programovacích jazyku˚ (Java), 1/12
Základní informace Algoritmus, program ˇ Císelné soustavy Úvod do jazyka Java
Pˇreteˇcení/podteˇcení rozsahu
Pokud máme ve 4b registru uloženo cˇ íslo 11112 , po pˇriˇctení cˇ ísla 1 dojde k pˇreteˇcení rozsahu. Pokud máme ve 4b registru uloženo cˇ íslo 00012 a odeˇcteme hodnotu 2, pak je ve speciálním registru µ-procesoru detekováno podteˇcení rozsahu.
c
2006–2008
Michal Krátký
Úvod do programovacích jazyku˚ (Java)
22/33
Úvod do programovacích jazyku˚ (Java), 1/12
Základní informace Algoritmus, program ˇ Císelné soustavy Úvod do jazyka Java
Záporná celá cˇ ísla ˇ bit je bitem znaménkovým. Nejvýznamnejší Pokud je velikost registru 32b, pak je hodnota uložena ve spodních 31b a ve 32. bitu je uloženo znaménko (0 kladné cˇ íslo, 1 - záporné cˇ íslo). ˇ Pro uložení záporných cˇ ísel se využívá tzn. doplnkový kód. 990710 , NOT 0010 0110 1011 0011 + 1 = 1101 1001 0100 1101 ˇ Pokud dojde pˇri odˇcítání cˇ ísla v doplnkovém kódu k pˇreteˇcení rozsahu, pˇreteˇcený bit je ignorován. +
1101 1101 1011
1100 1001 0101 c
2006–2008
1010 0100 1111
1110 1101 1011
Michal Krátký
= = =
5649410 990710 4658710 , došlo k pˇreteˇcení
Úvod do programovacích jazyku˚ (Java)
23/33
Úvod do programovacích jazyku˚ (Java), 1/12
Základní informace Algoritmus, program ˇ Císelné soustavy Úvod do jazyka Java
Reálná cˇ ísla
zM × 2e : z - znaménko, m - mantisa, e - exponent.
Napˇr. 64b cˇ íslo: mantisa 52b, exponent 11b. Napˇr. 80b cˇ íslo: mantisa 64b, exponent 15b.
c
2006–2008
Michal Krátký
Úvod do programovacích jazyku˚ (Java)
24/33
Úvod do programovacích jazyku˚ (Java), 1/12
Základní informace Algoritmus, program ˇ Císelné soustavy Úvod do jazyka Java
Úvod do jazyka Java
James Gosling, Sun Microsystems, 1990. Puvodní ˚ název Oak, v roce 1993 pˇrejmenován na Java. V roce 1996 vyšla první implementace (JDK 1.0). Rysy jazyka Java: ˇ Objektove-orientovaný jazyk. Silneˇ typovaný jazyk. Obsahuje garbage collector. ˇ vláken. Podporuje paralelní beh Podporuje výjimky. ’Bezpeˇcný’ programovací jazyk.
c
2006–2008
Michal Krátký
Úvod do programovacích jazyku˚ (Java)
25/33
Úvod do programovacích jazyku˚ (Java), 1/12
Základní informace Algoritmus, program ˇ Císelné soustavy Úvod do jazyka Java
JDK a vývojová prostˇredí
http://java.sun.com/ – JDK – Java Platforma, aktuální verze 1.6. http://java.sun.com/ – NetBeans, vývojové prostˇredí. http://www.eclipse.org/ – Eclipse, vývojové prostˇredí. http://jikes.sourceforge.net/ – ’rychlý’ pˇrekladaˇc.
c
2006–2008
Michal Krátký
Úvod do programovacích jazyku˚ (Java)
26/33
Úvod do programovacích jazyku˚ (Java), 1/12
Základní informace Algoritmus, program ˇ Císelné soustavy Úvod do jazyka Java
Literatura
R. Szturc: Introduction to Programming (Java). Department of Computer Science, VŠB – Technical University of Ostrava, 2004, http://www.cs.vsb.cz/java/index.html B. Eckel: Thinking in Java. 2002, http://www.mindview.net/Books/TIJ/ Sun MicroSystems: Sun Developer Network. 2007, http://java.sun.com/ Mnoho knih v každém knihkupectví.
c
2006–2008
Michal Krátký
Úvod do programovacích jazyku˚ (Java)
27/33
Úvod do programovacích jazyku˚ (Java), 1/12
Základní informace Algoritmus, program ˇ Císelné soustavy Úvod do jazyka Java
Pˇreklad vs interpretace kódu Pˇrekladaˇc – zdrojový kód je pˇreložen do spustitelného souboru. Interpret – vykonává jednotlivé pˇríkazy ze zdrojového kódu. Java kombinuje oba zpusoby. ˚ Kód (*.java) je pˇreložen do bytekódu (*.class) a ten je interpretován v java virtuálním stroji (javavm). Virutální stroj je reprezentován spustitelným souborem java. Veškeré využívané knihovny (jar archívy) musí být uvedeny ˇ v promenné CLASSPATH. c
2006–2008
Michal Krátký
Úvod do programovacích jazyku˚ (Java)
28/33
Úvod do programovacích jazyku˚ (Java), 1/12
Základní informace Algoritmus, program ˇ Císelné soustavy Úvod do jazyka Java
Java platforma Platforma – hardwarové a softwarové prostˇredí ve kterém ˇ program beží. Java platforma – softwarová platforma nad daným hardwarem. Java API Java virtuální stroj
Java platforma
Operační systém Hardware
Java API – kolekce tˇríd – vstupy/výstupy, práce se sítí, databázemi apod. c
2006–2008
Michal Krátký
Úvod do programovacích jazyku˚ (Java)
29/33
Úvod do programovacích jazyku˚ (Java), 1/12
Základní informace Algoritmus, program ˇ Císelné soustavy Úvod do jazyka Java
Pˇríklad 1.1
public class Example0101 { public s t a t i c void main ( S t r i n g [ ] args ) { System . o u t . p r i n t l n ( " H e l l o World ! \ n " ) ; } }
c
2006–2008
Michal Krátký
Úvod do programovacích jazyku˚ (Java)
30/33
Úvod do programovacích jazyku˚ (Java), 1/12
Základní informace Algoritmus, program ˇ Císelné soustavy Úvod do jazyka Java
ˇ Pˇreklad a spuštení
Pˇreklad: javac Example0101.java ˇ Spuštení: java Example0101 ˇ s pˇresmerováním ˇ Spuštení standardního výstupu do souboru file.txt: java Example0101 > file.txt
c
2006–2008
Michal Krátký
Úvod do programovacích jazyku˚ (Java)
31/33
Úvod do programovacích jazyku˚ (Java), 1/12
Základní informace Algoritmus, program ˇ Císelné soustavy Úvod do jazyka Java
ˇ ve vývojovém prostˇredí Pˇreklad a spuštení
Ve vývojovém prostˇredí je cˇ asto nutné založit projekt a do ˇ vkládat pˇríslušné tˇrídy. nej ˇ tj. její metoda main() Jedna tˇrída je tzv. spouštecí, spouští program.
c
2006–2008
Michal Krátký
Úvod do programovacích jazyku˚ (Java)
32/33
Úvod do programovacích jazyku˚ (Java), 1/12
Základní informace Algoritmus, program ˇ Císelné soustavy Úvod do jazyka Java
ˇ (debugging) - efektivní hledání chyb Ladení ˇ je jediný rozumný prostˇredek hledaní chyb v kódu. Ladení ˇ ve Mužeme ˚ použít ˇrádkový debugger nebo ladení vývojových prostˇredích. Na významné ˇrádky vkládáme breakpointy, chod programu ˇ ˇrádcích zastaví. se na techto Funkce: Step Into - zanoˇrení do metody, Step Over pˇrechod na další ˇrádek bez možného zanoˇrení, Run ˇ rozbehnutí programu až do nalezení dalšího breakpointu, ˇ aktuální funkce. Step Out - opuštení Mužeme ˚ sledovat: Stack Trace - zásobník volání metod, ˇ ˇ hodnoty lokálních promenných i promenných instancí a tˇríd. c
2006–2008
Michal Krátký
Úvod do programovacích jazyku˚ (Java)
33/33