Reflexe_03. Používání dynamického proxy

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

Download "Reflexe_03. Používání dynamického proxy"

Transkript

1 Reflexe_03 Používání dynamického proxy

2 Použití dynamického proxy jak používat java.lang.refrect.proxy použití proxy k implementaci dekorátorů řetězení proxy skryté nebezpečí využívání proxy 2

3 Úvod Ukrývání umístění cílového objektu před klientem. Intervence(intercession) je jakákoli schopnost reflexe, která modifikuje chování programu přímo převzetím kontroly nad chováním. Vyvolání metod intervence je jediná možnost zachycení (intercepting) zpráv a jejich možné modifikace. 3

4 Sekvenční diagram typického použití proxy 4

5 Problém sledovánítříd Scénář: Zákazník volá na podporu SW se záznamem poruchy. Při zapnutém sledování, je možné rychleji a lépe objasnit vzniklý problém. Sledování (tracing) je užitečné, ale velmi náročné na I/O. Proto zapínání/ vypínání sledování. 5

6 Problém sledovánítříd Zpomalení z důvodu příkazu if on/off. Jedna z možností vytvořit podtřídy od nesledovaných tříd a zastínit (override) každou metodu se sledováním a voláním nadtřídy. Nevýhody: únavné, vykonávání této možnosti je nudné a mechanické náchylné k chybám, křehké, změna signatury metody přináší problémy. 6

7 Sledování s využitím proxy Dvě důležité úlohy každého proxy jsou implementace rozhraní a delegování. Javovskátřída Proxyprovádí implementaci rozhraní pomocí dynamicky vytvořené třídy, která implementuje množinu daných rozhraní. Dynamické vytvoření třídy je provedeno třídní metodou getproxyclass()a tovární metodou newproxyinstance(). 7

8 Terminologie Každá třída konstruovaná těmito továrními metodami je public final podtřída od Proxy, které říkáme třída proxy (proxy class). Instancím od těchto dynamicky tvořených proxiesříkáme instance proxy(proxy instance). Rozhraní, která třída proxy implementuje říkáme rozhraní proxy (proxied interfaces). 8

