SlideShare a Scribd company logo
1 of 52
Mikołaj Olszewski (WZIM SGGW) Programowanie Komponentowe Wykład #9 1 / 37
Programowanie Komponentowe 
Wykład #9: Podstawowe komponenty Javy: JavaBeans 
Mikołaj Olszewski 
Wydział Zastosowan Informatyki i Matematyki 
Szkoły Głównej Gospodarstwa Wiejskiego 
9.12.2014 
Mikołaj Olszewski (WZIM SGGW) Programowanie Komponentowe Wykład #9 2 / 37
Plan wykładu 
1 Wprowadzenie 
2 Tworzenie ziaren 
Własciwosci 
Zdarzenia 
BeanInfo 
Trwałosc 
Wymagania 
3 Paczki JAR 
4 Podsumowanie 
Mikołaj Olszewski (WZIM SGGW) Programowanie Komponentowe Wykład #9 3 / 37
Java 
Motto 
Compile once, run everywhere 
Jezyk: Java 
Groovy 
Scala 
Clojure 
Jython 
. . . 
Maszyna wirtualna Javy: 
JVM 
Srodowisko 
uruchomieniowe: JRE 
Srodowisko 
programistyczne: JDK 
Mikołaj Olszewski (WZIM SGGW) Programowanie Komponentowe Wykład #9 4 / 37
Java 
Motto 
Compile once, run everywhere 
Jezyk: Java 
Groovy 
Scala 
Clojure 
Jython 
. . . 
Maszyna wirtualna Javy: 
JVM 
Srodowisko 
uruchomieniowe: JRE 
Srodowisko 
programistyczne: JDK 
Mikołaj Olszewski (WZIM SGGW) Programowanie Komponentowe Wykład #9 4 / 37
Odpowiedniki 
Edytory 
VisualStudio ! NetBeans, Eclipse, InteliJ Idea, ... 
Kompilator 
csc ! javac 
System budowania 
msbuild ! ant 
Automatyczne zaleznosci 
nuget ! ivy 
System budowania i rozwiazywania zaleznosci 
msbuild + nuget ! ant + ivy, maven, gradle 
Mikołaj Olszewski (WZIM SGGW) Programowanie Komponentowe Wykład #9 5 / 37
Odpowiedniki 
Edytory 
VisualStudio ! NetBeans, Eclipse, InteliJ Idea, ... 
Kompilator 
csc ! javac 
System budowania 
msbuild ! ant 
Automatyczne zaleznosci 
nuget ! ivy 
System budowania i rozwiazywania zaleznosci 
msbuild + nuget ! ant + ivy, maven, gradle 
Mikołaj Olszewski (WZIM SGGW) Programowanie Komponentowe Wykład #9 5 / 37
Odpowiedniki 
Edytory 
VisualStudio ! NetBeans, Eclipse, InteliJ Idea, ... 
Kompilator 
csc ! javac 
System budowania 
msbuild ! ant 
Automatyczne zaleznosci 
nuget ! ivy 
System budowania i rozwiazywania zaleznosci 
msbuild + nuget ! ant + ivy, maven, gradle 
Mikołaj Olszewski (WZIM SGGW) Programowanie Komponentowe Wykład #9 5 / 37
Odpowiedniki 
Edytory 
VisualStudio ! NetBeans, Eclipse, InteliJ Idea, ... 
Kompilator 
csc ! javac 
System budowania 
msbuild ! ant 
Automatyczne zaleznosci 
nuget ! ivy 
System budowania i rozwiazywania zaleznosci 
msbuild + nuget ! ant + ivy, maven, gradle 
Mikołaj Olszewski (WZIM SGGW) Programowanie Komponentowe Wykład #9 5 / 37
Odpowiedniki 
Edytory 
VisualStudio ! NetBeans, Eclipse, InteliJ Idea, ... 
Kompilator 
csc ! javac 
System budowania 
msbuild ! ant 
Automatyczne zaleznosci 
nuget ! ivy 
System budowania i rozwiazywania zaleznosci 
msbuild + nuget ! ant + ivy, maven, gradle 
Mikołaj Olszewski (WZIM SGGW) Programowanie Komponentowe Wykład #9 5 / 37
Wprowadzenie 
Plan wykładu 
1 Wprowadzenie 
2 Tworzenie ziaren 
Własciwosci 
Zdarzenia 
BeanInfo 
Trwałosc 
Wymagania 
3 Paczki JAR 
4 Podsumowanie 
Mikołaj Olszewski (WZIM SGGW) Programowanie Komponentowe Wykład #9 6 / 37
Wprowadzenie 
Zarys 
Komponenty programowe — niezalezne moduły 
Wprowadzone w JDK 1.1 
Długotrwałosc w J2SE 1.4 (XML) 
Dynamicznie zmienialne 
Uzycie graficznego edytora 
Według specyfikacji 
„komponenty wielokrotnego uzycia, które moga byc manipulowane 
wizualnie przez narzedzia do tworzenia oprogramowania” 
Mikołaj Olszewski (WZIM SGGW) Programowanie Komponentowe Wykład #9 7 / 37
Wprowadzenie 
Zarys 
Komponenty programowe — niezalezne moduły 
Wprowadzone w JDK 1.1 
Długotrwałosc w J2SE 1.4 (XML) 
Dynamicznie zmienialne 
Uzycie graficznego edytora 
Według specyfikacji 
„komponenty wielokrotnego uzycia, które moga byc manipulowane 
wizualnie przez narzedzia do tworzenia oprogramowania” 
Mikołaj Olszewski (WZIM SGGW) Programowanie Komponentowe Wykład #9 7 / 37
Wprowadzenie 
Koncepcja 
Odkrywanie własciowosci, metod i zdarzen — introspekcja 
wzorzec ziarna 
klasa informacji o ziarnie (BeanInfo) 
Własciowosci okreslaja wyglad i zachowanie ziarna 
Dostosowanie własciowosci w fazie projektowania 
Komunikacja miedzy ziarnami — zdarzenia 
Trwałosc 
Standardowe metody (domyslnie publiczne) 
Mikołaj Olszewski (WZIM SGGW) Programowanie Komponentowe Wykład #9 8 / 37
Wprowadzenie 
Przykłady ziaren 
GUI 
Niewizualne, np. spell checker 
Animation applet 
Arkusz kalkulacyjny 
Mikołaj Olszewski (WZIM SGGW) Programowanie Komponentowe Wykład #9 9 / 37
Tworzenie ziaren 
Plan wykładu 
1 Wprowadzenie 
2 Tworzenie ziaren 
Własciwosci 
Zdarzenia 
BeanInfo 
Trwałosc 
Wymagania 
3 Paczki JAR 
4 Podsumowanie 
Mikołaj Olszewski (WZIM SGGW) Programowanie Komponentowe Wykład #9 10 / 37
Tworzenie ziaren 
Przykładowy kod 
1 p u b l i c c l a s s MyBean f 
23 
/ Cr e a t e s a new i n s t a n c e o f MyBean / 
4 p u b l i c MyBean ( ) f 
5 g 
67 
/ 
8  Holds v a l u e o f p r o p e r t y yourName . 
9 / 
10 p r i v a t e S t r i n g yourName ; 
11 
12 / 
13  Ge t t e r f o r p r o p e r t y yourName . 
14  @r e turn Value o f p r o p e r t y yourName . 
15 / 
16 p u b l i c S t r i n g getYourName ( ) f 
17 r e t u r n t h i s . yourName ; 
18 g 
19 
20 / 
21  S e t t e r f o r p r o p e r t y yourName . 
22  @param yourName New v a l u e o f p r o p e r t y yourName . 
23 / 
24 p u b l i c void setYourName ( S t r i n g yourName ) f 
25 t h i s . yourName = yourName ; 
26 g 
27 g 
Mikołaj Olszewski (WZIM SGGW) Programowanie Komponentowe Wykład #9 11 / 37
Tworzenie ziaren Własciwosci 
Własciwosci 
Rodzaje 
Proste 
Indeksowane 
Połaczone 
Ograniczone 
Modyfikacje 
Zapisywalne 
Tylko do odczytu 
Ukryte 
Mikołaj Olszewski (WZIM SGGW) Programowanie Komponentowe Wykład #9 12 / 37
Tworzenie ziaren Własciwosci 
Proste własciwosci 
Metody 
getXXX / isXXX 
setXXX 
Ograniczenie widocznosci 
— brak metody 
1 p u b l i c c l a s s MyStudentBean f 
23 
p r i v a t e S t r i n g yourName ; 
45 
p r i v a t e boolean s t u d e n t = t r ue ; 
67 
p u b l i c MyStudentBean ( ) f 
8 g 
9 
10 p u b l i c boolean i s S t u d e n t ( ) f 
11 r e t u r n s t u d e n t ; 
12 g 
13 
14 p u b l i c S t r i n g getYourName ( ) f 
15 r e t u r n t h i s . yourName ; 
16 g 
17 
18 p u b l i c void setYourName ( S t r i n g yourName ) f 
19 t h i s . yourName = yourName ; 
20 g 
21 g 
Mikołaj Olszewski (WZIM SGGW) Programowanie Komponentowe Wykład #9 13 / 37
Tworzenie ziaren Własciwosci 
Powiazane własciwosci 
Powiadamianie o 
zmianach 
PropertyChanegeEvent 
source 
propertyName 
oldValue 
newValue 
1 p u b l i c c l a s s MyBean f 
2 p r i v a t e f i n a l Prope r t yChangeSuppor t pcs 
3 = new Prope r t yChangeSuppor t ( t h i s ) ; 
45 
p u b l i c void a d dPr o p e r t yCh a n g eLi s t e n e r ( 
6 Pr o p e r t yCh a n g e L i s t e n e r l i s t e n e r ) f 
7 pcs . a d dPr o p e r t yCh a n g eLi s t e n e r ( l i s t e n e r ) ; 
8 g 
9 
10 p u b l i c void r emo v ePr o p e r t yCh a n g eLi s t e n e r ( 
11 Pr o p e r t yCh a n g e L i s t e n e r l i s t e n e r ) f 
12 pcs . r emo v ePr o p e r t yCh a n g eLi s t e n e r ( l i s t e n e r ) ; 
13 g 
14 
15 p r i v a t e S t r i n g v a l u e ; 
16 
17 p u b l i c S t r i n g g e tVa lue ( ) f 
18 r e t u r n v a l u e ; 
19 g 
20 
21 p u b l i c void s e tVa l u e ( S t r i n g newValue ) f 
22 S t r i n g o l dVa l u e = v a l u e ; 
23 v a l u e = newValue ; 
24 pcs . f i r ePr o p e r t yCh a n g e ( 
25 ” v a l u e ” , oldVa lue , newValue ) ; 
26 g 
27 g 
Mikołaj Olszewski (WZIM SGGW) Programowanie Komponentowe Wykład #9 14 / 37
Tworzenie ziaren Własciwosci 
Ograniczone własciwosci 
Powiadamianie o 
zmianach 
Brak zgody na zmiany 
VetoableChangeEvent 
PropertyVetoException 
1 p u b l i c c l a s s MyBean f 
2 p r i v a t e f i n a l Ve toabl eChangeSuppor t v c s 
3 = new Ve toabl eChangeSuppor t ( t h i s ) ; 
45 
p u b l i c void a d dVe t o a b l eCh a n g eLi s t e n e r ( 
6 Ve t o a b l eCh a n g e L i s t e n e r l i s t e n e r ) f 
7 v c s . a d dVe t o a b l eCh a n g eLi s t e n e r ( l i s t e n e r ) ; 
8 g 
9 
10 p u b l i c void r emo v eVe t o a b l eCh a n g eLi s t e n e r ( 
11 Ve t o a b l eCh a n g e L i s t e n e r l i s t e n e r ) f 
12 v c s . r emo v eVe t o a b l eCh a n g eLi s t e n e r ( l i s t e n e r ) ; 
13 g 
14 
15 . . . 
16 
17 p r i v a t e S t r i n g v a l u e ; 
18 
19 p u b l i c S t r i n g g e tVa lue ( ) f 
20 r e t u r n v a l u e ; 
21 g 
22 
23 p u b l i c void s e tVa l u e ( S t r i n g newValue ) 
24 throws Pr o p e r t yVe t oEx c e p t i o n f 
25 S t r i n g o l dVa l u e = v a l u e ; 
26 v c s . f i r eVe t o a b l eCh a n g e ( 
27 ” v a l u e ” , oldVa lue , newValue ) ; 
28 v a l u e = newValue ; 
29 pcs . f i r ePr o p e r t yCh a n g e ( 
30 ” v a l u e ” , oldVa lue , newValue ) ; 
31 g 
32 g 
Mikołaj Olszewski (WZIM SGGW) Programowanie Komponentowe Wykład #9 15 / 37
Tworzenie ziaren Własciwosci 
Indeksowane własciwosci 
Tablica własciowosci 
Dostep do całosci 
Dostep do 
pojedynczego elementu 
1 p u b l i c c l a s s MyBean f 
23 
p u b l i c MyBean ( ) fg 
45 
p r i v a t e S t r i n g [ ] l i n e s ; 
67 
p u b l i c S t r i n g g e t L i n e s ( i n t i n d e x ) f 
8 r e t u r n t h i s . l i n e s [ i n d e x ] ; 
9 g 
10 
11 p u b l i c S t r i n g [ ] g e t L i n e s ( ) f 
12 r e t u r n t h i s . l i n e s ; 
13 g 
14 
15 p u b l i c void s e t L i n e s ( i n t inde x , S t r i n g l i n e s ) f 
16 t h i s . l i n e s [ i n d e x ] = l i n e s ; 
17 g 
18 
19 p u b l i c void s e t L i n e s ( S t r i n g [ ] l i n e s ) f 
20 t h i s . l i n e s = l i n e s ; 
21 g 
22 g 
Mikołaj Olszewski (WZIM SGGW) Programowanie Komponentowe Wykład #9 16 / 37
Tworzenie ziaren Zdarzenia 
Mikołaj Olszewski (WZIM SGGW) Programowanie Komponentowe Wykład #9 17 / 37
Tworzenie ziaren Zdarzenia 
Model zdarzeniowy 
Delegacje 
Zródło 
Zdarzenie 
Słuchacz 
Mikołaj Olszewski (WZIM SGGW) Programowanie Komponentowe Wykład #9 18 / 37
Tworzenie ziaren Zdarzenia 
Przykład 
1 p u b l i c c l a s s But tonHandl e r implements Ac t i o n L i s t e n e r f 
23 
p r i v a t e JTextArea output ; 
45 
p u b l i c But tonHandl e r ( JTextArea output ) f 
6 t h i s . output = output ; 
7 g 
89 
p u b l i c void a c t i o nPe r f o rme d ( Ac t ionEv ent e v ent ) f 
10 t h i s . output . append ( ” Ac t i on o c c u r r e d : ” + e v ent + ’nn ’ ) ; 
11 g 
12 g 
13 
14 c l a s s Ac t i o nTe s t e r f 
15 
16 p u b l i c s t a t i c void main ( S t r i n g a r g s [ ] ) f 
17 JFrame frame = new JFrame ( ”Button Handl e r ” ) ; 
18 JTextArea a r e a = new JTextArea ( 6 , 80 ) ; 
19 JButton but ton = new JButton ( ” F i r e Event ” ) ; 
20 but ton . a d dAc t i o n L i s t e n e r ( new But tonHandl e r ( a r e a ) ) ; 
21 [ . . . ] 
22 g 
23 g 
Mikołaj Olszewski (WZIM SGGW) Programowanie Komponentowe Wykład #9 19 / 37
Tworzenie ziaren Zdarzenia 
Konwencje zdarzen 
Zródło zdarzen 
public void add EventListenerType(EventListenerType a) 
public void removeEventListenerType(EventListenerType a) 
java.util.EventListener 
Odkrywane w trakcie introspekcji 
Mikołaj Olszewski (WZIM SGGW) Programowanie Komponentowe Wykład #9 20 / 37
Tworzenie ziaren Zdarzenia 
Łaczenie komponentów poprzez zdarzenia 
POKAZ 
Mikołaj Olszewski (WZIM SGGW) Programowanie Komponentowe Wykład #9 21 / 37
Tworzenie ziaren BeanInfo 
BeanInfo 
Opis ”fasolki” zamiast konwencji 
java.beans.BeanInfo 
Pokazanie tylko tego, co niezbedne 
Rozszerzone atrybuty 
Odczytywane przez edytory komponentów 
Mikołaj Olszewski (WZIM SGGW) Programowanie Komponentowe Wykład #9 22 / 37
Tworzenie ziaren Trwałosc 
Mikołaj Olszewski (WZIM SGGW) Programowanie Komponentowe Wykład #9 23 / 37
Tworzenie ziaren Trwałosc 
Trwałosc 
Przechowanie stanu komponentu 
Mechanizm — serializacja 
Implementacja trwałosci 
java.io.Serializable 
java.io.Externalizable 
Wystarczy trwały dowolny przodek 
Mikołaj Olszewski (WZIM SGGW) Programowanie Komponentowe Wykład #9 24 / 37
Tworzenie ziaren Trwałosc 
Szczegóły serializacji 
Bezargumentowy konstruktor 
Nieserializowalne: transient, static 
Modyfikacje 
private void writeObject(java.io.ObjectOutputStream out) throws 
IOException; 
private void readObject(java.io.ObjectInputStream in) throws 
IOException, ClassNotFoundException; 
Mikołaj Olszewski (WZIM SGGW) Programowanie Komponentowe Wykład #9 25 / 37
Tworzenie ziaren Trwałosc 
Długotrwałosc 
Zapisywanie ziaren w formie XMLa 
Przykłady: 
1 XMLEncoder encode r = new XMLEncoder ( 
2 new Buf f e r edOutputSt r eam ( 
3 new Fi l eOutputSt r e am ( 
4 ” Be a n a r c h i v e . xml ” ) ) ) ; 
56 
encode r . wr i t eOb j e c t ( o b j e c t ) ; 
7 encode r . c l o s e ( ) ; 
1 XMLDecoder de code r = new XMLDecoder ( 
2 new Bu f f e r e d I n p u tSt r e am ( 
3 new F i l e I n p u t S t r e am ( 
4 ” Be a n a r c h i v e . xml ” ) ) ) ; 
56 
Obj e c t o b j e c t = de code r . r e a dOb j e c t ( ) ; 
7 de code r . c l o s e ( ) ; 
Konieczne dla własciwosci 
publiczny getter 
publiczny setter 
Mikołaj Olszewski (WZIM SGGW) Programowanie Komponentowe Wykład #9 26 / 37
Tworzenie ziaren Trwałosc 
Długotrwałosc 
Zapisywanie ziaren w formie XMLa 
Przykłady: 
1 XMLEncoder encode r = new XMLEncoder ( 
2 new Buf f e r edOutputSt r eam ( 
3 new Fi l eOutputSt r e am ( 
4 ” Be a n a r c h i v e . xml ” ) ) ) ; 
56 
encode r . wr i t eOb j e c t ( o b j e c t ) ; 
7 encode r . c l o s e ( ) ; 
1 XMLDecoder de code r = new XMLDecoder ( 
2 new Bu f f e r e d I n p u tSt r e am ( 
3 new F i l e I n p u t S t r e am ( 
4 ” Be a n a r c h i v e . xml ” ) ) ) ; 
56 
Obj e c t o b j e c t = de code r . r e a dOb j e c t ( ) ; 
7 de code r . c l o s e ( ) ; 
Konieczne dla własciwosci 
publiczny getter 
publiczny setter 
Mikołaj Olszewski (WZIM SGGW) Programowanie Komponentowe Wykład #9 26 / 37
Tworzenie ziaren Trwałosc 
Przykładowy XML 
1 ? xml v e r s i o n=” 1 . 0 ” enc oding=”UTF−8” ? 
2 j a v a 
3 o b j e c t c l a s s=” j a v a x . swing . JFrame ” 
4 v o i d method=” add ” 
5 o b j e c t c l a s s=” j a v a . awt . Borde rLayout ” 
6 f i e l d=”CENTER”/ 
7 o b j e c t c l a s s=” SimpleBean ”/ 
8 / v o i d 
9 v o i d p r o p e r t y=” d e f a u l tCl o s eOp e r a t i o n ” 
10 o b j e c t c l a s s=” j a v a x . swing . WindowConstants ” 
11 f i e l d=”DISPOSE ON CLOSE”/ 
12 / v o i d 
13 v o i d method=” pack ”/ 
14 v o i d p r o p e r t y=” v i s i b l e ” 
15 bo o l e ant r u e/ bo o l e an 
16 / v o i d 
17 / o b j e c t 
18 / j a v a 
Mikołaj Olszewski (WZIM SGGW) Programowanie Komponentowe Wykład #9 27 / 37
Tworzenie ziaren Wymagania 
Kiedy klasa jest ziarnem? 
Instancjowalnosc 
Publiczny bezparametrowy konstruktor 
Trwałosc 
Konwencje nazewnicze i dostepowe 
własciwosci 
metody 
zdarzenia 
Narzedzia 
standardowe mechanizmy javy, np. Class.forName(...) 
java.beans.Beans i java.beans.Introspector 
BeanUtils 
Mikołaj Olszewski (WZIM SGGW) Programowanie Komponentowe Wykład #9 28 / 37
Tworzenie ziaren Wymagania 
Kiedy klasa jest ziarnem? 
Instancjowalnosc 
Publiczny bezparametrowy konstruktor 
Trwałosc 
Konwencje nazewnicze i dostepowe 
własciwosci 
metody 
zdarzenia 
Narzedzia 
standardowe mechanizmy javy, np. Class.forName(...) 
java.beans.Beans i java.beans.Introspector 
BeanUtils 
Mikołaj Olszewski (WZIM SGGW) Programowanie Komponentowe Wykład #9 28 / 37
Tworzenie ziaren Wymagania 
Kiedy klasa jest ziarnem? 
Instancjowalnosc 
Publiczny bezparametrowy konstruktor 
Trwałosc 
Konwencje nazewnicze i dostepowe 
własciwosci 
metody 
zdarzenia 
Narzedzia 
standardowe mechanizmy javy, np. Class.forName(...) 
java.beans.Beans i java.beans.Introspector 
BeanUtils 
Mikołaj Olszewski (WZIM SGGW) Programowanie Komponentowe Wykład #9 28 / 37
Tworzenie ziaren Wymagania 
Kiedy klasa jest ziarnem? 
Instancjowalnosc 
Publiczny bezparametrowy konstruktor 
Trwałosc 
Konwencje nazewnicze i dostepowe 
własciwosci 
metody 
zdarzenia 
Narzedzia 
standardowe mechanizmy javy, np. Class.forName(...) 
java.beans.Beans i java.beans.Introspector 
BeanUtils 
Mikołaj Olszewski (WZIM SGGW) Programowanie Komponentowe Wykład #9 28 / 37
Tworzenie ziaren Wymagania 
Kiedy klasa jest ziarnem? 
Instancjowalnosc 
Publiczny bezparametrowy konstruktor 
Trwałosc 
Konwencje nazewnicze i dostepowe 
własciwosci 
metody 
zdarzenia 
Narzedzia 
standardowe mechanizmy javy, np. Class.forName(...) 
java.beans.Beans i java.beans.Introspector 
BeanUtils 
Mikołaj Olszewski (WZIM SGGW) Programowanie Komponentowe Wykład #9 28 / 37
Tworzenie ziaren Wymagania 
Kiedy klasa jest ziarnem? 
Instancjowalnosc 
Publiczny bezparametrowy konstruktor 
Trwałosc 
Konwencje nazewnicze i dostepowe 
własciwosci 
metody 
zdarzenia 
Narzedzia 
standardowe mechanizmy javy, np. Class.forName(...) 
java.beans.Beans i java.beans.Introspector 
BeanUtils 
Mikołaj Olszewski (WZIM SGGW) Programowanie Komponentowe Wykład #9 28 / 37
Tworzenie ziaren Wymagania 
Kiedy klasa jest ziarnem? 
Instancjowalnosc 
Publiczny bezparametrowy konstruktor 
Trwałosc 
Konwencje nazewnicze i dostepowe 
własciwosci 
metody 
zdarzenia 
Narzedzia 
standardowe mechanizmy javy, np. Class.forName(...) 
java.beans.Beans i java.beans.Introspector 
BeanUtils 
Mikołaj Olszewski (WZIM SGGW) Programowanie Komponentowe Wykład #9 28 / 37
Tworzenie ziaren Wymagania 
Kiedy klasa jest ziarnem? 
Instancjowalnosc 
Publiczny bezparametrowy konstruktor 
Trwałosc 
Konwencje nazewnicze i dostepowe 
własciwosci 
metody 
zdarzenia 
Narzedzia 
standardowe mechanizmy javy, np. Class.forName(...) 
java.beans.Beans i java.beans.Introspector 
BeanUtils 
Mikołaj Olszewski (WZIM SGGW) Programowanie Komponentowe Wykład #9 28 / 37
Tworzenie ziaren Wymagania 
Kiedy klasa jest ziarnem? 
Instancjowalnosc 
Publiczny bezparametrowy konstruktor 
Trwałosc 
Konwencje nazewnicze i dostepowe 
własciwosci 
metody 
zdarzenia 
Narzedzia 
standardowe mechanizmy javy, np. Class.forName(...) 
java.beans.Beans i java.beans.Introspector 
BeanUtils 
Mikołaj Olszewski (WZIM SGGW) Programowanie Komponentowe Wykład #9 28 / 37
Paczki JAR 
Plan wykładu 
1 Wprowadzenie 
2 Tworzenie ziaren 
Własciwosci 
Zdarzenia 
BeanInfo 
Trwałosc 
Wymagania 
3 Paczki JAR 
4 Podsumowanie 
Mikołaj Olszewski (WZIM SGGW) Programowanie Komponentowe Wykład #9 29 / 37
Paczki JAR 
Słoiki — paczki JAR I 
Skompresowane pliki (ZIP) i Manifest 
Tworzenie 
$jar vcf HelloWorld.jar HelloWorld.class 
added manifest 
adding: HelloWorld.class(in = 430) (out= 296)(deflated 31%) 
Przegladanie 
$jar tf HelloWorld.jar 
META-INF/ 
META-INF/MANIFEST.MF 
HelloWorld.class 
Wydobycie: 
$jar xf HelloWorld.jar 
Mikołaj Olszewski (WZIM SGGW) Programowanie Komponentowe Wykład #9 30 / 37
Paczki JAR 
Słoiki — paczki JAR II 
Aktualizacja 
$jar uf HelloWorld.jar HelloWorld.class 
Uruchomienie 
$java -jar HelloWorld.jar 
Failed to load Main-Class manifest attribute from 
HelloWorld.jar 
Mikołaj Olszewski (WZIM SGGW) Programowanie Komponentowe Wykład #9 31 / 37
Paczki JAR 
Manifest 
Manifest-Version: 1.0 
Created-By: 1.6.0_26 (Sun Microsystems Inc.) 
Mikołaj Olszewski (WZIM SGGW) Programowanie Komponentowe Wykład #9 32 / 37
Paczki JAR 
Manifest 
Manifest-Version: 1.0 
Created-By: 1.6.0_26 (Sun Microsystems Inc.) 
Main-Class: HelloWorld 
Mikołaj Olszewski (WZIM SGGW) Programowanie Komponentowe Wykład #9 33 / 37
Podsumowanie 
Plan wykładu 
1 Wprowadzenie 
2 Tworzenie ziaren 
Własciwosci 
Zdarzenia 
BeanInfo 
Trwałosc 
Wymagania 
3 Paczki JAR 
4 Podsumowanie 
Mikołaj Olszewski (WZIM SGGW) Programowanie Komponentowe Wykład #9 34 / 37
Podsumowanie 
Podsumowanie 
JavaBean — podstawowe komponenty w Javie 
Konwencje tworzenia ziaren 
Introspekcja vs. metaklasa 
Wizualne edytory 
(Długo-)Trwałosc 
Paczkowanie w ”słoiki” 
Edytory. . . 
Mikołaj Olszewski (WZIM SGGW) Programowanie Komponentowe Wykład #9 35 / 37
Podsumowanie 
Do domu 
Przeczytac materiały o JavaBean 
Przyswoic zagadnienia JavaBean w praktyce 
Wybrac edytor do kodu Javy 
nauczyc sie nim posługiwac 
stworzyc wersje przenosna (na zajecia) 
Nauczyc sie uzywac gradle-a 
gradlew — wrapper automatycznie instalujacy gradle-a 
gradle(w) run — uruchamianie programu 
gradle(w) test — uruchamianie testów 
Przygotowac ziarna na laboratoria 
Mikołaj Olszewski (WZIM SGGW) Programowanie Komponentowe Wykład #9 36 / 37
Podsumowanie 
Mikołaj Olszewski (WZIM SGGW) Programowanie Komponentowe Wykład #9 37 / 37

