APNVZ_2. Vzor Model view controller, Observer

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

Download "APNVZ_2. Vzor Model view controller, Observer"

Transkript

1 APNVZ_2 Vzor Model view controller, Observer 1

2 Model-View-Controller MVC vzor architektury dělí interaktivní aplikaci na tři komponenty: Model obsahuje funkcionální jádro a data. Views (pohledy) zobrazují informace uživateli. Controllers (řízení) zpracovávají uživatelský vstup. Views a controllers spolu představují uživatelské rozhraní. Mechanismus šíření změn zabezpečí konzistenci mezi uživatelským rozhraním a modelem. 2

3 Model-View-Controller Kontext: Interaktivní aplikace s pružným rozhraním člověkpočítač. Problém: Uživatelské rozhraní je náchylné ke změnám požadavků. Při rozšíření funkčnosti aplikace je třeba modifikovat menu. I změna nové verze základního OS přináší změny. Klasické budování takového systému je úzce spjaté s funkcionálním jádrem. 3

4 Model-View-Controller Síly ovlivňující řešení: Stejné informace jsou prezentovány v různých oknech. Zobrazení a chování aplikace musí odrážet okamžitou manipulaci s daty. Změny v uživatelském rozhraní by měly být snadné a dokonce možné za běhu aplikace. Podpora různých look and feel standardů nebo portování uživatelského rozhraní by nemělo ovlivnit jádro aplikace. 4

5 Model-View-Controller Řešení: MVC, které dělí aplikaci na zpracování (model), výstupy (views), vstupy (controllers). Komponenta model zapouzdřuje základní data a funkcionalitu. Model je nezávislý na specifikacích vstupního a výstupního chování aplikace. 5

6 Model-View-Controller Komponenta View (pohled) zobrazuje uživateli informace. View dostává data od modelu. Na model může existovat několik pohledů. Každé view má asociovanou komponentu controller. Controllers obdrží událost, ta je přetransformována na požadavek služby pro model nebo view. Uživatel komunikuje se systémem výhradně prostřednictvím controlleru. 6

7 Model-View-Controller Separace komponenty model od komponent view a controller umožňuje násobné pohledy na stejný model. Pokud uživatel změní model prostřednictvím komponenty controller jedné komponenty view, všechny ostatní komponenty view závislé na těchto datech se také změní. Komponenta model proto uvědomuje všechny komponenty view, zda-li se jejich data změnila. Komponenty view na druhou stranu obnovují data z komponenty model a aktualizují 7

8 Model-View-Controller Mechanismus šíření změn udržuje seznam závislých komponent uvnitř modelu. Všechny komponenty view a také vybrané komponenty controller registrují své potřeby být informován o změnách. Změny stavu modelu spouštějí mechanismus šíření změn. Tento mechanismus je reprezentován spojením komponent model s komponentami views a controllers. 8

9 Model-View-Controller Komponenty view představují informace pro uživatele. Různé komponenty views prezentují informace modelu různým způsobem. Každá komponenta view definuje proceduru update, která je aktivována mechanismem šíření změn. Když je zavolána procedura update, komponenta view obnoví hodnoty aktuálních dat z modelu a zobrazí je na obrazovce. 9

10 Model-View-Controller Během inicializace jsou všechny komponenty view asociovány s modelem a registrovány v mechanismu šíření změn. Každá komponenta view vytváří odpovídající komponentu controller. Mezi komponentami view a controller existuje asociace jedna k jedné. 10

11 Základní schéma MVC Observer +update() -callupdate Model -coredata -setofobservers -attach -getdata View +attachobserver() +detachobserver() +notify() +getdata() +service() -attach -mymodel -mycontroller +initialize(model)() +makecontroller() +activate() +display() +update() -create 1 -manipulate display -callservice 1 -mymodel -myview Controller +initialize(model, View)() +handleevent() +update() 11

12 Základní scénář práce MVC Controller Model View handleevent service notify update display getdata update getdata 12

13 Inicializace MVC main program Model View initialize attach makecontroller Controller initialize attach starteventprocessing 13

14 Implementace 1. Oddělení interakce člověk-počítač od jádra funkcionality. 2. Implementace mechanismu šíření změn. 3. Návrh a implementace komponent views. 4. Návrh a implementace komponent controllers. 5. Návrh a implementace vztahu komponent viewcontroller. 14

15 Výhody / nevýhody Výhody Vícenásobné pohledy na stejný model. Synchronizované pohledy. Snadno zaměnitelné komponenty views a controllers. Slabá místa Vzrůstající složitost. Rychle rostoucí počet operací update. Neefektivnost v přístupu k datům v pohledu. 15

16 Aplikace monitorování počasí Manuální MVC - obrázek Humidity sensor Temperature sensor Weather Station pull data WeatherData Object displays Display device Pressure sensor implementation 16