9 public class Proxy implements java.io.serializable {... public static Class getproxyclass(classloader loader, Class[] interfaces) throws IllegalArgumentException... public static Object newproxyinstance(classloader loader, Class[] interfaces, InvocationHandler h ) throws IllegalArgumentException... public static boolean isproxyclass(class c1)... public static InvocationHandler getinvocationhandler(object proxy) throws IllegalArgumentException... getproxyclass() dodá třídu proxy, specifikovanou class loadrema polem rozhraní. Pokud taková třída proxy neexistuje, vytvoří se dynamicky. Protože každý javovský objekt je asociován s loadrem třídy (class loadrem), proto getproxyclass() musí mít parametr tohoto loaderu. Jméno každé třídy proxy začíná s $Proxy následované číslem (pořadovým). 9

10 public class Proxy implements java.io.serializable {... public static Class getproxyclass(classloader loader, Class[] interfaces) throws IllegalArgumentException... public static Object newproxyinstance(classloader loader, Class[] interfaces, InvocationHandler h ) throws IllegalArgumentException... public static boolean isproxyclass(class c1)... public static InvocationHandler getinvocationhandler(object proxy) throws IllegalArgumentException... Všechny třídy proxy mají konstruktor, s parametrem InvocationHandler. InvocationHandler je rozhraní pro objekty, které pracují s metodami, které získali od instance proxy, prostřednictvím jejich proxied rozhraní. Kombinace getconstructora newinstancemůže být použita ke konstrukci instancí proxy. 10

11 Proxy c1 = getproxyclass( SomeInterface.getLoader(), Class[] {SomeInterface.class ); Constructor cons = c1.getconstructor(new Class[] {InvocationHandler.class); SomeSH je třída která implementuje InvocationHandler. Object proxy = cons.newinstance(new Object[] {new SomeIH(obj ) ); Object proxy = Proxy.newProxyInstance(SomeInterface.getClassLoader(), Class[] {SomeInterface.class, new SomeIH(obj) ); alternativa 11

12 isproxyclass(), getinvocationhandler() Proxy.isProxyClass(obj.getClass()); zjistí, zda obj odkazuje na instanci proxy. Proxy.getInvocationHandler(p); vrátí InvocationHandler, který byl použit ke konstrukci p. 12

13 Invocationhandlers Proxyumožňuje programátorům uskutečnit úlohu delegováníprostřednictvím rozhraní InvocationHandleru. Instance invocationhandlersjsou objekty, které zvládají každé volání metody instance proxy. Invocationhandlersjsou také zodpovědniza udržování odkazů na cílový objekt instance proxy. 13

14 public interface InvocationHandler { public Object invoke( Object proxy, Method method, Object[] args) throws Throwable; Rozhraní InvocationHandler 14

15 Invocationhandlers Instance proxy předává dál volání metody na její invocation handler pomocí volání invoke(). Původní argumenty pro volání metody jsou předány metodě invoke() jako pole objektů. Navíc proxy instance poskytuje odkaz sama na sebe a na objekt Method vyvolávané metody. Předané parametry metodě invoke() jsou přesně ty objekty, které potřebuje přeposlat reflektivně dalšímu objektu. 15

16 public Object invoke (Object proxy, Method method, Object[] args) throws Throwable { return method.invoke(target, args); 16

17 Invocationhandlers Obecnější metoda invoke může provádět prea post- processing parametrů. 17

18 Sekvenční diagram zpracování 18

19 Implementace proxy pro sledování Řešení používá invocation handler (vyvolávací ovladač), ve kterém metoda invoke()přeposílá (forward) všechna volání metod cílovému objektu. Toto přeposílání je snadno provedeno s metodou invoke() od metatřídy Method. Řešení zahrnuje vytvoření proxy a invokačního ovladače. 19

20 Implementace proxy pro sledování Třídní (statická) metoda createproxy() je předána cílovému objektu, který vše introspektivně prověří a vytvoří odpovídající proxy a invokační handler. 20

21 import java.lang.reflect.*; import java.io.printwriter; public class TracingIH implements InvocationHandler { public static Object createproxy( Object obj, PrintWriter out ) { return Proxy.newProxyInstance( obj.getclass().getclassloader(), obj.getclass().getinterfaces(), new TracingIH( obj, out ) ); private Object target; private PrintWriter out; private TracingIH( Object obj, PrintWriter out ) { target = obj; this.out = out; public Object invoke( Object proxy, Method method, Object[] args ) throws Throwable { Object result = null; try { out.println( method.getname() + "(...) called" ); result = method.invoke( target, args ); catch (InvocationTargetException e) { out.println( method.getname() + " throws " + e.getcause() ); throw e.getcause(); Implementace řešení je v createproxy(). Tato statická tovární metodeazabalí svůj argument do proxy, které vykoná sledování. 1. prověří objekt argumentu createproxy() na přímá rozhraní, které třída implementuje. Posílá pole rozhraní do Proxy.newInstance, která vytvoří proxy třídu pro tato rozhraní. 2. je vytvořen TracingIHs aggumentemjako cílovám objektem. 3. je vráceno nové proxy, které přeposílá svoje volání na TracingIH. Toto proxy implementuje všechna rozhraní cílového objektu a je typově kompatibilní. 21

22 out.println( method.getname() + " returns" ); return result; Uvedené řešení místo změny zdrojového kódu umožňuje zabalit objekty s proxy a dát uživateli odkaz na proxy. 22

23 Implementace pro sledování Když je vyvolaná metoda proxyna instanci proxy, je nejdříve řízení předání metodě invoke() s následujícími argumenty: proxy instance proxy na níž byla vyvolaná metoda invoke(), method objekt metatřídymethodpro vyvolávanou metodu,

24 Implementace pro sledování args pole objektů obsahující hodnoty argumentů předávané v metodě volání na instanci proxy. nullžádné předávané argumenty. Primitivní typy zabalené v obalových třídách.

25 Implementace pro sledování Návratový typ metody invoke Object. Návratová hodnota splňuje pravidla: pokud typ návratové hodnoty je void, nezáleží na návratové hodnotě. Null nejjednodušší řešení. je-li návratový typ metody rozhraní primitivním typ, odpovídající hodnota musí být z příslušné obalové třídy, není-li hodnota návratové metody kompatibilní s metodou rozhraní výjimka ClassCastException.

26 Implementace pro sledování Pro lepší pochopení: proxyforrover = (Dog) TracingIH.createProxy(rover); Dog rozhraní, rover instance od DogImpl Mechanismus proxy zabezpečí, proxy instance vrácená metodou createproxy() může být přetypovaná na Dog.

27 Diagram relevantní řádku kódu šedé zabarvení Proxy «interface» Dog «interface» InvocationHandler $Proxy0 TracingIH DogImp1 instanceof instanceof instanceof proxyforrover invocationhandler cíl rover

28 Poznámka k továrnám Předvedené řešení nemá možnost dynamicky měnit sledování on/off. Aplikace buď použije sledovací, nebo nesledovací verzi. K dosažení možnosti dynamického on/off sledování je použit vzor Abstraktní továrny. Je deklarovaná třída, která obsahuje metodu pro vytvoření instance rozhraní Dog.

29 Poznámka k továrnám Tato metoda vybírá, zda vytvořit instanci třídy Dog, která umožňujesledování nebo instanci, která neumožňuje sledování.

30 interface Dog { void initialize( String name, int size ); int method1(); int method2(); class DogImpl implements Dog { private int x = 0; private int y = 0; // konstruktor DogImpl (){ if (!invariant() ) throw new RuntimeException(); public void initialize( String name, int size ) { public int method1() { x++; y--; return 0; public int method2() { x++; y++; System.out.println( "Dog(" + x + "," + y + ")" ); return 0; public boolean invariant() { return x + y == 0;

31 import java.lang.reflect.*; import java.io.printwriter; public class DogFactory { private Class dogclass; private boolean traceison = false; public DogFactory( String classname, boolean trace ) { try { dogclass = Class.forName( classname ); catch (ClassNotFoundException e){ throw new RuntimeException(e); // or whatever is appropriate traceison = trace; #1 pouze je-li nastaven příznak trasování se vytváří požadavky pro trasování, sledování. public Dog newinstance( String name, int size ) { try { Dog d = (Dog)dogClass.newInstance(); d.initialize(name,size); if ( traceison ) { // #1 d = (Dog)TracingIH.createProxy( d, new PrintWriter(System.out) ); return d; catch(instantiationexception e){ throw new RuntimeException(e); // or whatever is appropriate catch(illegalaccessexception e){ throw new RuntimeException(e); // or whatever is appropriate

32 Řetězení proxies Silnou stránkou mechanismu proxiesje možnost jejich řetězení. V řetězci se jedno proxy odvolává na další proxya teprve poslední komunikuje s cílovým (reálným) objektem. Je-li provedení správné, vytvoří se efekt skládání vlastností implementovaných každým proxy.

33 Náhradní rozhraní pro jednotkové testování (stubbinginterfaces) V předchozím textu, proxy mělo cílový objekt. To však není nutné, v některých situacích může invokativníovladačimplementovat metody zcela (tedy bez odkazu na cílový objekt). Konkrétně: test stub(náhrada pro testování) je implementace rozhraní, která je použito k testování během vývoje dříve, než bude kompletní implementace.

34 Náhradní rozhraní pro jednotkové testování (stubbinginterfaces) Během vývoje topdowntestování pomocí náhrady (stubs) dovolí vývoj a testování horní vrstvy systému, bez požadavků, aby byl k dispozici všechen kód dolní vrstvy. Např. může být testováno chování vrstvy GUI, tím, že se pro dolní business logiku používají stuby. Avšak náhrady (stuby) se musí vytvořit a udržovat více práce.

35 Náhradní rozhraní pro jednotkové testování (stubbinginterfaces) Během vývoje se hodně mění rozhraní, a proto se musí měnit také náhrady více práce a peněz. Vytvoření a údržba stubsje mechanická a únavná práce. Stubyvyžadují napsání návratových hodnot a výjimek.

36 Náhradní rozhraní pro jednotkové testování (stubbinginterfaces) Toto předem připravené chování se používá testy k uvědomění si cest kódem během testování. Využívání stubůusnadňuje počáteční testování. Unit testing(testování po málýchjednotkách) umožňuje odhalovat počáteční chyby v kódu.

37 Návrh stubůpomocí proxy K daným javovskýmrozhraním se vytvoří proxy instance testovacích stubů(náhrad). Tato možnost eliminuje potřebu ručně implementovaných testovacích stubůpři vývoji topdown. Použití stubůvytvářených pomocí proxy podporuje dovednost programování proti rozhraní.

38 Návrh stubůpomocí proxy

39 Návrh stubůpomocí proxy Stub rozhraní přidává užitečné metody k proxy např. metody pro získání informací z vnitřku invokačního ovladače bez volání Proxy.getInvocationHandler(). History možnost stubtestováná, která bere v úvahu historii objektu a ta byla definovaná, aby si pamatovala metody volané na stubu během testování.

40 Návrh stubůpomocí proxy DefaultHistory tato třída implementuje History, která nic nedělá. ReturnValueStrategy aplikace vzoru Strategie, který dovoluje skriptování návratových hodnot a vyhozených výjimek. DefaultReturnValueStrategy tato třída implementuje ReturnValueStrategy, která se použije, pokud není nic specifikováno.

41 Návrh stubůpomocí proxy WarppedException ReturnValueStrategymůže potřebovat vyhodit výjimku. To se provede zabalením výjimky do WrappedException. To pak dovoluje stuburozeznat reálnou výjimku od skriptované výjimky. StubIH invokační ovladač pro testování možností stubů. To je odpovědné za použití strategie návratových hodnot k určení návratové hodnoty.

42 Dynamické proxy Kontext: Rozsáhlá aplikace. Problém: Úprava kódu bez zásahu do návrhu. Řešení: Použití dynamického proxy, které nabízí Java.

43 Dynamické proxy Dynamické proxy nabízí obalit daný objekt proxy objektem. Vnější objekt proxy, bude přijímat (odposlouchávat) všechna volání určena pro vnitřní zabalený objekt. Proxy objekt standardně předává všechna volání vnitřnímu objektu, ale je možné přidat kód, který se vykoná před nebo po vyvolání metody vnitřního objektu.

44 Dynamické proxy Není možné samozřejmě zabalit libovolný objekt. I přesto umožňují dymanickáproxy úplnou kontrolu nad zabaleným objektem. Dynamické proxy pracuje s rozhraními, které třída objektu implementuje. Volání, která může proxy zachytit jsou volání jednoho z těchto definovaných rozhraní.

45 Dynamické proxy Proxy se nyní skládá ze dvou tříd. InvocationHandlerdostává všechna volání metod, které směřují na proxy. Řídí tak přístup metod k RealSubjectu. Proxyimplementuje celé rozhraní Subject.

46 public interface PersonBean { String getname(); String getgender(); String getinterests(); int gethotornotrating(); void setname(string name); void setgender(string gender); void setinterests(string interests); void sethotornotrating(int rating); Příklad seznamky Hodnocení osoby pro seznamku HotOrNotRating() hodnocení 0 10 jako průměr zadaných hodnot jinými osobami

47 Příklad seznamky Datové atributy k dané konkrétní osobě zadává samotná osoba. HotOrNotRatingzadávají ostatní osoby od 1-10 a počítá se jako průměrná hodnota. Jak zabezpečit různé možnosti zadávání datových atributů?

48 public class PersonBeanImpl implements PersonBean { String name; String gender; String interests; int rating; int ratingcount = 0; public String getname() { return name; public String getgender() { return gender; public String getinterests() { return interests; public int gethotornotrating() { if (ratingcount == 0) return 0; return (rating/ratingcount); public void setname(string name) { this.name = name;

49 public void setgender(string gender) { this.gender = gender; public void setinterests(string interests) { this.interests = interests; public void sethotornotrating(int rating) { this.rating += rating; ratingcount++; Tento datový atribut může zadávat kdokoli, mimo konkrétní osobu

50 Vytvoření dynamického proxy pro PersonBean 1. Vytvořit dva InvocationHandlers InvocationHandleryimplementují chování proxy. 2. Napsání kódu, který vytváří dynamické proxy 3. Zabalit libovolný objekt PersonBeans vhodným proxy.

51 1. Vytvoření InvocationHandlers Existuje pouze jedna metoda invoke()a nezáleží, která metoda volá proxy, právě metoda invoke()je to, co je voláno v handleru.

52 proxy.sethotornotrating(9); invoke(object proxy, Method method, Object[] args) return method.invoke(person, args) Tento objekt byl předán ve volání metody invoke() Pouze nyní vyvoláváme metodu na RealSubjectu, s původními argumenty (1) Nechť je na proxy vyvolaná metoda sethotornotrating() (2) Proxy pak vyvolá metodu invoke() InvocationHandleru. (3) Handlerpak rozhodne, co by měl dělat s požadavkem a možná požadvekpošle RealSubjectu. Zde vyvoláváme původní metodu, která byla vyvolána na proxy.

53 Prohlížení vlastního a cizího beanu Pro zákazníka, který si prohlíží svůj vlastní bean. Pro zákazníka, který si prohlíží bean někoho jiného.

54 import java.lang.reflect.*; public class OwnerInvocationHandler implements InvocationHandler { PersonBean person; // konstruktor public OwnerInvocationHandler(PersonBean person) { this.person = person; public Object invoke(object proxy, Method method, Object[] args) throws IllegalAccessException { try { if (method.getname().startswith("get")) { return method.invoke(person, args); else if (method.getname().equals("sethotornotrating")) { throw new IllegalAccessException(); else if (method.getname().startswith("set")) { return method.invoke(person, args); catch (InvocationTargetException e) { e.printstacktrace(); return null;

55 import java.lang.reflect.*; public class NonOwnerInvocationHandler implements InvocationHandler { private PersonBean person; public NonOwnerInvocationHandler(PersonBean person) { this.person = person; public Object invoke(object proxy, Method method, Object[] args) throws IllegalAccessException { try { if (method.getname().startswith("get")) { return method.invoke(person, args); else if (method.getname().equals("sethotornotrating")) { return method.invoke(person, args); else if (method.getname().startswith("set")) { throw new IllegalAccessException(); catch (InvocationTargetException e) { e.printstacktrace(); return null; Je-li volaná jiná metoda vrací se null

56 PersonBean nonownerproxy = getnonownerproxy(joe); System.out.println("Name is " + nonownerproxy.getname()); try { nonownerproxy.setinterests("bowling, Go"); catch (Exception e) { System.out.println("Can't set interests from non owner proxy"); nonownerproxy.sethotornotrating(3); System.out.println("Rating set from non owner proxy"); System.out.println("Rating is " + nonownerproxy.gethotornotrating()); PersonBean getownerproxy(personbean person) { return (PersonBean) Proxy.newProxyInstance( person.getclass().getclassloader(), person.getclass().getinterfaces(), new OwnerInvocationHandler(person)); PersonBean getnonownerproxy(personbean person) { return (PersonBean) Proxy.newProxyInstance( person.getclass().getclassloader(), person.getclass().getinterfaces(), new NonOwnerInvocationHandler(person));

57 import java.lang.reflect.*; import java.util.*; Databáze 1/2 public class Database { private Hashtable<String, PersonBean> datingdb; public Database() { datingdb = new Hashtable<String, PersonBean>(); initializedatabase(); public Hashtable<String, PersonBean> getdatabase() { return datingdb; public void initializedatabase() { PersonBean joe = new PersonBeanImpl(); joe.setname("joe Javabean"); joe.setinterests("cars, computers, music"); joe.sethotornotrating(7); datingdb.put(joe.getname(), joe); PersonBean kelly = new PersonBeanImpl(); kelly.setname("kelly Klosure"); kelly.setinterests("ebay, movies, music"); kelly.sethotornotrating(6); datingdb.put(kelly.getname(), kelly);

58 2. Vytvoření třídy Proxy a vytvoření instance objektu Proxy Vše, co ještě zbývá, je dynamicky vytvořit proxy třídu a vytvořit instanci proxy objektu. Zapíšeme metodu, která vezme PersonBean (vstupní parametr) a ví, jak pro něj vytvořit owner proxy. Toto proxy postoupí volání metody OwnerInvocationHandleru.

59 Tato metoda vezme objekt person a vrávína něj proxy. Protože má proxy stejné rozhraní, vrací se PersonBean. PersonBean getownerproxy(personbean person) { return (PersonBean) Proxy.newProxyInstance( person.getclass().getclassloader(), person.getclass().getinterfaces(), new OwnerInvocationHandler(person)); třídní metoda newproxyinstancetřídy Proxy parametry: classloader objektu person, a množinu rozhraní, které musí proxy implementovat, a instanci InvocationHandleru do konstruktoru předáme reálný objekt

60 Postup aplikace K vytvoření dynamického proxy je třeba mít seznam rozhraní, která chcete zachytit. Ten se získá následovně: Class[ ] classes = obj.getclass().getinterfaces(); Dále je třeba class loader a třídu, která obsahuje chování, které chcete vykonávat, když váš proxy zachytí volání. Získání class loaderu: ClassLoader classloader = obj.getclass().getclassloader();

61 Postup aplikace Samotný proxy objekt musí být instancí třídy, která implementuje rozhraní InvocationHandler z balíčku java.lang.reflect. Uvedené rozhraní deklaruje následující operaci: public Object invoke(object proxy, Method m, Object[] args) throw Throwable; Po zabalení objektu do dynamického proxy, volání určená pro zabalený objekt jsou přesměrována na operaci invoke(), ve třídě, kterou dodáte.

62 Postup aplikace Váš kód pro metodu invoke() bude potřebovat předat každé volání metody zabalenému objektu. result = m.invoke(obj, args);

63 import java.lang.reflect.*; import java.util.*; Databáze 1/2 public class Database { private Hashtable<String, PersonBean> datingdb; public Database() { datingdb = new Hashtable<String, PersonBean>(); initializedatabase(); public Hashtable<String, PersonBean> getdatabase() { return datingdb; public void initializedatabase() { PersonBean joe = new PersonBeanImpl(); joe.setname("joe Javabean"); joe.setinterests("cars, computers, music"); joe.sethotornotrating(7); datingdb.put(joe.getname(), joe); PersonBean kelly = new PersonBeanImpl(); kelly.setname("kelly Klosure"); kelly.setinterests("ebay, movies, music"); kelly.sethotornotrating(6); datingdb.put(kelly.getname(), kelly);

64 public PersonBean getpersonfromdatabase(string name) { return (PersonBean)datingDB.get(name); Databáze 2/2 public PersonBean getownerproxy(personbean person) { return (PersonBean) Proxy.newProxyInstance( person.getclass().getclassloader(), person.getclass().getinterfaces(), new OwnerInvocationHandler(person)); public PersonBean getnonownerproxy(personbean person) { return (PersonBean) Proxy.newProxyInstance( person.getclass().getclassloader(), person.getclass().getinterfaces(), new NonOwnerInvocationHandler(person));

65 public class ProxyTest { public static void main(string[] args) { Database database = new Database(); Databáze PersonBean joe = database.getpersonfromdatabase("joe Javabean"); PersonBean ownerproxy = database.getownerproxy(joe); System.out.println("Name is " + ownerproxy.getname()); ownerproxy.setinterests("bowling, Go"); System.out.println("Interests set from owner proxy"); try { ownerproxy.sethotornotrating(10); catch (Exception e) { System.out.println("Can't set rating from owner proxy"); System.out.println("Rating is " + ownerproxy.gethotornotrating()); PersonBean nonownerproxy = database.getnonownerproxy(joe); System.out.println("Name is " + nonownerproxy.getname());

66 try { nonownerproxy.setinterests("bowling, Go"); catch (Exception e) { System.out.println("Can't set interests from non owner proxy"); nonownerproxy.sethotornotrating(3); System.out.println("Rating set from non owner proxy"); System.out.println("Rating is " + nonownerproxy.gethotornotrating()); Databáze

67 Name is Joe Javabean Interests set from owner proxy Can't set rating from owner proxy Rating is 7 Name is Joe Javabean Can't set interests from non owner proxy Rating set from non owner proxy Rating is 5

68 Dynamické proxy Proxy je dynamické, protože jeho třída je vytvořena za běhu programu. Proxy je vytvořeno na základě požadavku (množina rozhraní). Naproti tomu InvocationHandlernení proxy, je tom jen takový dispečer, kterého proxy využívá pro zpracování volaných metod. Vytvoření proxy je podle třídní metody: static Proxy.newProxyInstance()

69 Dynamické proxy Třída Proxy má statickou metodu isproxyclass() pro zjišťování zda se jedná o dynamické proxy. Třídní metoda newproxyinstance() vyžaduje Třídní metoda newproxyinstance() vyžaduje pole rozhraní třídy nejsou dovoleny.

70 Závěr Implementace vzoru proxy vytvoří zástupný objekt, který řídí přístup k cílovému objektu. Proxy objekt může izolovat klienty od změn ve stavech požadovaného objektu, jako např. při natahování obrázků vyžadujících delší trvání. Problém proxy způsobuje vyžadovaná pevná vazba mezi zástupným objektem a původním objektem. Dynamické proxy může nabízet využití při zachycování volání cílovému objektu.

71 Shrnutí Kromě vytváření náhrady pro individuální objekty, Proxyje efektivním nástrojem pro přidávání vlastností objektům. Oddělením kódu např. pro trasovánído invokačních ovladačů, usnadní práci vývojářům.

Reflexe. Aplikační programování v Javě (BI-APJ) - 8 Ing. Jiří Daněček Katedra softwarového inženýrství Fakulta informačních technologií ČVUT Praha

Reflexe. Aplikační programování v Javě (BI-APJ) - 8 Ing. Jiří Daněček Katedra softwarového inženýrství Fakulta informačních technologií ČVUT Praha Reflexe Aplikační programování v Javě (BI-APJ) - 8 Ing. Jiří Daněček Katedra softwarového inženýrství Fakulta informačních technologií ČVUT Praha Evropský sociální fond Praha & EU: Investujeme do vaší

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

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

RMI Remote Method Invocation

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

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

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

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

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

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

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

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

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

UJO Framework. revoluční architektura beans. verze 0.80 http://ujoframework.org/

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

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

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

RMI - Distribuované objekty v Javě

RMI - Distribuované objekty v Javě Vysoká škola báňská - Technická univerzita Ostrava 30. března 2009 Osnova Co je to RMI? 1 Co je to RMI? 2 Vnější pohled Vrstvy RMI Stub & Skeletons Layer Remote Reference Layer Transport Layer Pojemnování

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

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

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

Bridge. Známý jako. Účel. Použitelnost. Handle/Body

Bridge. Známý jako. Účel. Použitelnost. Handle/Body Bridge Bridge Známý jako Handle/Body Účel odděluje abstrakci (rozhraní a jeho sémantiku) od její konkrétní implementace předchází zbytečnému nárůstu počtu tříd při přidávání implementací používá se v době

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

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

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

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

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

Základy objektové orientace I. Únor 2010

Základy objektové orientace I. Únor 2010 Seminář Java Základy objektové orientace I Radek Kočí Fakulta informačních technologií VUT Únor 2010 Radek Kočí Seminář Java Základy OO (1) 1/ 20 Téma přednášky Charakteristika objektově orientovaných

Více

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

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

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

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

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

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

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

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

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

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

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

JAVA. Reflection API

JAVA. Reflection API JAVA Reflection API 1 Přehled Reflection Mění strukturu/stav objektů Introspection Zkoumá strukturu objektů obdoba RTTI v C++ ale mnohem silnější umožňuje zjišťování informací o třídách, atributech, metodách

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

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.

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í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

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

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

Programátorská příručka

Programátorská příručka KAPITOLA 1. PROGRAMÁTORSKÁ PŘÍRUČKA Kapitola 1 Programátorská příručka 1.1 Úvod 1.1.1 Technologie Program je psaný v jazyce Java 1.7. GUI je vytvářeno pomocí knihovny SWT. (http://eclipse.org/swt/) Pro

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

Návrhové vzory OMO, LS 2014/2015

Návrhové vzory OMO, LS 2014/2015 Návrhové vzory OMO, LS 2014/2015 Motivace Cílem objektového návrhu je strukturu aplikace navrhnout tak, aby splňovala následující kritéria: snadná rozšiřitelnost účelnost testovatelnost dokumentovatelnost

Více

Třídy, polymorfismus. A0B36PR2-Programování 2 Fakulta elektrotechnická České vysoké učení technické

Třídy, polymorfismus. A0B36PR2-Programování 2 Fakulta elektrotechnická České vysoké učení technické Třídy, polymorfismus A0B36PR2-Programování 2 Fakulta elektrotechnická České vysoké učení technické Polymorfizmus ~ vícetvarost Polymorfizmus základní vlastnost objektového přístupu základní princip polymorfismu:

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

7. Dynamické datové struktury

7. Dynamické datové struktury 7. Dynamické datové struktury Java poskytuje několik možností pro uložení většího množství dat (tj. objektů či primitivních datových typů) v paměti. S nejjednodušší z nich, s polem, jsme se již seznámili.

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

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

Datové struktury. Obsah přednášky: Definice pojmů. Abstraktní datové typy a jejich implementace. Algoritmizace (Y36ALG), Šumperk - 12.

Datové struktury. Obsah přednášky: Definice pojmů. Abstraktní datové typy a jejich implementace. Algoritmizace (Y36ALG), Šumperk - 12. Obsah přednášky: Definice pojmů o datový typ, o abstraktní datový typ Datové struktury Abstraktní datové typy a jejich implementace o Fronta (Queue) o Zásobník (Stack) o Množina (Set) Algoritmizace (Y36ALG),

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

Parametrizované třídy Generics generické třídy. JDK zavádí mimo jiné tzv. parametrizované třídy - generics

Parametrizované třídy Generics generické třídy. JDK zavádí mimo jiné tzv. parametrizované třídy - generics 1 Parametrizované třídy Generics generické třídy JDK zavádí mimo jiné tzv. parametrizované třídy - generics Úvod 2 podobnost se šablonami (templates) z C++ nejčastěji použité v oblasti knihoven kontejnerového

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

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

Seminář Java IV p.1/38

Seminář Java IV p.1/38 Seminář Java IV Seminář Java IV p.1/38 Rekapitulace Deklarace tříd Proměnné, metody, konstruktory, modifikátory přístupu Datové typy primitivní, objektové, pole Dědičnost Řídící konstrukce Podmínky, cykly

Více

1. Dědičnost a polymorfismus

1. Dědičnost a polymorfismus 1. Dědičnost a polymorfismus Cíl látky Cílem této kapitoly je představit klíčové pojmy dědičnosti a polymorfismu. Předtím však je nutné se seznámit se základními pojmy zobecnění neboli generalizace. Komentář

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

Čipové karty Lekařská informatika

Č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

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

Zapouzdření. Tomáš Pitner, upravil Marek Šabo

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

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

Využití OOP v praxi -- Knihovna PHP -- Interval.cz

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í

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

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

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

Ú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

Webové služby a XML. Obsah přednášky. Co jsou to webové služby. Co jsou to webové služby. Webové služby a XML

Webové služby a XML. Obsah přednášky. Co jsou to webové služby. Co jsou to webové služby. Webové služby a XML Obsah přednášky Webové služby a XML Miroslav Beneš Co jsou to webové služby Architektura webových služeb SOAP SOAP a Java SOAP a PHP SOAP a C# Webové služby a XML 2 Co jsou to webové služby rozhraní k

Více

boolean hasnext() Object next() void remove() Kolekce

boolean hasnext() Object next() void remove() Kolekce 11. Kontejnery Kontejnery Kontejnery jako základní dynamické struktury v Javě Kolekce, iterátory (Collection, Iterator) Seznamy (rozhraní List, třídy ArrayList, LinkedList) Množiny (rozhraní Set, třída

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

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

Stream API. Petr Krajča. Základy programovaní 4 (Java) Katedra informatiky Univerzita Palackého v Olomouci

Stream API. Petr Krajča. Základy programovaní 4 (Java) Katedra informatiky Univerzita Palackého v Olomouci Základy programovaní 4 (Java) Stream API Petr Krajča Katedra informatiky Univerzita Palackého v Olomouci Petr Krajča (UP) KMI/ZP4JV 5. listopad, 2014 1 / 10 Stream API Java 8 nový přístup k práci s kolekcemi

Více

PREPROCESOR POKRAČOVÁNÍ

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,

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

OOPR_05. Případové studie

OOPR_05. Případové studie OOPR_05 Případové studie 1 Přehled probírané látky příklad skládání objektů - čára příklad skládání objektů kompozice a agregace přetížené konstruktory pole jako datový atribut 2 Grafický objekt - čára

Více

IRAE 07/08 Přednáška č. 2. atr1 atr2. atr1 atr2 -33

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

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

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

Generické typy. Podrobněji: The Java Language Specification ( Third Edition ) , 18

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í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

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

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

Java a Caché IV: Manipulace s objekty

Java a Caché IV: Manipulace s objekty 1 z 6 11.1.2007 11:13 přihlašovací jméno heslo Registrace Přihlásit články odkazy aktuality CZJUG konference o portálu přidejte se o nás Vyhledávání Text: najdi Oborový filtr J2ME J2SE J2EE Enterprise

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

3. Je defenzivní programování technikou skrývání implementace? Vyberte jednu z nabízených možností: Pravda Nepravda

3. Je defenzivní programování technikou skrývání implementace? Vyberte jednu z nabízených možností: Pravda Nepravda 1. Lze vždy z tzv. instanční třídy vytvořit objekt? 2. Co je nejčastější příčinou vzniku chyb? A. Specifikace B. Testování C. Návrh D. Analýza E. Kódování 3. Je defenzivní programování technikou skrývání

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

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

public static void main(string[] args) { System.out.println(new Main().getClass().getAnnotation(Greet.class).text());

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

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

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

Vláknové programování část V

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

Více

Třídy. Instance. Pokud tento program spustíme, vypíše následující. car1 má barvu Red. car2 má barvu Red. car1 má barvu Blue.

Třídy. Instance. Pokud tento program spustíme, vypíše následující. car1 má barvu Red. car2 má barvu Red. car1 má barvu Blue. 23. Třídy, generické třídy, instance, skládání, statické metody a proměnné. Zapouzdření, konstruktory, konzistence objektu, zpřístupnění vnitřní implementace, modifikátory public a private. Polymorfismus,

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

Semin aˇr Java N avrhov e vzory Radek Ko ˇc ı Fakulta informaˇcn ıch technologi ı VUT Duben 2009 Radek Koˇc ı Semin aˇr Java N avrhov e vzory 1/ 25

Semin aˇr Java N avrhov e vzory Radek Ko ˇc ı Fakulta informaˇcn ıch technologi ı VUT Duben 2009 Radek Koˇc ı Semin aˇr Java N avrhov e vzory 1/ 25 Seminář Java Návrhové vzory Radek Kočí Fakulta informačních technologií VUT Duben 2009 Radek Kočí Seminář Java Návrhové vzory 1/ 25 Znovupoužitelnost Dědičnost implementace třídy pomocí jiné (již existující)

Více

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. 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

Více

Quo vadis programování? Automatizace vyhodnocování studentských úloh

Quo vadis programování? Automatizace vyhodnocování studentských úloh Vaše jistota na trhu IT Quo vadis programování? Automatizace vyhodnocování studentských úloh Rudolf PECINOVSKÝ rudolf@pecinovsky.cz Vladimír Oraný vladimir.orany@gmail.com Vaše jistota na trhu IT Obsah

Více

Algoritmizace a programování. Terminálový vstup a výstup

Algoritmizace a programování. Terminálový vstup a výstup Algoritmizace a programování Terminálový vstup a výstup Verze pro akademický rok 2012/2013 1 Výpis hodnot Terminálový vstup a výstup budeme používat jako základní způsob interakce programu s uživatelem

Více