More Related Content

Viewers also liked

The metadata driven e-laboratory web client
The metadata driven e-laboratory web clientThe metadata driven e-laboratory web client
The metadata driven e-laboratory web clientMikołaj Olszewski
 
Optoelektroniczne modelowanie sieci neuronowej cz. 1
Optoelektroniczne modelowanie sieci neuronowej cz. 1Optoelektroniczne modelowanie sieci neuronowej cz. 1
Optoelektroniczne modelowanie sieci neuronowej cz. 1Mikołaj Olszewski
 
Programowanie Komponentowe: #6 Wersjonowanie
Programowanie Komponentowe: #6 WersjonowanieProgramowanie Komponentowe: #6 Wersjonowanie
Programowanie Komponentowe: #6 WersjonowanieMikołaj Olszewski
 
Kwantowe struktury półprzewodnikowe
Kwantowe struktury półprzewodnikoweKwantowe struktury półprzewodnikowe
Kwantowe struktury półprzewodnikoweMikołaj Olszewski
 
Optyczne solitony przestrzenne
Optyczne solitony przestrzenneOptyczne solitony przestrzenne
Optyczne solitony przestrzenneMikołaj Olszewski
 
Programowanie Komponentowe: #1 Wprowadzenie
Programowanie Komponentowe: #1 WprowadzenieProgramowanie Komponentowe: #1 Wprowadzenie
Programowanie Komponentowe: #1 WprowadzenieMikołaj Olszewski
 

