Úvod do programování - Java Cvičení č.1
1
UPR 2008/2009
1
UPR informace • Cvičící čí í RNDr. Eliška š Ochodková, á kancelář ář A1010 •
[email protected] • www.cs.vsb.cz/ochodkova • Přednášející Ing. Michal Krátký, Ph.D., kancelář A1004 •
[email protected] h lk k b • www.cs.vsb.cz/kratky 2
UPR 2008/2009
2
Přihlášení • Osobní číslo
– Každý uživatel počítačové sítě TUO-Net má automaticky přiděleno osobní číslo. – Studenti mají toto číslo uvedeno na své čipové kartě a v indexu. Osobní číslo se skládá ze tří písmen a tří číslic, např.: abc123 – Osobní číslo slouží pro identifikaci v počítačových systémech.
• Heslo – – – –
Počáteční heslo je uživateli nastaveno jeho rodné číslo (bez lomítka) Uživatel je povinen změnit si heslo co nejdříve Prvotní heslo opravňuje uživatele k 6 přihlášením Zapomenuté heslo může nastavit fakultní správce nebo kartové středisko - požádat musíte osobně - nelze telefonicky či poštou
• Autentizace – – – – –
3
Uživatelé se autentizují pomocí adresářové služby eDirectory (Novell): uživatelské DN: [.]os [.]os-cislo.? cislo.? uživatelské jméno: os-cislo uživatelův kontext: .?, což je poslední číslice jeho osobního čísla Např. .abc123.3 UPR 2008/2009
3
UPR informace • Zápočet
– max 70 bodů, min 36 na základě test, – pevně dané termíny – schopnost on-line implementovat zadání!!!
• Zkouška – test (klasif. zápočet) – Max 30 bodů,, min 15 bodů
• Opisování NE!!!
– Totožné nebo jen mírně modifikované projekty, neschopnost vysvětlit zdrojový kód apod. – Opisování u zkoušky Æ Disciplinární Di i li á í k komise i Æ podmíněné d í ě é Æ nepodmíněné d í ě é vyloučení ze studia
4
UPR 2008/2009
4
UPR informace • Instalace (odkazy na webové é stránce á cvičícího a přednášejícího) – Java J2SE Development Kit 6.0 (stáhnout jdk (Java Development Kit), ne jen jre (Java R ti Runtime E Environment)) i t)) – IDE • Eclipse – na cvičení • NetBeans a další
• Literatura viz webová stránka cvičícího
5
UPR 2008/2009
5
Programátorské desatero • • • • • • • • • • • • • • • • •
6
Programování je lidská činnost, činnost vyžaduje tedy trénink. trénink Programování není cíl, ale prostředek k dosažení cíle. Programování vyžaduje pochopení algoritmizovaného problému. Programátor přemýšlí. Programátor pracuje samostatně. Programátor čte, zejména dokumentaci. Programátor se stále učí nové věci. Programátor testuje to, to čemu ještě nerozumí nerozumí. Programátor umí improvizovat. Programátor optimalizuje. Programátor musí umět přecházet plynule mezi více jazyky. Programátor umí hledat chyby. Programátor hledá chyby, aby se poučil. Programátor umí číst cizí kód. Je to poučné. Programátor píše slušně. slušně Programátor si musí poradit s více editory. Programátor musí umět přečíst kód i bez zvýrazněné syntaxe.
UPR 2008/2009
6
Životní cyklus javovského programu • Soubor AhojSvete.java AhojSvete java se zdroj zdroj. kódem public class AhojSvete { public static void main(String[] args) { System.out.println("Ahoj svete!"); } }
• Překlad (různé překladače (compilers), např. javac, jikes) z příkazového řádku javac AhojSvete.java Æ AhojSvete.class (tzv. bytecode)
• Spuštění z příkazového řádku java AhojSvete
7
UPR 2008/2009
7
Vývojové prostředí Eclipse • Spuštění, š ě í vytvoření ř í workspace (pracovního prostředí) – Při prvním spuštění Eclipse jste dotázáni na umístění tzv. Workspace. Vyberte si Váš pracovníí adresář, d ář ve kt kterém é se vám á vytvoří t ří workspace (adresář s tímto názvem). Tento workspace bude obsahovat vámi vytvořená data – projekty, adresáře, soubory.
8
UPR 2008/2009
8
Vývojové prostředí Eclipse • Vytvoření V t ř í projektu j kt – Po spuštění se Eclipse otevírá s posledně otevřeným(i) projektem(y). Chcete-li vytvořit projekt nový, respektive první proveďte následující: – Po spuštění IDE se nový projekt vytvoří File -> New -> Project, j , a vybere y se varianta Java Project. j Vp průvodci dále zadejte jméno projektu (např. cv1) a pak zvolte Finish. – K vytvoření projektu také můžeme kliknout na ikonu
• Vytvořil se tzv. Java project, projekt, kam se budou ukládat naše soubory se zdrojovými kódy (tj zdrojové (tj. d j é soubory) b ) a související i jí í soubory b potřebné k vytvoření programu v Javě. 9
UPR 2008/2009
9
Vývojové prostředí Eclipse • Přidávání ř á á í tříd ří – Pokud jste zadali adresář projektu, ve kterém již jsou soubory .java, Eclipse je zařadí do projektu. Nové třídy se vytváří File > New > Class, je třeba zadat jméno třídy (musí být stejné jako jméno třídy, která pak bude obsahovat metodu main). main) , např. např AhojSvete AhojSvete. Dále na otázku Which method stubs would you like to create? odpovězte zakliknutím položky public static void main… a ukončete volbou Finish. – K vytvoření třídy také můžeme kliknout na ikonu
• Vytvoří se zdrojový soubor „AhojSvete.java AhojSvete java“, který bude obsahovat jedinou třídu „AhojSvete“. 10
UPR 2008/2009
10
Vývojové prostředí Eclipse • Psaní, í překlad, ř spouštění š ě í programu – Eclipse obsahuje komfortní editor se syntax highlighting a automatickým odsazováním. Psaní je tedy víceméně intuitivní. Standardní horká klávesa Ctrl-S Ctrl S ukládá soubor. soubor – Překlad se ručně spustí volbou Run->Run as-> Java application nebo klikněte na ikonu – Chyby a výsledky překladu vypisují do spodního okna Console.
11
UPR 2008/2009
11
První program /* * * * *
File name: AhojSvete.java Date: 2007/10/3 Author: Vase Jmeno Muj prvni program v Jave */
// deklarace hlavni tridy programu public class AhojSvete { // definice hlavni metody programu public static void main(String[] args) { // vypis retezce na obrazovku System.out.println("Ahoj svete!"); }
} /* end of AhojSvete.java */
12
UPR 2008/2009
12
Komentáře // na jeden řádek řá /* komentář na více řádků *// /** dokumentační komentář * jjavadoc vygeneruje g j dokumentaci */ 13
UPR 2008/2009
13
Konvence • Dokumentace, k komentáře k ář – Na začátku každé třídy uveďte: • - stručný popis třídy, - autora či autory, - označení verze (pořadové číslo či datum poslední změny).
– Před každou metodou by y měl být ý její j j p popis p doplněný p ýo popis významu jednotlivých parametrů a návratových hodnot. – Popisy tříd a metod by měly být ve formátu vhodném pro javadoc. – Vlastní kód můžte rovněž doplnit o komentář, zejména pokud jste začátečníci. začátečníci
14
UPR 2008/2009
14
Konvence • Id Identifikátory tifikát (J (Java je j tzv. t case senzitivní iti í jazyk j k – pozor na malá a velká písmena!) • Třídy – začínají velkým a každé další velkým AhojSvete, StringBuffer
• Metody d a proměnné ě é – začínají malým, další slovo velkým nactiCislo(), pocet, pocetPrvku
• Balíky – pouze malá písmena, např. java.lang, java.util
• Konstanty – pouze velká písmena MAX_VALUE, PI 15
UPR 2008/2009
15
Konvence • Formátování á á í – Na jednom řádku by měl být jeden příkaz, deklarace jedné proměnné. – Obsah bloku odsaďte vždy o 3 či 4 mezery. V rámci jednoho bloku by měly být všechny příkazy odsazeny stejně (Eclipse odsazuje samo). – Otevírací závorka bloku je obvykle na konci řádku, uzavírací samostatná na řádku. Např. – V řídících strukturách vždy používejte složené závorky pro bloky (a to i v případě, že v bloku je pouze jeden příkaz). – Používejte mezeru před otevírací závorkou a okolo operátorů.
16
UPR 2008/2009
16
Základní pojmy • Datový ý typ určuje č jakých ý hodnot může ůž nabývat ý objekt daného datového typu a množinu přípustných operací nad tímto datovým typem. Objektem rozumíme konstantu, proměnnou, výraz ý ap podprogramy p g y ((v Javě metody). y) • Konstanta - veličina, která nemění hodnotu během řešení problému. Může být použita dvěma způsoby: – přímo (63, ABC, …), – pojmenováním j á í ((označení č í identifikátorem), id ifiká ) (PI jjméno é konstanty 3.14 …).
17
UPR 2008/2009
17
Základní pojmy final float PI = 3.14; nebo final float PI; …. PI = 3.14;
18
UPR 2008/2009
18
Základní pojmy • Proměnná ě á - veličina, č která á může ůž měnit ě hodnotu během řešení problému. Proměnná se zavádí deklarací (pojmenování a určení datového typu konkrétní é í proměnné, ě é event. určením č í počáteční hodnoty) int i, k; int j = 1;
19
UPR 2008/2009
19
Základní pojmy • Výraz se skládá z operátorů, operátorů operandů a speciálních znaků (např. závorky). Operandem může být: – – – –
konstanta, proměnná, výraz, ý , volání podprogramu (metody).
• Operand je tvořen opět výrazem: (a+b)/2, a=>c, i=2
• Příkazy popisují jednotlivé kroky algoritmu a jejich návaznosti. Rozlišujeme jednoduché a strukturované příkazy. příkazy Celý algoritmus lze chápat jako jeden příkaz: i = 2;
20
UPR 2008/2009
20
Řídící struktury • Jednoduché é příkazy ří – příkaz přiřazení (operátor přiřazení = ), – (čtení a výpis (čtení a výpis je zpravidla realizován jako volání podprogramu)).
• Strukturované příkazy – sekvence (posloupnost), – selekce (podmínka), – cyklus.
21
UPR 2008/2009
21
Datové typy • Datový ý typ určuje č množinu ž hodnot, kterých ý může nabýt konstanta, proměnná, podprogram nebo výraz a množinu operací nad těmito hodnotami. • Datový typ také určuje, určuje kolik místa (bajtů) bude v paměti pro např. proměnnou tohoto typu vyhrazeno. • Deklarace datového objektu znamená přiřazení jednoznačného jména - identifikátoru a určení č í jeho datového é typu. • V Javě DT jednoduché a referenční. 22
UPR 2008/2009
22
Deklarace (zavedení) proměnných int i;
Můžeme také definovat více proměnných stejného typu najednou (ale doporučení – deklarace každé p proměnné na samostatný ý řádek): int a, b, c; int j = 1; float f, f g, g h; final float PI = 3.14; 23
UPR 2008/2009
23
Jednoduché (základní) datové typy • boolean (logický ý typ) - objekt datového é typu boolean může nabývat dvou hodnot: – pravda (angl. True, logická 1) – nepravda (angl. False, logická 0)
24
UPR 2008/2009
24
Celé číslo • Objekt datového é typu celé é čí číslo nabývá ý á hodnot z množiny celých čísel. Celočíselné DT v Javě: – – – –
byte (8 bitů), short (16 bitů), ), int ((32 bitů), long (64 bitů).
• Zápis: – desítkově, osmičkově (0126, 015) a šestnáctkově (0x3A, 0xCD).
25
UPR 2008/2009
25
Reálné číslo • Objekt datového é typu reálné á é číslo čí nabývá hodnot z množiny reálných čísel. Reálné datové typy v Javě: – float (32 bitů), – double (64 bitů).
• Zápis: 15., 15.0, .15, 5e6, 7E23, -7E+23, +7E-23.
26
UPR 2008/2009
26
Číselné soustavy • Každé ž é čí číslo lze zapsat v poziční č í čí číselné é soustavě ve tvaru: an*zn+an-1*zn-1+…. +a1*z1+a0*z0+a-1*zn-1+a-2*z-2+…..
• V dekadické soustavě reprezentujeme číslo jako posloupnost číslic, číslic které mají různé váhy, váhy podle jejich pozice, tzv. poziční číselná soustava. 172=1*100+7*10+2*1
• Obecný zápis čísla v desítkové poziční číselné soustavě anan-1…a1a0a-1a-2…. má hodnotu an*10n+an-1*10n-1+…. +a1*101+a0*100+a-1*10n-1+a-2*10-2+….. kde ai ∈ { 0,1,2,3,4,5,6,7,8,9} 27
UPR 2008/2009
27
Číselné soustavy • Počítač je sestrojen z logických obvodů, které pracují pouze s hodnotami 0 a 1. Proto je výhodné použít pro zápis čísel dvojkovou (binární) soustavu. (101)2 = (1*4+0*2+1*1)2 = 510
• Obecný zápis čísla v binární poziční číselné soustavě anan-1…a1a0a-1a-2…. má hodnotu an*2n+an-1*2n-1+…. +a1*21+a0*20+a-1*2n-1+a-2*2-2+….. kde ai ∈ { 0,1}
28
UPR 2008/2009
28
Číselné soustavy 13
:2
6
1
3
0
1
1
0
1
0
.625*2 .625 2
1
.25
0
.5
1
.0
1310 = 11012 0.62510 = 0.1012 13.62510 = 1101.1012 11012 = (1*23+1*22+0*21+1*20)10 = 1310
29
UPR 2008/2009
29
Číselné soustavy 0.110 = = 0*20+0*2-1+0*2-2+0*2-3 +1*2-4 +1*2-5+... = = 0.00011….2
30
0
.1*2
0
.2
0
.4
0
.8 8
1
.6
1
.2
0
.4
…
… UPR 2008/2009
30
Číselné soustavy • Paměťová buňka se skládá z osmi bitů. • Zápis hodnot do paměťové buňky rozmezí (00000000)2 až (11111111) 2 , 0 až 255. • Tento způsob p interpretace p obsahu p paměťové buňky ovšem neumožňuje zápis záporných čísel. Proto se používá ještě některých dalších způsobů. • Přímý kód ukládá absolutní hodnotu čísla se znaménkovým bitem bitem, který určí zda se jedná o číslo kladné nebo záporné. 31
UPR 2008/2009
31
Přímý kód 123 0 |1111011 -123 1 |1111011 • V tomto způsobu kódování dochází k dvojí reprezentaci nuly. 0 0 |0000000 -0 1 |0000000
32
UPR 2008/2009
32
Doplňkový kód • Č Číslo v doplňkovém kódu interpretujeme tak, že nejvyšší váha má zápornou hodnotu -(2n). V případě osmibitové reprezentace je tedy hodnota nejvyšší váhy -128. (1|0000000)2=(1*-27+0*26+.....+0*20)10 =(-128)10 (1|0000001)2 =(1*-27+0*26+.....+0*21+1*20)10 =(-127)10 (1|1111111)2 =(1*-27+1*26+.....+1*20)10 =(-1)10 (0|0000000)2 =(0*-27+0*26+.....+0*20)10 =(0)10 (0|0000001)2 =(0*-27+0*26+.....+0*21+1*20)10 =(1)10 7+1*26+.....+1*20) =(127) ((0|1111111) | )2 =(0*-2 ( )10 10 (
33
UPR 2008/2009
33
Reálná čísla • Vzhledem k tomu, že libovolný interval reálných čísel obsahuje nekonečný počet hodnot, není možné nalézt jednoznačné zobrazení mezi libovolným reálným intervalem a konečným počtem hodnot, který dává k dispozici kódování do n bitů. • Do n bitů lze zakódovat nejvýše 2n hodnot. Proto je i počet reálných čísel zakódovaných v n bitech maximálně 2n. • Reálná čísla jsou v počítači reprezentována vždy s určitou chybou. Tato chyba závisí na velikosti kódovaného intervalu reálných čísel, na počtu bitů do nichž reálné číslo kódujeme a na způsobu jakým kódování provádíme.
34
UPR 2008/2009
34
Pevná řádová čárka • Při zobrazení b í čísla čí l v pevné é řádové řád é čá čárce je j čí číslo l zakódováno do n bitů tak, že prvních m bitů odpovídá celé části a zbylých d bitů odpovídá zlomkové části. Takové kódování se pak ve zkratce označuje jako kódování m.d. Stejně jako u celých čísel lze použít přímý i doplňkový kód. kód Nejčastěji se ale používá doplňkový kód, aby bylo možné používat i záporná čísla. • Příklad: V kódování 8.4 zapište číslo (13.625)10. (13.625)10=(00001101.1010) 2 • Při kódování s pevnou řádovou čárkou v doplňkovém kódu m.d je nejmenší zobrazitelné číslo -2m-1 a největší zobrazitelné číslo 2m-1-2-d. 35
UPR 2008/2009
35
Pohyblivá řádová čárka • P Pro zobrazení b í velkých lký h čí čísell b bychom h potřebovali tř b li neúměrné množství bitů. Například pro číslo 10300 přibližně 1000 bitů. Navíc u tak velkých čísel lze obvykle pracovat s menší absolutní přesností (bity nižších řádů lze zanedbat). Obdobná situace je u čísel se zápornými exponenty. exponenty • Proto se číslo s pohyblivou řádovou čárkou skládá ze dvou částí: mantisy a exponentu. Mantisa je číslo s pevnou řádovou čárkou a exponent celé číslo. Hodnota reálného čísla r s mantisou m a exponentem e se vypočte podle vzorce r=m*2e. 36
UPR 2008/2009
36
Pohyblivá řádová čárka • Příkl Příklad: d V kód kódování á í s pohyblivou h bli řádovou řád čárkou čá k s mantisou 0.8 a čtyřbitovým exponentem zapište číslo (13.625)10. (13.625)10=(0.11011010)2*2
(0100) 2
• V paměti by toto číslo mohlo být uloženo jako sekvence následujících bitů: 11011010|0100. n-1
n-1
• Rozsah je přibližně od -22 do +22 , kde n je počet bitů exponentu. m. • Relativní R l ti í přesnost ř t δ je j dá dána počtem čt bitů mantisy ti m, δ =2 2-m
37
UPR 2008/2009
37
Znak • Množina hodnot DT znak (char) je tvořena znaky abecedy (malá velká písmena), (malá, písmena) číslicemi a speciálními znaky. znaky Každému znaku je přiřazena celočíselná hodnota, tzv. kód znaku. Přiřazení kódů jednotlivým znakům je voleno tak, aby odpovídalo jejich pořadí v tzv. kódovací tabulce. Mezi nejpoužívanější kódování patří kódování podle norem ASCII, Unicode (Java). • Zápis: – jedním znakem (‘A’, ‘$’), – posloupností ‘\uXXXX’, jde XXXX jsou šestnáctkové číslice (‘\u011B’ je znak ‘ě’), – „escape“ sekvencí (‘\n’ je nový řádek), – osmičkově.
38
UPR 2008/2009
38
Název Velikost Rozsah typu l long 8 -99 223 372 036 854 775 808 ažž +9 223 372 036 854 775 807 int 4 -2 147 483 648 až +2 147 483 647 short 2 -32 768 až +32 767 byte 1 -128 až +127 double 8 ±1.797 693 134 862 315 70 E+308 float 4 ±3.402 823 47 E+38 char 2 65 536 různých znaků Boolean 1 bit true nebo false 39
Implicitní hodnota 0 0 0 0 0.0 0.0 \u0000 false UPR 2008/2009
39
Operátor přetypování • Pokud se hodnota proměnné kratšího typu ukládá do proměnné delšího typu, provede Java převod automaticky (neexistuje nebezpečí ztráty informace) – rozšiřující konverze: int cislo1 = 12; long cislo2; cislo2 = cislo1; • Pokud se hodnota proměnné delšího typu ukládá do proměnné k tšíh typu, kratšího t je j třeba tř b provést é t explicitní li it í přetypování ř t á í – zužujícící ž jí í í konverze: float desetinneCislo1; double desetinneCislo2 = 0.123456789; desetinneCislo1 = (float) desetinneCislo2;
40
UPR 2008/2009
40
Operátory • Unární
– unární -, unární +, int j; int i = -3; j = -i; – speciální p ++l-hodnota, --l-hodnota l-hodnota++, l-hodnota--
• Binární – – – –
+, -, *, /, %, =, ==, !=, ! && &&, ||, || &, & |, | !, ! <, <=, >, >=, &, |, ^, <<, >>, >>>, ~
• Ternární. 41
UPR 2008/2009
41
Operátory ++, -• ve výrazu se pracuje s původní hodnotou a teprve poté je hodnota proměnné zvýšena: l-hodnota++, l-hodnota—
• nejprve se zvýší hodnota proměnné a pak se použije: ++l-hodnota, --l-hodnota
42
int puvodni = 10; int nova = puvodni++;
// puvodni=11, nova=10
int puvodni = 10; int nova = ++puvodni;
// puvodni=11, nova=11
UPR 2008/2009
42
Další operátory Operátor += -= /= *= %= ++ --
43
Příklad operátoru x += y x -= y x /= y x *= y x %= y x++ ++x x---x
Význam x x x x x x
= = = = = =
x x x x x x
+y -y /y *y %y +1
x=x-1
UPR 2008/2009
43
Logické operace • Relační č í operace - výsledkem ý relačních č í operací je vždy logická hodnota. Relační operace jsou binární operace: == , !=, < , > , <= , >=, &&, || ||, &, ||, ! • Zkrácené x úplné vyhodnocování logických součtů a součinů.
44
UPR 2008/2009
44
Ternární operátor • T Ternární á í operátor át slouží l ží k vytvoření t ř í ttzv. podmíněného d í ě éh výrazu, syntaxe: log_vyraz ? výraz1 : výraz2 • Zapíšeme-li například tento podmíněný výraz: cislo1 < 5 ? cislo2++ : cislo2-hodnota proměnné cislo2 se zvýší o jedničku (provede se výraz1) pokud je hodnota proměnné cislo1 menší než 5 (podmínka (log_vyraz) je splněna). Pokud je hodnota proměnné cislo1 větší nebo rovna 5 (tedy podmínka není splněna), hodnota proměnné cislo2 se sníží (provede se vyraz2).
45
UPR 2008/2009
45