Ú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/33
Michal Krátký tel.: +420 596 993 239 místnost: A1004 mail: michal.kratky@vsb.cz 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 jazyků (Java) 2/33
Projekty a zápočet Předmět bude ukončen klasifikovaným zápočtem. Maximálně 100b. Z 1. projektu je nutné získat minimálně 10b (ze 20b), z 2. semestrálního projektu pak 21b (ze 40b). Projekty budou kontrolovány samostatným úkolem, jehož trvání bude časově omezeno (1.5h). Předmět bude ukončen písemným testem. Minimálně 20b ze 40b možných. c 2006 2008 Michal Krátký Úvod do programovacích jazyků (Java) 3/33
Algoritmus J. Dvorský, E. Ochodková, D. Ďuráková. Algoritmy. Skripta, VŠB-Technická univerzita Ostrava, http://www.cs.vsb.cz/dvorsky/opora.html, 2007. Název algoritmus pochází ze začátku devátého století z Arábie. V letech 800 až 825 napsal perský matematik Muhammad ibn Músá al Chwárizmí dvě knihy, z nichž jedna se v latinském překladu jmenovala Algoritmi dicit, česky Tak praví al Chwárizmí. Byla to kniha postupů pro počítání s čísly. Pojem algoritmus tedy vznikl z latinizovaného Al-Gorizmí. c 2006 2008 Michal Krátký Úvod do programovacích jazyků (Java) 4/33
Algoritmus Algoritmu můžeme rozumět jako předpisu pro řešení nějakého problému. Jako příklad lze uvést předpis pro výpočet obsahu obdélníku. Pokud rozebereme řešení takovéto úlohy, musí obsahovat tři věci: 1 hodnoty vstupních dat (délky stran a, b), 2 předpis pro řeš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 jazyků (Java) 5/33
Algoritmus Algoritmus se skládá z kroků, poskytuje na základě vstupních data požadovaná data výstupní. Algoritmus musí se stejnými vstupními daty dospět ke stejnému výsledku. Každý předpis je složen z kroků, které na sebe navazují. Postup kroků je jednoznačný. c 2006 2008 Michal Krátký Úvod do programovacích jazyků (Java) 6/33
Zápis programu Algoritmus se zapisuje v programovacím jazyce, zápisem programu. Program je postup řešení čitelný pro počítač. Program musí být natolik čitelný, aby se v něm orientovali i ostatní programátoři. c 2006 2008 Michal Krátký Úvod do programovacích jazyků (Java) 7/33
Programování Programováním rozumíme: 1 Správné pochopení zadání úlohy, které vyústí v přesný popis možných situací a návrh vstupních a výstupních dat. 2 Sestavení algoritmu řešení. 3 Detekování úseků, které budou řešeny samostatně. 4 Zápis zdrojového textu úlohy v programovacím jazyce, odladění. 5 Přemýšlení nad hotovým dílem, vylepšování (ovšem bez změn v návrhu vstupu a výstupu). c 2006 2008 Michal Krátký Úvod do programovacích jazyků (Java) 8/33
Vyšší programovací jazyky Vyšší programovací jazyky poskytují čtyři nástroje pro zápis algoritmu: 1 Primitivní výrazy, tj. data (čísla, znaky, apod.) a procedury (sčítání, násobení, logické operátory apod.). 2 Mechanismus pro sestavování složitějších výrazů z jednodušších. 3 Mechanismus pro pojmenování složitějších výrazů a tím zprostředkování možnosti pracovat s nimi stejně jako s primitivními výrazy (definování proměnných a nových procedur). 4 Konstrukce jazyka cykly apod. c 2006 2008 Michal Krátký Úvod do programovacích jazyků (Java) 9/33
Pojmenování hodnot Podstatnou vlastností programovacího jazyka je asociování jmen a hodnot. Například: int a = 486. Jméno a je svázáno s hodnotou čísla 486 v desítkové soustavě. int b = a + 37. Jméno + je svázáno s procedurou pro sčítání (hodnotou jména + je procedura). Uživatel při psaní zdrojového textu pracuje ve výrazech se jmény, interpret (překladač) jazyka text zpracuje a počítá s hodnotami. c 2006 2008 Michal Krátký Úvod do programovacích jazyků (Java) 10/33
- motivace Např. µ-procesor AMD Opteron obsahuje 16 základních 64b registrů, do kterých se zapisuje/čte pomocí instrukcí strojového kódu. Ve vyšších programovacích jazycích jsme sice odstíněni od programování ve strojovém kódu, nicméně je vhodné mít povědomí o tom, co se v počítači během provádění programu děje. Do 32b registru počítače můžeme uložit číslo, které ve dvojkové soustavě obsahuje 32 cifer. Primitivní datové typy a operace jsou často mapovány na registry a strojové instrukce µ-procesorů. c 2006 2008 Michal Krátký Úvod do programovacích jazyků (Java) 11/33
Přirozené číslo v počítači a z = a n z n + a n 1 z n 1 +... + a 2 z 2 + a 1 z 1 + a 0 z 0 kde a je číslo vyjádřené v číselné soustavě o základu z. z je základ číselné soustavy, z je celé kladné číslo větší než jedna. Číslo z i, kde i = 0, 1,..., n se nazývá jednotka řádu i, nebo také jednotka i-tého řádu. a i jsou číselné koeficienty pro něž platí 0 a i z 1. Nazýváme je číslice neboli cifry ; o číslici a i říkáme, že je číslicí i-tého řádu, neboli číslicí řádu i. n je počet řádových míst. Číslo a z je n + 1 ciferné v soustavě o základu z. Tento zápis nazýváme rozvojem čísla a v soustavě o základu z. c 2006 2008 Michal Krátký Úvod do programovacích jazyků (Java) 12/33
Desítková soustava a 10 = a n 10 n + a n 1 10 n 1 +... + a 2 10 2 + a 1 10 1 + a 0 10 0 3725 10 = 3 10 3 + 7 10 2 + 2 10 1 + 5 100 = 3 1000 + 7 100 + 2 10 + 5 1 Nejrozšířenější číselná soustava. c 2006 2008 Michal Krátký Úvod do programovacích jazyků (Java) 13/33
Dvojková, osmičková a šestnáctková soustava Dvojková (binární), osmičková (oktantová), šestnáctková (hexadecimální) soustava. a 2 = a n 2 n + a n 1 2 n 1 +... + a 2 2 2 + a 1 2 1 + a 0 2 0 a 8 = a n 8 n + a n 1 8 n 1 +... + a 2 8 2 + a 1 8 1 + a 0 8 0 a 16 = a n 16 n + a n 1 16 n 1 +... + a 2 16 2 + a 1 16 1 + a 0 16 0 0010 0110 0001 1101 2 = 23035 8 = 261D 16 Maximální hodnota v registru velikosti n je 2 n 1. Např. pro 8b registry je maximální hodnota 255. c 2006 2008 Michal Krátký Úvod do programovacích jazyků (Java) 14/33
Převody do desítkové soustavy 2012 3 = 2 3 3 +0 3 2 +1 3 1 +2 3 0 = 2 27+0+3+2 = 59 10 110110 2 = 1 2 5 + 1 2 4 + 0 2 3 + 1 2 2 + 1 2 1 + 0 2 0 = 32 + 16 + 4 + 2 = 54 10 D4 16 = 13 16 1 + 4 16 0 = 208 + 4 = 212 10 c 2006 2008 Michal Krátký Úvod do programovacích jazyků (Java) 15/33
Převody ze dvojkové do 16 a 8 soustav 9757 10 Čtveřice bitů (od nejníže platného bitu) tvoří cifry v hexadecimální soustavě. 0010 0110 0001 1101 = 261D 16 Např. 1101 = 8 + 4 + 0 + 1 = 13 10 = D 16 Trojice bitů (od nejníže platného bitu) tvoří cifry v oktantové soustavě. 0 010 011 000 011 101 = 023035 8 = 23035 8 Např. 101 = 4 + 0 + 1 = 5 10 = 5 8 c 2006 2008 Michal Krátký Úvod do programovacích jazyků (Java) 16/33
Sčítání binárních čísel 1101 1100 1010 1110 = 56494 10 + 0010 0110 1011 0011 = 9907 10 1 0000 0011 0110 0001 = 66401 10 0 + 0 = 0 0 + 1 = 1 1 + 1 = 0, přenos do dalšího řádu 1 + 1 + 1 = 1, přenos do dalšího řádu c 2006 2008 Michal Krátký Úvod do programovacích jazyků (Java) 17/33
Bitové posuny Pravý a levý bitový posun. Pozor nejedná se o rotaci! 1010 1110 >> 1 = 0101 0111 0010 1110 << 1 = 0101 1100 1000 0000 >> 7 = 0000 0001 0000 0001 << 7 = 1000 0000 Aplikace: Zjištění počtu bitů registru. Rychlé celočíselné dělení/násobení číslem 2 n, kde n je počet bitů posunu. Např. 1010 1110 >> 1 = 0101 0111, 174 10 / 2 = 87 10. c 2006 2008 Michal Krátký Úvod do programovacích jazyků (Java) 18/33
Bitový OR Úvod do programovacích jazyků (Java), 1/12 1101 1100 1010 1110 OR 0010 0110 1011 0011 1111 1110 1011 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 jazyků (Java) 19/33
Bitový AND 1101 1100 1010 1110 AND 0010 0110 1011 0011 0010 0100 1010 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 jazyků (Java) 20/33
NOT - bitová negace NOT 1101 1100 1010 1110 = 0010 0011 0201 0011 Pravdivostní tabulka: NOT 0 = 1 NOT 1 = 0 c 2006 2008 Michal Krátký Úvod do programovacích jazyků (Java) 21/33
Přetečení/podtečení rozsahu Pokud máme ve 4b registru uloženo číslo 1111 2, po přičtení čísla 1 dojde k přetečení rozsahu. Pokud máme ve 4b registru uloženo číslo 0001 2 a odečteme hodnotu 2, pak je ve speciálním registru µ-procesoru detekováno podtečení rozsahu. c 2006 2008 Michal Krátký Úvod do programovacích jazyků (Java) 22/33
Záporná celá čísla Nejvýznamnější bit je bitem znaménkovým. 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é číslo, 1 - záporné číslo). Pro uložení záporných čísel se využívá tzn. doplňkový kód. 9907 10, NOT 0010 0110 1011 0011 + 1 = 1101 1001 0100 1101 Pokud dojde při odčítání čísla v doplňkovém kódu k přetečení rozsahu, přetečený bit je ignorován. 1101 1100 1010 1110 = 56494 10 + 1101 1001 0100 1101 = 9907 10 1011 0101 1111 1011 = 46587 10, došlo k přetečení c 2006 2008 Michal Krátký Úvod do programovacích jazyků (Java) 23/33
Reálná čísla zm 2 e : z - znaménko, m - mantisa, e - exponent. Např. 64b číslo: mantisa 52b, exponent 11b. Např. 80b číslo: mantisa 64b, exponent 15b. c 2006 2008 Michal Krátký Úvod do programovacích jazyků (Java) 24/33
James Gosling, Sun Microsystems, 1990. Původní název Oak, v roce 1993 přejmenován na Java. V roce 1996 vyšla první implementace (JDK 1.0). Rysy jazyka Java: Objektově-orientovaný jazyk. Silně typovaný jazyk. Obsahuje garbage collector. Podporuje paralelní běh vláken. Podporuje výjimky. Bezpečný programovací jazyk. c 2006 2008 Michal Krátký Úvod do programovacích jazyků (Java) 25/33
JDK a vývojová prostředí http://java.sun.com/ JDK Java Platforma, aktuální verze 1.6. http://java.sun.com/ NetBeans, vývojové prostředí. http://www.eclipse.org/ Eclipse, vývojové prostředí. http://jikes.sourceforge.net/ rychlý překladač. c 2006 2008 Michal Krátký Úvod do programovacích jazyků (Java) 26/33
Literatura Úvod do programovacích jazyků (Java), 1/12 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 jazyků (Java) 27/33
Překlad vs interpretace kódu Překladač zdrojový kód je přeložen do spustitelného souboru. Interpret vykonává jednotlivé příkazy ze zdrojového kódu. Java kombinuje oba způsoby. Kód (*.java) je přelož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 proměnné CLASSPATH. c 2006 2008 Michal Krátký Úvod do programovacích jazyků (Java) 28/33
Java platforma Platforma hardwarové a softwarové prostředí ve kterém program běží. Java platforma softwarová platforma nad daným hardwarem. Java API Java virtuální stroj Operační systém Hardware Java platforma Java API kolekce tříd vstupy/výstupy, práce se sítí, databázemi apod. c 2006 2008 Michal Krátký Úvod do programovacích jazyků (Java) 29/33
Příklad 1.1 public class Example0101 { public s t a t i c void main ( S t r i n g [ ] args ) { System. out. p r i n t l n ( " Hello World! \ n " ) ; } } c 2006 2008 Michal Krátký Úvod do programovacích jazyků (Java) 30/33
Překlad a spuštění Překlad: javac Example0101.java Spuštění: java Example0101 Spuštění s přesměrováním standardního výstupu do souboru file.txt: java Example0101 > file.txt c 2006 2008 Michal Krátký Úvod do programovacích jazyků (Java) 31/33
Překlad a spuštění ve vývojovém prostředí Ve vývojovém prostředí je často nutné založit projekt a do něj vkládat příslušné třídy. Jedna třída je tzv. spouštěcí, tj. její metoda main() spouští program. c 2006 2008 Michal Krátký Úvod do programovacích jazyků (Java) 32/33
Ladění (debugging) - efektivní hledání chyb Ladění je jediný rozumný prostředek hledaní chyb v kódu. Můžeme použít řádkový debugger nebo ladění ve vývojových prostředích. Na významné řádky vkládáme breakpointy, chod programu se na těchto řádcích zastaví. Funkce: Step Into - zanoření do metody, Step Over - přechod na další řádek bez možného zanoření, Run - rozběhnutí programu až do nalezení dalšího breakpointu, Step Out - opuštění aktuální funkce. Můžeme sledovat: Stack Trace - zásobník volání metod, hodnoty lokálních proměnných i proměnných instancí a tříd. c 2006 2008 Michal Krátký Úvod do programovacích jazyků (Java) 33/33