Viewers also liked (10)

The metadata driven e-laboratory web client
The metadata driven e-laboratory web clientThe metadata driven e-laboratory web client
The metadata driven e-laboratory web client
 
Optoelektroniczne modelowanie sieci neuronowej cz. 1
Optoelektroniczne modelowanie sieci neuronowej cz. 1Optoelektroniczne modelowanie sieci neuronowej cz. 1
Optoelektroniczne modelowanie sieci neuronowej cz. 1
 
Parallel quicksort cz. 2
Parallel quicksort cz. 2Parallel quicksort cz. 2
Parallel quicksort cz. 2
 
Programowanie Komponentowe: #6 Wersjonowanie
Programowanie Komponentowe: #6 WersjonowanieProgramowanie Komponentowe: #6 Wersjonowanie
Programowanie Komponentowe: #6 Wersjonowanie
 
Kwantowe struktury półprzewodnikowe
Kwantowe struktury półprzewodnikoweKwantowe struktury półprzewodnikowe
Kwantowe struktury półprzewodnikowe
 
Optyczne solitony przestrzenne
Optyczne solitony przestrzenneOptyczne solitony przestrzenne
Optyczne solitony przestrzenne
 
Programowanie Komponentowe: #1 Wprowadzenie
Programowanie Komponentowe: #1 WprowadzenieProgramowanie Komponentowe: #1 Wprowadzenie
Programowanie Komponentowe: #1 Wprowadzenie
 
