Vláknové programování část IX
|
|
- Otakar Šimek
- před 7 lety
- Počet zobrazení:
Transkript
1 Vláknové programování část IX Lukáš Hejmánek, Petr Holub Laboratoř pokročilých síťových technologií PV /67
2 Přehled přednášky ThreadPoolExecutors Revisited Uváznutí Optimalizace výkonu Měření (příklady povětšinou převzaty z JCiP, Goetz) 2/67
3 ThreadFactory TPE vytváří vlákna pomocí ThreadFactory metoda newthread default ThreadFactory: nedémonická, bez speciálních nastavení Možnost předefinovat, jak se budou vytvářet vlákna nastavení pojmenování vláken vlastní třída vytvářených vláken (statistiky, ladění) specifikace vlastního UncaughtExceptionHandler nastavení priorit (raději nedělat) nastavení démonického stavu (raději nedělat) v případě použití bezpečnostních politik (security policies) lze použít privilegedthreadfactory podědění oprávnění, AccessControlContext a contextclassloader od vlákna vytvářejícího privilegedthreadfactory, nikoli od vlákna volajícího execute/submit (default) 3/67
4 ThreadFactory public class MyThreadFactory implements ThreadFactory { 2 private final String poolname; class MyAppThread extends Thread { 4 public MyAppThread(Runnable runnable, String poolname) { super(runnable, poolname); 6 8 public MyThreadFactory(String poolname) { 10 this.poolname = poolname; 12 public Thread newthread(runnable runnable) { 14 return new MyAppThread(runnable, poolname); 16 4/67
5 Modifikace Executorů za běhu settery a gettery na různé vlastnosti možnost přetypování executorů vyrobených přes factory metody (kromě newsinglethreadexecutor) na ThreadPoolExecutor omezení modifikací nechceme nechat vývojáře šťourat do svých TPE factory metoda Executor.unconfigurableExecutorService bere ExecutorService vrací omezenou ExecutorService pomocí DelegatedExecutorService, která rozšiřuje AbstractExecutorService využíváno metodou newsinglethreadexecutor (vrací omezený Executor ačkoli implementace ve skutečnosti používá TPE s jediným vláknem) 5/67
6 Modifikace TPE Háčky pro modifikace beforeexecute afterexecute terminated Např. sběr statistik 6/67
7 Modifikace TPE public class TimingThreadPool extends ThreadPoolExecutor { 2 public TimingThreadPool() { 4 super(1, 1, 0L, TimeUnit.SECONDS, null); 6 private final ThreadLocal<Long> starttime = new ThreadLocal<Long>(); 8 private final Logger log = Logger.getLogger("TimingThreadPool"); private final AtomicLong numtasks = new AtomicLong(); 10 private final AtomicLong totaltime = new AtomicLong(); 12 protected void beforeexecute(thread t, Runnable r) { super.beforeexecute(t, r); 14 log.fine(string.format("thread %s: start %s", t, r)); starttime.set(system.nanotime()); 16 7/67
8 Modifikace TPE protected void afterexecute(runnable r, Throwable t) { 2 try { long endtime = System.nanoTime(); 4 long tasktime = endtime - starttime.get(); numtasks.incrementandget(); 6 totaltime.addandget(tasktime); log.fine(string.format("thread %s: end %s, time=%dns", 8 t, r, tasktime)); finally { 10 super.afterexecute(r, t); protected void terminated() { try { 16 log.info(string.format("terminated: avg time=%dns", totaltime.get() / numtasks.get())); 18 finally { super.terminated(); /67
9 Možné řešení kvízu public class DynamicTPE { 2 static class CustomTPE extends ThreadPoolExecutor { final int userprovidedpoolsize; 4 final int queuecapacity; 6 CustomTPE(int corepoolsize, int maximumpoolsize, long keepalivetime, TimeUnit unit, 8 BlockingQueue<Runnable> workqueue) { super(corepoolsize, maximumpoolsize, 10 keepalivetime, unit, workqueue); userprovidedpoolsize = corepoolsize; 12 queuecapacity = workqueue.size() + workqueue.remainingcapacity(); 14 public Future<?> submit(runnable task) { autoadjustcorepoolsize(); 18 return super.submit(task); synchronized public void setcorepoolsize 22 (int corepoolsize) { super.setcorepoolsize(corepoolsize); synchronized public void setmaximumpoolsize 26 (int maximumpoolsize) { super.setmaximumpoolsize(maximumpoolsize); 28 9/67
10 Možné řešení kvízu synchronized private void autoadjustcorepoolsize() { 2 final int queueremaining = getqueue().remainingcapacity(); final int extension; 4 if (queueremaining < 0.25 * queuecapacity) { extension = (int) Math.round(0.25 * queuecapacity 6 - queueremaining); if (getcorepoolsize() + extension < getmaximumpoolsize()) 8 setcorepoolsize(getcorepoolsize() + extension); else 10 setcorepoolsize(getmaximumpoolsize()); 12 else if (queueremaining > 0.75 * queuecapacity) { extension = (int) Math.round(queueRemaining * queuecapacity); if (getcorepoolsize() - extension > userprovidedpoolsize) 16 setcorepoolsize(getcorepoolsize() - extension); else 18 setcorepoolsize(userprovidedpoolsize); /67
11 Možné řešení kvízu 1 public static void main(string[] args) { ThreadPoolExecutor tpe = new CustomTPE(1, 10, 60, TimeUnit.SECONDS, new 3 tpe.setrejectedexecutionhandler(new ThreadPoolExecutor.CallerRunsPolicy( ArrayList<Future> tasklist = new ArrayList<Future>(); 5 Runnable r = new Runnable() { public void run() { 7 try { Thread.sleep(30); 9 catch (InterruptedException e) { 11 System.out.println("bla"); 13 ; for (int i = 0; i < 1000; i++) { 15 Future f = tpe.submit(r); tasklist.add(f); 17 System.out.println("TPE corepoolsize: " + tpe.getcorepoolsize()); System.out.println("TPE poolsize: " + tpe.getpoolsize()); 19 for (Future future : tasklist) { 21 try { Object o = future.get(); 23 catch (InterruptedException e) { catch (ExecutionException e) { tpe.shutdown(); 11/67
12 Možné řešení kvízu TPE corepoolsize: 1 2 TPE poolsize: 1 TPE corepoolsize: 1 4 TPE poolsize: 1 TPE corepoolsize: 1 6 TPE poolsize: 1 TPE corepoolsize: 1 8 TPE poolsize: 1 TPE corepoolsize: 1 10 TPE poolsize: 1 TPE corepoolsize: 1 12 TPE poolsize: 1 TPE corepoolsize: 1 14 TPE poolsize: 1 TPE corepoolsize: 1 16 TPE poolsize: 1 TPE corepoolsize: 1 18 TPE poolsize: 1 TPE corepoolsize: 1 20 TPE poolsize: 1 TPE corepoolsize: 1 22 TPE poolsize: 1 TPE corepoolsize: 1 TPE poolsize: 1 2 TPE corepoolsize: 1 TPE poolsize: 1 4 TPE corepoolsize: 1 TPE poolsize: 1 6 TPE corepoolsize: 1 TPE poolsize: 1 8 TPE corepoolsize: 1 TPE poolsize: 1 10 TPE corepoolsize: 1 TPE poolsize: 1 12 TPE corepoolsize: 2 TPE poolsize: 2 14 TPE corepoolsize: 4 TPE poolsize: 4 16 TPE corepoolsize: 7 TPE poolsize: 7 18 TPE corepoolsize: 10 TPE poolsize: TPE corepoolsize: 10 TPE poolsize: bla bla 12/67
13 Možné řešení kvízu Stojí nám to za to? drahá synchronizace režije se startováním a ukončováním vláken nestačí vhodně nastavit corepoolsize a allowcorethreadtimeout? 13/67
14 Kompletně vlastní implementace TPE Zdrojové kódy: ThreadPoolExecutor.java.htm ScheduledThreadPoolExecutor.java.htm 14/67
15 Deadlock Deadlock uváznutí, smrtelné objetí ;-) Vzájemné nekončící čekání na zámky Potřeba globálního uspořádání zámků zamykání podle globálního uspořádání Možnost využití Lock.tryLock() náhodný rovnoměrný back-off náhodný exponenciální back-off nelze použít s monitory Řešení deadlocků runtimem (ne v Javě) 15/67
16 Deadlock public static void transfermoney(account fromaccount, 2 Account toaccount, DollarAmount amount) 4 throws InsufficientFundsException { synchronized (fromaccount) { 6 synchronized (toaccount) { if (fromaccount.getbalance().compareto(amount) < 0) 8 throw new InsufficientFundsException(); else { 10 fromaccount.debit(amount); toaccount.credit(amount); /67
17 Deadlock public static void transfermoney(account fromaccount, 2 Account toaccount, DollarAmount amount) 4 throws InsufficientFundsException { synchronized (fromaccount) { 6 synchronized (toaccount) { if (fromaccount.getbalance().compareto(amount) < 0) 8 throw new InsufficientFundsException(); else { 10 fromaccount.debit(amount); toaccount.credit(amount); /67
18 Deadlock public void transfermoney(final Account fromacct, 2 final Account toacct, final DollarAmount amount) 4 throws InsufficientFundsException { class Helper { 6 public void transfer() throws InsufficientFundsException { if (fromacct.getbalance().compareto(amount) < 0) 8 throw new InsufficientFundsException(); else { 10 fromacct.debit(amount); toacct.credit(amount); int fromhash = System.identityHashCode(fromAcct); 16 int tohash = System.identityHashCode(toAcct); System.identityHashCode(o) může vrátit pro dva různé objekty identický hash řídký problém 18/67
19 Deadlock if (fromhash < tohash) { 2 synchronized (fromacct) { synchronized (toacct) { 4 new Helper().transfer(); 6 else if (fromhash > tohash) { 8 synchronized (toacct) { synchronized (fromacct) { 10 new Helper().transfer(); 12 else { 14 synchronized (tielock) { synchronized (fromacct) { 16 synchronized (toacct) { new Helper().transfer(); /67
20 Deadlock private static Random rnd = new Random(); 2 public boolean transfermoney(account fromacct, 4 Account toacct, DollarAmount amount, 6 long timeout, TimeUnit unit) 8 throws InsufficientFundsException, InterruptedException { long fixeddelay = getfixeddelaycomponentnanos(timeout, unit); 10 long randmod = getrandomdelaymodulusnanos(timeout, unit); long stoptime = System.nanoTime() + unit.tonanos(timeout); 20/67
21 Deadlock while (true) { 2 if (fromacct.lock.trylock()) { try { 4 if (toacct.lock.trylock()) { try { 6 if (fromacct.getbalance().compareto(amount) < 0) throw new InsufficientFundsException(); 8 else { fromacct.debit(amount); 10 toacct.credit(amount); return true; 12 finally { 14 toacct.lock.unlock(); 16 finally { 18 fromacct.lock.unlock(); 20 if (System.nanoTime() < stoptime) 22 return false; NANOSECONDS.sleep(fixedDelay + rnd.nextlong() % randmod); 24 21/67
22 Otevřená volání 1 class Taxi private Point location, destination; 3 private final Dispatcher dispatcher; 5 public Taxi(Dispatcher dispatcher) { this.dispatcher = dispatcher; 7 9 public synchronized Point getlocation() { return location; public synchronized void setlocation(point location) { this.location = location; 15 if (location.equals(destination)) dispatcher.notifyavailable(this); public synchronized Point getdestination() { return destination; public synchronized void setdestination(point destination) { this.destination = destination; 25 22/67
23 Otevřená volání class Dispatcher { private final Set<Taxi> private final Set<Taxi> availabletaxis; 4 public Dispatcher() { 6 taxis = new HashSet<Taxi>(); availabletaxis = new HashSet<Taxi>(); 8 10 public synchronized void notifyavailable(taxi taxi) { availabletaxis.add(taxi); public synchronized Image getimage() { Image image = new Image(); 16 for (Taxi t : taxis) image.drawmarker(t.getlocation()); 18 return image; 20 23/67
24 Otevřená volání 1 class Taxi private Point location, destination; 3 private final Dispatcher dispatcher; class Dispatcher { 5 public Taxi(Dispatcher dispatcher) { private final Set<Taxi> taxis; this.dispatcher = private final Set<Taxi> availabletaxis; 7 4 public Dispatcher() { 9 public synchronized Point getlocation() { 6 taxis = new HashSet<Taxi>(); return location; availabletaxis = new HashSet<Taxi>(); public synchronized void setlocation(point location) { 10 public synchronized void notifyavailable(taxi taxi) { this.location = location; availabletaxis.add(taxi); 15 if (location.equals(destination)) 12 dispatcher.notifyavailable(this); public synchronized Image getimage() { Image image = new Image(); 19 public synchronized Point getdestination() { 16 for (Taxi t : taxis) return destination; image.drawmarker(t.getlocation()); return image; 23 public synchronized void setdestination(point destination) 20 { this.destination = destination; 25 setlocation notifyavailable getimage getlocation 24/67
25 Otevřená volání Otevřené volání (open call) volání metody, kdy volající nedrží žádný zámek preferovaný způsob Převod na otevřené volání synchronizace by měla být omezena na lokální proměnné problém se zachováním sémantiky Možnost globálního zámku 25/67
26 Otevřená volání class Taxi { private Point location, destination; private final Dispatcher dispatcher; 4 6 public Taxi(Dispatcher dispatcher) { this.dispatcher = dispatcher; public synchronized Point getlocation() { return location; 8 public void setlocation(point location) { 10 boolean reacheddestination; synchronized (this) { 12 this.location = location; reacheddestination = location.equals(destination); 14 if (reacheddestination) 16 dispatcher.notifyavailable(this); 18 public synchronized Point getdestination() { return destination; 20 public synchronized void setdestination(point destination) { 22 this.destination = destination; 24 26/67
27 Otevřená volání class Dispatcher { private final Set<Taxi> private final Set<Taxi> availabletaxis; 4 public Dispatcher() { 6 taxis = new HashSet<Taxi>(); availabletaxis = new HashSet<Taxi>(); 8 10 public synchronized void notifyavailable(taxi taxi) { availabletaxis.add(taxi); public Image getimage() { Set<Taxi> copy; 16 synchronized (this) { copy = new HashSet<Taxi>(taxis); 18 Image image = new Image(); 20 for (Taxi t : copy) image.drawmarker(t.getlocation()); 22 return image; 24 27/67
28 Hladovění Hladovění (starvation) nastává, pokud je vláknu neustále odpírán zdroj, který je potřeba k dalšímu postupu běžné použití zámků je férové problém při nastavování priorit t.setpriority(thread.min_priority); // 1 2 t.setpriority(thread.norm_priority); // 5 t.setpriority(thread.max_priority); // 10 problém platformové závislosti priorit možná pomoc pro zvýšení responsivity GUI typické pokusy o,,řešení problémů 1 Thread.yield(); Thread.sleep(100); 28/67
29 Další typy uváznutí Livelock uváznutí, při němž se vlákno (aktivně) snaží o činnosti, která opakovaně selhává náhodnostní exponenciální back-off Ztracené zprávy o.wait() a o.notify() resp. o.notifyall nemají mechanismus zdržení notifikace pokud vlákno usne na o.wait() později, než mělo být notifikováno přes o.notify, nikdy se nevzbudí 29/67
30 Hledání problémů Výpis stavu JVM SIGQUIT na unixech (ev. Ctrl-/ pokud mapuje na SIGQUIT) Ctrl-Break na Windows 30/67
31 Hledání problémů public static void main(string[] args) { 2 final Object a = new Object(); final Object b = new Object(); 4 Thread t1 = new Thread(new Runnable() { 6 public void run() { try { 8 synchronized (a) { Thread.sleep(1000); 10 System.out.println("t1 - cekam na b"); synchronized (b) { 12 System.out.println("t1 - jsem zde"); 14 catch (InterruptedException e) { ); 31/67
32 Hledání problémů Thread t2 = new Thread(new Runnable() { 2 public void run() { try { 4 synchronized (b) { Thread.sleep(1000); 6 System.out.println("t2 - cekam na a"); synchronized (a) { 8 System.out.println("t2 - jsem zde"); 10 catch (InterruptedException e) { ); 16 t1.start(); t2.start(); 32/67
33 Hledání problémů $ java IntentionalDeadlock 2 t2 - cekam na a t1 - cekam na b :46:25 Full thread dump Java HotSpot(TM) Client VM (16.2-b04 mixed mode, sharing): 6 "DestroyJavaVM" prio=6 tid=0x020b1000 nid=0x164c waiting on condition [0x ] 8 java.lang.thread.state: RUNNABLE 10 "Thread-1" prio=6 tid=0x nid=0x1b4c waiting for monitor entry [0x0480f000] java.lang.thread.state: BLOCKED (on object monitor) 12 at IntentionalDeadlock$2.run(IntentionalDeadlock.java:35) - waiting to lock <0x243e6928> (a java.lang.object) 14 - locked <0x243e6930> (a java.lang.object) at java.lang.thread.run(unknown Source) 16 "Thread-0" prio=6 tid=0x02146c00 nid=0x1a38 waiting for monitor entry [0x0477f000] 18 java.lang.thread.state: BLOCKED (on object monitor) at IntentionalDeadlock$1.run(IntentionalDeadlock.java:20) 20 - waiting to lock <0x243e6930> (a java.lang.object) - locked <0x243e6928> (a java.lang.object) 22 at java.lang.thread.run(unknown Source) 33/67
34 Hledání problémů 1 "Low Memory Detector" daemon prio=6 tid=0x nid=0xbd8 runnable [0x ] java.lang.thread.state: RUNNABLE 3 "CompilerThread0" daemon prio=10 tid=0x nid=0x1708 waiting on condition [0x ] 5 java.lang.thread.state: RUNNABLE 7 "Attach Listener" daemon prio=10 tid=0x nid=0x13d0 runnable [0x ] java.lang.thread.state: RUNNABLE 9 "Signal Dispatcher" daemon prio=10 tid=0x nid=0x5a0 waiting on condition [0x ] 11 java.lang.thread.state: RUNNABLE Heap 2 def new generation total 4928K, used 466K [0x243b0000, 0x , 0x ) eden space 4416K, 10% used [0x243b0000, 0x , 0x ) 4 from space 512K, 0% used [0x , 0x , 0x ) to space 512K, 0% used [0x , 0x , 0x ) 6 tenured generation total 10944K, used 0K [0x , 0x2a3b0000, 0x343b0000) the space 10944K, 0% used [0x , 0x , 0x , 0x2a3b0000) 8 compacting perm gen total 12288K, used 42K [0x343b0000, 0x34fb0000, 0x383b0000) the space 12288K, 0% used [0x343b0000, 0x343ba960, 0x343baa00, 0x34fb0000) 10 ro space 10240K, 51% used [0x383b0000, 0x388dae00, 0x388dae00, 0x38db0000) rw space 12288K, 54% used [0x38db0000, 0x394472d8, 0x , 0x399b0000) 34/67
35 Hledání problémů Found one Java-level deadlock: 2 ============================= "Thread-1": 4 waiting to lock monitor 0x020d53ac (object 0x243e6928, a java.lang.object), which is held by "Thread-0" 6 "Thread-0": waiting to lock monitor 0x020d6c74 (object 0x243e6930, a java.lang.object), 8 which is held by "Thread-1" 10 Java stack information for the threads listed above: =================================================== 12 "Thread-1": at IntentionalDeadlock$2.run(IntentionalDeadlock.java:35) 14 - waiting to lock <0x243e6928> (a java.lang.object) - locked <0x243e6930> (a java.lang.object) 16 at java.lang.thread.run(unknown Source) "Thread-0": 18 at IntentionalDeadlock$1.run(IntentionalDeadlock.java:20) - waiting to lock <0x243e6930> (a java.lang.object) 20 - locked <0x243e6928> (a java.lang.object) at java.lang.thread.run(unknown Source) 22 Found 1 deadlock. 35/67
36 Statická analýza kódu FindBugs 36/67
37 Anotace Vícečlenný tým programátorů předávání myšlenek komentáře v kódy anotace anotace se dají použít i pro statickou analýzu kódu import net.jcip.annotations.guardedby; 2 // 37/67
38 Anotace @NotThreadSafe Anotace monitor (intrinsic lock) na explicitní zámek na jmenopole pokud je potomkem Lock jinak monitor na obdobné, odkazuje se statické pole jiné metoda jmenometody() vrací literál třídy (objekt) pro pojmenovanou třídu 38/67
39 Omezování zámků zrychlení 1 s + 1 s n JVM se snaží dělat eliminaci synchronizací, které nemohou nastat (např. pomocí escape analysis lokální objekt, který není nikdy publikován na haldu a je tudíž thread-local) kombinace více zámků do jednoho (lock coarsening) Zbytečně nesynchronizovat delegace bezpečnosti (thread safety delegation) omezení rozsahu synchronizace (get in get out principle, např. Taxi/Dispatcher) dělení zámků (lock splitting) pouze pro nezávislé proměnné/objekty ořezávání zámků (lock stripping) RW zámky Neprovádět object pooling na jednoduchých objektech new je levnější jako malloc synchronized (new Object()) { 2 System.out.println("bleeee"); 39/67
40 Omezování zámků zrychlení 1 s + 1 s n JVM se snaží dělat eliminaci synchronizací, které nemohou nastat (např. pomocí escape analysis lokální objekt, který není nikdy publikován na haldu a je tudíž thread-local) kombinace více zámků do jednoho (lock coarsening) Zbytečně nesynchronizovat delegace bezpečnosti (thread safety delegation) omezení rozsahu synchronizace (get in get out principle, např. Taxi/Dispatcher) dělení zámků (lock splitting) pouze pro nezávislé proměnné/objekty ořezávání zámků (lock stripping) RW zámky Neprovádět object pooling na jednoduchých objektech new je levnější jako malloc synchronized (new Object()) { 2 System.out.println("bleeee"); 40/67
41 Omezování zámků Podobně jako dělení zámků, ale pro proměnný počet nezávislých proměnných/objektů Příklad ořezávání zámků ConcurrentHashMap 16 zámků každý z N hash buckets je chráněný zámkem N mod 16 předpokládáme rovnoměrné rozdělení položek mezi kbelíky 16 paralelních přístupů přístup k celé kolekci vyžaduje všech 16 zámků rozdělení kumulativních polí do jednotlivých kbelíků 41/67
42 Interakce s JVM při měření Problém garbage collection -verbose:gc krátká měření: vybrat pouze běhy, v nichž nedošlo ke GC dlouhé běhy: dostatečně dlouhé, aby se přítomnost GC projevila representativně Problém HotSpot kompilace -XX:+PrintCompilation dostatečný warm-up (minuty!) mohou se vyskytovat rekompilace (optimalizace, nahrání nové třídy která zruší dosavadní předpoklady) housekeeping tasks: oddělení nesouvisejících měření pauzou nebo restartem JVM 42/67
43 Délka zpracování obrázku 43/67
44 velikost obrázku čas běhu , , , , /67
45 velikost obrázku čas běhu , , , , /67
46 Měříme délku výpočtu v Javě 46/67
47 > library(psych) > runlength <- read.csv(file="java-example.table", head=false, sep=",") > summary(runlength$v1) Min. 1st Qu. Median Mean 3rd Qu. Max > describe(runlength$v1) var n mean sd median trimmed mad min max range skew kurtosis se /67
48 Javové měření N = 30 x = 166,82 sx = 113,67 s x = sx N = 20,75 t 0,05;29 = 2,045 x ± t 0,05;N 1 s x = 167 ± 42 ms Četnost Čas [ms] 48/67
49 Javové měření N = 30 x = 166,82 sx = 113,67 s x = sx N = 20,75 t 0,05;29 = 2,045 x ± t 0,05;N 1 s x = 167 ± 42 ms Četnost Čas [ms] 49/67
50 Javové měření Čas [ms] Měření 50/67
51 Javové měření Čas [ms] HotSpot garbage collector Měření 51/67
52 Soustava jednotek pro informatiky Zdroj: 52/67
53 Soustava jednotek pro informatiky Předpony nejen speciálně informatické yocto y zepto z atto a femto f pico p nano n micro µ milli m kilo k kibi 2 10 Ki mega M mebi 2 20 Mi giga G gibi 2 30 Gi tera T tebi 2 40 Ti peta P pebi 2 50 Pi exa E exbi 2 60 Ei zetta Z zebi 2 70 Zi yotta Y yobi 2 80 Yi Amendment 2 to IEC : Letter symbols to be used in electrical technology Part 2: Telecommunications and electronics (1999) 53/67
54 Výsledky měření x = (ˆµ x ± z x ) [jednotka] ˆµ x... nejpravděpodobnější hodnota měřené veličiny z x... interval spolehlivosti / přesnost jak tyto věci spočítat / odhadnout? 54/67
55 Chyby měření Klasifikace chyb podle místa vzniku instrumentální (přístrojové) chyby metodické chyby teoretické chyby (principy, model) chyby zpracování Klasifikace chyb podle původu hrubé (omyly) systematické náhodné 55/67
56 Chyby měření /67
57 Přesnost měřících nástrojů Přesnost přístroje... náhodná chyba Správnost přístroje... systematická chyba Aditivní vs. multiplikativní chyby Mezní hodnota chyb Třída přesnosti přístroje Aditivní model Multiplikativní model Kombinovaný model změřená hodnota změřená hodnota změřená hodnota skutečná hodnota skutečná hodnota skutečná hodnota 57/67
58 Náhodné chyby aneb proč se běžně pracuje s normálním rozdělením chyb? Hypotéza elementárních chyb (Horák, 1958) každá náhodná chyba v měření je složena z řady malých chyb při velkém počtu měření se vyskytne zhruba stejný počet chyb kladných i záporných a malé chyby jsou početnější než velké 1. m elementárních náhodných vlivů 2. každý elementární vliv generuje chybu α (dále označováno jako případ a) nebo α (dále případ b) 3. chyby a a b jsou stejně časté dostáváme binomické rozdělení kumulace vlivů elementárních chyb ( m 0 )am,( m 1 )am 1 b,...,( m l )am l b l,...,( m m )bm P(0) = 1 2 m ( m m/2 ) P(ε l) = 1 2 m (m l ), ε l = (l (m l))α = (2l m)α = 2sα 58/67
59 Náhodné chyby aneb proč se běžně pracuje s normálním rozdělením chyb? Co se stane, pokud m? pro sudá m = 2k k (sudá, abychom měli P(0)) P(2sα) P(0) pro s k ) k+s ( 2k k = ( 2k ln P(2sα) P(0) = 1 k 2 k P(ε) = P(2sα) = 1 2k ( 22k k + s ) k(k 1) (k s + 1) = ) (k + 1)(k + 2) (k + s) = (1 1 ) (1 2 s 1 ) (1 k k (1 + 1 ) (1 + 2 ) (1 + s ) k k k ln(1 + x) = x x2 2 + x3 3 x s 1 1 k k 2 k s k = 2 k P(2sα) = P(0)e s2 k = P(0)e ε2 4kα 2 k ) s(s 1) s 2 k = s2 k 59/67
60 Binomické vs. normální rozdělení Srovnání binomického a normálního rozdělení pro p = 0,5 a n = P[X=k] k Zdroj: 60/67
61 Studentovo rozdělení t Používá se pro normální rozdělení při malém vzorku f(t) = Γ ( ν+1 2 ) νπγ ( ν 2 kde ν je počet stupňů volnosti. odhad průměrů a chyby t-test odlišení průměrů (ν+1)/2 t2 (1 + ) ν ) 61/67
62 Odhad spolehlivosti x = (ˆµ x ± z x ) [jednotka] Statistická definice (Šťastný, 1997): Je-li výsledek měření ˆµ x a z x je chyba tohoto měření odpovídající míře jistoty p, pak skutečná hodnota měřené veličiny leží v intervalu (ˆµ x ± z x ) s pravděpodobností p. Intervaly 0,68 střední kvadratická chyba 0,95 0,99 krajní chyba Zaokrouhlování z xnejvýše na 2 platná místa ˆµ xpodle z x 62/67
63 Odhad spolehlivosti Pro normální rozdělení chyby x = (ˆµ x ± z x ) [jednotka] ˆµ x = x = N i=1 x i n s směrodatná odchylka jednoho měření, D rozptyl s = N D = i=1(x x i ) 2 n 1 s x = N i=1( 1 n )2 s xi a protože měření byly prováděny za stejných podmínek s x = s x = N i=1(x x i ) 2 n n(n 1) 63/67
64 Odhad spolehlivosti Pro normální rozdělení chyby z x = t (p;n 1) s x P n x = (ˆµ x ± z x ) [jednotka] 0,683 0,954 0,99 n P 0,683 0,954 0,99 1 1, , , ,0329 2,1633 2, ,3224 4,5001 9, ,0292 2,1433 2, ,1978 3,2923 5, ,0263 2,1276 2, ,1425 2,8585 4, ,0176 2,0817 2,75 5 1,1113 2,6396 4, ,0133 2,0595 2, ,0913 2,5084 3, ,0108 2,0463 2, ,0775 2,4214 3, ,0091 2,0377 2, ,0673 2,3594 3, ,0078 2,0315 2, ,0594 2,3131 3, ,0069 2,0269 2, ,0533 2,2773 3, ,0062 2,0234 2, ,0441 2,2253 3, ,0057 2,0206 2, ,0377 2,1895 2, /67
65 Odhad spolehlivosti x = (ˆµ x ± z x ) [jednotka] Příklad měření výšky válečku (Šťastný, 1997): výška v [mm] 4,6 4,5 4,7 4,4 4,5 4,6 4,4 4,4 4,3 4,5 n = 10 v = 4,49 [mm] s v = 0,038 [mm] t (0,68;9) = 1,059 t (0,99;9) = 3,250 v = (4,49 ± 0,04) mm pro p = 0,68 v = (4,49 ± 0,12) mm pro p = 0,99 65/67
66 Zákon přenosu chyb Na základě Taylorova rozvoje do druhého členu s 2 N z = i=1 ( z 2 ) x i s 2 N 1 x i + 2 i=1 N j=i+1 z x i z x j s xi s xj ϱ ij, kde s 2 x i je rozptyl (variance) x i a ϱ ij je kovariance x i a x j. Pro jednoduché případy, kdy x a y jsou nezávislé (ϱ ij = 0): aditivní funkce z = ax ± by multiplikativní funkce z = ax b y c kde z = ax b y c, protože s z = a 2 s 2 x + b2 s 2 y, (1) 2 s z = z bs x ( x ) + ( cs y y ) 2. (2) N i=1 ( z 2 ) s 2 = x i i abx b y c s x x 2 + ax b cy c s y y 2 = z 2 (( bs x x ) 2 + ( cs y y ) 2 ) Příklad použití: 66/67
67 Skripta Fr. Šťastného (Sťastný, 1997) 67/67
Vláknové programování část IV
Vláknové programování část IV Lukáš Hejmánek, Petr Holub {xhejtman,hopet@ics.muni.cz Laboratoř pokročilých síťových technologií PV192 2014 03 18 1/48 Přehled přednášky ThreadPools Java NIO Uváznutí Optimalizace
Vláknové programování část VII
Vláknové programování část VII Lukáš Hejmánek, Petr Holub {xhejtman,hopet}@ics.muni.cz Laboratoř pokročilých síťových technologií PV192 2013 04 16 1/84 Přehled přednášky ThreadPoolExecutors Revisited Java
Vláknové programování část V
Vláknové programování část V Lukáš Hejmánek, Petr Holub {xhejtman,hopet@ics.muni.cz Laboratoř pokročilých síťových technologií PV192 2014 03 25 1/25 Přehled přednášky Paměťový model Javy GUI v Javě Vlákna
Vláknové programování část III
Vláknové programování část III Lukáš Hejmánek, Petr Holub {xhejtman,hopet}@ics.muni.cz Laboratoř pokročilých síťových technologií PV192 2013 03 04 1/60 Přehled přednášky Vlákna v jazyce Java Paralelní
Návrh a vyhodnocování experimentů
Návrh a vyhodnocování experimentů Petr Holub a Radka Svobodová-Vařeková , DUVOD 2010 12 07 1/61 Přehled přednášky Motivace Měření Zpracování měření Regresní metody
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
Uklízení odpadků a analýza úniku
Uklízení odpadků a analýza úniku Jiří Vokřínek Katedra počítačů Fakulta elektrotechnická Ceské vysoké ucení technické v Praze Prednáška 11 B0B36PJV Programování v JAVA Uklízení odpadků a analýza úniku
Pokud zadání nerozumíte nebo se vám zdá nejednoznačné, zeptejte se. Pište čitelně, nečitelná řešení nebudeme uznávat.
Pokud zadání nerozumíte nebo se vám zdá nejednoznačné, zeptejte se. Pište čitelně, nečitelná řešení nebudeme uznávat. 1. Odkrokujte následující program a s použitím notace z přednášky sledujte stav paměti
Pokud zadání nerozumíte nebo se vám zdá nejednoznačné, zeptejte se. Pište čitelně, nečitelná řešení nebudeme uznávat.
Pokud zadání nerozumíte nebo se vám zdá nejednoznačné, zeptejte se. Pište čitelně, nečitelná řešení nebudeme uznávat. 1. Odkrokujte následující program a s použitím notace z přednášky sledujte stav paměti
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ů
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
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í
Správa paměti. Karel Richta a kol. Katedra počítačů Fakulta elektrotechnická České vysoké učení technické v Praze Karel Richta, 2016
Správa paměti Karel Richta a kol. Katedra počítačů Fakulta elektrotechnická České vysoké učení technické v Praze Karel Richta, 2016 Objektové modelování, B36OMO 10/2016, Lekce 2 https://cw.fel.cvut.cz/wiki/courses/xxb36omo/start
Příklad aplikace Klient/Server s Boss/Worker modelem (informativní)
Příklad aplikace Klient/Server s Boss/Worker modelem (informativní) Jan Faigl Katedra počítačů Fakulta elektrotechnická České vysoké učení technické v Praze A0B36PR2 Programování 2 Jan Faigl, 2015 A0B36PR2
Ú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
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
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
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ší
Pokud zadání nerozumíte nebo se vám zdá nejednoznačné, zeptejte se. Pište čitelně, nečitelná řešení nebudeme uznávat.
Pokud zadání nerozumíte nebo se vám zdá nejednoznačné, zeptejte se. Pište čitelně, nečitelná řešení nebudeme uznávat. 1. Odkrokujte následující program a s použitím notace z přednášky popište stav paměti
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
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í
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 =
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í
RMI Remote Method Invocation
2. cvičení RMI Remote Method Invocation 2007/09 ver.2.0 1 RMI co to je? vyvolání metody z jiné JVM lokalizace vzdáleného objektu komunikace se vzdálenými objekty přenos objektu v bytecode typicky klient
OMO. 4 - Creational design patterns A. Singleton Simple Factory Factory Method Abstract Factory Prototype Builder IoC
OMO 4 - Creational design patterns A Singleton Simple Factory Factory Method Abstract Factory Prototype Builder IoC Ing. David Kadleček, PhD. kadlecd@fel.cvut.cz, david.kadlecek@cz.ibm.com 1 Creational
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í
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
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é
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í
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
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
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................
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ů
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í
JAVA V Vlákna Java, zimní semestr
JAVA Vlákna 1 Přehled (thread) podpora pro vícevláknové aplikace přímo v jazyce "hlavní" vlákno aplikace metoda main() v JVM je vždy několik vláken záleží na implementaci JVM skončí až skončí všechna vlákna
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ů
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
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
Vláknové programování část IV
Vláknové programování část IV Lukáš Hejmánek, Petr Holub {xhejtman,hopet@ics.muni.cz Laboratoř pokročilých síťových technologií PV192 2012 03 13 1/49 Přehled přednášky Monitory a synchronizace Signalizace
Zapouzdření. Tomáš Pitner, upravil Marek Šabo
Zapouzdření Tomáš Pitner, upravil Marek Šabo Co je zapouzdření Naprosto zásadní vlastnost objektového přístupu, možná nejzásadnější Jde o spojení dat a práce s nimi do jednoho celku - objektu Data jsou
JSR 184 - tutorial 2 Transformace v JSR-184
JSR 184 - tutorial 2 Transformace v JSR-184 Cíl tutorialu: - naučit vás měnit pozici/ rotaci/ velikost objektu Tak jdeme na to: V minulém tutorialu (Úvod do JSR-184) jsme si ukázali, jak námi vytvořenou
PSY117/454 Statistická analýza dat v psychologii přednáška 8. Statistické usuzování, odhady
PSY117/454 Statistická analýza dat v psychologii přednáška 8 Statistické usuzování, odhady Výběr od deskripce k indukci Deskripce dat, odhad parametrů Usuzování = inference = indukce Počítá se s náhodným
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
Jazyk C# (seminář 6)
Jazyk C# (seminář 6) Pavel Procházka KMI 29. října 2014 Delegát motivace Delegáty a události Jak docílit v C# funkcionální práce s metodami v C je to pomocí pointerů na funkce. Proč to v C# nejde pomocí
Distribuované systémy a výpočty
Distribuované systémy a výpočty X36DSV Jan Janeček Peter Macejko CORBA Common Object Request Broker Architecture - konsorcium OMG (Object Management Group) - standard pro podporu komunikace v DS - pouze
Vlákna. První jednoduchý program s vlákny:
Vlákna Současné operační systémy jsou víceúlohové. Z uživatelského pohledu se zdá, že běží několik úloh zároveň. Jednotlivé úlohy se nazývají procesy nebo také vlákna (tento termín používá i Java). Operační
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č
KGG/STG Statistika pro geografy
KGG/STG Statistika pro geografy 5. Odhady parametrů základního souboru Mgr. David Fiedor 16. března 2015 Vztahy mezi výběrovým a základním souborem Osnova 1 Úvod, pojmy Vztahy mezi výběrovým a základním
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
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ů
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á
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
Vlákna. První jednoduchý program s vlákny:
Vlákna Současné operační systémy jsou víceúlohové. Z uživatelského pohledu se zdá, že běží několik úloh zároveň. Je tedy možné napsat i jeden program tak, aby v něm běželo vedle sebe několik relativně
Ú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
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
Vlákno odlehčený proces kód vlákna, zásobník privátní ostatní sdíleno s dalšími vlákny téhož procesu
Procesy, vlákna Vlákno odlehčený proces kód vlákna, zásobník privátní ostatní sdíleno s dalšími vlákny téhož procesu Implementace vláken one-to-one o implementace na úrovni jádra o každé vlákno je pro
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ů
Iterator & for cyklus
Iterator & for cyklus for (Object o : foo) funguje pokud je foo pole nebo je foo iterovatelné jako to zařídit? implementovat interface java.lang.iterable Iterable má jednu metodu java.util.iterator iterator()
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ů
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ů
IRAE 07/08 Přednáška č. 2. atr1 atr2. atr1 atr2 -33
Objekt jako proměnná Objekty a metody Objekt = proměnná referenčního typu vznik pomocí new, chování viz pole jako referenční proměnná minulý semestr Stack Heap objekt ref this 10 20 atr1 atr2 jinyobjekt
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ů
VIII. Seminář Java VIII p.1/36
Seminář Java VIII Seminář Java VIII p1/36 Rekapitulace Grafické uživatelské rozhraní Swing vs AWT Aplety Aplikační rámec, JApplet spouštení v prohlížeči, Appletviewer Událostní model knihovny Swing události
Viditelnost (práva přístupu) Tomáš Pitner, upravil Marek Šabo
Viditelnost (práva přístupu) Tomáš Pitner, upravil Marek Šabo Viditelnost Přístup ke třídám i jejim prvkům lze (podobně jako např. v C++) regulovat. Přístupem se rozumí jakékoli použití dané třídy, prvku
PREPROCESOR POKRAČOVÁNÍ
PREPROCESOR POKRAČOVÁNÍ Chybová hlášení V C# podobně jako v C++ existuje direktiva #error, která způsobí vypsání chybového hlášení překladačem a zastavení překladu. jazyk C# navíc nabízí direktivu #warning,
2) Napište algoritmus pro vložení položky na konec dvousměrného seznamu. 3) Napište algoritmus pro vyhledání položky v binárním stromu.
Informatika 10. 9. 2013 Jméno a příjmení Rodné číslo 1) Napište algoritmus pro rychlé třídění (quicksort). 2) Napište algoritmus pro vložení položky na konec dvousměrného seznamu. 3) Napište algoritmus
Vícevláknové aplikace
Vícevláknové aplikace Jiří Vokřínek Katedra počítačů Fakulta elektrotechnická České vysoké učení technické v Praze Přednáška 7 B0B36PJV Programování v JAVA Jan Faigl, Jiří Vokřínek, 2017 B0B36PJV Přednáška
IB111 Úvod do programování skrze Python Přednáška 7
IB111 Úvod do programování skrze Python Přednáška 7 Správa paměti (proměnné podrobněji) Práce se soubory Nikola Beneš 2. listopad 2016 IB111 přednáška 7: správa paměti, práce se soubory 2. listopad 2016
JAVA. Krátke poznámky:
JAVA Krátke poznámky: Vše je definováno ve třídách; Žádné funkce mimo třídy Skoro všetko je objekt, výnimka sú premenné (napr. int) Neexistuje operátor delete Rušenie objektov výlučne cez Garbage Collector
Využití OOP v praxi -- Knihovna PHP -- Interval.cz
Page 1 of 6 Knihovna PHP Využití OOP v praxi Po dlouhé teorii přichází na řadu praxe. V následujícím textu si vysvětlíme možnosti přístupu k databázi pomocí různých vzorů objektově orientovaného programování
public static void main(string[] args) { System.out.println(new Main().getClass().getAnnotation(Greet.class).text());
Anotace a Hibernate Aleš Nosek, Ondřej Vadinský, Daniel Krátký Anotace v Javě Anotace jsou novinkou v Javy verze 5. Anotace umožňují doplnit kód Javy o dodatečné informace. Zapisují se přímo do zdrojového
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
Statistická analýza dat v psychologii. Věci, které můžeme přímo pozorovat, jsou téměř vždy pouze vzorky. Alfred North Whitehead
PSY117/454 Statistická analýza dat v psychologii Přednáška 8 Statistické usuzování, odhady Věci, které můžeme přímo pozorovat, jsou téměř vždy pouze vzorky. Alfred North Whitehead Barevná srdíčka kolegyně
Definice spojité náhodné veličiny zjednodušená verze
Definice spojité náhodné veličiny zjednodušená verze Náhodná veličina X se nazývá spojitá, jestliže existuje nezáporná funkce f : R R taková, že pro každé a, b R { }, a < b, platí P(a < X < b) = b a f
10. cvičení z PST. 5. prosince T = (n 1) S2 X. (n 1) s2 x σ 2 q χ 2 (n 1) (1 α 2 ). q χ 2 (n 1) 2. 2 x. (n 1) s. x = 1 6. x i = 457.
0 cvičení z PST 5 prosince 208 0 (intervalový odhad pro rozptyl) Soubor (70, 84, 89, 70, 74, 70) je náhodným výběrem z normálního rozdělení N(µ, σ 2 ) Určete oboustranný symetrický 95% interval spolehlivosti
Návrh softwarových systém. Návrh softwarových systémů
Návrh softwarových systém ů - Java 8 Jiří Šebek Návrh softwarových systémů (B6B36NSS) Co je nového? Default interface methods Lambda expressions Method references and repeatable annotations Streams Functional
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;
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
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
Úvod do problematiky měření
1/18 Lord Kelvin: "Když to, o čem mluvíte, můžete změřit, a vyjádřit to pomocí čísel, něco o tom víte. Ale když to nemůžete vyjádřit číselně, je vaše znalost hubená a nedostatečná. Může to být začátek
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
Generické typy. Podrobněji: The Java Language Specification ( Third Edition ) , 18
Generické typy jsou třídy či interfejsy deklarující tzv. typové parametry jimiž: - systematizují typovou kontrolu kompilátorem, - vyjadřují jasněji smysl, zlepšují čitelnost a robustnost programu, - ulehčují
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
5 Rekurze a zásobník. Rekurzivní volání metody
5 Rekurze a zásobník Při volání metody z metody main() se do zásobníku uloží aktivační záznam obsahující - parametry - návratovou adresu, tedy adresu, kde bude program pokračovat v metodě main () po skončení
Jakub Čermák <jakub@jcermak.cz> http://www.jcermak.cz. Microsoft Student Partner
Jakub Čermák http://www.jcermak.cz Microsoft Student Partner Úvod, příklady použití, trocha teorie Struktura aplikace Typy obecně, primitivní typy, speciální typy Podmínky, cykly, namespaces
Car Agent. Struktura chování:
Car Agent Struktura chování: SequentialBehavior() SubBehavior(AgentRequestProtocol) send/receive parkingrequest SubBehavior(UseThisParkplace) reakce na příchozí zprávu usethisparkplace SequentialBehavior()
UJO Framework. revoluční architektura beans. verze 0.80 http://ujoframework.org/
UJO Framework revoluční architektura beans verze 0.80 http://ujoframework.org/ Pavel Pone(c), září 2008 Historie rok 2004 upravené objekty z frameworku Cayenne nevýhodou byla špatná typová kontrola rok
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í
Distribuované systémy a výpočty (14) 7/1/2008
Distribuované systémy a výpočty (14) Jan Janeček KP FEL ČVUT 7/1/2008 Mobilita výpočtu Mobilní agenti aktivní objekty nepreemptivní migrace určovaná agentem sběr a distribuovaná analýza dat Aktivní sítě
Čipové karty Lekařská informatika
Čipové karty Lekařská informatika Následující kód je jednoduchou aplikací pro čipové karty, která po překladu vytváří prostor na kartě, nad kterým jsou prováděny jednotlivé operace a do kterého jsou ukládány
JAVA V RMI Java, letní semestr
JAVA RMI Přehled Remote Method Invocation používání vzdálených objektů objekty v jiné VM (na stejném počítači i přes síť) jako by to byly lokální objekty (téměř) pouze volání trvají déle Vzdálené volá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
Objektově orientované programování
10. října 2011 Pragmatické informace Volitelný předmět, zápočet: zápočtový program(s dokumentací), aktivní účast na cvičení(body v CodExu), praktický test, zkouška: zkoušková písemka na objektový návrh
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
Ú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
Správa paměti na platformě Java. Ladislav Thon
Správa paměti na platformě Java Ladislav Thon 1 Obsah 1. závěr 2. JVM a paměť 3. sledování a ovlivňování 4. problémy a jejich řešení Upozornění: Sun JVM 5.0 only! Ostatní implementace (IBM, Bea) se liší.
Pravděpodobnost a matematická statistika Doc. RNDr. Gejza Dohnal, CSc.
Pravděpodobnost a matematická statistika Doc. RNDr. Gejza Dohnal, CSc. dohnal@nipax.cz Pravděpodobnost a matematická statistika 2010 1.týden (20.09.-24.09. ) Data, typy dat, variabilita, frekvenční analýza
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ů
Charakterizace rozdělení
Charakterizace rozdělení Momenty f(x) f(x) f(x) μ >μ 1 σ 1 σ >σ 1 g 1 g σ μ 1 μ x μ x x N K MK = x f( x) dx 1 M K = x N CK = ( x M ) f( x) dx ( xi M 1 C = 1 K 1) N i= 1 K i K N i= 1 K μ = E ( X ) = xf