SW_06. Reflexe (reflection)

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

Download "SW_06. Reflexe (reflection)"

Transkript

1 SW_06 Reflexe (reflection) 1

2 Úvod Často jsme nuceni řešit problémy, které by reflexe řešila jasněji, stabilněji a přehledněji. Změny v požadavcích na programové vybavení mohou být uskutečněny pouze za podmínky přijetí rozhodnutí a modifikování kódu vycházejícího ze struktury programu. 2 2

3 Jedná se o kroky: Reflexe 1. Přezkoumat strukturu programu a dat 2. Přijmout rozhodnutí na základě přezkoumání. 3. Změnit chování, strukturu nebo data programu na základě přijatého rozhodnutí. Změny musí být provedeny osobou sedící za klávesnicí, místo samotným programem běžícím na počítači. 3 3

4 class HelloWorld { public void printname() { System.out.println( this.getclass().getname()); (new HelloWorld()).printName() HelloWorld x = new HelloWorld(); x.printname(); Poznámky Objekt třídy vytiskne jméno třídy (včetně balíčků). Obsaženy všechny předchozí body. Metoda printname() prozkoumává objekt ohledně jeho třídy. Během toho je provedeno rozhodnutí, co tisknout. Bez zastínění, metoda je aplikovatelná na všechny podtřídy třídy HelloWorld. Metoda printname() je flexibilní, přizpůsobí se třídě, která ji zdědí.

5 Reflection úvod Reflexe (reflection) je schopnost pracovat se třídami (typy) a datovými atributy tříd jako s objekty. Reflection patří mezi adaptivní návrhové vzory. Poskytuje mechanismus pro změnu struktury chování softwarových systémů dynamicky. Podporuje modifikaci základních aspektů jako je typ struktury a mechanismus volání funkcí. 5 5

6 Souvislost s ostatními vzory Reflexe: poskytuje dvou úrovňovou architekturu. základní úroveň (base level) koresponduje s kombinací microkernelu a interních serverů meta úroveň koresponduje s činností externích serverů, protože ty umožňují dynamicky měnit funkcionalitu, podobně jako metaúroveň vzoru ferlexe. 6

7 Reflection úvod Reflexe (reflection) je schopnost pracovat se třídami (typy) a datovými atributy tříd jako s objekty. Reflection patří mezi adaptivní návrhové vzory. Poskytuje mechanismus pro změnu struktury chování softwarových systémů dynamicky. Podporuje modifikaci základních aspektů jako je typ struktury a mechanismus volání funkcí. 7

8 Reflection - úvod Tento vzor dělí aplikaci na dvě části: meta úroveň poskytuje informace o vybraných vlastnostech systému a umožňuje tak, aby si SW uvědomoval sám sebe. základní úroveň obsahující aplikační logiku. Aplikace je vytvořena na meta úrovni (nad meta úrovní). Změny informací v meta úrovni ovlivňují následně chování základní úrovně. 8

9 Úroveň metamodelu, modelu, dat a procesů 9

10 Vztahy mezi modely a metamodely M3 Metametamodel MOF instance of instance of M2 Metamodel M1 Model Čtyřvrstvá hierarchie OMG Vztahy vrstev vyjádřeny pomocí relace instance_of instance of M0 Data 10

11 Kontext: Kontext, problém Budování programových systémů, které apriori podporují svoji vlastní modifikaci. Problém: Programové systémy se vyvíjejí v čase, by měly být otevřené modifikacím na základě změny technologií a požadavků. Pro programové systémy je lepší specifikovat jejich architekturu otevřenou k modifikacím a rozšíření. 11

12 Problém Při řešení problému působí následující síly : Změna software je namáhavá (úmorná), náchylná k chybám a drahá. Softwarové systémy schopné adaptace mají obyčejně složitou vnitřní strukturu. Implementace služeb aplikace je rozšířena na mnoho malých komponent s odlišným vzájemným vztahem. Nevhodné techniky pro akceptování změn systému např. parametrizace, subclassing, copy paste. 12

13 Problém Změny SW mohou mít libovolný rozsah. Mohou být měněny i základní aspekty celého systému. 13

14 Řešení Vytvořit samouvědomující SW (self aware) a učinit některé aspekty této struktury a chování dosažitelnými pro adaptaci a změny. Vede to ke struktuře: meta úroveň a základní úroveň. 14

15 Meta úroveň Meta úroveň poskytuje self-representation programové aplikace a tím poskytuje vědomosti o její vlastní struktuře a chování. Meta objekty zapouzdřují a prezentují informace o programové aplikaci. instanceof «metaclass» java.lang.class instanceof meta level Pes class objects ba se level instanceof fido 15

16 Základní úroveň Základní úroveň definuje aplikační logiku. Implementace používá metaobjekty, aby udržela nezávislé ty aspekty, u kterých je pravděpodobnost změn. Např. komponenty základní úrovně mohou spolu vzájemně komunikovat prostřednictvím metaobjektu, které implementuje konkrétní uživatelsky definovaný mechanismu volání funkcí. Existuje specifikované rozhraní pro manipulaci s metaobjekty. 16

17 Struktura Meta úroveň je složena s množiny metaobjektů. Každý metaobjekt zapouzdřuje vybrané informace o jednotlivých aspektech struktury, chování, nebo stavu základní úrovně. Jsou tři zdroje těchto informací: 1. Informace jsou poskytovány za běhu prostředím systému. 2. Informace mohou být definovány uživatelem anotace. 3. Informace mohou být zjištěny ze základní úrovně za běhu programu aktuální stav výpočtu. 17

18 Struktura Všechny metaobjekty spolu poskytují vlastní reprezentaci (self-representation) aplikace. Meta objekty vytvářejí informace, které jsou jinak dostupné pouze implicitně. Takto jsou explicitně přístupné a modifikovatelné. Např. v distribuovaných systémech mohou existovat metaobjekty, které poskytují informace o fyzickém rozmístění komponent základní úrovně. Poskytují zjištění, zda komunikující partner je lokální nebo globální. 18

19 Reflekce v Javě balíček java.lang.reflect 19

20 import java.lang.reflect.*; public class DumpMethods { public static void main(string args[]) { try { Class c = Class.forName(args[0]); Method m[] = c.getdeclaredmethods(); for (int i = 0; i < m.length; i++) System.out.println(m[i].toString()); catch (Throwable e) { System.err.println(e); Poznámky Výpis metod třídy java.util.stack Spuštění s jedním argumentem: java DumpMethods java.util.stack c je classobject (objekt třídy) Spou pouštění: java DumpMethods java.util.stack public synchronized java.lang.object java.util.stack.pop() public java.lang.object java.util.stack.push(java.lang.object) public boolean java.util.stack.empty() public synchronized java.lang.object java.util.stack.peek() public synchronized int java.util.stack.search(java.lang.object) 20

21 Využití reflexe v Javě Nastavení používání reflexe Tři kroku vedoucí k využití balíčku java.lang.reflect. 1. Získat class objekt java.lang.class, se kterým se bude manipulovat. java.lang.class se používá k reprezentaci tříd a rozhraní v běžícím javovském programu. Jednou z možností získání objektu třídy je: Class c = Class.forName("java.lang.String"); získá se Class object pro řetězce Jiný způsob: Class c = int.class; // or Class c = Integer.TYPE; 21

22 Využití reflexe v Javě to vede k získání informací o základních typech. 2. Druhým krokem je zavolat metodu např. getdeclaredmethods(), k získání seznamu všech metod deklarovaných ve třídě. 22

23 Využití reflexe v Javě 3. Po té co jsou informace k dispozici, je třetím krokem využití API reflexe k manipulaci s informacemi. Např. sekvence příkazů: Class c = Class.forName("java.lang.String"); Method m[] = c.getdeclaredmethods(); System.out.println(m[0].toString()); Zobrazí textově první informaci uvedenou v řetězci. 23

24 Reflexe v hierarchii tříd Javy Objekt fido je instance od třídy Pes. Třída Pes je instance od třídy Class. Třída Class je instancí třídy Class. Třída Class je metatřída, protože její instance jsou třídy. 24

25 Reflexe v hierarchii tříd Javy Třída Object nejvyšší třída v hierarchii, metaclasses jsou podtřídami třídy Object. 1. To znamená, že metody třídy Object jsou součástí API reflexe. 25

26 Reflexe v hierarchii tříd Javy 2. Všechny javovské třídy jsou instancemi od jedné metatřídy Class. Tyto dvě podmínky vytvářejí cyklus v diagramu. Class.class.isInstance(Object.class); Object.class.isAssignableFrom(Class.class); 26

27 Reflexe v hierarchii tříd Javy V Javě má každý objekt jednu třídu, která vytváří instance a všechny třídy jsou podtřídami třídy Object. Třída Object je částí API reflexe. Všechny metatřídy jsou podtřídami třídy Object. Každá z metod reflexe může být používaná v reflektivním programování. 27

28 package prvni; class A { public class Instance1 { public static void main(string args[]) { try { Class cls = Class.forName( prvni.a"); boolean b1 = cls.isinstance(new Integer(37)); System.out.println(b1); boolean b2 = cls.isinstance(new prvni.a()); System.out.println(b2); catch (Throwable e) { System.err.println(e); Poznámky Simulace operátoru instanceof() názvy balíčků se musí také uvádět Výpis: false true 28

29 import java.lang.reflect.*; public class Method1 { private int f1( Object p, int x) throws NullPointerException { if (p == null) throw new NullPointerException(); return x; Poznámky Vyhledání metod dané třídy 1/2 public static void main(string args[]) { try { // Class cls = Class.forName( Method1"); Method1 method1 = new Method1(); Class cls = method1.getclass(); Method methlist[] = cls.getdeclaredmethods(); for (int i = 0; i < methlist.length; i++) { Method m = methlist[i]; System.out.println("name = " + m.getname()); System.out.println("decl class = " + m.getdeclaringclass()); Class pvec[] = m.getparametertypes(); for (int j = 0; j < pvec.length; j++) System.out.println(" param #" + j + " " + pvec[j]); 29

30 Class evec[] = m.getexceptiontypes(); for (int j = 0; j < evec.length; j++) System.out.println("exc #" + j + " " + evec[j]); System.out.println("return type = " + m.getreturntype()); System.out.println("-----"); catch (Throwable e) { System.err.println(e); Poznámky Vyhledání metod dané třídy 2/2 name = f1 decl class = class Method1 param #0 class java.lang.object param #1 int exc #0 class java.lang.nullpointerexception return type = int name = main decl class = class Method1 param #0 class [Ljava.lang.String; return type = void

31 import java.lang.reflect.*; public class Field1 { private double d; public static final int i = 37; String s = "testing"; Poznámky Informace o datových atributech public static void main(string args[]) { try { // Class cls = Class.forName( Field1"); Field1 field1 = new Field1(); Class cls = field1.getclass(); Field fieldlist[] = cls.getdeclaredfields(); for (int i= 0; i < fieldlist.length; i++) { Field fld = fieldlist[i]; System.out.println("name = " + fld.getname()); System.out.println("decl class = " + fld.getdeclaringclass()); System.out.println("type = " + fld.gettype()); int mod = fld.getmodifiers(); 31

32 System.out.println("modifiers = " + Modifier.toString(mod)); System.out.println("-----"); catch (Throwable e) { System.err.println(e); Poznámky Informace o datových atributech name = d decl class = class Field1 type = double modifiers = private name = i decl class = class field1 type = int modifiers = public static final name = s decl class = class field1 type = class java.lang.string modifiers =

33 Volání (exekuce) metody podle jména Program chce vyvolat metodu add(), ale neví to, až do doby běhu programu. To znamená, že jméno metody je určeno až za běhu programu viz, následující program. metoda getmethod() se používá k nalezení metody ve třídě, která má dva integer parametry a odpovídající jméno. po jejím nalezení je přiřazena do objektu Method k vyvolání metody se musí vytvořit seznam parametrů s odpovídajícími integer hodnotami. 33

34 import java.lang.reflect.*; public class Method2 { public int add(int a, int b) { return a + b; public static void main(string args[]) { try { Method2 method2 = new Method2(); Class cls = method2.getclass(); Class partypes[] = new Class[2]; partypes[0] = Integer.TYPE; // deklarace partypes[1] = Integer.TYPE; Method meth = cls.getmethod( "add", partypes); // dana metoda s uvedenymi parametry Method2 methobj = new Method2(); Object arglist[] = new Object[2]; // počet argumentů arglist[0] = new Integer(37); arglist[1] = new Integer(47); Object retobj = meth.invoke(methobj, arglist); Integer retval = (Integer)retobj; System.out.println(retval.intValue()); catch (Throwable e) { System.err.println(e); Poznámky Vyvolání (exekuce) metody podle jména Výpis vrací součet zadaných parametrů: 84 34

35 import java.lang.reflect.*; public class Constructor2 { public Constructor2() { Poznámky Vytváření nových objektů 1/2 public Constructor2(int a, int b) { System.out.println( "a = " + a + " b = " + b); public static void main(string args[]) { try { Class cls = Class.forName( Constructor2"); Class partypes[] = new Class[2]; partypes[0] = Integer.TYPE; partypes[1] = Integer.TYPE; Constructor ct = cls.getconstructor(partypes); 35

36 Object arglist[] = new Object[2]; arglist[0] = new Integer(37); arglist[1] = new Integer(47); Object retobj = ct.newinstance(arglist); catch (Throwable e) { System.err.println(e); Poznámky Vytváření nových objektů 2/2 Výpis a = 37 b = 47 36

37 import java.awt.point; import java.lang.reflect.constructor; public class ShowReflection { Poznámky Využití konstruktorů public static void main(string args[]) { Constructor[] cc = Point.class.getConstructors(); Constructor cons = null; for (int i = 0; i < cc.length; i++){ // kontrolní výpis System.out.println(cc[i].toString()); // celkový výpis if (cc[i].getparametertypes().length == 2) cons = cc[i]; vybere konstruktor se dvěma parametry try { Object obj = cons.newinstance( new Object[] { new Integer(3), new Integer(4) ); System.out.println(obj); catch (Exception e) { System.out.println("Exception: " + e.getmessage()); 37

38 Poznámky Výpisy public java.awt.point(java.awt.point) public java.awt.point(int,int) public java.awt.point() java.awt.point[x=3,y=4] Třída Point má tři konstruktory 38

39 import java.lang.reflect.*; public class Field2 { public double d; public static void main(string args[]) { try { Class cls = Class.forName( Field2"); Field fld = cls.getfield("d"); Field2 f2obj = new Field2(); System.out.println("d = " + f2obj.d); fld.setdouble(f2obj, 12.34); System.out.println("d = " + f2obj.d); catch (Throwable e) { System.err.println(e); Poznámky Změna hodnot datových atributů 39

40 Balíčky v Javě java.lang.class a java.lang.reflect poskytují programové konstrukce pro získání běhových (run-time) reflektivních informací o třídách a objektech informace typu: nadtřída a její datové typy rozhraní nadtřídy 40

41 Testování serializovatelnosti Testing for Serializability příklad testuje, zda třída objektu, nebo libovolná nadtřída implementovala rozhraní Serializable pomocná třída má pouze statickou metodu isserializable() SerializableTester.isSerializable( java.util.calendar.getinstance()); SerializableTester.isSerializable( new Object()); 41

42 import java.io.serializable; public class SerializableTester { private static final String serial = "java.io.serializable"; public static boolean isserializable( Object obj ) { if ( obj == null ) return false; Class c = obj.getclass(); do { Class[ ] ifaces = c.getinterfaces(); for ( int i = 0; i < ifaces.length; i++ ) if ( serial.equals( ifaces[ i ].getname() ) ) return true; c = c.getsuperclass(); while ( c!= null ); // cykluj, dokud trida je Object return false; Poznámky Metoda getclass() deklarovaná ve třídě Object metoda getinterface() vrací pole rozhraní metoda getsuperclass() vrací nadtřídu 42

43 public class SerializableTest { public static void main(string[] args) { boolean q = SerializableTester.isSerializable( java.util.calendar.getinstance()); if(q) System.out.println("Calendar je serializovatelny"); else System.out.println("Calendar neni serializovatelny"); Poznámky q = SerializableTester.isSerializable(new Object()); if(q) System.out.println("Object je serializovatelny"); else System.out.println("Object neni serializovatelny"); Výpis Calendar je serializovatelný Object není serializovatelný 43

44 Získání běhových informací (run-time) Předpoklad: aplikace nahraje třídu a potřebuje získat informace o třídě java.lang.reflect obsahuje třídy jako: Constructor, Field, Modifier třída ClassInfo očekává jména tříd jako argumenty příkazů DiningPhilosophers Philosopher Philosopher je další třída 44

45 Získání běhových informací Class c = Class.forName(s); Program určí modifikátory třídy (public ), určí, zda se jedná o třídu nebo rozhraní. Program vyvolá metody getdeclaredconstructors() a getdeclaredmethods() a dostane seznamy konstruktorů a metod deklarovaných ve třídě, spolu s jejich atributy, typy argumentů a výjimkami, které mohou být vyhozeny. Program vypíše seznam atributů dané třídy. 45

46 import java.lang.reflect.*; public class ClassInfo { private static String indent = " "; public static void main( String[ ] args ) throws ClassNotFoundException { if ( args.length < 1 ) return; // exit if no classes given for ( int i = 0; i < args.length; i++ ) { new ClassInfo().printInfo( args[ i ] ); System.out.println(); private void printinfo( String s ) throws ClassNotFoundException { Class c = Class.forName( s ); String modifiers = stringifymodifiers( c.getmodifiers() ); String name = c.getname(); if ( c.isinterface() ) System.out.print( modifiers + name ); else System.out.print( modifiers + " class " + name + " extends " + c.getsuperclass().getname() ); Class[ ] interfaces = c.getinterfaces(); if ( interfaces!= null && interfaces.length > 0 ) { if ( c.isinterface() ) System.out.print( " extends " ); else System.out.print( " implements " ); for ( int i = 0; i < interfaces.length; i++ ) { if ( i > 0 ) System.out.print( ", " ); System.out.print( interfaces[ i ].getname() ); Poznámky Parametr třída DiningPhils 46

47 System.out.println( " {" ); System.out.println( indent + "// Constructors" ); Constructor[ ] constructors = c.getdeclaredconstructors(); for ( int i = 0; i < constructors.length; i++ ) printmethod( constructors[ i ] ); System.out.println( indent + "// Other methods " ); Method[ ] methods = c.getdeclaredmethods(); for ( int i = 0; i < methods.length; i++ ) printmethod( methods[ i ] ); System.out.println( indent + "// Fields " ); Field[ ] fields = c.getdeclaredfields(); if ( fields!= null ) for ( int i = 0; i < fields.length; i++ ) printfield( fields[ i ] ); System.out.println( "" ); //end of printinfo method Poznámky private void printmethod( Member m ) { Class rt = null; Class[ ] params, exceptions; if ( m instanceof Method ) { // nonconstructor method Method method = (Method) m; rt = method.getreturntype(); params = method.getparametertypes(); exceptions = method.getexceptiontypes(); 47

48 else { // a constructor Constructor c = (Constructor) m; params = c.getparametertypes(); exceptions = c.getexceptiontypes(); System.out.print( indent + stringifymodifiers( m.getmodifiers() ) + " " + (( rt!= null )? gettypename( rt ) + " " : "" ) + m.getname() + "( " ); for ( int i = 0; i < params.length; i++ ) { if ( i > 0 ) System.out.print( ", " ); System.out.print( gettypename( params[ i ] ) ); if ( params.length > 0 ) System.out.print( " )" ); // at least 1 param else System.out.print( ")" ); // no params if ( exceptions.length > 0 ) System.out.print( " throws" ); for ( int i = 0; i < exceptions.length; i++ ) { if ( i > 0 ) System.out.print( ", " ); System.out.print( gettypename( exceptions[ i ] ) ); System.out.println( ";" ); Poznámky 48

49 //*** printmethod private void printfield( Field f ) { System.out.println( indent + stringifymodifiers( f.getmodifiers() ) + " " + gettypename( f.gettype() ) + " " + f.getname() + ";" ); Poznámky private String stringifymodifiers( int i ) { return (i == 0)? "" : Modifier.toString( i ); private String gettypename( Class c ) { String b = ""; while( c.isarray() ) { b += "[ ]"; c = c.getcomponenttype(); return c.getname() + b; 49

50 reflection.diningphils public class reflection.diningphils extends java.lang.object { // Constructors public reflection.diningphils( ); // Other methods public static void main( java.lang.string[ ] ); private void init( int ); public int getcount( ); public boolean getchopstick( int ); public void setchopstick( int, boolean ); private void initphils( ); public void dumpstatus( ); public int generatetimeslice( ); private boolean moretostart( ); // Fields private int n; private reflection.philosopher[ ] phils; private boolean[ ] chops; private java.util.random r; private static final int maxphils; private static final int maxeat; private static final int mineat; Výpisy Poznámky 50

51 reflection.philosopher class reflection.philosopher extends java.lang.thread { // Constructors public reflection.philosopher( reflection.diningphils, int ); // Other methods public void run( ); public void settimeslice( int ); public boolean geteat( ); public boolean chopsticksfree( ); public void setleftchopstick( boolean ); public void setrightchopstick( boolean ); private void releasechopsticks( ); private synchronized void grabchopsticks( ); private void eat( ); private void think( ); private void takechopsticks( ); private void seteat( boolean ); private void pause( ); // Fields private reflection.diningphils host; private boolean iseating; private int index; private int ts; Výpisy Poznámky 51

52 package reflection; import java.util.random; public class DiningPhils { private int n; private Philosopher[ ] phils; private boolean[ ] chops; private Random r; private static final int maxphils = 24; private static final int maxeat = 4; // seconds private static final int mineat = 1; // seconds Výpisy Poznámky Třída DiningPhils public int getcount() { return n; public boolean getchopstick( int i ) { return chops[ i ]; public void setchopstick( int i, boolean v ) { chops[ i ] = v; private void init( final int N ) { r = new Random(); n = (N < 0 N > maxphils)? maxphils : N; chops = new boolean[ n ]; phils = new Philosopher[ n ]; initphils(); dumpstatus(); 52

53 //*** Create phil threads and start them in random order. private void initphils() { for ( int i = 0; i < n; i++ ) { phils[ i ] = new Philosopher( this, i ); phils[ i ].settimeslice( generatetimeslice() ); phils[ i ].setpriority( Thread.NORM_PRIORITY - 1 ); while ( moretostart() ) { int i = Math.abs( r.nextint() ) % n; if (!phils[ i ].isalive() ) { System.out.println( "### Philosopher " + String.valueOf( i ) + " started." ); phils[ i ].start(); System.out.println( "\nphilosophers Chopsticks" + "\n(1 = eating 0 = thinking) (1 = taken 0 = free)" ); private boolean moretostart() { for ( int i = 0; i < phils.length; i++ ) if (!phils[ i ].isalive() ) return true; return false; Výpisy Poznámky Třída DiningPhils 53

54 public int generatetimeslice() { int ts = Math.abs( r.nextint() ) % (maxeat + 1); if ( ts == 0 ) ts = mineat; return ts; public void dumpstatus() { for ( int i = 0; i < n; i++ ) System.out.print( (phils[ i ].geteat())? 1 : 0 ); for ( int i = n; i < maxphils + 4; i++ ) System.out.print( " " ); for ( int i = 0; i < n; i++ ) System.out.print( (chops[ i ])? 1 : 0 ); System.out.println(); Výpisy Poznámky Třída DiningPhils public static void main( String[ ] args ) { if ( args.length < 1 ) { System.err.println( "DiningPhils <# of philosophers>" ); System.exit( -1 ); DiningPhils self = new DiningPhils(); self.init( Integer.parseInt( args[ 0 ] ) ); 54

55 class Philosopher extends Thread { private DiningPhils host; private boolean iseating; private int index; private int ts; public Philosopher( DiningPhils HOST, int i ) { host = HOST; index = i; public void settimeslice( int TS ) { ts = TS; public boolean chopsticksfree() { return!host.getchopstick( index ) &&!host.getchopstick( (index + 1) % host.getcount() ); public void setleftchopstick( boolean flag ) { host.setchopstick( index, flag ); public void setrightchopstick( boolean flag ) { host.setchopstick( (index + 1) % host.getcount(), flag ); private void releasechopsticks() { host.setchopstick( index, false ); host.setchopstick( (index + 1) % host.getcount(), false ); Výpisy Poznámky Třída Philosopher 55

56 public void run() { while ( true ) { grabchopsticks(); eat(); think(); private synchronized void grabchopsticks() { while (!chopsticksfree() ) try { wait(); catch( InterruptedException e ) { takechopsticks(); notifyall(); private void takechopsticks() { setleftchopstick( true ); setrightchopstick( true ); seteat( true ); host.dumpstatus(); private void eat() { pause(); seteat( false ); releasechopsticks(); private void think() { pause(); Výpisy Poznámky Třída Philosopher 56

57 private void pause() { settimeslice( host.generatetimeslice() ); try { sleep( ts * 1000 ); catch ( InterruptedException e ) { private void seteat( boolean f ) { iseating = f; public boolean geteat() { return iseating; Výpisy Poznámky Třída Philosopher 57

APNVZ_4 Adaptivní návrhové vzory. Microkernel Reflexe (reflection)

APNVZ_4 Adaptivní návrhové vzory. Microkernel Reflexe (reflection) APNVZ_4 Adaptivní návrhové vzory Microkernel Reflexe (reflection) 1 Microkernel - úvod Microkernel se používá pro programové systémy, které musí být schopné se adaptovat na měnící se požadavky systému.

Více

Úvod. Často jsme nuceni řešit problémy, které by reflexe řešila jasněji, stabilněji a přehledněji. Změny v požadavcích na programové vybavení

Úvod. Často jsme nuceni řešit problémy, které by reflexe řešila jasněji, stabilněji a přehledněji. Změny v požadavcích na programové vybavení Reflexe_01 Úvod Často jsme nuceni řešit problémy, které by reflexe řešila jasněji, stabilněji a přehledněji. Změny v požadavcích na programové vybavení mohou být uskutečněny pouze za podmínky přijetí rozhodnutí

Více

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

Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007 Úvod do programovacích jazyků (Java) Michal Krátký Katedra informatiky VŠB Technická univerzita Ostrava Úvod do programovacích jazyků (Java), 2006/2007 c 2006 Michal Krátký Úvod do programovacích jazyků

Více

Úvod do programovacích jazyků (Java)

Úvod do programovacích jazyků (Java) Úvod do programovacích jazyků (Java) Michal Krátký Katedra informatiky VŠB Technická univerzita Ostrava Úvod do programovacích jazyků (Java), 2007/2008 c 2006 2008 Michal Krátký Úvod do programovacích

Více

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

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

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

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

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

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

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

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

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

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

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

Ú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

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

Distribuované systémy a výpočty

Distribuované systémy a výpočty Distribuované systémy a výpočty X36DSV Jan Janeček Peter Macejko CORBA Common Object Request Broker Architecture - konsorcium OMG (Object Management Group) - standard pro podporu komunikace v DS - pouze

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

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

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

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

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

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

Příklad aplikace Klient/Server s Boss/Worker modelem (informativní)

Příklad aplikace Klient/Server s Boss/Worker modelem (informativní) Příklad aplikace Klient/Server s Boss/Worker modelem (informativní) Jan Faigl Katedra počítačů Fakulta elektrotechnická České vysoké učení technické v Praze A0B36PR2 Programování 2 Jan Faigl, 2015 A0B36PR2

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

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

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

Více

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

Reflexe RTTI Runtime Type Identification

Reflexe RTTI Runtime Type Identification Vaše jistota na trhu IT Reflexe RTTI Runtime Type Identification Rudolf PECINOVSKÝ rudolf@pecinovsky.cz Vaše jistota na trhu IT Opakování Shrnutí či téma Co je to reflexe/rtti Termínem Reflexe označujeme

Více

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

Reflexe_03. Používání dynamického proxy Reflexe_03 Používání dynamického proxy 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 Úvod Ukrývání

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

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

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

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

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

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

Vlákno odlehčený proces kód vlákna, zásobník privátní ostatní sdíleno s dalšími vlákny téhož procesu

Vlákno odlehčený proces kód vlákna, zásobník privátní ostatní sdíleno s dalšími vlákny téhož procesu Procesy, vlákna Vlákno odlehčený proces kód vlákna, zásobník privátní ostatní sdíleno s dalšími vlákny téhož procesu Implementace vláken one-to-one o implementace na úrovni jádra o každé vlákno je pro

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

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

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

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

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

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

Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007 Úvod do programovacích jazyků (Java) Michal Krátký Katedra informatiky VŠB Technická univerzita Ostrava Úvod do programovacích jazyků (Java), 2006/2007 c 2006 Michal Krátký Úvod do programovacích jazyků

Více

Úvod do programovacích jazyků (Java)

Úvod do programovacích jazyků (Java) Úvod do programovacích jazyků (Java) Michal Krátký Katedra informatiky VŠB Technická univerzita Ostrava Úvod do programovacích jazyků (Java), 2007/2008 c 2006 2008 Michal Krátký Úvod do programovacích

Více

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

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

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

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

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

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

Více

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

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

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

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

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

Java Řetězce Java, zimní semestr

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

Více

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

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

Reflexe_02. Přístup k datovým atributům třídy pomocí reflexe

Reflexe_02. Přístup k datovým atributům třídy pomocí reflexe Reflexe_02 Přístup k datovým atributům třídy pomocí reflexe Přístup k datovým atributům třídy pomocí reflexe využití prozkoumání rozhraní, prozkoumání datových atributů, přístup a modifikace datových atributů,

Více

Vlákna. První jednoduchý program s vlákny:

Vlákna. První jednoduchý program s vlákny: Vlákna Současné operační systémy jsou víceúlohové. Z uživatelského pohledu se zdá, že běží několik úloh zároveň. Je tedy možné napsat i jeden program tak, aby v něm běželo vedle sebe několik relativně

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

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

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

Více

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

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 popište stav paměti

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

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

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

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

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

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

Více

7. Datové typy v Javě

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

Více

7 Jazyk UML (Unified Modeling Language)

7 Jazyk UML (Unified Modeling Language) 7 Jazyk UML (Unified Modeling Language) 7.1 Základní charakteristika jazyka Motivace - vznik řady OO metod a metodologií (konec 80. let a první polovina 90.let) podobné notace vyjadřující totéž, komplikující

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

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

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

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

public class Karel { private int position; public boolean issmiling; public int getposition() { return position;

public class Karel { private int position; public boolean issmiling; public int getposition() { return position; Objekty, třídy a hierarchie tříd Interface a abstraktní třídy Dědičnost Message passing Class diagramy a příklady systémů modelovaných pomocí OOP Volba správného přístupu Rozdíl mezi asociací, agregací

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

Datové struktury obsah přednášky 1. Úvod 2. Třídy Type-wrapper (obalový typ) pro primitivní typy automatické převody 3. Automatické převody mezi

Datové struktury obsah přednášky 1. Úvod 2. Třídy Type-wrapper (obalový typ) pro primitivní typy automatické převody 3. Automatické převody mezi OOPR_11 1 Datové struktury obsah přednášky 1. Úvod 2. Třídy Type-wrapper (obalový typ) pro primitivní typy automatické převody 3. Automatické převody mezi primitivními a obalovými typy 4. Třídy odkazující

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

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

Distribuované systémy a výpočty

Distribuované systémy a výpočty Distribuované systémy a výpočty X36DSV Jan Janeček XML-RPC jednoduchá definice www.xmlrpc.com implementace obvykle opřené o XML parser X36DSV - Distribuované systémy a výpočty (3) 2 XML-RPC jednoduché

Více

VIII. Seminář Java VIII p.1/36

VIII. Seminář Java VIII p.1/36 Seminář Java VIII Seminář Java VIII p1/36 Rekapitulace Grafické uživatelské rozhraní Swing vs AWT Aplety Aplikační rámec, JApplet spouštení v prohlížeči, Appletviewer Událostní model knihovny Swing události

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

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

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

Více

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

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

Stromy. Příklady. Rekurzivní datové struktury. Základní pojmy

Stromy. Příklady. Rekurzivní datové struktury. Základní pojmy Základní pojmy Stromy 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 Graf uzly hrany orientované / neorientované Souvislý

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

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

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

Podmínky na zápočet. Java, zimní semestr

Podmínky na zápočet. Java, zimní semestr Podmínky na zápočet zápočtový test u počítače zápočtový program "rozumná" velikost téma do 12. 1. 2018 emailem cvičícímu domácí úkoly 225 bodů (max 450) docházka víc než 3 absence 315 bodů 1 Domácí úkoly

Více

7 Jazyk UML (Unified Modeling Language)

7 Jazyk UML (Unified Modeling Language) 7 Jazyk UML (Unified Modeling Language) 7.1 Základní charakteristika jazyka Motivace - vznik řady OO metod a metodologií (konec 80. let a první polovina 90.let) podobné notace vyjadřující totéž, komplikující

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

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

Práce s textem. Třída Character. Třída Character. Třída Character. reprezentuje objekty zapouzdřující hodnotu typu char (boxing / unboxing)

Práce s textem. Třída Character. Třída Character. Třída Character. reprezentuje objekty zapouzdřující hodnotu typu char (boxing / unboxing) Třída Character Práce s textem 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 reprezentuje objekty zapouzdřující hodnotu

Více

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

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

Více

Jazyk C# (seminář 6)

Jazyk C# (seminář 6) Jazyk C# (seminář 6) Pavel Procházka KMI 29. října 2014 Delegát motivace Delegáty a události Jak docílit v C# funkcionální práce s metodami v C je to pomocí pointerů na funkce. Proč to v C# nejde pomocí

Více

int t1, t2, t3, t4, t5, t6, t7, prumer; t1=sys.readint();... t7=sys.readint(); prume pru r = r = ( 1+t 1+t t3+ t3+ t4 t5+ t5+ +t7 +t7 )/ ;

int t1, t2, t3, t4, t5, t6, t7, prumer; t1=sys.readint();... t7=sys.readint(); prume pru r = r = ( 1+t 1+t t3+ t3+ t4 t5+ t5+ +t7 +t7 )/ ; Pole Příklad: přečíst teploty naměřené v jednotlivých dnech týdnu, vypočítat průměrnou teplotu a pro každý den vypsat odchylku od průměrné teploty Řešení s proměnnými typu int: int t1, t2, t3, t4, t5,

Více

Tabulka symbolů. Vazba (binding) Vazba - příklad. Deklarace a definice. Miroslav Beneš Dušan Kolář

Tabulka symbolů. Vazba (binding) Vazba - příklad. Deklarace a definice. Miroslav Beneš Dušan Kolář Vazba (binding) Tabulka symbolů Miroslav Beneš Dušan Kolář vazba = spojení mezi entitou a vlastností okamžik vazby (binding time) při návrhu jazyka při implementaci jazyka během překladu/spojování/zavádění

Více

Vlákna. První jednoduchý program s vlákny:

Vlákna. První jednoduchý program s vlákny: Vlákna Současné operační systémy jsou víceúlohové. Z uživatelského pohledu se zdá, že běží několik úloh zároveň. Jednotlivé úlohy se nazývají procesy nebo také vlákna (tento termín používá i Java). Operační

Více