17 public class WeatherData implements Subject { private float temperature; private float humidity; private float pressure; public void measurementschanged() { float temperature = gettemperature(); float humidity = gethumidity(); float pressure = getpressure(); currentconditionsdisplay.update(temperature, humidity, pressure); statisticsdisplay.update(temperature, humidity, pressure); forecastdiaplay.update(temperature, humidity, pressure); Poznámky První návrh WeatherData volání metod zabezpečí aktuální stav aktualizace displejů public float gettemperature() { return temperature; public float gethumidity() { return humidity; public float getpressure() { return pressure; 17

18 public class WeatherData implements Subject { Poznámky private float temperature; private float humidity; private float pressure; Kódováním konkrétní implementace, není možnost přidat, odstranit další zobrazované prvky. První návrh WeatherData public void measurementschanged() { float temperature = gettemperature(); float humidity = gethumidity(); float pressure = getpressure(); Mělo by se společné rozhraní, jedná se vždy o metodu update currentconditionsdisplay.update(temperature, humidity, pressure); statisticsdisplay.update(temperature, humidity, pressure); forecastdiaplay.update(temperature, humidity, pressure); je třeba zapouzdřit 18

19 Publisher + subscriber = Observer Když se změní data v objektu, ti co ho sledují observers pozorovatelé jsou o tom uvědoměni. Publisher publikuje subscriber předplatitel. Dog Object Subject Cat Object Mouse Object 19

20 Publisher + subscriber = Observer Vzor observer definuje relaci one-to-many mezi objektem a množinou (kolekcí objektů). Když se stav objektu změní, jsou uvědoměny všechny objekty množiny (kolekce) závislých objektů. Dog Object Subject Cat Object Mouse Object Duck Object 20

21 Diagram tříd vzor Observer «interface» Subject registerobserver() removeobserver() notifyobservers() observer «interface» Observer update() ConcreteSubject ConcreteObserver registerobserver() removeobserver() notifyobservers() subject update() //other Observer methods 21

22 Síla volné vazby loose coupling Když jsou dva objekty volně spojeny, mohou vzájemně interagovat (vzájemně se ovlivňovat), ale mají o sobě velmi málo vědomostí. Vzor observer poskytuje návrh objektů, kde objekty a observery jsou volně propojeny. Jedinou věc, kterou subjekt ví o observrech je, že implementovaly dané (jisté) rozhraní. Můžeme přidat (odebrat) další observery (pozorovatele) v libovolném čase. 22

23 Síla volné vazby loose coupling Nikdy nebudeme potřebovat modifikovat subjekt, aby přidal nový typ observeru. Změna buď na straně subjektu, nebo observerů neovlivní druhou stranu. 23

24 Návrh Weather Station «interface» Subject registerobserver() removeobserver() notifyobservers() observer «interface» Observer update() «interface» DisplayElement display() ThirdPartyDisplay WeatherData registerobserver() removeobserver() notifyobservers() gettemperature() gethumidity() getpressure() measurementchanged() subject CurrentConditionsDisplay() update() display() {//display current measurements StatisticsDisplay update() display() { // display something else based on measurements ForecastDisplay update() display() { //display the average, min and max measurements update() display() { // display the forecast 24

25 public interface Subject { public void registerobserver(observer o); public void removeobserver(observer o); public void notifyobservers(); Poznámky public interface Observer { public void update(float temp, float humidity, float pressure); public interface DisplayElement { public void display(); 25

26 public class WeatherData implements Subject { private ArrayList observers; private float temperature; private float humidity; private float pressure; Poznámky První návrh WeatherData public WeatherData() { observers = new ArrayList(); public void registerobserver(observer o) { observers.add(o); public void removeobserver(observer o) { int i = observers.indexof(o); if (i >= 0) { observers.remove(i); public void notifyobservers() { for (int i = 0; i < observers.size(); i++) { Observer observer = (Observer)observers.get(i); observer.update(temperature, humidity, pressure); 26

27 public void measurementschanged() { notifyobservers(); Poznámky public void setmeasurements(float temperature, float humidity, float pressure) { this.temperature = temperature; this.humidity = humidity; this.pressure = pressure; measurementschanged(); 27

28 public class CurrentConditionsDisplay implements Observer, DisplayElement{ private float temperature; private float humidity; private Subject weatherdata; // vazba na weatherdata Poznámky // konstruktor public CurrentConditionsDisplay(Subject weatherdata) { this.weatherdata = weatherdata; weatherdata.registerobserver(this); public void update(float temperature, float humidity, float pressure) { this.temperature = temperature; this.humidity = humidity; display(); public void display() { System.out.println("Current conditions: " + temperature + "F degrees and " + humidity + "% humidity"); 28

29 public class WeatherStation { public static void main(string[] args) { WeatherData weatherdata = new WeatherData(); CurrentConditionsDisplay currentdisplay = new CurrentConditionsDisplay(weatherData); Poznámky Implementace Weather Station StatisticsDisplay statisticsdisplay = new StatisticsDisplay(weatherData); ForecastDisplay forecastdisplay = new ForecastDisplay(weatherData); weatherdata.setmeasurements(80, 65, 30.4f); weatherdata.setmeasurements(82, 70, 29.2f); weatherdata.setmeasurements(78, 90, 29.2f); 29

30 Current conditions: 80.0F degrees and 65.0% humidity Avg/Max/Min temperature = 80.0/80.0/80.0 Forecast: Improving weather on the way! Current conditions: 82.0F degrees and 70.0% humidity Avg/Max/Min temperature = 81.0/82.0/80.0 Forecast: Watch out for cooler, rainy weather Current conditions: 78.0F degrees and 90.0% humidity Avg/Max/Min temperature = 80.0/82.0/78.0 Forecast: More of the same Poznámky 30

31 Observer Cílem tohoto návrhového vzoru je definovat závislost one-to-many (jeden k mnoha) mezi objekty Jeden objekt sledovaný (observable); mnoho objektů sledovatelé (observers), závislé objekty Průběh sledování: když se sledovaný objekt změní, jsou o tom informováni všichni sledovatelé - závislé objekty, takže mohou reagovat na změnu. Java v tomto směru poskytuje pro sledovaný objekt třídu java.util.observable. Sledovaný objekt musí být podtřídou této třídy. 31

32 Jak se objekt stane Observrem (objektem, který sleduje) Implementuje rozhraní Observer a zavolá metodu addobserver() pro každý observable objekt. Podobně volá deleteobserver() pro zrušení ze seznamu. 32

33 Sledovaný objekt - observable Daná třída musí být podtřídou třídy Observable. 1. Nejdříve musí zavolat metodu setchanged() k oznámení, že stav sledovaného objektu se změnil. 2. Pak zavolá jednu z metod notifyobservers() notifyobservers() notifyobservers(object arg) 33

34 Pro observery k získání oznámení Implementují metodu update(), jejíž signatura je následující: update(observable o, Object arg); Observable je subjekt, který poslal oznámení je uložen v tomto agrumentu. Object datový objekt, který je předán z metody notityobservers. 34

35 setchanged() { changed = true; notifyobservers(object arg) { if(changed) { for every observer on the list { call update(this.arg) changed = false; Poznámky Co se odehrává za scénou: pseudokód notifyobservers() { notifyobservers(null) 35

36 Použití javovského vestavěného vzoru Observer Observable observer «interface» Observer addobserver() deleteobserver() notifyobservers() setchanged() update() WeatherData gettemperature() gethumidity() getpressure() subject GeneralDisplay update() display() StatisticsDisplay update() display() ForecastDisplay update() display() 36

37 import java.util.observable; import java.util.observer; Poznámky public class WeatherData extends Observable { private float temperature; private float humidity; private float pressure; public WeatherData() { public void measurementschanged() { setchanged(); notifyobservers(); public void setmeasurements(float temperature, float humidity, float pressure) { this.temperature = temperature; this.humidity = humidity; this.pressure = pressure; measurementschanged(); public float gettemperature() { return temperature; // gethumidity(), getpressure() 37

38 import java.util.observable; import java.util.observer; Poznámky public class CurrentConditionsDisplay implements Observer, DisplayElement{ Observable observable; private float temperature; private float humidity; // konstruktor public CurrentConditionsDisplay(Observable observable) { this.observable = observable; observable.addobserver(this); public void update(observable obs, Object arg) { if (obs instanceof WeatherData) { WeatherData weatherdata = (WeatherData)obs; this.temperature = weatherdata.gettemperature(); this.humidity = weatherdata.gethumidity(); display(); public void display() { System.out.println("Current conditions: " + temperature + "F degrees and " + humidity + "% humidity"); 38

39 Observer praktická ukázka Celý návrhový vzor je demonstrován na jednoduché ukázce s jedním účtem a objekty otec a matka (typu Osoba), které na účet přispívají a objekty třídy Student, které z účtu v okamžiku, když tam přijdou peníze, peníze čerpají. V příkladu jsou uvedeni dva studenti, kteří čerpají stejným dílem. Objekt Ucet je deklarovaný jako objekt podtřídy Observable (pozorovaný objekt). Objektu třídy student implementují rozhraní Observer. 39

40 import java.util.observable; public class Ucet extends Observable { private int cislo; private int stav; Poznámky public Ucet() { this(0, 0, null, null); public Ucet(int cislo, int stav, Student s1, Student s2) { this.cislo = cislo; this.stav = stav; addobserver(s1); addobserver(s2); public void vlozeni (int castka) { stav = stav + castka; System.out.printf("Ucet vlozeni: %d stav: %d\n",castka, getstav()); setchanged(); notifyobservers(castka); public void vyber (int castka) { stav = stav - castka; System.out.printf("Ucet vyber: %d zustatek: %d\n",castka,getstav()); 40

41 public int getstav(){ return stav; public String tostring() { String tx = "Cislo uctu: " + cislo + " stav: " + stav; return tx; public void tisk() { System.out.println(this.toString()); public int getcislo(){ return cislo; Poznámky 41

42 public class Osoba { private String jmeno; private String bydliste; Poznámky public Osoba() { this("neuvedeno", ""); public Osoba(String jmeno, String bydliste) { this.jmeno= jmeno; this.bydliste = bydliste; public void setjmeno(string jmeno) { this.jmeno = jmeno; public String getjmeno(){ return jmeno; public void setbydliste(string bydliste) { this.bydliste = bydliste; public String getbydliste() { return bydliste; public String tostring() { return String.format("%5s %s %s %s\n", "Jmeno",getJmeno(), "bydliste:",getbydliste()); public void tiskklienta() { System.out.println(this.toString()); 42

43 public class Rodic extends Osoba{ private Ucet ucet; public Rodic(String jmeno, String bydliste, Ucet u){ super(jmeno, bydliste); ucet = u; Poznámky public void vlozit(int castka){ ucet.vlozeni(castka); System.out.println(getClass().getName()+" vlozil castku: "+castka); 43

44 import java.util.observer; import java.util.observable; public class Student extends Osoba implements Observer{ public Student(String jmeno, String bydliste){ super(jmeno, bydliste); public void update(observable ob, Object castka){ int celkem = ((Ucet)ob).getStav(); int penize; if(celkem<=0)penize = 0; else penize = (Integer)castka /2; ((Ucet)ob).vyber(penize); System.out.println(getClass().getName()+ " vybral castku: " + penize); Poznámky 44

45 public class TestObserver { Poznámky public static void main(string[] args) { Student karel = new Student("Karel","Praha"); Student jarmila = new Student("Jarmila","Olomouc"); Ucet ucet = new Ucet(1, 200, karel, jarmila); Rodic otec = new Rodic("Josef", "Havirov", ucet); Rodic matka = new Rodic("Alena", "Havirov", ucet); otec.vlozit(500); matka.vlozit(1200); 45

46 Grafické uživatelské rozhraní GUI Prvky GUI (tlačítka) jsou observable (sledované, pozorované) položky. V seznamu observerů jsou další objekty, které reagují na skutečnosti, že se s GUI prvky něco stane. Každý z observerů implementuje rozhraní ActionListener a tedy musí implementovat metodu actionperformed(). V té konkrétně specifikuje, co se stane, při dané události. 46

47 import java.awt.*; import java.awt.event.*; import javax.swing.*; import javax.swing.event.*; Poznámky public class SwingObserverExample { JFrame frame; public static void main(string[] args) { SwingObserverExample example = new SwingObserverExample(); example.go(); public void go() { frame = new JFrame(); JButton button = new JButton("Should I do it?"); button.addactionlistener(new AngelListener()); button.addactionlistener(new DevilListener()); frame.getcontentpane().add(borderlayout.center, button); // Set frame properties frame.setdefaultcloseoperation(jframe.exit_on_close); frame.getcontentpane().add(borderlayout.center, button); frame.setsize(300,300); frame.setvisible(true); 47

48 class AngelListener implements ActionListener { public void actionperformed(actionevent event) { System.out.println("Don't do it, you might regret it!"); Poznámky class DevilListener implements ActionListener { public void actionperformed(actionevent event) { System.out.println("Come on, do it!"); 48

49 Slabá místa java.util.observable Observable je třída a ne rozhraní. Třída Subject musí být podtřídou Observable. nemůže přidat další nadtřídu (pouze jedna nadtřída), nemůžeme implementovat metody jako u rozhraní. 49

50 Příklad Bruce Eckela Další příklad, kdy je datový atribut deklarovaný jako vnitřní podtřída třídy Observable nebo kdy je datový atribut jiné třídy deklarovaný jako vnitřní třída implementující rozhraní Observer. 50

51 UML diagram tříd Observable «interface» Observer OpenObserver Flower -onotifier -cnotifier OpenNotifier CloseNotifier Bee +openobserver() +closeobserver() CloseObserver 51

52 // Demonstration of "observer" pattern. import java.util.observable; public class Flower { private boolean isopen; private OpenNotifier onotify = new OpenNotifier(); private CloseNotifier cnotify = new CloseNotifier(); // konstruktor public Flower() { isopen = false; public void open() { // Opens its petals isopen = true; onotify.notifyobservers(); cnotify.open(); public void close() { // Closes its petals isopen = false; cnotify.notifyobservers(); onotify.close(); // sledovani dvou cinnosti public Observable opening() { return onotify; public Observable closing() { return cnotify; Poznámky 52

53 // first observable issue private class OpenNotifier extends Observable { private boolean alreadyopen = false; public void notifyobservers() { if(isopen &&!alreadyopen) { setchanged(); super.notifyobservers(); alreadyopen = true; public void close() { alreadyopen = false; Poznámky // second observable issue private class CloseNotifier extends Observable{ private boolean alreadyclosed = false; public void notifyobservers() { if(!isopen &&!alreadyclosed) { setchanged(); super.notifyobservers(); alreadyclosed = true; public void open() { alreadyclosed = false; 53

54 import java.util.observable; import java.util.observer; public class Bee { private String name; private OpenObserver openobsrv = new OpenObserver(); private CloseObserver closeobsrv = new CloseObserver(); public Bee(String nm) { name = nm; // An inner class for observing openings: private class OpenObserver implements Observer{ public void update(observable ob, Object a) { System.out.println("Bee " + name + "'s breakfast time!"); // Another inner class for closings: private class CloseObserver implements Observer{ public void update(observable ob, Object a) { System.out.println("Bee " + name + "'s bed time!"); Poznámky 54

55 public Observer openobserver() { return openobsrv; public Observer closeobserver() { return closeobsrv; Poznámky 55

56 import java.util.observable; import java.util.observer; public class Hummingbird { private String name; private OpenObserver openobsrv = new OpenObserver(); private CloseObserver closeobsrv = new CloseObserver(); public Hummingbird(String nm) { name = nm; Poznámky // sledovani otevreni private class OpenObserver implements Observer{ public void update(observable ob, Object a) { System.out.println("Hummingbird " + name + "'s breakfast time!"); // sledovani zavreni private class CloseObserver implements Observer{ public void update(observable ob, Object a) { System.out.println("Hummingbird " + name + "'s bed time!"); 56

57 public Observer openobserver() { return openobsrv; Poznámky public Observer closeobserver() { return closeobsrv; 57

58 import java.util.*; Poznámky public class ObservedFlower { public static void main(string args[]) { Flower f = new Flower(); Bee ba = new Bee("BA"), bb = new Bee("BB"); Hummingbird h1 = new Hummingbird("H1"), h2 = new Hummingbird("H2"); // dve sledovane veci na kvetine Observable floweropn = f.opening(); Observable flowercls = f.closing(); // dve vcely Observer bao = ba.openobserver(); Observer bac = ba.closeobserver(); Observer bbo = bb.openobserver(); Observer bbc = bb.closeobserver(); // dva kolibrici Observer h1o = h1.openobserver(); Observer h1c = h1.closeobserver(); Observer h2o = h2.openobserver(); Observer h2c = h2.closeobserver(); 58

59 floweropn.addobserver(bao); floweropn.addobserver(bbo); floweropn.addobserver(h1o); floweropn.addobserver(h2o); Poznámky flowercls.addobserver(bac); flowercls.addobserver(bbc); flowercls.addobserver(h1c); flowercls.addobserver(h2c); // kolibrik h2 jeste spi floweropn.deleteobserver(h2o); f.open(); // vcela bb nechce do postele flowercls.deleteobserver(bbc); f.close(); // rusi vsecny pozorovatele otevreni floweropn.deleteobservers(); System.out.println("Nikdo nesleduje otevreni"); f.open(); f.close(); 59

60 Hummingbird H1's breakfast time! Bee BB's breakfast time! Bee BA's breakfast time! Hummingbird H2's bed time! Hummingbird H1's bed time! Bee BA's bed time! Nikdo nesleduje otevreni Hummingbird H2's bed time! Hummingbird H1's bed time! Bee BA's bed time! Poznámky 60

61 Vzor MVC a web Převažující adaptace tohoto vzoru používá kombinací servletu a technologie JSP (JavaServer Pages) k uchování oddělení modelu, pohledu a kontroleru. 1. Vytvoříte HTTP request, který přijme servlet. Tato operace typicky zahrnuje, že spolu s dotazem budou zaslána data v nějaké formě jako např. uživatelské jméno a heslo. Servlet dostane tato data a syntakticky je analyzuje (parsuje). 61

62 Vzor MVC a web 2. Servlet pracuje jako kontroler a zpracuje váš dotaz většinou jako další (následný) dotaz na model (v tomto případě bean/ databázi). Výsledek zpracování dotazu je obyčejně vytvořen (zformován) do formy JavaBeanu. JavaBean představuje model, protože obsahuje také tzv. business logiku tedy metody pro práci s modelem. Databáze většinou již představuje jen perzistenci vložených objektů, proto nepředstavuje model. 62

63 Vzor MVC a web 3. Kontroler přesouvá řízení na view (pohled). View je reprezentované JSP (JavaServer Pages). Jedinou činností JSP je vytvořit stránku, která představuje pohled modelu (view of model). 4. Tento pohled JSP získá z JavaBeanu, spolu s dalšími příkazy pro řízení nutnými pro další akce. 63

64 Vzor MVC a web 5. Pohled vrací stránku prohlížeči prostřednictvím protokolu HTTP. Stránka je vrácena prohlížeči, kde je zobrazena jako pohled (view). Uživatel pak zadá další požadavek, který je zpracován podobným způsobem. 64

65 Vzor MVC a web 1 HTTP request 2 instanciuje Webový prohlížeč servlet/controller klient HTTP response 5 3 databáze / persisted data jsp/view 4 bean/ model / business logic 65

66 Další využití MVC JList JList Implementuje architekturu delegát - model Deleguje pro ListModels ListModel Definuje metody Registruje/ruší registraci ListDataListener mod ifies JList no tifies ListModel 66

67 // PhilosophersJList.java // MVC architecture using JList with a DefaultListModel import java.awt.*; import java.awt.event.*; import javax.swing.*; public class PhilosophersJList extends JFrame { // model declaration private DefaultListModel philosophers; // view declaration private JList list; Poznámky PhilosophersJList třída DefaultListModel poskytuje základní implementaci rozhraní ListModel // PhilosophersJList constructor public PhilosophersJList() { super( "Favorite Philosophers" ); // create a DefaultListModel to store philosophers philosophers = new DefaultListModel(); philosophers.addelement( "Socrates" ); philosophers.addelement( "Plato" ); philosophers.addelement( "Aristotle" ); philosophers.addelement( "St. Thomas Aquinas" ); philosophers.addelement( "Soren Kierkegaard" ); philosophers.addelement( "Immanuel Kant" ); 67

68 philosophers.addelement( "Friedrich Nietzsche" ); philosophers.addelement( "Hannah Arendt" ); Poznámky // create a JList for philosophers DefaultListModel view list = new JList( philosophers ); // allow user to select only one philosopher at a time list.setselectionmode( ListSelectionModel.SINGLE_SELECTION ); // create JButton for adding philosophers JButton addbutton = new JButton( "Add Philosopher" ); addbutton.addactionlistener( new ActionListener() { public void actionperformed( ActionEvent event ) { // prompt user for new philosopher's name String name = JOptionPane.showInputDialog( PhilosophersJList.this, "Enter Name" ); ); // add new philosopher to model philosophers.addelement( name ); 68

69 // create JButton for removing selected philosopher JButton removebutton = new JButton( "Remove Selected Philosopher" ); Poznámky removebutton.addactionlistener( new ActionListener() { ); public void actionperformed( ActionEvent event ) { // remove selected philosopher from model philosophers.removeelement( list.getselectedvalue() ); // lay out GUI components JPanel inputpanel = new JPanel(); inputpanel.add( addbutton ); inputpanel.add( removebutton ); Container container = getcontentpane(); container.add( list, BorderLayout.CENTER ); container.add( inputpanel, BorderLayout.NORTH ); setdefaultcloseoperation( EXIT_ON_CLOSE ); setsize( 400, 300 ); setvisible( true ); // end PhilosophersJList constructor 69

70 // execute application public static void main( String args[] ) { new PhilosophersJList(); Poznámky 70

71 Poznámky Aplikace PhilosophersJList demonstrující Jlist and DefaultListModel Výstup aplikace 71

72 JTable JTable Implementuje architekturu delegát - model Deleguje pro TableModels TableModel Declaruje metody Obnovuje a modifikuje data mod ifie s JTable notifies TableModel 72

73 JTable Metoda void addtablemodellistener( TableModelListener listener) void removetablemodellistener( TableModelListener listener) Popis Přidá TableModelListener do TableModel, který uvědomuje TableModelListener o změnách v TableModelu Odstraní přidaný TableModelListener z TableModelu Class getcolumnclass( int columnindex ) Vrací objekt Class pro hodnoty ve sloupci specifikovaném columnindex int getcolumncount() String getcolumnname( int columnindex ) int getrowcount() Vrací počet sloupců v TableModelu Vrací jméno sloupce ze zadaného columnindexu Vrací počet rádků v TableModelu 73

74 JTable Metoda Object getvalueat( int rowindex, int columnindex ) void setvalueat( Object value, int rowindex, int columnindex ) Popis Vrací referenci na Object na hodnotu uloženou v TableModelu v daném řádku a sloupci Nastaví hodnotu uloženou v TableModelu v daném řádku a sloupci boolean iscelleditable( int rowindex, int columnindex ) Vrací true, je-li specifikovaná buňka editovatelná 74

75 // PhilosophersJTable.java // MVC architecture using JTable with a DefaultTableModel // Java core packages import java.awt.*; import java.awt.event.*; Poznámky PhilosophersJTable import javax.swing.*; import javax.swing.table.*; public class PhilosophersJTable extends JFrame { // model declaration private DefaultTableModel philosophers; // Jtable declaration private JTable table; // PhilosophersJTable constructor public PhilosophersJTable() { super( "Favorite Philosophers" ); // create a DefaultTableModel to store philosophers philosophers = new DefaultTableModel(); // add Columns to DefaultTableModel philosophers.addcolumn( "First Name" ); philosophers.addcolumn( "Last Name" ); philosophers.addcolumn( "Years" ); 75

76 // add philosopher names and dates to DefaultTableModel String[] socrates = { "Socrates", "", " B.C." ; philosophers.addrow( socrates ); Poznámky String[] plato = { "Plato", "", " B.C." ; philosophers.addrow( plato ); String[] aquinas = { "Thomas", "Aquinas", " " ; philosophers.addrow( aquinas ); String[] kierkegaard = { "Soren", "Kierkegaard", " " ; philosophers.addrow( kierkegaard ); String[] kant = { "Immanuel", "Kant", " " ; philosophers.addrow( kant ); String[] nietzsche = { "Friedrich", "Nietzsche", " " ; philosophers.addrow( nietzsche ); String[] arendt = { "Hannah", "Arendt", " " ; philosophers.addrow( arendt ); // create a JTable for philosophers DefaultTableModel table = new JTable( philosophers ); 76

77 // create JButton for adding philosophers JButton addbutton = new JButton( "Add Philosopher" ); Poznámky addbutton.addactionlistener( new ActionListener() { public void actionperformed( ActionEvent event ) { // create empty array for new philosopher row String[] philosopher = { "", "", "" ; ); // add empty philosopher row to model philosophers.addrow( philosopher ); 77

78 // create JButton for removing selected philosopher JButton removebutton = new JButton( "Remove Selected Philosopher" ); Poznámky removebutton.addactionlistener( new ActionListener() { ); public void actionperformed( ActionEvent event ) { // remove selected philosopher from model philosophers.removerow( table.getselectedrow() ); 78

79 // lay out GUI components JPanel inputpanel = new JPanel(); inputpanel.add( addbutton ); inputpanel.add( removebutton ); Poznámky Container container = getcontentpane(); container.add( new JScrollPane( table ), BorderLayout.CENTER ); container.add( inputpanel, BorderLayout.NORTH ); setdefaultcloseoperation( EXIT_ON_CLOSE ); setsize( 400, 300 ); setvisible( true ); // end PhilosophersJTable constructor // execute application public static void main( String args[] ) { new PhilosophersJTable(); 79

80 Poznámky Výstup aplikace 80

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ři studiu tohoto bloku se předpokládá, že student je zvládá základy programování v jazyce Java s využitím vývojového prostředí NetBeans.

Při studiu tohoto bloku se předpokládá, že student je zvládá základy programování v jazyce Java s využitím vývojového prostředí NetBeans. 1 Grafické rozhraní Studijní cíl Tento blok je věnován vytváření programů s využitím grafického rozhraní (GUI). Vysvětlen bude základní filozofie pro vytváření aplikací s GUI ve srovnání s konzolovými

Více

Aplikace s grafickým uživatelským rozhraním

Aplikace s grafickým uživatelským rozhraním Aplikace s grafickým uživatelským rozhraním 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 1 Typy aplikací Konzolová

Více

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

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

Více

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

TÉMATICKÝ OKRUH Softwarové inženýrství

TÉMATICKÝ OKRUH Softwarové inženýrství TÉMATICKÝ OKRUH Softwarové inženýrství Číslo otázky : 29. Otázka : Zpracování událostí: mechanismus událostí a jejich zpracování (Event/Listener), nepřímá invokace (Observer/Observable). Obsah : 1. Mechanisums

Více

Observer. Klasifikace. Alias. Smysl. Potřeba sledování změn objektu a notifikace. Obdoba systému událostí (C#, Java) vlastními prostředky

Observer. Klasifikace. Alias. Smysl. Potřeba sledování změn objektu a notifikace. Obdoba systému událostí (C#, Java) vlastními prostředky Observer Observer Klasifikace Object Behavioral Alias Dependents Publish-subscribe Smysl Zavádí možnost sledování změn u objektu tak, že když objekt změní stav, ostatní objekty na tuto změnu zareagují,

Více

GUI v Javě a událostmi řízené programování

GUI v Javě a událostmi řízené programování GUI v Javě a událostmi řízené programování Jan Faigl Katedra počítačů Fakulta elektrotechnická České vysoké učení technické v Praze Přednáška 4 A0B36PR2 Programování 2 Jan Faigl, 2016 A0B36PR2 Přednáška

Více

GUI v Javě a událostmi řízené programování

GUI v Javě a událostmi řízené programování GUI v Javě a událostmi řízené programování Jiří Vokřínek Katedra počítačů Fakulta elektrotechnická České vysoké učení technické v Praze Přednáška 6 B0B36PJV Programování v JAVA Jan Faigl, Jiří Vokřínek,

Více

Obsah přednášky. GUI v Javě a událostmi řízené programování. Základní prvky grafického rozhraní. Základní komponenty.

Obsah přednášky. GUI v Javě a událostmi řízené programování. Základní prvky grafického rozhraní. Základní komponenty. GUI v Javě a událostmi řízené programování Obsah přednášky GUI v Javě (připomínka) Návrhář GUI Jan Faigl Katedra počítačů Fakulta elektrotechnická České vysoké učení technické v Praze Přednáška 4 A0B36PR2

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

GUI. Systémová integrace pro desktopové aplikace

GUI. Systémová integrace pro desktopové aplikace GUI Systémová integrace pro desktopové aplikace 1 java.awt.desktop systémová integrace desktopových aplikací static boolean isdesktopsupported() test zda je integrace k dispozici static Desktop getdesktop()

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

APLIKACE NÁVRHOVÝCH VZORŮ

APLIKACE NÁVRHOVÝCH VZORŮ APLIKACE NÁVRHOVÝCH VZORŮ URČENO PRO VZDĚLÁVÁNÍ V AKREDITOVANÝCH STUDIJNÍCH PROGRAMECH FRANTIŠEK HUŇKA ČÍSLO OPERAČNÍHO PROGRAMU: CZ.1.07 NÁZEV OPERAČNÍHO PROGRAMU: VZDĚLÁVÁNÍ PRO KONKURENCESCHOPNOST OPATŘENÍ:

Více

Obsah přednášky. GUI v Javě a událostmi řízené programování. Základní prvky grafického rozhraní. Základní komponenty.

Obsah přednášky. GUI v Javě a událostmi řízené programování. Základní prvky grafického rozhraní. Základní komponenty. GUI v Javě a událostmi řízené programování Jiří Vokřínek Katedra počítačů Fakulta elektrotechnická České vysoké učení technické v Praze Přednáška 6 B0B36PJV Programování v JAVA Obsah přednášky GUI v Javě

Více

GUI v Javě (připomínka) Návrhář GUI Příklad aplikace MVC Model-View-Controller Události Vnitřní třídy. MVC Model-View-Controller

GUI v Javě (připomínka) Návrhář GUI Příklad aplikace MVC Model-View-Controller Události Vnitřní třídy. MVC Model-View-Controller GUI v Javě a událostmi řízené programování Jan Faigl Katedra počítačů Fakulta elektrotechnická České vysoké učení technické v Praze Přednáška 4 A0B36PR2 Programování 2 Obsah přednášky GUI v Javě (připomínka)

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

GUI v Javě a událostmi řízené programování

GUI v Javě a událostmi řízené programování GUI v Javě a událostmi řízené programování Jiří Vokřínek Katedra počítačů Fakulta elektrotechnická České vysoké učení technické v Praze Přednáška 6 B0B36PJV Programování v JAVA Jan Faigl, Jiří Vokřínek,

Více

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

UJO Framework. revoluční architektura beans. verze 0.80 http://ujoframework.org/ UJO Framework revoluční architektura beans verze 0.80 http://ujoframework.org/ Pavel Pone(c), září 2008 Historie rok 2004 upravené objekty z frameworku Cayenne nevýhodou byla špatná typová kontrola rok

Více

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

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

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

Více

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

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

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

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

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

Více

Návrhové vzory Design Patterns

Návrhové vzory Design Patterns Návrhové vzory Design Patterns doc. Ing. František Huňka, CSc. Ostravská univerzita PřF 1 Definice vzoru Každý vzor popisuje problém, který nastává opakovaně v našem prostředí, a potom popisuje podstatu

Více

Java - Kresba. 2/28/11 1/8 Java - kresba

Java - Kresba. 2/28/11 1/8 Java - kresba Java - Kresba Základní entity a jejich kresba ve třídě Graphics nemůžeme nastavit linii, šířku a typ, z grafických atributů jí můžeme nastavit pouze barvu Linie (čára)... drawline(int x1, int y1, int x2,

Více

Java GUI události. Událostmi řízené programování. Zpracování = obsluha událostí

Java GUI události. Událostmi řízené programování. Zpracování = obsluha událostí Java GUI události Cílem kapitoly je přiblížit hlavní princip událostmi řízeného programování a ukázat na příkladu způsob řešení pro konkrétní případ. Soubor obsahuje také tabulku s přehledem nejčastěji

Více

Čipové karty Lekařská informatika

Čipové karty Lekařská informatika Čipové karty Lekařská informatika Následující kód je jednoduchou aplikací pro čipové karty, která po překladu vytváří prostor na kartě, nad kterým jsou prováděny jednotlivé operace a do kterého jsou ukládány

Více

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

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

Více

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

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

Více

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

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

JAVA Unit testing Java, zimní semestr

JAVA Unit testing Java, zimní semestr JAVA Unit testing Úvod unit testing testování malý jednotek funkčnosti jednotka nezávislá na ostatních testování zcela oddělené vytvářejí se pomocné objekty pro testování kontext typicky v OO jazycích

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

KIV/PIA 2013 Jan Tichava

KIV/PIA 2013 Jan Tichava KIV/PIA 2013 Jan Tichava Java EE JSF, PrimeFaces Spring JPA, EclipseLink Java Platform, Enterprise Edition Persistence Zobrazovací vrstva Interakce aplikací Deployment Java Persistence API Enterprise

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

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

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

JAVA Unit testing Java, zimní semestr

JAVA Unit testing Java, zimní semestr JAVA Unit testing Úvod unit testing testování malý jednotek funkčnosti jednotka nezávislá na ostatních testování zcela oddělené vytvářejí se pomocné objekty pro testování kontext typicky v OO jazycích

Více

Události. A0B36PR2-Programování 2 Fakulta elektrotechnická České vysoké učení technické

Události. A0B36PR2-Programování 2 Fakulta elektrotechnická České vysoké učení technické Události A0B36PR2-Programování 2 Fakulta elektrotechnická České vysoké učení technické Zpracování událostí - obsah 1. Připomenutí GUI 2. Co to je událost 3. Koncepce zpracování událostí 4. Zpracování vlastností

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

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

Abstraktní třída a rozhraní

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

Více

RMI - Distribuované objekty v Javě

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

Více

Přehled probírané látky

Přehled probírané látky OOPR_04 1 Přehled probírané látky asociace (relace) mezi třídami popis množiny spojení mezi objekty skládání objektů - upřesněný typ asociace, vazba mezi objekty kompozice objektů (velmi pevná vazba mezi

Více

Hiearchical MVC (Model-view-controller) vs. PAC (Presentation-abstraction-control)

Hiearchical MVC (Model-view-controller) vs. PAC (Presentation-abstraction-control) Hiearchical MVC (Model-view-controller) vs. PAC (Presentation-abstraction-control) Problém HMVC úvod MVC v určitých aplikacích nedostačující Příklad: webová stránka s widgety Např. kalendář, hodnocení,

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

Deklarace a vytváření

Deklarace a vytváření OOPR_10 1 Obsah přednášky Deklarace a tvorba polí, jejich použití Rozšířený příkaz cyklu for Třída Registr a datovým atributem typu pole Třídy Zásobník a Fronta Třída Registr pro uložení objektových a

Více

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

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

Více

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

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

Více

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

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

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

Tvorba informačních systémů

Tvorba informačních systémů Tvorba informačních systémů Michal Krátký 1, Miroslav Beneš 1 1 Katedra informatiky VŠB Technická univerzita Ostrava Tvorba informačních systémů, 2005/2006 c 2006 Michal Krátký, Miroslav Beneš Tvorba informačních

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

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

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

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

Více

Typ 2 - připojení prostřednictvím kódu nativního klienta pro přístup k síti

Typ 2 - připojení prostřednictvím kódu nativního klienta pro přístup k síti Práce s databází Specifikace JDBC Pro práci s relačními databázemi poskytuje Java rozhraní JDBC Java Database Connectivity. Specifikace tohoto rozhraní má několik verzí. Verze 1.x je součástí SDK již od

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

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

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

IRAE 07/08 Přednáška č. 2. atr1 atr2. atr1 atr2 -33 Objekt jako proměnná Objekty a metody Objekt = proměnná referenčního typu vznik pomocí new, chování viz pole jako referenční proměnná minulý semestr Stack Heap objekt ref this 10 20 atr1 atr2 jinyobjekt

Více

PREPROCESOR POKRAČOVÁNÍ

PREPROCESOR POKRAČOVÁNÍ PREPROCESOR POKRAČOVÁNÍ Chybová hlášení V C# podobně jako v C++ existuje direktiva #error, která způsobí vypsání chybového hlášení překladačem a zastavení překladu. jazyk C# navíc nabízí direktivu #warning,

Více

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

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

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

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

8. GRAFICKÉ UŽIVATELSKÉ ROZHRANÍ

8. GRAFICKÉ UŽIVATELSKÉ ROZHRANÍ 8. GRAFICKÉ UŽIVATELSKÉ ROZHRANÍ Abstract Window Toolkit (AWT) je část Java Core API, kterou tvoří balíky: java.awt, java.awt.event (od JDK 1.1), java.awt.image, java.awt.datatransfer (od JDK 1.1). AWT

Více

Programování v C++ 2, 4. cvičení

Programování v C++ 2, 4. cvičení Programování v C++ 2, 4. cvičení statické atributy a metody, konstruktory 1 1 Fakulta jaderná a fyzikálně inženýrská České vysoké učení technické v Praze Zimní semestr 2018/2019 Přehled Přístupová práva

Více

Konstruktory a destruktory

Konstruktory a destruktory Konstruktory a destruktory Nedostatek atributy po vytvoření objektu nejsou automaticky inicializovány hodnota atributů je náhodná vytvoření metody pro inicializaci, kterou musí programátor explicitně zavolat,

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

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

Databáze I. Přednáška 7

Databáze I. Přednáška 7 Databáze I Přednáška 7 Objektové rozšíření SQL Objektově relační databáze SQL:1999 objektové rozšíření SQL vztahuje se k objektově relačním databázovým systémům ukládají objekty do relační databáze umožňují

Více

Tvorba informačních systémů

Tvorba informačních systémů Tvorba informačních systémů Michal Krátký, Miroslav Beneš Katedra informatiky VŠB Technická univerzita Ostrava Tvorba informačních systémů, 2007/2008 c 2006 2008 Michal Krátký, Miroslav Beneš Tvorba informačních

Více

Základní pojmy. Matice(řádky, sloupce) Matice(4,6) sloupce

Základní pojmy. Matice(řádky, sloupce) Matice(4,6) sloupce Vektor a Matice Základní pojmy Matice(řádky, sloupce) Matice(4,6) sloupce řádky (1,1) (1,2) (1,3) (1,4) (1,5) (1,6) (2,1) (2,2) (2,3) (2,4) (2,5) (2,6) (3,1) (3,2) (3,3) (3,4) (3,5) (3,6) (4,1) (4,2) (4,3)

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

Úvod Třídy Rozhraní Pole Konec. Programování v C# Hodnotové datové typy, řídící struktury. Petr Vaněček 1 / 39

Úvod Třídy Rozhraní Pole Konec. Programování v C# Hodnotové datové typy, řídící struktury. Petr Vaněček 1 / 39 Programování v C# Hodnotové datové typy, řídící struktury Petr Vaněček 1 / 39 Obsah přednášky Referenční datové typy datové položky metody přístupové metody accessory, indexery Rozhraní Pole 2 / 39 Třídy

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

Google Web Toolkit. Martin Šurkovský, SUR března Katedra informatiky

Google Web Toolkit. Martin Šurkovský, SUR března Katedra informatiky Google Web Toolkit Martin Šurkovský, SUR096 Vysoká škola Báňská - Technická univerzita Ostrava Katedra informatiky 29. března 2010 Martin Šurkovský, SUR096 (VŠB - TUO) Google Web Toolkit 29. března 2010

Více

Student s Life. Návrhová dokumentace (Design) Lukáš Barák, Jakub Ječmínek, Jaroslav Brchel, Jiří Zmeškal 3.12.2010

Student s Life. Návrhová dokumentace (Design) Lukáš Barák, Jakub Ječmínek, Jaroslav Brchel, Jiří Zmeškal 3.12.2010 Student s Life Návrhová dokumentace (Design) Lukáš Barák, Jakub Ječmínek, Jaroslav Brchel, Jiří Zmeškal 3.12.2010 Model Specification Page: 2 Obsah Model architektury... 3 Návrhový model... 3 Bussines

Více

11. Dědičnost. Dědičnost strana 103

11. Dědičnost. Dědičnost strana 103 Dědičnost strana 103 11. Dědičnost V této kapitole si vysvětlíme jeden ze základních pojmů objektově orientovaného programování dědičnost (inheritance). S ní souvisejí i následující témata: předek a potomek

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

Struktura třídy, operátory, jednoduché algoritmy, junit. Programování II 2. cvičení Alena Buchalcevová

Struktura třídy, operátory, jednoduché algoritmy, junit. Programování II 2. cvičení Alena Buchalcevová Struktura třídy, operátory, jednoduché algoritmy, junit 2. cvičení Alena Buchalcevová Cíle cvičení seznámit se s rozhraním (interface) v Javě seznámit se s testováním při vývoji (makety, JUnit) naučit

Více

5 Rekurze a zásobník. Rekurzivní volání metody

5 Rekurze a zásobník. Rekurzivní volání metody 5 Rekurze a zásobník Při volání metody z metody main() se do zásobníku uloží aktivační záznam obsahující - parametry - návratovou adresu, tedy adresu, kde bude program pokračovat v metodě main () po skončení

Více

Swing. Přehled komponent. Java UI, letní semestr 2017/2018 1

Swing. Přehled komponent. Java UI, letní semestr 2017/2018 1 Swing Přehled komponent 1 Label třída JLabel pro zobrazení krátkého textu obrázku obojího 2 Tlačítka mnoho druhů tlačítek (buttons) všechna dědí od AbstractButton normální tlačítko (JButton) "klikací"

Více

Dalším příkladem může být například výstup dat na různá zařízení, souborů, grafických rozhraní, sítě atd.

Dalším příkladem může být například výstup dat na různá zařízení, souborů, grafických rozhraní, sítě atd. 1. Zapouzdření Cíl látky Tento blok nejdříve přiblíží zásadu zapouzdření a odpoutání kódu a po té na relacích, jako jsou asociace, agregace a kompozice, vysvětlí jak lze objektový zdrojový kód zapouzdřovat

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

Grafické uživatelské rozhraní v Javě. A0B36PR2-Programování 2 Fakulta elektrotechnická České vysoké učení technické

Grafické uživatelské rozhraní v Javě. A0B36PR2-Programování 2 Fakulta elektrotechnická České vysoké učení technické Grafické uživatelské rozhraní v Javě A0B36PR2-Programování 2 Fakulta elektrotechnická České vysoké učení technické Grafický návrh - příklad ToolBar Menu soubor nový, otevřít, uložit, exportovat, konec...

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

George J. Klir. State University of New York (SUNY) Binghamton, New York 13902, USA gklir@binghamton.edu

George J. Klir. State University of New York (SUNY) Binghamton, New York 13902, USA gklir@binghamton.edu A Tutorial Advances in query languages for similarity-based databases George J. Klir Petr Krajča State University of New York (SUNY) Binghamton, New York 13902, USA gklir@binghamton.edu Palacky University,

Více

Java aplety. Předávání parametrů z HTML

Java aplety. Předávání parametrů z HTML Java aplety Aplety jsou speciální formou Java aplikací - mohou být spouštěny z prostředí WWW prohlížeče. Aby je prohlížeč spustil, musíme vložit do HTML stránky potřebné příkazy:

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

Ú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

Replikace je proces kopírování a udržování databázových objektů, které tvoří distribuovaný databázový systém. Změny aplikované na jednu část jsou

Replikace je proces kopírování a udržování databázových objektů, které tvoří distribuovaný databázový systém. Změny aplikované na jednu část jsou Administrace Oracle Replikace je proces kopírování a udržování databázových objektů, které tvoří distribuovaný databázový systém. Změny aplikované na jednu část jsou zachyceny a uloženy lokálně před posláním

Více

Grafické uživatelské rozhraní v Javě. A0B36PR2-Programování 2 Fakulta elektrotechnická České vysoké učení technické

Grafické uživatelské rozhraní v Javě. A0B36PR2-Programování 2 Fakulta elektrotechnická České vysoké učení technické Grafické uživatelské rozhraní v Javě A0B36PR2-Programování 2 Fakulta elektrotechnická České vysoké učení technické Grafický návrh - příklad určíme základní rozvržení určíme chování okna při zvětšování

Více

Komponenty v.net. Obsah přednášky

Komponenty v.net. Obsah přednášky 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 Obsah přednášky Rozdíl mezi COM a.net Distribuce komponent Programování

Více

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

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

Více