Architektura heksagonalna
Architektura heksagonalnaArchitektura heksagonalna
Architektura heksagonalna
 
Lokalne sieci światłowodowe
Lokalne sieci światłowodoweLokalne sieci światłowodowe
Lokalne sieci światłowodowe
 
Optyka ciekłych kryształów
Optyka ciekłych kryształówOptyka ciekłych kryształów
Optyka ciekłych kryształów
 

Similar to Programowanie Komponentowe: #9 Java Beans

Hadoop i okolice
Hadoop i okoliceHadoop i okolice
Hadoop i okolicezygm0nt
 
Programowanie Komponentowe: #2 Metody opisu komponentów
Programowanie Komponentowe: #2 Metody opisu komponentówProgramowanie Komponentowe: #2 Metody opisu komponentów
Programowanie Komponentowe: #2 Metody opisu komponentówMikołaj Olszewski
 
Tworzenie grafiki 3D w android
Tworzenie grafiki 3D w androidTworzenie grafiki 3D w android
Tworzenie grafiki 3D w androidArtem Shoobovych
 
MVP - Model View Presenter (polish)
MVP - Model View Presenter (polish)MVP - Model View Presenter (polish)
MVP - Model View Presenter (polish)Przemyslaw Lusnia
 
JDD2014: JAVA.util.concurrent czyli wielowątkowość z różnych perspektyw, tych...
JDD2014: JAVA.util.concurrent czyli wielowątkowość z różnych perspektyw, tych...JDD2014: JAVA.util.concurrent czyli wielowątkowość z różnych perspektyw, tych...
JDD2014: JAVA.util.concurrent czyli wielowątkowość z różnych perspektyw, tych...PROIDEA
 
