Obsah
Technologie JavaBeans
z z z
doc. Ing. Miroslav Beneš, Ph.D. katedra informatiky FEI VŠB-TUO A-1007 / 597 324 213 http://www.cs.vsb.cz/benes
[email protected]
z z
Historie Komponentový model Typy komponent Scénáře použití Struktura komponenty z
z
Vlastnosti, metody, události
Enterprise JavaBeans PTE - JavaBeans
Něco z historie… z
z
z
z
Komponentový model
500 před n. l. – Pythagoras založil bratrstvo vyznávající reinkarnaci, vegetariánství, mystický význam čísel a odmítání fazolí (beans) jako potravy (obsahují duše zemřelých) 850 n. l. – arabský pasák koz Kaldi zjistil, že se jeho stádo chová divně a objevil kávu a účinky kofeinu. Konec 17. století – pěstování kávových zrn na ostrově Java, spojení názvu s kávou obecně 1995 – jazyk Oak firmy Sun má problémy s názvem, zvolen název Java a spojení produktů s kávou PTE - JavaBeans
2
3
z
Architektura komponent z z
z
Komponenty – stavební bloky Kontejnery – kombinace komponent do struktur
Principy manipulace a komunikace s komponentami z vnějšího prostředí z z z
Introspekce Zpracování událostí Persistence PTE - JavaBeans
4
1
Cíle modelu JavaBeans z
Typy komponent
„Write once, run anywhere, reuse everywhere“ z
z
z
z
z
Přidávání funkcí bez nutnosti přepisovat úplně všechno Provádění na všech platformách a v distribuovaném prostředí Použití v různých scénářích – aplikacích, jiných komponentách, dokumentech, www stránkách, nástrojích pro vývoj aplikací, … PTE - JavaBeans
Vizuální komponenty
z z
z
Mají vizuální reprezentaci zabírající prostor v okně aplikace Příklad: tlačítko, tabulka, rolovací seznam Podpora ve vizuálních nástrojích
Nevizuální komponenty z
Příklad: časovač, databázové spojení, kontrola pravopisu, …
5
PTE - JavaBeans
Scénáře použití z
6
paleta komponent
Využití grafického návrhového prostředí z z
z z
z
z z
editor vlastnosti
Rozložení komponent v okně aplikace Nastavení vlastností komponent Barva, typ písma, klávesová zkratka, … Využití editorů vlastností (property editor)
okno aplikace
Propojení komponent a zápis metod pro zpracování událostí Testování Vytvoření instalace aplikace včetně komponent PTE - JavaBeans
7
PTE - JavaBeans
8
2
Scénáře použití z
Příklad
Použití v ručně psaném programu z
z z z z z
private void jbInit() throws Exception { jLabel1.setText("Zadejte heslo:"); this.getContentPane().setLayout(flowLayout1); jTextField1.setMinimumSize(new Dimension(80,21)); jTextField1.setPreferredSize(new Dimension(80,21)); jTextField1.setText(""); jButton1.setText("OK"); this.getContentPane().setBackground(Color.orange); this.setForeground(Color.black); this.getContentPane().add(jLabel1, null); this.getContentPane().add(jTextField1, null); this.getContentPane().add(jButton1, null); }
Vytvoření instancí komponent a nastavení jejich rozměrů a pozice Nastavení vlastností komponent Vytvoření metod pro zpracování událostí Registrace metod pro zpracování událostí Testování Vytvoření instalace aplikace včetně komponent
PTE - JavaBeans
9
Struktura komponenty z
z
z
Counter
Přístup prostřednictvím přístupových metod (čtení, zápis hodnoty), ne přímo
vlastnosti
int value void clear() void increment()
Metody (methods) z
10
Příklad komponenty - čítač
Vlastnosti (properties) z
PTE - JavaBeans
metody
Operace nad komponentami
Události (events) z
Vazby mezi komponentami PTE - JavaBeans
11
PTE - JavaBeans
12
3
Přístupové metody
Přístupové metody
public class Counter { private int val; public int getValue() { return val; } public void setValue(int val) { this.val = val; } … } PTE - JavaBeans
public int getValue() int value
public void setValue( int val)
13
Přístupové metody z
z
z
int value[]
Mají pouze metodu setXXX()
Vlastnosti typu boolean z z
public void setValue(int index, int val)
Metoda pro čtení se může jmenovat isXXX() public boolean isEmpty(); PTE - JavaBeans
14
public int getValue(int index)
Mají pouze metodu getXXX()
Vlastnosti určené pouze pro zápis z
PTE - JavaBeans
Indexované vlastnosti
Vlastnosti určené pouze pro čtení z
Vlastnost “hodnota” typu int
15
PTE - JavaBeans
16
4
Speciální vlastnosti z
Vázané vlastnosti (bound properties)
z
Generují událost PropertyChange, pokud se mění jejich hodnota
z
Vlastnosti s omezením (constrained prop.)
z
z
z
Použití vlastností komponent
z
z
Generují událost VetoableChange, pokud se mění jejich hodnota Změna hodnoty může být zakázána
PTE - JavaBeans
z
z
JavaScript, VBScript
Programový přístup přes veřejné přístupové metody Přístup přes formuláře (property sheets) v návrhových prostředích Čtení a zápis do perzistentní paměti
17
Metody z
Atributy objektů ve skriptovacích jazycích
PTE - JavaBeans
18
Události
Za metody komponenty se považují všechny veřejné (public) metody třídy
z
Zdroj událostí z z
public void clear() { val = 0; }
z
Posluchač (listener) z z
public void increment() { val++; } PTE - JavaBeans
z
19
Objekt, který generuje události Spravuje seznam registrovaných posluchačů
Objekt, který chce být o události informován Musí se registrovat u zdroje událostí Musí implementovat dohodnuté rozhraní PTE - JavaBeans
20
5
Události
Zpracování událostí
registrovaní posluchači
Posluchač se zaregistruje u zdroje událostí (např. u tlačítka, na jehož stisknutí čeká) Uživatel stiskne tlačítko – vznikne událost Zdroj události (tlačítko) projde seznam registrovaných posluchačů, a každému z nich oznámí vznik události:
1. registrace
EventListener
addEventListener Zdroj události
vznik události
2. Posluchač Posluchač Posluchač
Informace o události
3.
z
nastalaUdalost(e)
z
EventObject e PTE - JavaBeans
Zavolá dohodnutou metody rozhraní posluchače Metodě předá informace o události (podtřída java.util.EventObject)
21
PTE - JavaBeans
Informace o události
Posluchač
public class CounterEvent extends java.util.EventObject { // konstruktor public CounterEvent(Counter source) { super(source); … } … }
interface CounterEventListener extends java.util.EventListener { // čítač byl vynulován void reset(CounterEvent e);
PTE - JavaBeans
22
// byla překročena maximální hodnota void limitReached(CounterEvent e); } 23
PTE - JavaBeans
24
6
Posluchač
Registrace posluchače
class MyListener implements CounterEventListener { public void reset(CounterEvent e) { System.out.println(“Čítač vynulován”); }
class Counter { … public void addCounterListener( CounterListener listener) { // registrace posluchače }
public void limitReached(CounterEvent e) { System.out.println(“Překročen limit”); } …
public void removeCounterListener( CounterListener listener) { // zrušení registrace posluchače }
} } PTE - JavaBeans
25
PTE - JavaBeans
Registrace posluchače
Adaptér
class MyListener implements CounterEventListener {
z
void run() { Counter counter = new Counter(); counter.addCounterListener(this); counter.clear(); … } … public void reset(CounterEvent e) { … } public void limitReached(CounterEvent e) { … }
z
PTE - JavaBeans
Rozhraní EventListener pro konkrétní komponentu může obsahovat mnoho metod Chceme-li reagovat jen na některé události: z
z
z
} 27
26
Musíme implementovat prázdné reakce na ostatní události, nebo použijeme adaptér jako bázovou třídu a implementujeme jen zvolené metody
Adaptér implementuje implicitní odezvu na všechny události PTE - JavaBeans
28
7
Adaptér
Adaptér
class CounterAdapter implements CounterEventListener {
Counter counter = new Counter(); // použití anonymní vnitřní třídy counter.addCounterListener( new CounterAdapter { // předefinujeme pouze metodu reset public void reset(CounterEvent e) { System.out.println(“Reset!”); } });
public void reset(CounterEvent e) {} public void limitReached(CounterEvent e) {} } PTE - JavaBeans
29
Enterprise JavaBeans (EJB) z
z z
z
Entity Beans Session Beans Message Beans
30
Odkazy
Technologie pro vytváření rozsáhlejších programových komponent z
PTE - JavaBeans
z z
http://java.sun.com/products/javabeans/ http://docs.rinet.ru/JavaBeans/
- data - synchronní operace - asynchronní operace
Využívají se např. v informačních systémech
PTE - JavaBeans
31
PTE - JavaBeans
32
8