Programovací jazyk Java

Rozměr: px
Začít zobrazení ze stránky:

Download "Programovací jazyk Java"

Transkript

1 1 z :01 Programovací jazyk Java 4. přednáška Obsah Tvorba programátorské dokumentace Výjimky I/O operace Serializace a deserializace dat Práce se soubory Programátorská dokumentace pomocí JavaDoc Základním a standardním prostředkem je tzv. dokumentace API. Dokumentujeme především veřejné (public) a chráněné (protected) prvky (metody, proměnné). Ostatní dle potřeby. Dokumentaci píšeme přímo do zdrojového kódu programu ve speciálních dokumentačních komentářích vpisovaných před příslušné prvky (metody, proměnné). Typy komentářů řádkové od značky // do konce řádku, nepromítnou se do dokumentace API. utrata = pocetpiv 30; // komentář blokové začínají / a končí, mezitím komentář na libovolném počtu řádků. Nepromítnou se do dokumentace API. / Toto je muj prvni skvělý, jedinečný program, který nic nedělá. dokumentační od značky po značku, může být opět na libovolném počtu řádků. Každý další řádek může začínat mezerami či, hvězdička se v komentáři neprojeví. Promítnou se do dokumentace API. Dokumentační komentáře uvádíme především: Před hlavičkou třídy pak komentuje třídu jako celek. Před hlavičkou metody nebo proměnné pak komentuje příslušnou metodu nebo proměnnou. V dokumentačních komentářích lze používat HTML tagy! Generování dokumentace Dokumentace má standardně podobu HTML stránek (s rámy nebo bez). Dokumentace je generována nástrojem javadoc přímo ze zdrojového textu tříd. Na příkazovém řádku použijeme příkaz javadoc, v prostředí IDE najdeme příkaz k vytvoření dokumentace v menu. Spuštění: javadoc [options] [packagenames] [sourcefiles] [classnames] [@files] Vybrané volby (options): -help nebo -verbose nápověda -public, -protected, -package, -private specifikuje, které prvky mají být v dokumentaci zahrnuty (implicitně: -protected) -d destinationdirectory kam se má dokumentace uložit -doctitle title titul celé dokumentace Značky JavaDoc "autor 1" "autor 2" specifikuje autora(y) programu (jméno a příjmení uzavřít do verze označuje verzi API, např. informuje, že prvek je zavrhovaný výjimka popisuje informace o výjimce, kterou metoda propouští ( vyhazuje pomocí parametr popis popisuje jeden parametr odkaz uvedeme odkaz, kam je také doporučeno nahlédnout (související URL odkaz [popisek] uvedeme odkaz ve formě URL, kam je také doporučeno nahlédnout (související věci) Další značky: Ukázka okomentované třídy package geometrie; Třída implementující geometrický útvar <strong>obdélník</strong> s atributy <i>vyska</i> a <i>sirka</i> a metodou pro výpočet Petr 1.00, public class Obdelnik { Výška obdélníku. private double vyska; Šířka obdélníku. private double sirka; Konstruktor obdélníku s parametry typu vyska Reálné číslo vyjadřující výšku sirka Reálné číslo vyjadřující šířku obdélníku. public Obdelnik(double vyska, double sirka) { this.vyska = vyska; this.sirka = sirka; Konstruktor obdélníku s parametry typu <tt>string</tt>. Ve svém těle volá konstruktor {@link #Obdelnik(double, double), který provede nastavení hodnot atributů {@link #vyska a {@link #sirka.