Integracja JSF + Facelets + Spring + JPA + Tomahawk
Integracja JSF + Facelets + Spring + JPA + TomahawkIntegracja JSF + Facelets + Spring + JPA + Tomahawk
Integracja JSF + Facelets + Spring + JPA + TomahawkWiktor Gworek
 

Similar to Programowanie Komponentowe: #9 Java Beans (7)

DSL - DYI
DSL - DYIDSL - DYI
DSL - DYI
 
Hadoop i okolice
Hadoop i okoliceHadoop i okolice
Hadoop i okolice
 
Programowanie Komponentowe: #2 Metody opisu komponentów
Programowanie Komponentowe: #2 Metody opisu komponentówProgramowanie Komponentowe: #2 Metody opisu komponentów
Programowanie Komponentowe: #2 Metody opisu komponentów
 
Tworzenie grafiki 3D w android
Tworzenie grafiki 3D w androidTworzenie grafiki 3D w android
Tworzenie grafiki 3D w android
 
MVP - Model View Presenter (polish)
MVP - Model View Presenter (polish)MVP - Model View Presenter (polish)
MVP - Model View Presenter (polish)
 
JDD2014: JAVA.util.concurrent czyli wielowątkowość z różnych perspektyw, tych...
JDD2014: JAVA.util.concurrent czyli wielowątkowość z różnych perspektyw, tych...JDD2014: JAVA.util.concurrent czyli wielowątkowość z różnych perspektyw, tych...
JDD2014: JAVA.util.concurrent czyli wielowątkowość z różnych perspektyw, tych...
 
Integracja JSF + Facelets + Spring + JPA + Tomahawk
Integracja JSF + Facelets + Spring + JPA + TomahawkIntegracja JSF + Facelets + Spring + JPA + Tomahawk
Integracja JSF + Facelets + Spring + JPA + Tomahawk
 

More from Mikołaj Olszewski

Optoelektroniczne sieci neuronowe
Optoelektroniczne sieci neuronoweOptoelektroniczne sieci neuronowe
Optoelektroniczne sieci neuronoweMikołaj Olszewski
 
Metody efektywnego łączenia sieci neuronowych
Metody efektywnego łączenia sieci neuronowychMetody efektywnego łączenia sieci neuronowych
Metody efektywnego łączenia sieci neuronowychMikołaj Olszewski
 
Test wyszukiwarek internetowych
Test wyszukiwarek internetowychTest wyszukiwarek internetowych
Test wyszukiwarek internetowychMikołaj Olszewski
 
Programowanie Komponentowe: #5 Wprowadzenie do środowiska .NET
Programowanie Komponentowe: #5 Wprowadzenie do środowiska .NETProgramowanie Komponentowe: #5 Wprowadzenie do środowiska .NET
Programowanie Komponentowe: #5 Wprowadzenie do środowiska .NETMikołaj Olszewski
 
Programowanie komponentowe: #4 Podstawy połączeń komponentów
Programowanie komponentowe: #4 Podstawy połączeń komponentówProgramowanie komponentowe: #4 Podstawy połączeń komponentów
Programowanie komponentowe: #4 Podstawy połączeń komponentówMikołaj Olszewski
 

More from Mikołaj Olszewski (12)

Optoelektroniczne sieci neuronowe
Optoelektroniczne sieci neuronoweOptoelektroniczne sieci neuronowe
Optoelektroniczne sieci neuronowe
 
Swiatłowodowy czujnik prądu
Swiatłowodowy czujnik prąduSwiatłowodowy czujnik prądu
Swiatłowodowy czujnik prądu
 
Metody efektywnego łączenia sieci neuronowych
Metody efektywnego łączenia sieci neuronowychMetody efektywnego łączenia sieci neuronowych
Metody efektywnego łączenia sieci neuronowych
 
Parallel quicksort cz. 1
Parallel quicksort cz. 1Parallel quicksort cz. 1
Parallel quicksort cz. 1
 
Maszyna Turinga
Maszyna TuringaMaszyna Turinga
Maszyna Turinga
 
Planowanie działań cz. 2
Planowanie działań cz. 2Planowanie działań cz. 2
Planowanie działań cz. 2
 
Planowanie działań cz. 1
Planowanie działań cz. 1Planowanie działań cz. 1
Planowanie działań cz. 1
 
Model hierarchiczny
Model hierarchicznyModel hierarchiczny
Model hierarchiczny
 
Komputer genetyczny
Komputer genetycznyKomputer genetyczny
Komputer genetyczny
 
Test wyszukiwarek internetowych
Test wyszukiwarek internetowychTest wyszukiwarek internetowych
Test wyszukiwarek internetowych
 
Programowanie Komponentowe: #5 Wprowadzenie do środowiska .NET
Programowanie Komponentowe: #5 Wprowadzenie do środowiska .NETProgramowanie Komponentowe: #5 Wprowadzenie do środowiska .NET
Programowanie Komponentowe: #5 Wprowadzenie do środowiska .NET
 
Programowanie komponentowe: #4 Podstawy połączeń komponentów
Programowanie komponentowe: #4 Podstawy połączeń komponentówProgramowanie komponentowe: #4 Podstawy połączeń komponentów
Programowanie komponentowe: #4 Podstawy połączeń komponentów
 

