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