2 2 z vyska Číslo v podobě řetězce vyjadřující výšku sirka Číslo v podobě řetězce vyjadřující šířku NumberFormatException Pokud řetězce zadané jako skutečné parametry při volání metody neobsahují reálná čísla. public Obdelnik(String vyska, String sirka) throws NumberFormatException { this(double.valueof(vyska), Double.valueOf(sirka)); Metoda, která počítá obvod Obvod trojúhelníku. public double getobvod() { return 2 (vyska + sirka); Nástroj JavaDoc poté vygeneruje dokumentaci v této podobě. Oficiální dokumentace k JavaDoc: Výjimky Mechanismus výjimek byl zaveden kvůli bezpečnosti programů. Nutí programátora předem reagovat na potenciální problémy (výjimečné stavy) v běhu programu (neotevřený soubor, málo paměti, ). Pokud v programu použijeme operace, které by mohly způsobit výjimku (např. metoda obyčejného čtení ze standardního vstupu System.in.read()), kompilátor nepřeloží program, dokud potenciální chybový stav (např. když na vstupu nic nebude) neošetříme. Možné druhy výjimek Java rozlišuje tři základní druhy výjimek: Error, RuntimeException a Exception. Programátora však nutí k ošetření pouze poslední uvedené výjimky (Exception), ošetření prvních dvou je dobrovolné. Všechny výjimky jsou potomky jedné třídy, třídy Throwable vyhoditelná. Třídy Error a Exception jsou potomky třídy Throwable, třída RuntimeException je potomkem třídy Exception. S třídou Throwable nepracujeme, protože se jedná o příliš obecnou chybu ( Nastala nějaká chyba. ) Na chyby třídy Error rovněž nereagujeme. To jsou chyby JVM (konkrétně interpretu Javy), na které ani reagovat neumíme (např. chyba OutOfMemoryError) Na výjimky třídy RuntimeException také nemusíme reagovat (i když můžeme). Tyto výjimky mohou nastat téměř kdekoliv a JVM je schopen je ošetřit. O výjimky třídy Exception se musíme v programu postarat. Tyto výjimky se vyskytují pouze v souvislosti s voláním určitých metod, u kterých je zvýšené nebezpečí výskytu chyby. Vždy je ale dobré vědět, jaké výjimky může volané metoda způsobit (najdeme v dokumentaci příslušné třídy). Třída Throwable Má mj. tyto konstruktory: Throwable() Throwable(String message) parametr message je zpráva, kterou po výskytu výjimky vrací metoda getmessage(). Throwable(String message, Throwable cause) parametr cause označuje příčinu výjimky (může být null). Throwable(Throwable cause) Má mj. tyto metody: String getmessage() vrací textový popis výjimky. StackTraceElement[] getstacktrace() metoda vrací pole záznamů o jednotlivých metodách na systémovém zásobníku v okamžiku, kdy došlo k výjimce. void printstacktrace() metoda vypisuje na std. výstup pořadí volání metod na systémovém zásobníku v okamžiku, kdy došlo k výjimce. Tento výstup může významně pomoci při odstraňování chyb v aplikaci. Způsoby ošetření výjimky Programátor má tři možnosti, jak reagovat na výjimku: 1. neošetřovat ji, pouze o ní podat informaci volající metodě, 2. výjimku zachytit a komplexně ošetřit, 3. výjimku částečně nebo komplexně ošetřit a současně předat informaci volající metodě. Předání výjimky volající metodě Při spuštění programu (na příkazové řádce příkazem java NazevTridy) se jako první hledá a spustí metoda main (má v Javě funkci hlavního programu). Z této metody se pak volají další metody a konstruktory. Každá metoda (s výjimkou metoda main u programů a metod init, start aj. u appletů) je tedy volána jinou metodou. Pomocí klíčového slova throws v hlavičce metody předáme případně vzniklou výjimku volající ( nadřazené ) metodě. Potom však musíme výjimku zase nějak řešit tam. Pokud výjimku nechceme řešit vůbec, vyhodíme ji i z metody main, tím se však vzdáváme možnosti řešit problém podle svého a necháváme řešení na JVM, který to bude řešit pravěpodobně ukončením programu. import java.io.ioexception; public class Vyjimka { private int pocetcihel; public int nacticisloint() throws IOException { byte[] pole = new byte[20]; System.in.read(pole); String nacteno = new String(pole).trim(); return Integer.valueOf(nacteno);

3 3 z :01 public void nactivstupy() throws IOException { System.out.print("Zadej pocet cihel: "); pocetcihel = nacticisloint(); System.out.print("Zadej mnozstvi malty: "); Výjimka IOException je potomkem třídy Exception. IOException vzniká při vstupně výstupních operacích. Kompletní ošetření výjimky K této činnosti používáme jazykovou konstrukci try-catch(-finally) Do bloku try uzavřeme celý kód, ve kterém se může výjimka vyskytnout. Jedná se o tzv. chráněný blok. Blok catch, který za blokem try bezprostředně následuje, říká, na jakou výjimku se bude reagovat a jak. Těchto bloků může následovat i několik za sebou, každý může zachytávat jinou výjimku. V případě více výjimek (více bloků catch), jsou-li výjimky ve vztahu dědičnosti, je třeba v programu umístit dříve (výše) zachytávání speciálnější výjimky (podtřídy). Nepovinný koncový blok finally slouží k zápisu příkazů, které se mají provést, ať už výjimka nastane či nikoliv (např. vyprázdnění vyrovnávací paměti a uzavření souboru, do kterého jsme zapisovali). Syntaxe: // hlídaný blok catch(třídavýjimek1 referencenavýjimku1) { // ošetření výjimky 1 catch(třídavýjimek2 referencenavýjimku1) { // ošetření výjimky 2 finally { // zde uzavřený kód se provede vždy import java.io.ioexception; public class OsetreniVyjimky { private int pocetcihel; public int nacticisloint() { byte[] pole = new byte[20]; System.in.read(pole; String nacteno = new String(pole).trim(); return Integer.valueOf(nacteno); catch (IOException e) { System.out.println("Chyba pri cteni ze std. vstupu. Nastala vyjimka " + e.tostring()); e.printstacktrace(); return -1; catch (NumberFormatException e) { System.out.println("Chyba pri prevodu retezce na cislo. Nastala vyjimka " + e.tostring()); StackTraceElement[] zasobnik = e.getstacktrace(); for (int i = 0; i < zasobnik.length; i++) { System.out.print("Třída " + zasobnik[i].getclassname()); System.out.print(" uložená v souboru " + zasobnik[i].getfilename()); System.out.print(", metoda " + zasobnik[i].getmethodname()); System.out.println(", řádek " + zasobnik[i].getlinenumber() + "."); return -1; public void nactivstupy() { System.out.print("Zadej pocet cihel: "); pocetcihel = nacticisloint(); Při problému se čtením ze vstupu bude vytvořena a zachycena výjimka IOException a bude vypsáno: Chyba pri cteni ze std. vstupu. Nastala vyjimka java.io.ioexception java.io.ioexception -1 at OsetreniVyjimky.nactiCisloInt(OsetreniVyjimky.java:16) at OsetreniVyjimky.main(OsetreniVyjimky.java:48) Při problému s převodem řetězce na číslo (např. při zadání vstupu "abcd") bude vytvořena a zachycena výjimka NumberFormatException a bude vypsáno: Chyba pri prevodu retezce na cislo. Nastala vyjimka java.lang.numberformatexception: For input string: "abcd" Třída java.lang.numberformatexception uložená v souboru NumberFormatException.java, metoda forinputstring, řádek 65. Třída java.lang.integer uložená v souboru Integer.java, metoda parseint, řádek 492. Třída java.lang.integer uložená v souboru Integer.java, metoda valueof, řádek 582. Třída OsetreniVyjimky uložená v souboru OsetreniVyjimky.java, metoda nacticisloint, řádek 16. Třída OsetreniVyjimky uložená v souboru OsetreniVyjimky.java, metoda main, řádek Vyvolání výjimky Na výjimku je možné pohlížet jako na další datový typ Javy, který vrátí volaná metoda. Aby metoda mohla vrátit výjimku, musí metoda vytvořit odvozený objekt z třídy Exception a vyhodit takto vzniklou výjimku pomocí klíčového slova throw. Příklad vytvoření objektu výjimky IOException: void metoda() throws IOException { // tělo metody if (vyskytla_se_chyba) throw new IOException(); Příklad při zadání čísla 0 bude vyhozena výjimka: public int nacticisloint() { byte[] pole = new byte[20]; System.in.read(pole); String nacteno = new String(pole).trim(); int cisloint = Integer.valueOf(nacteno); if (cisloint <= 0) { throw new IllegalArgumentException("Počet cihel musí být kladný."); return cisloint; catch (IOException e) { System.out.println("Chyba pri cteni ze std. vstupu. Nastala vyjimka " + e.tostring()); e.printstacktrace(); return 0; catch (NumberFormatException e) { System.out.println("Chyba pri prevodu retezce na cislo. Nastala vyjimka " + e.tostring()); StackTraceElement[] zasobnik = e.getstacktrace(); for (int i = 0; i < zasobnik.length; i++) { System.out.print("Třída " + zasobnik[i].getclassname()); System.out.print(" uložená v souboru " + zasobnik[i].getfilename()); System.out.print(", metoda " + zasobnik[i].getmethodname()); System.out.println(", řádek " + zasobnik[i].getlinenumber() + "."); return 0; catch (IllegalArgumentException e) { System.out.println("Chybně zadaný vstup. Nastala vyjimka " + e.tostring()); e.printstacktrace(); return 0; Výpis při zadání vstupu 0: Zadej pocet cihel: 0

4 4 z :01 Chybně zadaný vstup. Nastala vyjimka java.lang.illegalargumentexception: Počet cihel musí být kladný. java.lang.illegalargumentexception: Počet cihel musí být kladný. at pokusy.osetrenivyjimky.nacticisloint(osetrenivyjimky.java:27) at pokusy.osetrenivyjimky.nactivstupy(osetrenivyjimky.java:54) Vytvoření vlastní výjimky Děděním z nějaké knihovní třídy výjimky lze vytvořit vlastní výjimku a tu pak v případě potřeby vyvolat. class MojeIOVyjimka extends IOException { public MojeIOVyjimka(String zprava) { super(zprava); class MojeVyjimkaZaBehu extends RuntimeException { public MojeVyjimkaZaBehu(String zprava) { super(zprava); I/O operace Pro práci se soubory na disku, pro síťovou komunikaci, pro komunikaci mezi vlákny apod. potřebujeme mechanismus přenosu/přesunu dat. Základní způsob realizace vstupně-výstupních operací v Javě pomocí streamů ( proudů ). Stream si lze představit jako trubku, jejíž konec máme k dispozici a můžeme čerpat data z něho (tedy číst) nebo naopak do něho (tj. zapisovat). Stream vytvoříme jako objekt, tedy instanci určité třídy. Základní třídy pro práci se streamy obsahuje balík java.io. Známe dvě hlavní kategorie streamů: binární a textové. Textové jsou specializované na vstup/výstup textu, binární na obecný proud bajtů. Binární vstupní streamy jsou odvozeny od abstraktní třídy InputStream, výstupní od třídy OutputStream. Textové vstupní streamy jsou odvozeny od abstraktní třídy Reader, výstupní od třídy Writer. Životní cyklus streamu 4 etapy: 1. VYTVOŘENÍ (zavolání konstruktoru) může se vytvářet přímo tam, kde se používá, anebo ho může vytvořit nějaký jiný objekt a předat (např. jako parametr metody nebo naopak jako její návratovou hodnotu). 2. OTEVŘENÍ často už při vytváření, v každém případě však dříve, než se začne používat. Otevření znamená, že se alokují potřebné systémové prostředky a stream se připraví pro práci. 3. POUŽITÍ streamu. Se streamem se provádějí požadované operace, tzn. volají se jeho metody. 4. UZAVŘENÍ velmi důležité, často se na to zapomíná. Pokud neuzavřeme, vyčerpávají se systémové prostředky (file deskriptory apod.) a za druhé může mnoho dat zůstat nezapsaných (u výstupních streamů). Streamy proto zavíráme ihned, když s nimi přestáváme pracovat. Vybrané druhy streamů Přestože se se všemi streamy pracuje prakticky stejně, určité rozdíly jsou v jejich ůčelu a tím i způsobu přípravy. Používají se například tyto druhy streamů: Souborové streamy slouží ke čtení a zápisu souborů. Následující příklad ukazuje základní způsob čtení ze souborového streamu. Stream se otevře, v cyklu se z něho čte po bajtech (pozor i když se čtou bajty, hodnota je typu int). Pokud je přečtena hodnota 1, bylo dosaženo konce souboru). Všechny operace jsou uzavřeny do bloku try k zachycení výjimek. Streamy jsou instancemi tříd: FileInputStream pro čtení proudu bajtů ze souboru, FileOutputStream pro zápis proudu bajtů do souboru, FileReader pro čtení textu z textového souboru, FileWriter pro zápis textu do textového souboru. K zápisu na výstup slouží metoda instance write(), ke čtení ze vstupu metoda instance read(): Ukázka použití: FileInputStream fis = new FileInputStream("soubor.dat"); // stream se hned otevře int i = 0; while ((i = fis.read()) >= 0) { // čte se, dokud není konec souboru fis.close(); // zavření souboru catch (IOException e) { // zpracování výjimky Řetězcové streamy umožňují snadno číst z řetězce a zapisovat do něj streamovým způsobem. Stream pracuje nad objektem typu StringBuffer, ke kterému můžeme získat přímý přístup lze ale také ze streamu odvodit instanci třídy String. Streamy jsou instancemi tříd StringReader a StringWriter, používají se opět metody read() a write(). Ukázka: StringWriter sw = new StringWriter(); sw.write("abcd"); System.out.println(sw); Filtrové streamy skupina streamů, které slouží v podstatě k libovolnému zpracování procházejících dat. Typickým představitelem jsou bufferované streamy, které implementují buffer (vyrovnávací paměť). Například zápis do souboru, který by probíhal po samostatných bajtech, se provádí najednou až v okamžiku, kdy je jich připraveno víc. Používáme třídy BufferedInputStream, BufferedOutputStream, BufferedReader a BufferedWriter. Ukázka: BufferedReader br = new BufferedReader(new FileReader("soubor.txt")); String s = ""; while ((s = br.readline())!= null) { br.close(); catch (IOException e) { Při použití bufferovaných výstupních streamů není zaručeno, kdy se data z bufferu přesunou do navazujícího streamu. K zajištění zápisu dat z bufferu proto v případě potřeby voláme metodu flush(). PipedInputStream/PipedOutputStream a PipedReader/PipedWriter streamy. Tyto dva páry streamů představují tzv. rouru (pipe), což jsou vlastně vzájemně propojené streamy. Vezmeme jeden vstupní a jeden výstupní stream, propojíme je a s každým koncem pracujeme úplně stejně, jako by to byl normální vstupní, resp. výstupní stream. Nejčastějším použitím je komunikace mezi vlákny, kdy se v jednom vlákně vytvářejí nějaká data a současně se ve druhém tato data zpracovávají:

5 5 z :01 Tyto streamy se vytvářejí tak, že vytvoříme jeden z nich a druhému ho předáme jako argument v konstruktoru. Jinou cestou je vytvořit je nezávisle a pak na některém z nich zavolat metodu connect(). Viz příklad: // první možnost PipedInputStream is = new PipedInputStream(); PipedOutputStream os = new PipedOutputStream(is); // druhá možnost PipedOutputStream os = new PipedOutputStream(); PipedInputStream is = new PipedInputStream(os); // třetí možnost PipedReader pr = new PipedReader(); PipedWriter pw = new PipedWriter(); pr.connect(pw); Serializace a deserializace dat Serializace je konverze obecných dat (nějakým způsobem uložených) na proud bajtů tak, aby je šlo následně snadno zrekonstruovat. Naopak deserializace je právě rekonstrukce proudu bajtů na data použitelná v programu. Java k těmto činnostem poskytuje výraznou podporu. Serializovat je nutno i hodnoty primitivních datových typů, např. int nebo double, k čemuž jsou připraveny třídy DataInputStream a DataOutputStream. Poskytují metody instance jako např. void writedouble(double v) a double readdouble(). Ukázka: int i = 165; float f = 0.35; DataOutputStream os = new DataOutputStream(new FileOutputStream("soubor.dat")); os.writeint(i); // bezpečné uložení hodnoty typu int os.writefloat(f); // bezpečné uložení hodnoty typu float os.close(); catch (IOException e) { Pro serializaci a deserializaci celých objektů máme třídy ObjectInputStream a ObjectOutputStream, které lze však použít i pro primitivní datové typy. Nelze ukládat všechny objekty. Nutnou podmínkou je, aby implementovaly rozhraní Serializable (pokud se pokusíme serializovat nevyhovující objekt, dočkáme se výjimky NotSerializableException). Protože se instance serializuje i se všemi odkazovanými objekty, musí být i tyto serializovatelné, anebo musí být jejich referenční proměnné označené modifikátorem transient (tedy že nebudou uloženy). Na rozdíl od primitivních typů, u objektů lze při deserializaci zjistit jejich typ (a nejen to, k úspěšné deserializaci musí být k dispozici příslušná třída jinak operace skončí výjimkou ClassNotFoundException. Metoda readobject() sice vrací referenci na typ Object, ale třídu si můžeme zjistit voláním getclass() na vrácené instanci nebo operátorem instanceof, a následně přetypovat podle potřeby. package geometrie; import java.io.; public class Obdelnik implements Serializable { private double vyska, sirka; private String jmeno; public Obdelnik(double vyska, double sirka, String jmeno) { this.vyska = vyska; this.sirka = sirka; this.jmeno = jmeno; public Obdelnik(String vyska, String sirka, String jmeno) throws NumberFormatException { this(double.valueof(vyska), Double.valueOf(sirka), public String tostring() { return "Obdelnik{" + "vyska=" + vyska + ", sirka=" + sirka + ", jmeno=" + jmeno + ''; public static void main(string[] args) { FileOutputStream fos = null; ObjectOutputStream oos = null; Obdelnik obd = new Obdelnik(5, 8, "Oskar"); fos = new FileOutputStream("c:\\temp\\obdelnik.tmp"); oos = new ObjectOutputStream(fos); oos.writeobject(obd); oos.writechar('r'); oos.close(); fos.close(); FileInputStream fis = new FileInputStream("c:\\temp\\obdelnik.tmp"); ObjectInputStream ois = new ObjectInputStream(fis); Object obj = ois.readobject(); if (obj instanceof Obdelnik) { Obdelnik obd2 = (Obdelnik) obj; System.out.println(obd2.toString()); char pismeno = ois.readchar(); System.out.println(pismeno); ois.close(); catch (ClassNotFoundException ex) { System.out.println(ex.toString()); catch (FileNotFoundException ex) { System.out.println(ex.toString()); catch (IOException ex) { System.out.println(ex.toString()); Práce se soubory Java je koncipována jako platformově nezávislá, takže se musí vypořádat s různými souborovými systémy. Zajímají nás především dvě nejrozšířenější skupiny souborových systémů: Systémy unixového typu je jich celá řada (UFS, Ext4, ReiserFS atd.), pro všechny z nich je typické, že celý systém tvoří jediný adresářový strom, jako oddělovač jednotlivých úrovní se používá běžné (dopředné) lomítko, rozlišují se velká a malá písmena, téměř všechny znaky ASCII jsou povolené pro použití v názvech souborů a pro ukládání názvů lze obecně používat různé kódové stránky. Systémy firmy Microsoft (FAT a NTFS) rozlišují se jednotlivá logická zařízení ( písmena disků ), oddělovačem je zpětné lomítko, velikost písmen se nerozlišuje, okruh platných znaků je poměrně malý (i když to některé systémové funkce řádně nekontrolují a lze tak na disk propašovat i soubory s neplatnými názvy, které pak lze těžko odstranit), kódování se liší podle jednotlivých systémů (NTFS používá Unicode, FAT potom staré kódové stránky, např. pro češtinu CP 852). Základní třídou pro práci se soubory je třída File z balíku java.io. Nepředstavuje přímo konkrétní soubor, nýbrž tzv. abstraktní cestu (tedy obecně jakoukoli cestu identifikující nějaký soubor). Může odkazovat na platný soubor, ale také nemusí. Je jakousi sofistikovanější náhradou zápisu cesty k souboru v podobě řetězce (objektu) typu String. Řada metod, které vyžadují jako svůj argument název souboru (např. konstruktor FileInputStream), jsou schopny přijmout jak odkaz na instanci třídy String, tak i

6 6 z :01 File, což je přenositelnější a robustnější řešení, protože můžeme již předem zjistit o souboru daného názvu nějaké informace nebo provést se souborem potřebné operace. Objekt File může představovat jak soubory (běžné, ale i speciální, třeba soubory zařízení), tak adresáře. Cesta může být absolutní i relativní, může být dokonce i prázdná. Abstraktní cesta se vždy skládá z prefixu (např. označení kořenového adresáře; u relativních cest prefix samozřejmě chybí) a z posloupnosti názvů jednotlivých adresářových úrovní (samozřejmě včetně případného názvu souboru na konci) oddělených separátorem. Oddělovač názvů v cestě je ve třídě File určen hodnotou statické konstanty separatorchar (typu char), resp. separator (typu String). Na unixových systémech je oddělovačem samozřejmě dopředné lomítko, na microsoftích systémech lomítko obrácené. Operace s instancí třídy File Vytvoření instance třídy File: parametrem konstruktoru je buď String s relativní nebo absolutní cestou k souboru/adresáři (např. String path = "C:" + File.separator + "java" + File.separator + "projects" + File.separator + "cviceni9" + File.separator + "data.dat";), nebo instance třídy URI (např. URI u = new URI(" Práce s cestou k souboru. Objekt File je abstraktní cestou k souboru, se kterou můžeme pracovat a získávat různé její varianty. Lze získat celou cestu v různých podobách, části cesty a některé další verze. Metody: String getpath() vrátí abstraktní cestu v podobě, jak byla zadána při vytváření objektu (tedy absolutní zůstane absolutní atd.). Stejný efekt má i metoda String tostring(). String getabsolutepath() vrátí cestu převedenou do absolutního tvaru. Mechanismus případného převodu z relativní cesty na absolutní je platformově závislý, většinou se ale jako báze použije domovský adresář uživatele. String getcanonicalpath() vrací kanonický tvar cesty. V praxi to znamená, že se pokusí cestu maximálně vyhodnotit, zpracovat. Odstraní všechny označení stejného nebo nadřazeného adresáře (tečku a dvě tečky), zpracuje symbolické odkazy atd. Chování je silně platformově závislé a liší se podle toho, zda cesta (nebo její části) existuje či nikoli. String getname() získá z cesty pouhý název souboru (bez adresářové cesty). String getparent() vrací rodičovský adresář souboru. Vychází se pouze z cesty, soubor ani rodičovský adresář nemusí existovat. boolean isabsolute() zjistí, zda je cesta absolutní. int compareto(file pathname) lexikograficky porovná tuto abstraktní cestu s jinou (ani jedna nemusí existovat). Porovnávání je platformově závislé, podle systému se použije rozlišení malých/velkých písmen. Podobně pracuje metoda boolean equals(object obj), která pouze zjišťuje, zda jsou abstraktní cesty totožné. Adresářové informace. Předchozí metody se týkaly všech souborů bez rozdílu, tedy včetně adresářů. Pro adresáře samotné máme k dispozici speciální sadu metod, které využijeme pro přístup k souborům v těchto adresářích: String[] list() nejjednodušší varianta. Vrátí pole obsahující seznam všech souborů v daném adresáři položky tohoto pole budou textové řetězce s názvy souborů. Pořadí souborů není definováno, může být libovolné. File[] listfiles() dělá přesně totéž co list(), ale místo pole textových řetězců vrací pole objektů File, tedy abstraktních cest. String[] list(filenamefilter filter) modifikace metody list() s tím, že předem vybíráme jen některé soubory. Které to budou, to určí implementace rozhraní FilenameFilter (viz níže). File[] listfiles(filenamefilter f) modifikace metody listfiles() s tím, že opět předem vybíráme jen některé soubory. File[] listfiles(filefilter f) další modifikace, ale s jiným typem filtru. static File[] listroots() v souborových systémech unixovského typu je hierarchie přísně stromová, vždy máme jediný kořen. v jiných systémech to ale platit nemusí (a také neplatí), proto je třeba mít možnost dostat se ke všem dostupným kořenům a to zajišťuje právě tato statická metoda. Vrací pole všech kořenů adresářových stromů, které jsou v danou chvíli k dispozici. Při filtraci musíme implementovat rozhraní FilenameFilter nebo FileFilter. V obou případech musíme implementovat metodu boolean accept(). Pokud budeme implementaci potřebovat jen v jednom jediném případě, s výhodou využijeme možnosti vytvořit anonymní třídu přímo na daném místě. Viz příklad: File f = new File("/home/username/docs"); // vybereme adresář String[] list = f.list(new FilenameFilter() { boolean accept(file dir, String name) { return name.endswith(".pdf"); // jen názvy.pdf ); java.util.arrays.sort(list); // abecední seřazení for (int i = 0; i < list.length; i++) { System.out.println(list[i]); Manipulační operace: boolean renameto(file f2) metoda přejmenuje soubor podle zadání. Jako parametr se zadává jiná instance objektu File. Jelikož je původní instance File neměnná, i po úspěšném přejmenování souboru zůstane tak, jak je (bude obsahovat původní cestu k souboru). Naopak nové jméno souboru bude odpovídat zadané instanci f2, o čemž se můžeme přesvědčit tak, že zavoláme metodu boolean exists(). Chování je silně platformově závislé, nemůžeme spoléhat, že metoda bude dělat vždy to, co dělala na některé platformě. Návratovou hodnotu je třeba vždy testovat. boolean delete() pokusí se smazat soubor. Pokud to jde, smaže ho. Neprázdné adresáře mazat nelze, musíme je nejdříve vyprázdnit. void deleteonexit() zajímavá metoda, naplánuje smazání souboru při ukončování programu. Zafunguje pouze při regulérním ukončení programu, tedy ne při násilném (na Linuxu signálem SIGKILL) nebo při zavolání metody System.halt(). Metoda se používá pro automatické mazání dočasných souborů. Pozor! Naplánované smazání už nejde zrušit! boolean createnewfile() vytvoří nový prázdný soubor. static File createtempfile(string prefix, String suffix) vytvoří nový prázdný soubor v adresáři pro dočasné soubory. boolean mkdir(), boolean mkdirs() dvojice metod pro vytváření adresářů. Liší se pouze tím, že ta první vytvoří pouze ten jediný adresář, na který odkazuje instance File, kdežto ta druhá vytvoří, pokud je třeba, i všechny nadřazené adresáře. boolean setlastmodified(long time) změní časový údaj o poslední změně souboru. (Někdy se to může hodit.) boolean setreadonly() nastaví, že soubor bude pouze ke čtení. Operace pro zjištění informací: long gettotalspace() zjistí celkovou kapacitu (počet bajtů) diskového svazku, na kterém se nachází soubor. long getusablespace() zjistí volnou kapacitu (počet bajtů) diskového svazku, na kterém se nachází soubor. long length() zjistí velikost souboru (počet bajtů). long lastmodified() zjistí datum a čas poslední úpravy souboru. Hierarchie tříd datových proudů a textových proudů

7 7 z :01 T h e E n d

8. přednáška: Soubory a proudy

8. přednáška: Soubory a proudy 8. přednáška: Soubory a proudy Soubor jako posloupnost bytů Ukládání/čtení primitivních typů Ukládání/čtení primitivních typů a objektů (řetězců) Ukládání/čtení objektů do souboru - serializace Obsah Algoritmizace

Více

Soubor jako posloupnost bytů

Soubor jako posloupnost bytů Soubory Soubor je množina údajů uložená ve vnější paměti počítače, obvykle na disku Pro soubor jsou typické tyto operace. otevření souboru čtení údaje zápis údaje uzavření souboru Přístup k údajům (čtení

Více

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

Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007 Ú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ů

Více

Úvod do programovacích jazyků (Java)

Úvod do programovacích jazyků (Java) Ú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

Více

Z. Kotala, P. Toman: Java ( Obsah )

Z. Kotala, P. Toman: Java ( Obsah ) Z. Kotala, P. Toman: Java ( Obsah ) 13. Výjimky Výjimka (exception) je definována jako událost, která nastane během provádění programu a která naruší normální běh instrukcí. Výjimka je vyvolána například

Více

InputStream. FilterInputStream

InputStream. FilterInputStream 6. Vstupy a výstupy Pro práci se vstupy a výstupy nám Java poskytuje celou řadu tříd a jejich metod. Jsou uloženy v balíku java.io. Tato knihovna je založena na mechanizmu tzv. vstupních a výstupních proudů

Více

Práce se soubory v Javě

Práce se soubory v Javě Práce se soubory v Javě Cílem kapitoly je naučit pracovat se soubory a adresáři v Javě. Na jednoduchých příkladech ukázat procházení adresáře, čtení z textového souboru a zápis do textového souboru. Klíčové

Více

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

Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007 Ú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ů

Více

6. PRÁCE S DATOVÝMI PROUDY

6. PRÁCE S DATOVÝMI PROUDY 6. PRÁCE S DATOVÝMI PROUDY Balík java.io obsahuje třídy, které slouží pro zpracování datových výstupů a vstupů. Pro obvyklou práci se soubory zde můžeme najít třídy File a RandomAccessFile. Většina tříd

Více

Semin aˇr Java V yjimky Radek Ko ˇc ı Fakulta informaˇcn ıch technologi ı VUT Unor 2008 Radek Koˇc ı Semin aˇr Java V yjimky 1/ 25

Semin aˇr Java V yjimky Radek Ko ˇc ı Fakulta informaˇcn ıch technologi ı VUT Unor 2008 Radek Koˇc ı Semin aˇr Java V yjimky 1/ 25 Seminář Java Výjimky Radek Kočí Fakulta informačních technologií VUT Únor 2008 Radek Kočí Seminář Java Výjimky 1/ 25 Výjimky Co a k čemu jsou výjimky výjimka je mechanizmus umožňující psát robustní, spolehlivé

Více

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

1. Téma 12 - Textové soubory a výjimky 1. Téma 12 - Textové soubory a výjimky Cíl látky Procvičit práci se soubory s využitím výjimek. 1.1. Úvod Program, aby byl programem, my mít nějaké výstupy a vstupy. Velmi častým případem je to, že se

Více

Výjimky. v C# a Javě

Výjimky. v C# a Javě Výjimky v C# a Javě Výjimky v C# Výjimky poskytují v C# způsob, jak reagovat na nečekané události. Uživatel např. zadá místo čísla text nebo soubor, který chceme otevřít, je využíván jiným procesem. To

Více

Textové soubory. alg9 1

Textové soubory. alg9 1 Textové soubory Textový soubor je posloupnost znaků členěná na řádky každý znak je reprezentován jedním bytem, jehož obsah je dán nějakým kódováním znaků členění na řádky je závislé na platformě a obvykle

Více

Úvod do programovacích jazyků (Java)

Úvod do programovacích jazyků (Java) Ú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

Více

Předmluva k aktuálnímu vydání Úvod k prvnímu vydání z roku Typografické a syntaktické konvence... 20

Předmluva k aktuálnímu vydání Úvod k prvnímu vydání z roku Typografické a syntaktické konvence... 20 Obsah 5 Obsah Předmluva k aktuálnímu vydání 15 1 Úvod k prvnímu vydání z roku 2000 16 Typografické a syntaktické konvence................ 20 2 Základní pojmy 21 2.1 Trocha historie nikoho nezabije................

Více

Tento studijní blok má za cíl pokračovat v základních prvcích jazyka Java. Konkrétně bude věnována pozornost rozhraním a výjimkám.

Tento studijní blok má za cíl pokračovat v základních prvcích jazyka Java. Konkrétně bude věnována pozornost rozhraním a výjimkám. 13 Rozhraní, výjimky Studijní cíl Tento studijní blok má za cíl pokračovat v základních prvcích jazyka Java. Konkrétně bude věnována pozornost rozhraním a výjimkám. Doba nutná k nastudování 2 2,5 hodiny

Více

Algoritmizace a programování

Algoritmizace a programování Algoritmizace a programování Struktura programu Vytvoření nové aplikace Struktura programu Základní syntaktické elementy První aplikace Verze pro akademický rok 2012/2013 1 Nová aplikace NetBeans Ve vývojovém

Více

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

8 Třídy, objekty, metody, předávání argumentů metod 8 Třídy, objekty, metody, předávání argumentů metod Studijní cíl Tento studijní blok má za cíl pokračovat v základních prvcích jazyka Java. Konkrétně bude věnována pozornost třídám a objektům, instančním

Více

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

7. přednáška - třídy, objekty třídy objekty atributy tříd metody tříd 7. přednáška - třídy, objekty třídy objekty atributy tříd metody tříd Algoritmizace (Y36ALG), Šumperk - 7. přednáška 1 Třída jako zdroj funkcionality Třída v jazyku Java je programová jednotka tvořená

Více

Proudy, Zpracovсnэ XML. Radek Koэ

Proudy, Zpracovсnэ XML. Radek Koэ Seminс Java Proudy, Zpracovсnэ XML Radek Koэ Fakulta informanэch technologiэ VUT Bezen 2008 Radek Koэ Seminс Java Proudy, Zpracovсnэ XML 1/ 38 Obsah Vstup/Vstup koncepce proud soubory, adresсe binсrnэ

Více

Java - výjimky. private void vstup() throws IOException {... }

Java - výjimky. private void vstup() throws IOException {... } Java - výjimky Tato kapitola ukazuje na několika příkladech práci s výjimkami v Javě. Klíčové pojmy: Výjimka, hierarchie výjimek, zachytávání výjimek, blok try-catch, tvorba vlastních výjimek, propagace

Více

Přednáška 2. Systémy souborů OS UNIX. Nástroje pro práci se souborovým systémem. Úvod do Operačních Systémů Přednáška 2

Přednáška 2. Systémy souborů OS UNIX. Nástroje pro práci se souborovým systémem. Úvod do Operačních Systémů Přednáška 2 Přednáška 2 Systémy souborů OS UNIX. Nástroje pro práci se souborovým systémem. 1 Systém souborů (FS) I 2 Systém souborů II Logický systém souborů pro běžného uživatele se jeví jako jediná homogenní struktura

Více

29. Výjimky, jejich vznik, vyhození, odchyt a zpracování. (A7B36PVJ)

29. Výjimky, jejich vznik, vyhození, odchyt a zpracování. (A7B36PVJ) 29. Výjimky, jejich vznik, vyhození, odchyt a zpracování. (A7B36PVJ) Výjimka (exception) je definována jako událost, která nastane během provádění programu a která naruší normální běh instrukcí. Výjimka

Více

Java Výjimky Java, zimní semestr

Java Výjimky Java, zimní semestr Java Výjimky 1 Výjimky (exceptions) hlášení a ošetření chyb výjimka signalizuje nějaký chybový stav výjimka = instance třídy java.lang.throwable dvě podtřídy java.lang.error a java.lang.exception konkrétní

Více

7. Datové typy v Javě

7. Datové typy v Javě 7. Datové typy v Javě Primitivní vs. objektové typy Kategorie primitivních typů: integrální, boolean, čísla s pohyblivou řádovou čárkou Pole: deklarace, vytvoření, naplnění, přístup k prvkům, rozsah indexů

Více

typová konverze typová inference

typová konverze typová inference Seminář Java Programování v Javě II Radek Kočí Fakulta informačních technologií VUT Únor 2008 Radek Kočí Seminář Java Programování v Javě (2) 1/ 36 Téma přednášky Rozhraní: použití, dědičnost Hierarchie

Více

Výčtový typ strana 67

Výčtový typ strana 67 Výčtový typ strana 67 8. Výčtový typ V této kapitole si ukážeme, jak implementovat v Javě statické seznamy konstant (hodnot). Příkladem mohou být dny v týdnu, měsíce v roce, planety obíhající kolem slunce

Více

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

14.4.2010. Obsah přednášky 7. Základy programování (IZAPR) Přednáška 7. Parametry metod. Parametry, argumenty. Parametry metod. Základy programování (IZAPR) Přednáška 7 Ing. Michael Bažant, Ph.D. Katedra softwarových technologií Kancelář č. 229, Náměstí Čs. legií Michael.Bazant@upce.cz Obsah přednášky 7 Parametry metod, předávání

Více

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

Java a XML. 10/26/09 1/7 Java a XML Java a XML Java i XML jsou přenositelné V javě existuje podpora pro práci s XML, nejčastější akce prováděné při zpracování XML: načítání XML elementů generování nových elementů nebo úprava starého zápis

Více

17. Projekt Trojúhelníky

17. Projekt Trojúhelníky Projekt Trojúhelníky strana 165 17. Projekt Trojúhelníky 17.1. Základní popis, zadání úkolu Pracujeme na projektu Trojúhelníky, který je ke stažení na java.vse.cz. Aplikace je napsána s textovým uživatelským

Více

Programování v Javě I. Leden 2008

Programování v Javě I. Leden 2008 Seminář Java Programování v Javě I Radek Kočí Fakulta informačních technologií VUT Leden 2008 Radek Kočí Seminář Java Programování v Javě (1) 1/ 45 Téma přednášky Datové typy Deklarace třídy Modifikátory

Více

Teoretické minimum z PJV

Teoretické minimum z PJV Teoretické minimum z PJV Pozn.: následující text popisuje vlastnosti jazyka Java zjednodušeně pouze pro potřeby výuky. Třída Zavádí se v programu deklarací třídy což je část programu od klíčových slov

Více

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/04.0006

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/04.0006 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/04.0006 Lekce 1 Jazyk Java Tento projekt je spolufinancován Evropským sociálním fondem

Více

Seminář Java II p.1/43

Seminář Java II p.1/43 Seminář Java II Seminář Java II p.1/43 Rekapitulace Java je case sensitive Zdrojový kód (soubor.java) obsahuje jednu veřejnou třídu Třídy jsou organizovány do balíků Hierarchie balíků odpovídá hierarchii

Více

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

Programování v Javě I. Únor 2009 Seminář Java Programování v Javě I Radek Kočí Fakulta informačních technologií VUT Únor 2009 Radek Kočí Seminář Java Programování v Javě (1) 1/ 44 Téma přednášky Datové typy Deklarace třídy Modifikátory

Více

Ošetřování chyb v programech

Ošetřování chyb v programech Ošetřování chyb v programech Úvod chyba v programu = normální záležitost typy chyb: 1) programátorská chyba při návrhu každých 10 000 řádek 1 chyba lze jen omezeně ošetřit (před pádem aplikace nabídnout

Více

Definice třídy. úplná definice. public veřejná třída abstract nesmí být vytvářeny instance final nelze vytvářet potomky

Definice třídy. úplná definice. public veřejná třída abstract nesmí být vytvářeny instance final nelze vytvářet potomky JAVA Třídy Definice třídy úplná definice [public] [abstract] [final] class Jmeno [extends Predek] [impelements SeznamInterfacu] {... // telo tridy public veřejná třída abstract nesmí být vytvářeny instance

Více

Regulární výrazy. Vzory

Regulární výrazy. Vzory Regulární výrazy Regulární výrazy jsou určeny pro práci s textovými řetězci, jsou součástí J2SDK až od verze 1.4, v předchozích verzích je potřeba použít některou z externích knihoven, např. knihovnu ORO

Více

Class loader. každá třída (java.lang.class) obsahuje referenci na svůj class loader. Implementace class loaderu

Class loader. každá třída (java.lang.class) obsahuje referenci na svůj class loader. Implementace class loaderu Seminář Java Zavádění tříd Radek Kočí Fakulta informačních technologií VUT Duben 2008 Radek Kočí Seminář Java Zavádění tříd 1/ 16 JVM zavádí třídy dynamicky Class loader objekt schopný zavádět třídy abstraktní

Více

KTE / ZPE Informační technologie

KTE / ZPE Informační technologie 4 KTE / ZPE Informační technologie Ing. Petr Kropík, Ph.D. email: pkropik@kte.zcu.cz tel.: +420 377 63 4639, +420 377 63 4606 (odd. informatiky) Katedra teoretické elektrotechniky FEL ZČU Plzeň Největší

Více

Seminář Java VI p.1/33

Seminář Java VI p.1/33 Seminář Java VI Seminář Java VI p.1/33 Rekapitulace Úvod do kontejnerů - kategorie Iterátory Rozhraní List Rozhraní Set Rozhraní Map Volba implementace Nástroje Souběžný přístup Seminář Java VI p.2/33

Více

SOUBORY, VSTUPY A VÝSTUPY POKRAČOVÁNÍ

SOUBORY, VSTUPY A VÝSTUPY POKRAČOVÁNÍ SOUBORY, VSTUPY A VÝSTUPY POKRAČOVÁNÍ Vstupy a výstupy pokračování Kódování textů Texty (řetězce nebo znaky) v jazyce C# jsou v paměti uloženy v kódování označovaném běžně Unicode (kódová stránka 1200).

Více

12. Dokumentace a distribuce aplikací. speciálních dokumentačních komentářích vpisovaných před

12. Dokumentace a distribuce aplikací. speciálních dokumentačních komentářích vpisovaných před 12. Dokumentace a distribuce aplikací Dokumentace javových programů, dokumentace API Typy komentářů - dokumentační komentáře Generování dokumentace Značky javadoc Distribuční archívy.jar Vytvoření archívu,

Více

Úvod do programovacích jazyků (Java)

Úvod do programovacích jazyků (Java) Ú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

Více

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

Příklad : String txt1 = new String( Ahoj vsichni! ); //vytvoří instanci třídy String a přiřadí ji vnitřní hodnotu Ahoj vsichni! Java práce s řetězci Trochu povídání.. Řetězce jsou v Javě reprezentovány instancemi tříd StringBuffer a String. Tyto třídy jsou součástí balíčku java.lang, tudíž je možno s nimi pracovat ihned bez nutného

Více

Dědičnost (inheritance)

Dědičnost (inheritance) Dědičnost (inheritance) Úvod Umožňuje objektům převzít (zdědit) členy jiných objektů a pouze je rozšířit o Auto: lze odvodit Vztah je osobní auto, cisterna jsou auta Základní pojmy Bázová třída (rodič)

Více

14.4.1. Typický prvek kolekce pro české řazení

14.4.1. Typický prvek kolekce pro české řazení 14.4. Co všechno by měl mít typický prvek kolekce 177 Poznámka: Třídy BigInteger, BigDecimal a Date budou vysvětleny v částech [15./183, [16./185 a [18.1./204. 14.4.1. Typický prvek kolekce pro české řazení

Více

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

Úvod do programování - Java. Cvičení č.4 Úvod do programování - Java Cvičení č.4 1 Sekvence (posloupnost) Sekvence je tvořena posloupností jednoho nebo více příkazů, které se provádějí v pevně daném pořadí. Příkaz se začne provádět až po ukončení

Více

Výjimky. A0B36PR2-Programování 2 Fakulta elektrotechnická České vysoké učení technické

Výjimky. A0B36PR2-Programování 2 Fakulta elektrotechnická České vysoké učení technické Výjimky A0B36PR2-Programování 2 Fakulta elektrotechnická České vysoké učení technické Obsah Výjimky Pojem výjimky Princip mechanismu zpracování výjimek, try + catch Kompletní zpracování výjimek Vyhození

Více

Výjimky. Tomáš Pitner, upravil Marek Šabo

Výjimky. Tomáš Pitner, upravil Marek Šabo Výjimky Tomáš Pitner, upravil Marek Šabo K čemu jsou výjimky Výjimky jsou mechanizmem umožňujícím reagovat na nestandardní (tj. chybové) běhové chování programu, které může mít různé příčiny: chyba okolí:

Více

11.5.2012. Obsah přednášky 9. Skrývání informací. Skrývání informací. Zapouzdření. Skrývání informací. Základy programování (IZAPR, IZKPR) Přednáška 9

11.5.2012. Obsah přednášky 9. Skrývání informací. Skrývání informací. Zapouzdření. Skrývání informací. Základy programování (IZAPR, IZKPR) Přednáška 9 Obsah přednášky 9 Základy programování (IZAPR, IZKPR) Přednáška 9 Základy dědičnosti, přístupová práva Ing. Michael Bažant, Ph.D. Katedra softwarových technologií Kancelář č. 03 022, Náměstí Čs. legií

Více

1. Programování proti rozhraní

1. Programování proti rozhraní 1. Programování proti rozhraní Cíl látky Cílem tohoto bloku je seznámení se s jednou z nejdůležitější programátorskou technikou v objektově orientovaném programování. Tou technikou je využívaní rozhraní

Více

Obsah. Úvod 11 Základy programování 11 Objektový přístup 11 Procvičování 11 Zvláštní odstavce 12 Zpětná vazba od čtenářů 12 Errata 13

Obsah. Úvod 11 Základy programování 11 Objektový přístup 11 Procvičování 11 Zvláštní odstavce 12 Zpětná vazba od čtenářů 12 Errata 13 Úvod 11 Základy programování 11 Objektový přístup 11 Procvičování 11 Zvláštní odstavce 12 Zpětná vazba od čtenářů 12 Errata 13 KAPITOLA 1 Na úvod o Javě 15 Počítačový program 15 Vysokoúrovňový programovací

Více

UNIVERZITA PARDUBICE. Fakulta elektrotechniky a informatiky. Aplikace tříd souvisejících s přenosem dat mezi operační pamětí a diskem Marek Jelínek

UNIVERZITA PARDUBICE. Fakulta elektrotechniky a informatiky. Aplikace tříd souvisejících s přenosem dat mezi operační pamětí a diskem Marek Jelínek UNIVERZITA PARDUBICE Fakulta elektrotechniky a informatiky Aplikace tříd souvisejících s přenosem dat mezi operační pamětí a diskem Marek Jelínek Bakalářská práce 2013 Prohlášení autora Prohlašuji, že

Více

Abstraktní datové typy: zásobník

Abstraktní datové typy: zásobník Abstraktní datové typy: zásobník doc. Ing. Miroslav Beneš, Ph.D. katedra informatiky FEI VŠB-TUO A-1007 / 597 324 213 http://www.cs.vsb.cz/benes Miroslav.Benes@vsb.cz Abstraktní datové typy omezené rozhraní

Více

Vstup/Výstup, Sokety. Duben 2012

Vstup/Výstup, Sokety. Duben 2012 Seminář Java Vstup/Výstup, Sokety Radek Kočí Fakulta informačních technologií VUT Duben 2012 Radek Kočí Seminář Java Proudy, Zpracování XML, Sokety 1/ 54 Obsah Vstup/Výstup koncepce proudů soubory, adresáře

Více

Generické programování

Generické programování Generické programování Od C# verze 2.0 = vytváření kódu s obecným datovým typem Příklad generická metoda, zamění dva parametry: static void Swap(ref T p1, ref T p2) T temp; temp = p1; p1 = p2; p2 =

Více

Úvod do programování. Lekce 1

Úvod do programování. Lekce 1 Úvod do programování Lekce 1 Základní pojmy vytvoření spustitelného kódu editor - psaní zdrojových souborů preprocesor - zpracování zdrojových souborů (vypuštění komentářů atd.) kompilátor (compiler) -

Více

3. Třídy. Základní pojmy objektového programování. Třídy

3. Třídy. Základní pojmy objektového programování. Třídy 3. Třídy Základní pojmy objektového programování Jak už víme, je Java objektovým programovacím jazykem. V úvodu této kapitoly si objasníme základní pojmy objektové teorie. Objekt představuje souhrn dat

Více

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

Obsah přednášky. 12. Dokumentace zdrojového kódu Tvorba elektronické dokumentace UML. Co je diagram tříd. Ing. Ondřej Guth Evropský sociální fond. 12. Dokumentace zdrojového kódu Tvorba elektronické dokumentace Ing. Ondřej Guth Katedra teoretické informatiky Fakulta informačních technologií České vysoké učení technické v Praze

Více

Systém souborů (file system, FS)

Systém souborů (file system, FS) UNIX systém souborů (file system) 1 Systém souborů (file system, FS)! slouží k uchování dat na vnějším paměťovém médiu a zajišťuje přístup ke struktuře dat! pro uživatele možnost ukládat data a opět je

Více

Algoritmizace, základy programování, VY_32_INOVACE_PRG_ALGO_01

Algoritmizace, základy programování, VY_32_INOVACE_PRG_ALGO_01 Anotace sady: Algoritmizace, základy programování, VY_32_INOVACE_PRG_ALGO_01 Autor: Blanka Sadovská Klíčová slova: Algoritmus, proměnná, diagram Stupeň a typ vzdělávání: gymnaziální vzdělávání, 3. ročník

Více

Programové konvence, dokumentace a ladění. Programování II 2. přednáška Alena Buchalcevová

Programové konvence, dokumentace a ladění. Programování II 2. přednáška Alena Buchalcevová Programové konvence, dokumentace a ladění 2. přednáška Alena Buchalcevová Proč dodržovat programové konvence? velkou část životního cyklu softwaru tvoří údržba údržbu provádí většinou někdo jiný než autor

Více

20. Projekt Domácí mediotéka

20. Projekt Domácí mediotéka Projekt Domácí mediotéka strana 211 20. Projekt Domácí mediotéka 20.1. Základní popis, zadání úkolu V projektu Domácí mediotéka (Dome) se jednoduchým způsobem evidují CD a videa. Projekt je velmi jednoduchý

Více

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

7 Formátovaný výstup, třídy, objekty, pole, chyby v programech 7 Formátovaný výstup, třídy, objekty, pole, chyby v programech Studijní cíl Tento studijní blok má za cíl pokračovat v základních prvcích jazyka Java. Konkrétně bude věnována pozornost formátovanému výstupu,

Více

KTE / ZPE Informační technologie

KTE / ZPE Informační technologie 11 KTE / ZPE Informační technologie Ing. Petr Kropík, Ph.D. email: pkropik@kte.zcu.cz tel.: +420 377 63 4639, +420 377 63 4606 (odd. informatiky) Katedra teoretické elektrotechniky FEL ZČU Plzeň Metoda

Více

10. března 2015, Brno Připravil: David Procházka. Programovací jazyk C++

10. března 2015, Brno Připravil: David Procházka. Programovací jazyk C++ 10. března 2015, Brno Připravil: David Procházka Práce s výjimkami Programovací jazyk C++ K čemu slouží výjimky Strana 2 / 25 Obsah přednášky 1 K čemu slouží výjimky 2 Vytváření výjimek 3 Speciální případy

Více

Připravil: David Procházka. Programovací jazyk C++

Připravil: David Procházka. Programovací jazyk C++ 17. října 2011, Brno Připravil: David Procházka Práce s výjimkami Programovací jazyk C++ Obecně Strana 2 / 21 Jak se může program zachovat při chybě Dříve byl obvyklý způsob zavolat metodu abort. Metoda

Více

PŘETĚŽOVÁNÍ OPERÁTORŮ

PŘETĚŽOVÁNÍ OPERÁTORŮ PŘETĚŽOVÁNÍ OPERÁTORŮ Jazyk C# podobně jako jazyk C++ umožňuje přetěžovat operátory, tj. rozšířit definice některých standardních operátorů na uživatelem definované typy (třídy a struktury). Stejně jako

Více

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

Vytváření a použití knihoven tříd Vytváření a použití knihoven tříd doc. Ing. Miroslav Beneš, Ph.D. katedra informatiky FEI VŠB-TUO A-1007 / 597 324 213 http://www.cs.vsb.cz/benes Miroslav.Benes@vsb.cz Prostory jmen motivace spolupráce

Více

Principy objektově orientovaného programování

Principy objektově orientovaného programování Principy objektově orientovaného programování Třídy a objekty doc. Ing. Miroslav Beneš, Ph.D. katedra informatiky FEI VŠB-TUO A-1007 / 597 324 213 http://www.cs.vsb.cz/benes Miroslav.Benes@vsb.cz C E T

Více

Algoritmizace a programování

Algoritmizace a programování Algoritmizace a programování Řídicí struktury jazyka Java Struktura programu Příkazy jazyka Blok příkazů Logické příkazy Ternární logický operátor Verze pro akademický rok 2012/2013 1 Struktura programu

Více

4. ZÁKLADNÍ POJMY Z OBJEKTOVĚ ORIENTOVANÉHO PROGRAMOVÁNÍ

4. ZÁKLADNÍ POJMY Z OBJEKTOVĚ ORIENTOVANÉHO PROGRAMOVÁNÍ 4. ZÁKLADNÍ POJMY Z OBJEKTOVĚ ORIENTOVANÉHO PROGRAMOVÁNÍ OBJEKT Program v Javě je staticky strukturován na třídy, jejichž instance (objekty) za běhu dynamicky programu vznikají a zanikají. Objekt je nejprve

Více

Java - řazení objektů

Java - řazení objektů Java - řazení objektů Kapitola seznamuje se základními principy řazení objektů Klíčové pojmy: Přirozené řazení, absolutní řazení, ideální porovnávatelná třída ŘAZENÍ OBJEKTŮ U objektů není příliš jasné,

Více

Zápis programu v jazyce C#

Zápis programu v jazyce C# Zápis programu v jazyce C# Základní syntaktická pravidla C# = case sensitive jazyk rozlišuje velikost písmen Tzv. bílé znaky (Enter, mezera, tab ) ve ZK překladač ignoruje každý příkaz končí ; oddělovač

Více

Abstraktní třída a rozhraní

Abstraktní třída a rozhraní Abstraktní třída a rozhraní Někdy se může stát, zejména při psaní v hierarchické struktuře hodně nadřazených tříd, že tušíme, že bude ve zděděných třídách vhodné použít nějakou metodu. Tuto metodu ještě

Více

TŘÍDY POKRAČOVÁNÍ. Události pokračování. Příklad. public delegate void ZmenaSouradnicEventHandler (object sender, EventArgs e);

TŘÍDY POKRAČOVÁNÍ. Události pokračování. Příklad. public delegate void ZmenaSouradnicEventHandler (object sender, EventArgs e); TŘÍDY POKRAČOVÁNÍ Události pokračování public delegate void ZmenaSouradnicEventHandler (object sender, EventArgs e); class Bod private int x; private int y; public event ZmenaSouradnicEventHandler ZmenaSouradnic;

Více

Programovací jazyk Java

Programovací jazyk Java 1 z 8 Programovací jazyk Java Enumerace (výčty) Složitější definice výčtového typu Konstanty anonymních typů Výčtový typ a datové struktury Java packaging JAR archivy CLASSPATH Apache Ant 10. přednáška

Více

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

Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007 Ú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ů

Více

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

Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007 Ú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ů

Více

24-2-2 PROMĚNNÉ, KONSTANTY A DATOVÉ TYPY TEORIE DATUM VYTVOŘENÍ: 23.7.2013 KLÍČOVÁ AKTIVITA: 02 PROGRAMOVÁNÍ 2. ROČNÍK (PRG2) HODINOVÁ DOTACE: 1

24-2-2 PROMĚNNÉ, KONSTANTY A DATOVÉ TYPY TEORIE DATUM VYTVOŘENÍ: 23.7.2013 KLÍČOVÁ AKTIVITA: 02 PROGRAMOVÁNÍ 2. ROČNÍK (PRG2) HODINOVÁ DOTACE: 1 24-2-2 PROMĚNNÉ, KONSTANTY A DATOVÉ TYPY TEORIE AUTOR DOKUMENTU: MGR. MARTINA SUKOVÁ DATUM VYTVOŘENÍ: 23.7.2013 KLÍČOVÁ AKTIVITA: 02 UČIVO: STUDIJNÍ OBOR: PROGRAMOVÁNÍ 2. ROČNÍK (PRG2) INFORMAČNÍ TECHNOLOGIE

Více

Java Řetězce Java, zimní semestr

Java Řetězce Java, zimní semestr Java Řetězce 1 Řetězec instance třídy java.lang.string kompilátor s nimi zachází téměř jako s primit. typy řetězcové konstanty = instance třídy String nezměnitelné!!! pro změny třídy StringBuffer, StringBuilder

Více

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

Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007 Úvod do programovacích jazyků (Java) Michal Krátký 1 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ů

Více

VISUAL BASIC. Práce se soubory

VISUAL BASIC. Práce se soubory VISUAL BASIC Práce se soubory Práce se soubory 1/2 2 Vstupní data pro programy bývají uloženy do souborů Vstupy pro výpočet, nastavení vzhledu aplikace Výsledky práce programu je potřeba uchovat uložit

Více

Definice třídy. úplná definice. public veřejná třída abstract nesmí být vytvářeny instance final nelze vytvářet potomky

Definice třídy. úplná definice. public veřejná třída abstract nesmí být vytvářeny instance final nelze vytvářet potomky JAVA Třídy Definice třídy úplná definice [public] [abstract] [final] class Jmeno [extends Predek] [impelements SeznamInterfacu] {... // telo tridy public veřejná třída abstract nesmí být vytvářeny instance

Více

Enterprise Java (BI-EJA) Technologie programování v jazyku Java (X36TJV)

Enterprise Java (BI-EJA) Technologie programování v jazyku Java (X36TJV) Příprava studijního programu Informatika je podporována projektem financovaným z Evropského sociálního fondu a rozpočtu hlavního města Prahy. Praha & EU: Investujeme do vaší budoucnosti Enterprise Java

Více

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

Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007 Ú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ů

Více

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

9. přednáška - třídy, objekty třída String a její použití kolekce, typované kolekce 9. přednáška - třídy, objekty Algoritmizace (Y36ALG), Šumperk - 9. přednáška 1 Třída String Objekty knihovní třídy String jsou řetězy znaků Od ostatních

Více

O autorovi O odborném korektorovi Úvod 17 Vývoj jazyka Java Java SE 8 Struktura této knihy Předchozí zkušenosti s programováním nejsou potřebné

O autorovi O odborném korektorovi Úvod 17 Vývoj jazyka Java Java SE 8 Struktura této knihy Předchozí zkušenosti s programováním nejsou potřebné O autorovi 15 O odborném korektorovi 15 Úvod 17 Vývoj jazyka Java 17 Java SE 8 19 Struktura této knihy 20 Klíčové znalosti a pojmy 20 Testové otázky 20 Odpovídá expert 20 Cvičení 20 Předchozí zkušenosti

Více

3 KTE / ZPE Informační technologie

3 KTE / ZPE Informační technologie 3 KTE / ZPE Informační technologie Ing. Petr Kropík, Ph.D. email: pkropik@kte.zcu.cz tel.: +420 377 63 4639, +420 377 63 4606 (odd. informatiky) Katedra teoretické elektrotechniky FEL ZČU Plzeň Komentáře

Více

Statické proměnné a metody. Tomáš Pitner, upravil Marek Šabo

Statické proměnné a metody. Tomáš Pitner, upravil Marek Šabo Statické proměnné a metody Tomáš Pitner, upravil Marek Šabo Úvod Se statickou metodou jsme se setkali už u úplně prvního programu - Hello, world! public class Demo { public static void main(string[] args)

Více

Java Cvičení 01. CHARLES UNIVERSITY IN PRAGUE faculty of mathematics and physics

Java Cvičení 01.  CHARLES UNIVERSITY IN PRAGUE faculty of mathematics and physics Java Cvičení 01 http://d3s.mff.cuni.cz CHARLES UNIVERSITY IN PRAGUE faculty of mathematics and physics Příklady - Porovnání Co kód vypíše? package cz.cuni.mff.java.example01.tests; public class Test01

Více

Práce se soubory. Základy programování 2 Tomáš Kühr

Práce se soubory. Základy programování 2 Tomáš Kühr Práce se soubory Základy programování 2 Tomáš Kühr Soubory z pohledu C Soubor zjednodušeně chápeme jako posloupnost bytů uložených někde na disku Datový proud (anglicky stream) Ještě obecnější přístup

Více

Datové struktury. alg12 1

Datové struktury. alg12 1 Datové struktury Jedna z klasických knih o programování (autor prof. Wirth) má název Algorithms + Data structures = Programs Datová struktura je množina dat (prvků, složek, datových objektů), pro kterou

Více

Dynamicky vázané metody. Pozdní vazba, virtuální metody

Dynamicky vázané metody. Pozdní vazba, virtuální metody Dynamicky vázané metody Pozdní vazba, virtuální metody Motivace... class TBod protected: float x,y; public: int vrat_pocet_bodu() return 1; ; od třídy TBod odvodíme: class TUsecka: public TBod protected:

Více

IRAE 07/08 Přednáška č. 1

IRAE 07/08 Přednáška č. 1 Úvod do předmětu OOP Objekt Proč OOP? Literatura, osnova předmětu viz. cvičení Základní prvek OOP sw inženýrství = model reálných objektů (věcí) člověk, auto, okno (ve windows), slovník, = model abstraktní

Více

Remote Method Invocation RMI

Remote Method Invocation RMI Remote Method Invocation RMI Java TM Remote Method Invocation (RMI) umožňuje objektu na jedné Java Virtual Mashine(JVM) jednoduše spustit metodu jiného objektu na vzdálené JVM. Při volání vzdálené metody

Více

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

Paměť počítače. alg2 1 Paměť počítače Výpočetní proces je posloupnost akcí nad daty uloženými v paměti počítače Data jsou v paměti reprezentována posloupnostmi bitů (bit = 0 nebo 1) Připomeňme: paměť je tvořena řadou 8-mi bitových

Více

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

Seznamy a iterátory. Kolekce obecně. Rozhraní kolekce. Procházení kolekcí Kolekce obecně Seznamy a iterátory doc. Ing. Miroslav Beneš, Ph.D. katedra informatiky FEI VŠB-TUO A-1007 / 597 324 213 http://www.cs.vsb.cz/benes Miroslav.Benes@vsb.cz Kolekce ::= homogenní sada prvků

Více

Projekty pro výuku programování v jazyce Java

Projekty pro výuku programování v jazyce Java JIHOČESKÁ UNIVERZITA V ČESKÝCH BUDĚJOVICÍCH Pedagogická fakulta Katedra informatiky Akademický rok: 2006/2007 TEZE BAKALÁŘSKÉ PRÁCE Projekty pro výuku programování v jazyce Java Jméno: František Přinosil

Více