Programowanie Komponentowe: #9 Java Beans

  • 1. Mikołaj Olszewski (WZIM SGGW) Programowanie Komponentowe Wykład #9 1 / 37
  • 2. Programowanie Komponentowe Wykład #9: Podstawowe komponenty Javy: JavaBeans Mikołaj Olszewski Wydział Zastosowan Informatyki i Matematyki Szkoły Głównej Gospodarstwa Wiejskiego 9.12.2014 Mikołaj Olszewski (WZIM SGGW) Programowanie Komponentowe Wykład #9 2 / 37
  • 3. Plan wykładu 1 Wprowadzenie 2 Tworzenie ziaren Własciwosci Zdarzenia BeanInfo Trwałosc Wymagania 3 Paczki JAR 4 Podsumowanie Mikołaj Olszewski (WZIM SGGW) Programowanie Komponentowe Wykład #9 3 / 37
  • 4. Java Motto Compile once, run everywhere Jezyk: Java Groovy Scala Clojure Jython . . . Maszyna wirtualna Javy: JVM Srodowisko uruchomieniowe: JRE Srodowisko programistyczne: JDK Mikołaj Olszewski (WZIM SGGW) Programowanie Komponentowe Wykład #9 4 / 37
  • 5. Java Motto Compile once, run everywhere Jezyk: Java Groovy Scala Clojure Jython . . . Maszyna wirtualna Javy: JVM Srodowisko uruchomieniowe: JRE Srodowisko programistyczne: JDK Mikołaj Olszewski (WZIM SGGW) Programowanie Komponentowe Wykład #9 4 / 37
  • 6. Odpowiedniki Edytory VisualStudio ! NetBeans, Eclipse, InteliJ Idea, ... Kompilator csc ! javac System budowania msbuild ! ant Automatyczne zaleznosci nuget ! ivy System budowania i rozwiazywania zaleznosci msbuild + nuget ! ant + ivy, maven, gradle Mikołaj Olszewski (WZIM SGGW) Programowanie Komponentowe Wykład #9 5 / 37
  • 7. Odpowiedniki Edytory VisualStudio ! NetBeans, Eclipse, InteliJ Idea, ... Kompilator csc ! javac System budowania msbuild ! ant Automatyczne zaleznosci nuget ! ivy System budowania i rozwiazywania zaleznosci msbuild + nuget ! ant + ivy, maven, gradle Mikołaj Olszewski (WZIM SGGW) Programowanie Komponentowe Wykład #9 5 / 37
  • 8. Odpowiedniki Edytory VisualStudio ! NetBeans, Eclipse, InteliJ Idea, ... Kompilator csc ! javac System budowania msbuild ! ant Automatyczne zaleznosci nuget ! ivy System budowania i rozwiazywania zaleznosci msbuild + nuget ! ant + ivy, maven, gradle Mikołaj Olszewski (WZIM SGGW) Programowanie Komponentowe Wykład #9 5 / 37
  • 9. Odpowiedniki Edytory VisualStudio ! NetBeans, Eclipse, InteliJ Idea, ... Kompilator csc ! javac System budowania msbuild ! ant Automatyczne zaleznosci nuget ! ivy System budowania i rozwiazywania zaleznosci msbuild + nuget ! ant + ivy, maven, gradle Mikołaj Olszewski (WZIM SGGW) Programowanie Komponentowe Wykład #9 5 / 37
  • 10. Odpowiedniki Edytory VisualStudio ! NetBeans, Eclipse, InteliJ Idea, ... Kompilator csc ! javac System budowania msbuild ! ant Automatyczne zaleznosci nuget ! ivy System budowania i rozwiazywania zaleznosci msbuild + nuget ! ant + ivy, maven, gradle Mikołaj Olszewski (WZIM SGGW) Programowanie Komponentowe Wykład #9 5 / 37
  • 11. Wprowadzenie Plan wykładu 1 Wprowadzenie 2 Tworzenie ziaren Własciwosci Zdarzenia BeanInfo Trwałosc Wymagania 3 Paczki JAR 4 Podsumowanie Mikołaj Olszewski (WZIM SGGW) Programowanie Komponentowe Wykład #9 6 / 37
  • 12. Wprowadzenie Zarys Komponenty programowe — niezalezne moduły Wprowadzone w JDK 1.1 Długotrwałosc w J2SE 1.4 (XML) Dynamicznie zmienialne Uzycie graficznego edytora Według specyfikacji „komponenty wielokrotnego uzycia, które moga byc manipulowane wizualnie przez narzedzia do tworzenia oprogramowania” Mikołaj Olszewski (WZIM SGGW) Programowanie Komponentowe Wykład #9 7 / 37
  • 13. Wprowadzenie Zarys Komponenty programowe — niezalezne moduły Wprowadzone w JDK 1.1 Długotrwałosc w J2SE 1.4 (XML) Dynamicznie zmienialne Uzycie graficznego edytora Według specyfikacji „komponenty wielokrotnego uzycia, które moga byc manipulowane wizualnie przez narzedzia do tworzenia oprogramowania” Mikołaj Olszewski (WZIM SGGW) Programowanie Komponentowe Wykład #9 7 / 37
  • 14. Wprowadzenie Koncepcja Odkrywanie własciowosci, metod i zdarzen — introspekcja wzorzec ziarna klasa informacji o ziarnie (BeanInfo) Własciowosci okreslaja wyglad i zachowanie ziarna Dostosowanie własciowosci w fazie projektowania Komunikacja miedzy ziarnami — zdarzenia Trwałosc Standardowe metody (domyslnie publiczne) Mikołaj Olszewski (WZIM SGGW) Programowanie Komponentowe Wykład #9 8 / 37
  • 15. Wprowadzenie Przykłady ziaren GUI Niewizualne, np. spell checker Animation applet Arkusz kalkulacyjny Mikołaj Olszewski (WZIM SGGW) Programowanie Komponentowe Wykład #9 9 / 37
  • 16. Tworzenie ziaren Plan wykładu 1 Wprowadzenie 2 Tworzenie ziaren Własciwosci Zdarzenia BeanInfo Trwałosc Wymagania 3 Paczki JAR 4 Podsumowanie Mikołaj Olszewski (WZIM SGGW) Programowanie Komponentowe Wykład #9 10 / 37
  • 17. Tworzenie ziaren Przykładowy kod 1 p u b l i c c l a s s MyBean f 23 / Cr e a t e s a new i n s t a n c e o f MyBean / 4 p u b l i c MyBean ( ) f 5 g 67 / 8 Holds v a l u e o f p r o p e r t y yourName . 9 / 10 p r i v a t e S t r i n g yourName ; 11 12 / 13 Ge t t e r f o r p r o p e r t y yourName . 14 @r e turn Value o f p r o p e r t y yourName . 15 / 16 p u b l i c S t r i n g getYourName ( ) f 17 r e t u r n t h i s . yourName ; 18 g 19 20 / 21 S e t t e r f o r p r o p e r t y yourName . 22 @param yourName New v a l u e o f p r o p e r t y yourName . 23 / 24 p u b l i c void setYourName ( S t r i n g yourName ) f 25 t h i s . yourName = yourName ; 26 g 27 g Mikołaj Olszewski (WZIM SGGW) Programowanie Komponentowe Wykład #9 11 / 37
  • 18. Tworzenie ziaren Własciwosci Własciwosci Rodzaje Proste Indeksowane Połaczone Ograniczone Modyfikacje Zapisywalne Tylko do odczytu Ukryte Mikołaj Olszewski (WZIM SGGW) Programowanie Komponentowe Wykład #9 12 / 37
  • 19. Tworzenie ziaren Własciwosci Proste własciwosci Metody getXXX / isXXX setXXX Ograniczenie widocznosci — brak metody 1 p u b l i c c l a s s MyStudentBean f 23 p r i v a t e S t r i n g yourName ; 45 p r i v a t e boolean s t u d e n t = t r ue ; 67 p u b l i c MyStudentBean ( ) f 8 g 9 10 p u b l i c boolean i s S t u d e n t ( ) f 11 r e t u r n s t u d e n t ; 12 g 13 14 p u b l i c S t r i n g getYourName ( ) f 15 r e t u r n t h i s . yourName ; 16 g 17 18 p u b l i c void setYourName ( S t r i n g yourName ) f 19 t h i s . yourName = yourName ; 20 g 21 g Mikołaj Olszewski (WZIM SGGW) Programowanie Komponentowe Wykład #9 13 / 37
  • 20. Tworzenie ziaren Własciwosci Powiazane własciwosci Powiadamianie o zmianach PropertyChanegeEvent source propertyName oldValue newValue 1 p u b l i c c l a s s MyBean f 2 p r i v a t e f i n a l Prope r t yChangeSuppor t pcs 3 = new Prope r t yChangeSuppor t ( t h i s ) ; 45 p u b l i c void a d dPr o p e r t yCh a n g eLi s t e n e r ( 6 Pr o p e r t yCh a n g e L i s t e n e r l i s t e n e r ) f 7 pcs . a d dPr o p e r t yCh a n g eLi s t e n e r ( l i s t e n e r ) ; 8 g 9 10 p u b l i c void r emo v ePr o p e r t yCh a n g eLi s t e n e r ( 11 Pr o p e r t yCh a n g e L i s t e n e r l i s t e n e r ) f 12 pcs . r emo v ePr o p e r t yCh a n g eLi s t e n e r ( l i s t e n e r ) ; 13 g 14 15 p r i v a t e S t r i n g v a l u e ; 16 17 p u b l i c S t r i n g g e tVa lue ( ) f 18 r e t u r n v a l u e ; 19 g 20 21 p u b l i c void s e tVa l u e ( S t r i n g newValue ) f 22 S t r i n g o l dVa l u e = v a l u e ; 23 v a l u e = newValue ; 24 pcs . f i r ePr o p e r t yCh a n g e ( 25 ” v a l u e ” , oldVa lue , newValue ) ; 26 g 27 g Mikołaj Olszewski (WZIM SGGW) Programowanie Komponentowe Wykład #9 14 / 37
  • 21. Tworzenie ziaren Własciwosci Ograniczone własciwosci Powiadamianie o zmianach Brak zgody na zmiany VetoableChangeEvent PropertyVetoException 1 p u b l i c c l a s s MyBean f 2 p r i v a t e f i n a l Ve toabl eChangeSuppor t v c s 3 = new Ve toabl eChangeSuppor t ( t h i s ) ; 45 p u b l i c void a d dVe t o a b l eCh a n g eLi s t e n e r ( 6 Ve t o a b l eCh a n g e L i s t e n e r l i s t e n e r ) f 7 v c s . a d dVe t o a b l eCh a n g eLi s t e n e r ( l i s t e n e r ) ; 8 g 9 10 p u b l i c void r emo v eVe t o a b l eCh a n g eLi s t e n e r ( 11 Ve t o a b l eCh a n g e L i s t e n e r l i s t e n e r ) f 12 v c s . r emo v eVe t o a b l eCh a n g eLi s t e n e r ( l i s t e n e r ) ; 13 g 14 15 . . . 16 17 p r i v a t e S t r i n g v a l u e ; 18 19 p u b l i c S t r i n g g e tVa lue ( ) f 20 r e t u r n v a l u e ; 21 g 22 23 p u b l i c void s e tVa l u e ( S t r i n g newValue ) 24 throws Pr o p e r t yVe t oEx c e p t i o n f 25 S t r i n g o l dVa l u e = v a l u e ; 26 v c s . f i r eVe t o a b l eCh a n g e ( 27 ” v a l u e ” , oldVa lue , newValue ) ; 28 v a l u e = newValue ; 29 pcs . f i r ePr o p e r t yCh a n g e ( 30 ” v a l u e ” , oldVa lue , newValue ) ; 31 g 32 g Mikołaj Olszewski (WZIM SGGW) Programowanie Komponentowe Wykład #9 15 / 37
  • 22. Tworzenie ziaren Własciwosci Indeksowane własciwosci Tablica własciowosci Dostep do całosci Dostep do pojedynczego elementu 1 p u b l i c c l a s s MyBean f 23 p u b l i c MyBean ( ) fg 45 p r i v a t e S t r i n g [ ] l i n e s ; 67 p u b l i c S t r i n g g e t L i n e s ( i n t i n d e x ) f 8 r e t u r n t h i s . l i n e s [ i n d e x ] ; 9 g 10 11 p u b l i c S t r i n g [ ] g e t L i n e s ( ) f 12 r e t u r n t h i s . l i n e s ; 13 g 14 15 p u b l i c void s e t L i n e s ( i n t inde x , S t r i n g l i n e s ) f 16 t h i s . l i n e s [ i n d e x ] = l i n e s ; 17 g 18 19 p u b l i c void s e t L i n e s ( S t r i n g [ ] l i n e s ) f 20 t h i s . l i n e s = l i n e s ; 21 g 22 g Mikołaj Olszewski (WZIM SGGW) Programowanie Komponentowe Wykład #9 16 / 37
  • 23. Tworzenie ziaren Zdarzenia Mikołaj Olszewski (WZIM SGGW) Programowanie Komponentowe Wykład #9 17 / 37
  • 24. Tworzenie ziaren Zdarzenia Model zdarzeniowy Delegacje Zródło Zdarzenie Słuchacz Mikołaj Olszewski (WZIM SGGW) Programowanie Komponentowe Wykład #9 18 / 37
  • 25. Tworzenie ziaren Zdarzenia Przykład 1 p u b l i c c l a s s But tonHandl e r implements Ac t i o n L i s t e n e r f 23 p r i v a t e JTextArea output ; 45 p u b l i c But tonHandl e r ( JTextArea output ) f 6 t h i s . output = output ; 7 g 89 p u b l i c void a c t i o nPe r f o rme d ( Ac t ionEv ent e v ent ) f 10 t h i s . output . append ( ” Ac t i on o c c u r r e d : ” + e v ent + ’nn ’ ) ; 11 g 12 g 13 14 c l a s s Ac t i o nTe s t e r f 15 16 p u b l i c s t a t i c void main ( S t r i n g a r g s [ ] ) f 17 JFrame frame = new JFrame ( ”Button Handl e r ” ) ; 18 JTextArea a r e a = new JTextArea ( 6 , 80 ) ; 19 JButton but ton = new JButton ( ” F i r e Event ” ) ; 20 but ton . a d dAc t i o n L i s t e n e r ( new But tonHandl e r ( a r e a ) ) ; 21 [ . . . ] 22 g 23 g Mikołaj Olszewski (WZIM SGGW) Programowanie Komponentowe Wykład #9 19 / 37
  • 26. Tworzenie ziaren Zdarzenia Konwencje zdarzen Zródło zdarzen public void add EventListenerType(EventListenerType a) public void removeEventListenerType(EventListenerType a) java.util.EventListener Odkrywane w trakcie introspekcji Mikołaj Olszewski (WZIM SGGW) Programowanie Komponentowe Wykład #9 20 / 37
  • 27. Tworzenie ziaren Zdarzenia Łaczenie komponentów poprzez zdarzenia POKAZ Mikołaj Olszewski (WZIM SGGW) Programowanie Komponentowe Wykład #9 21 / 37
  • 28. Tworzenie ziaren BeanInfo BeanInfo Opis ”fasolki” zamiast konwencji java.beans.BeanInfo Pokazanie tylko tego, co niezbedne Rozszerzone atrybuty Odczytywane przez edytory komponentów Mikołaj Olszewski (WZIM SGGW) Programowanie Komponentowe Wykład #9 22 / 37
  • 29. Tworzenie ziaren Trwałosc Mikołaj Olszewski (WZIM SGGW) Programowanie Komponentowe Wykład #9 23 / 37
  • 30. Tworzenie ziaren Trwałosc Trwałosc Przechowanie stanu komponentu Mechanizm — serializacja Implementacja trwałosci java.io.Serializable java.io.Externalizable Wystarczy trwały dowolny przodek Mikołaj Olszewski (WZIM SGGW) Programowanie Komponentowe Wykład #9 24 / 37
  • 31. Tworzenie ziaren Trwałosc Szczegóły serializacji Bezargumentowy konstruktor Nieserializowalne: transient, static Modyfikacje private void writeObject(java.io.ObjectOutputStream out) throws IOException; private void readObject(java.io.ObjectInputStream in) throws IOException, ClassNotFoundException; Mikołaj Olszewski (WZIM SGGW) Programowanie Komponentowe Wykład #9 25 / 37
  • 32. Tworzenie ziaren Trwałosc Długotrwałosc Zapisywanie ziaren w formie XMLa Przykłady: 1 XMLEncoder encode r = new XMLEncoder ( 2 new Buf f e r edOutputSt r eam ( 3 new Fi l eOutputSt r e am ( 4 ” Be a n a r c h i v e . xml ” ) ) ) ; 56 encode r . wr i t eOb j e c t ( o b j e c t ) ; 7 encode r . c l o s e ( ) ; 1 XMLDecoder de code r = new XMLDecoder ( 2 new Bu f f e r e d I n p u tSt r e am ( 3 new F i l e I n p u t S t r e am ( 4 ” Be a n a r c h i v e . xml ” ) ) ) ; 56 Obj e c t o b j e c t = de code r . r e a dOb j e c t ( ) ; 7 de code r . c l o s e ( ) ; Konieczne dla własciwosci publiczny getter publiczny setter Mikołaj Olszewski (WZIM SGGW) Programowanie Komponentowe Wykład #9 26 / 37
  • 33. Tworzenie ziaren Trwałosc Długotrwałosc Zapisywanie ziaren w formie XMLa Przykłady: 1 XMLEncoder encode r = new XMLEncoder ( 2 new Buf f e r edOutputSt r eam ( 3 new Fi l eOutputSt r e am ( 4 ” Be a n a r c h i v e . xml ” ) ) ) ; 56 encode r . wr i t eOb j e c t ( o b j e c t ) ; 7 encode r . c l o s e ( ) ; 1 XMLDecoder de code r = new XMLDecoder ( 2 new Bu f f e r e d I n p u tSt r e am ( 3 new F i l e I n p u t S t r e am ( 4 ” Be a n a r c h i v e . xml ” ) ) ) ; 56 Obj e c t o b j e c t = de code r . r e a dOb j e c t ( ) ; 7 de code r . c l o s e ( ) ; Konieczne dla własciwosci publiczny getter publiczny setter Mikołaj Olszewski (WZIM SGGW) Programowanie Komponentowe Wykład #9 26 / 37
  • 34. Tworzenie ziaren Trwałosc Przykładowy XML 1 ? xml v e r s i o n=” 1 . 0 ” enc oding=”UTF−8” ? 2 j a v a 3 o b j e c t c l a s s=” j a v a x . swing . JFrame ” 4 v o i d method=” add ” 5 o b j e c t c l a s s=” j a v a . awt . Borde rLayout ” 6 f i e l d=”CENTER”/ 7 o b j e c t c l a s s=” SimpleBean ”/ 8 / v o i d 9 v o i d p r o p e r t y=” d e f a u l tCl o s eOp e r a t i o n ” 10 o b j e c t c l a s s=” j a v a x . swing . WindowConstants ” 11 f i e l d=”DISPOSE ON CLOSE”/ 12 / v o i d 13 v o i d method=” pack ”/ 14 v o i d p r o p e r t y=” v i s i b l e ” 15 bo o l e ant r u e/ bo o l e an 16 / v o i d 17 / o b j e c t 18 / j a v a Mikołaj Olszewski (WZIM SGGW) Programowanie Komponentowe Wykład #9 27 / 37
  • 35. Tworzenie ziaren Wymagania Kiedy klasa jest ziarnem? Instancjowalnosc Publiczny bezparametrowy konstruktor Trwałosc Konwencje nazewnicze i dostepowe własciwosci metody zdarzenia Narzedzia standardowe mechanizmy javy, np. Class.forName(...) java.beans.Beans i java.beans.Introspector BeanUtils Mikołaj Olszewski (WZIM SGGW) Programowanie Komponentowe Wykład #9 28 / 37
  • 36. Tworzenie ziaren Wymagania Kiedy klasa jest ziarnem? Instancjowalnosc Publiczny bezparametrowy konstruktor Trwałosc Konwencje nazewnicze i dostepowe własciwosci metody zdarzenia Narzedzia standardowe mechanizmy javy, np. Class.forName(...) java.beans.Beans i java.beans.Introspector BeanUtils Mikołaj Olszewski (WZIM SGGW) Programowanie Komponentowe Wykład #9 28 / 37
  • 37. Tworzenie ziaren Wymagania Kiedy klasa jest ziarnem? Instancjowalnosc Publiczny bezparametrowy konstruktor Trwałosc Konwencje nazewnicze i dostepowe własciwosci metody zdarzenia Narzedzia standardowe mechanizmy javy, np. Class.forName(...) java.beans.Beans i java.beans.Introspector BeanUtils Mikołaj Olszewski (WZIM SGGW) Programowanie Komponentowe Wykład #9 28 / 37
  • 38. Tworzenie ziaren Wymagania Kiedy klasa jest ziarnem? Instancjowalnosc Publiczny bezparametrowy konstruktor Trwałosc Konwencje nazewnicze i dostepowe własciwosci metody zdarzenia Narzedzia standardowe mechanizmy javy, np. Class.forName(...) java.beans.Beans i java.beans.Introspector BeanUtils Mikołaj Olszewski (WZIM SGGW) Programowanie Komponentowe Wykład #9 28 / 37
  • 39. Tworzenie ziaren Wymagania Kiedy klasa jest ziarnem? Instancjowalnosc Publiczny bezparametrowy konstruktor Trwałosc Konwencje nazewnicze i dostepowe własciwosci metody zdarzenia Narzedzia standardowe mechanizmy javy, np. Class.forName(...) java.beans.Beans i java.beans.Introspector BeanUtils Mikołaj Olszewski (WZIM SGGW) Programowanie Komponentowe Wykład #9 28 / 37
  • 40. Tworzenie ziaren Wymagania Kiedy klasa jest ziarnem? Instancjowalnosc Publiczny bezparametrowy konstruktor Trwałosc Konwencje nazewnicze i dostepowe własciwosci metody zdarzenia Narzedzia standardowe mechanizmy javy, np. Class.forName(...) java.beans.Beans i java.beans.Introspector BeanUtils Mikołaj Olszewski (WZIM SGGW) Programowanie Komponentowe Wykład #9 28 / 37
  • 41. Tworzenie ziaren Wymagania Kiedy klasa jest ziarnem? Instancjowalnosc Publiczny bezparametrowy konstruktor Trwałosc Konwencje nazewnicze i dostepowe własciwosci metody zdarzenia Narzedzia standardowe mechanizmy javy, np. Class.forName(...) java.beans.Beans i java.beans.Introspector BeanUtils Mikołaj Olszewski (WZIM SGGW) Programowanie Komponentowe Wykład #9 28 / 37
  • 42. Tworzenie ziaren Wymagania Kiedy klasa jest ziarnem? Instancjowalnosc Publiczny bezparametrowy konstruktor Trwałosc Konwencje nazewnicze i dostepowe własciwosci metody zdarzenia Narzedzia standardowe mechanizmy javy, np. Class.forName(...) java.beans.Beans i java.beans.Introspector BeanUtils Mikołaj Olszewski (WZIM SGGW) Programowanie Komponentowe Wykład #9 28 / 37
  • 43. Tworzenie ziaren Wymagania Kiedy klasa jest ziarnem? Instancjowalnosc Publiczny bezparametrowy konstruktor Trwałosc Konwencje nazewnicze i dostepowe własciwosci metody zdarzenia Narzedzia standardowe mechanizmy javy, np. Class.forName(...) java.beans.Beans i java.beans.Introspector BeanUtils Mikołaj Olszewski (WZIM SGGW) Programowanie Komponentowe Wykład #9 28 / 37
  • 44. Paczki JAR Plan wykładu 1 Wprowadzenie 2 Tworzenie ziaren Własciwosci Zdarzenia BeanInfo Trwałosc Wymagania 3 Paczki JAR 4 Podsumowanie Mikołaj Olszewski (WZIM SGGW) Programowanie Komponentowe Wykład #9 29 / 37
  • 45. Paczki JAR Słoiki — paczki JAR I Skompresowane pliki (ZIP) i Manifest Tworzenie $jar vcf HelloWorld.jar HelloWorld.class added manifest adding: HelloWorld.class(in = 430) (out= 296)(deflated 31%) Przegladanie $jar tf HelloWorld.jar META-INF/ META-INF/MANIFEST.MF HelloWorld.class Wydobycie: $jar xf HelloWorld.jar Mikołaj Olszewski (WZIM SGGW) Programowanie Komponentowe Wykład #9 30 / 37
  • 46. Paczki JAR Słoiki — paczki JAR II Aktualizacja $jar uf HelloWorld.jar HelloWorld.class Uruchomienie $java -jar HelloWorld.jar Failed to load Main-Class manifest attribute from HelloWorld.jar Mikołaj Olszewski (WZIM SGGW) Programowanie Komponentowe Wykład #9 31 / 37
  • 47. Paczki JAR Manifest Manifest-Version: 1.0 Created-By: 1.6.0_26 (Sun Microsystems Inc.) Mikołaj Olszewski (WZIM SGGW) Programowanie Komponentowe Wykład #9 32 / 37
  • 48. Paczki JAR Manifest Manifest-Version: 1.0 Created-By: 1.6.0_26 (Sun Microsystems Inc.) Main-Class: HelloWorld Mikołaj Olszewski (WZIM SGGW) Programowanie Komponentowe Wykład #9 33 / 37
  • 49. Podsumowanie Plan wykładu 1 Wprowadzenie 2 Tworzenie ziaren Własciwosci Zdarzenia BeanInfo Trwałosc Wymagania 3 Paczki JAR 4 Podsumowanie Mikołaj Olszewski (WZIM SGGW) Programowanie Komponentowe Wykład #9 34 / 37
  • 50. Podsumowanie Podsumowanie JavaBean — podstawowe komponenty w Javie Konwencje tworzenia ziaren Introspekcja vs. metaklasa Wizualne edytory (Długo-)Trwałosc Paczkowanie w ”słoiki” Edytory. . . Mikołaj Olszewski (WZIM SGGW) Programowanie Komponentowe Wykład #9 35 / 37
  • 51. Podsumowanie Do domu Przeczytac materiały o JavaBean Przyswoic zagadnienia JavaBean w praktyce Wybrac edytor do kodu Javy nauczyc sie nim posługiwac stworzyc wersje przenosna (na zajecia) Nauczyc sie uzywac gradle-a gradlew — wrapper automatycznie instalujacy gradle-a gradle(w) run — uruchamianie programu gradle(w) test — uruchamianie testów Przygotowac ziarna na laboratoria Mikołaj Olszewski (WZIM SGGW) Programowanie Komponentowe Wykład #9 36 / 37
  • 52. Podsumowanie Mikołaj Olszewski (WZIM SGGW) Programowanie Komponentowe Wykład #9 37 / 37