Reflexe_03. Používání dynamického proxy
|
|
- Petra Čechová
- před 5 lety
- Počet zobrazení:
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 Evropský sociální fond Praha & EU: Investujeme do vaší
Více14.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íceMichal 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íceRMI 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íceGenerické 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íceZ. 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íceSoubor 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íceAbstraktní 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ícetypová 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íce1. 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íceVýč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íceTento 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íceUJO 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íce14.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) 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íce8 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íceRMI - 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íceStatické 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íceKTE / 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íceJava 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íce17. 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íceBridge. 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íceSeznamy 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íceClass 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íceMichal 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íceAlgoritmizace 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íceJava - 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íceZá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íce8. 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íceJava 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íceOMO. 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íceVý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íce1. 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íce7. 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íceSemin 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íceDě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ícePŘ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íce11.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íceMichal 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íceJAVA. 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íceVý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íce2) 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ícePočí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íceAlgoritmizace 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íceMichal 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íceProgramá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íceDefinice 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íceNá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íceTří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íceDatové 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íce7. 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íce20. 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íceJava - ř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íceDatové 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íceTeoretické 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íceParametrizované 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 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íce9. 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íceSeminář 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íce1. 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íceVý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 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íceRegulá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íceZapouzdř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íceSOUBORY, 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íceVyuž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íceTextové 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íceProgramová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íce4. 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) 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íceWebové 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íceboolean 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íceIRAE 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íceTŘÍ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íceStream 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ícePREPROCESOR 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íce10. 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íceOOPR_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íceIRAE 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íceMichal 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íceSeminář 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íceGenerické 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íceProgramová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ícePř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íceRemote 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íceJava 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) 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íce3. 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íce29. 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íceVytvář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ícepublic 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íceMichal 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íceProjekty 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íceVlá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íceTří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ícePrincipy 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íceSemin 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ícePokud 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íceQuo 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íceAlgoritmizace 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