Zaawansowane technologie Javy Wykad 1 23 lutego 2017

  • Slides: 20
Download presentation
Zaawansowane technologie Javy Wykład 1 (23 lutego 2017) Java. Beans – programowanie komponentowe

Zaawansowane technologie Javy Wykład 1 (23 lutego 2017) Java. Beans – programowanie komponentowe

Komponenty programowe n n n Ziarno to komponent programowy wielokrotnego użytku, oparty na specyfikacji

Komponenty programowe n n n Ziarno to komponent programowy wielokrotnego użytku, oparty na specyfikacji Java. Bean, który wykorzystywany może być przez narzędzia do wizualnego tworzenia aplikacji. Każde ziarno to serializowalny obiekt z bezargumentowym konstruktorem, do którego właściwości można dostać się przy pomocy metod dostępowych. Java. Beans nie powinny być mylone z ziarnami EJB (Enterprise Java. Beans), architekturą komponentową dla aplikacji rozproszonych, która mimo pewnych podobieństw realizuje inne zadania.

Cechy ziaren n Aby klasa Javy stała się ziarnem powinna spełniać następujące konwencje: n

Cechy ziaren n Aby klasa Javy stała się ziarnem powinna spełniać następujące konwencje: n n n klasa powinna być umieszczona w pakiecie; klasa musi posiadać konstruktor domyślny lub bezparametrowy; klasa powinna implementować interfejs java. io. Serializable; wszystkie pola klasy muszą być prywatne; klasa musi mieć metody dostępowe do pól; mogą być w klasie również metody nasłuchu i obsługi zdarzeń.

Właściwości n n Ziarna mają właściwości określające stan obiektu. Dostęp do właściwości zapewniają metody

Właściwości n n Ziarna mają właściwości określające stan obiektu. Dostęp do właściwości zapewniają metody w klasie ziarna, zwane akcesorami: n n n akcesory odczytujące właściwości nazywane są getterami, akcesory ustalające nowe wartości właściwości ziarna nazywane są setterami. Sposoby odczytywania i zmieniania stanu obiektu Java. Bean: n n standardowe wzorce deklaracji metod, introspekcja realizowana za pomocą klasy Introspector.

Właściwości n Typy właściwości: n n n właściwości proste (jedna wartość), właściwości indeksowane (wiele

Właściwości n Typy właściwości: n n n właściwości proste (jedna wartość), właściwości indeksowane (wiele wartości umieszczonych w tablicy). Getter dla właściwości prostej o nazwie Prop i typie Type: Type get. Prop () {…} boolean is. Prop () {…} Setter dla właściwości prostej o nazwie Prop i typie Type: void set. Prop (Type v) {…} Getter dla właściwości indeksowanej o nazwie Prop i typie Type: Type get. Prop (int i) {…} Type[] get. Prop () {…} Setter dla właściwości indeksowanej o nazwie Prop i typie Type: void set. Prop (int i, Type v) {…} void set. Prop (Type[] arr) {…}

Właściwości n Właściwość ziarna może być powiązana (ang. bounded): n n n o zmianie

Właściwości n Właściwość ziarna może być powiązana (ang. bounded): n n n o zmianie właściwości nieograniczonej mogą być powiadamiane inne ziarna i mogą one reagować na tę zmianę. Właściwość ziarna może być ograniczona (ang. constrained): n n o zmianie właściwości ograniczonej mogą być powiadamiane inne zainteresowane ziarna, są one pytane o zgodę na tę zmianę i jeśli któreś z zainteresowanych ziaren zawetuje ją (nie da zgody) to zmiana nie dochodzi do skutku.

Nasłuch zmian n Setter zarówno powiązanej jak i ograniczonej właściwości musi wygenerować zdarzenie Property.

Nasłuch zmian n Setter zarówno powiązanej jak i ograniczonej właściwości musi wygenerować zdarzenie Property. Change. Event. Ziarna mające właściwości powiązane powinny dostarczyć metody: public void add. Property. Change. Listener (Property. Change. Listener) {…} public void remove. Property. Change. Listener (Property. Change. Listener) {…} a także metodę: public Property. Change. Listener[] get. Property. Change. Listeners () {…} Ziarna mające właściwości ograniczone powinny dostarczyć metody: public void add. Vetoable. Change. Listener (Vetoable. Change. Listener) {…} public void remove. Vetoable. Change. Listener (Vetoable. Change. Listener) {…} a także metodę: public Vetoable. Change. Listener[] get. Vetoable. Change. Listeners () {…}

Własne ziarna Zdefiniowanie własnego ziarna wymaga zdefiniowania klasy, która: n stosuje ogólnie przyjęte wzorce

Własne ziarna Zdefiniowanie własnego ziarna wymaga zdefiniowania klasy, która: n stosuje ogólnie przyjęte wzorce sygnatur metod oraz ewentualnie uzupełniona jest przez dodatkową klasę opisującą informacje o ziarnie (implementacja interfejsu Bean. Info); n zapewnia serializację obiektów; n posiada konstruktor bezparametrowy; n uwzględnia pracę w środowisku wielowątkowym.

Nasłuch i wetowanie zmian n Zmiana właściwości generuje zdarzenie Property. Change. Event. Komponenty zainteresowane

Nasłuch i wetowanie zmian n Zmiana właściwości generuje zdarzenie Property. Change. Event. Komponenty zainteresowane śledzeniem zmian pewnej właściwości muszą implementować interfejs Property. Change. Listener. Komponenty, które mogą wetować zmiany pewnej właściwości muszą implementować interfejs Vetoable. Change. Listener.

Nasłuch i wetowanie zmian Obiekt zdarzenia typu Proprty. Change. Event możemy zapytać o: n

Nasłuch i wetowanie zmian Obiekt zdarzenia typu Proprty. Change. Event możemy zapytać o: n nazwę właściwości String get. Property. Name () n n starą (przed zmianą) wartość właściwości Object get. Old. Value () nową (aktualną) wartość właściwości Object get. New. Value ()

Nasłuch i wetowanie zmian n Interfejs Property. Change. Listener ma jedną metodę: public void

Nasłuch i wetowanie zmian n Interfejs Property. Change. Listener ma jedną metodę: public void property. Change (Property. Change. Event ev); Interfejs Vetoable. Change. Listener ma jedną metodę: public void vetoable. Change (Property. Change. Event ev) throws Property. Veto. Exception; Wetowanie zmiany polega na zgłoszeniu wyjątku Property. Veto. Exception.

Nasłuch zmian n n Słuchacze zmian właściwości powiązanych muszą zostać przyłączeni do źródła zdarzenia,

Nasłuch zmian n n Słuchacze zmian właściwości powiązanych muszą zostać przyłączeni do źródła zdarzenia, czyli do ziarna. Słuchacza przyłączamy do ziarna za pomocą metody add. Property. Change. Listener(…). W ziarnie powinna też być zdefiniowana metoda odłączająca słuchacza od ziarna remove. Property. Change. Listener(…). Każdy setter zmieniający właściwość powiązaną musi wygenerować zdarzenie Property. Change. Event i rozpropagować je wśród przyłączonych słuchaczy.

Nasłuch zmian n Istnieje klasa narzędziowa Property. Change. Support, ułatwiająca przyłączanie i odłączanie słuchaczy

Nasłuch zmian n Istnieje klasa narzędziowa Property. Change. Support, ułatwiająca przyłączanie i odłączanie słuchaczy oraz propagowanie zdarzeń wśród przyłączonych słuchaczy zmian określonej właściwości. Klasa ta posiada metody: n n przyłączania i odłączania słuchaczy zmian add. Property. Change. Listener(…) i remove. Property. Change. Listener(…); generujące i propagujące zdarzenia zmiany fire. Property. Change(…) i fire. Indexed. Property. Change(…).

Wetowanie zmian n n Słuchacze zmian właściwości ograniczonych muszą zostać przyłączeni do źródła zdarzenia,

Wetowanie zmian n n Słuchacze zmian właściwości ograniczonych muszą zostać przyłączeni do źródła zdarzenia, czyli do ziarna. Słuchacza przyłączamy do ziarna za pomocą metody add. Vetoable. Change. Listener(…). W ziarnie powinna też być zdefiniowana metoda odłączająca słuchacza od ziarna remove. Vetoable. Change. Listener(…). Każdy setter zmieniający właściwość ograniczoną musi wygenerować zdarzenie Property. Change. Event i rozpropagować je wśród przyłączonych słuchaczy.

Wetowanie zmian n Istnieje klasa narzędziowa Vetoable. Change. Support, ułatwiająca przyłączanie i odłączanie słuchaczy

Wetowanie zmian n Istnieje klasa narzędziowa Vetoable. Change. Support, ułatwiająca przyłączanie i odłączanie słuchaczy oraz propagowanie zdarzeń wśród przyłączonych słuchaczy zmian określonej właściwości. Klasa ta posiada metody: n n przyłączania i odłączania słuchaczy zmian add. Vetoable. Change. Listener(…) i remove. Vetoable. Change. Listener(…); generujące i propagujące zdarzenia zmiany fire. Vetoable. Change(…).

Klasa informacyjna ziarna n n n Refleksja nie wystarcza – mogą istnieć metody set/get,

Klasa informacyjna ziarna n n n Refleksja nie wystarcza – mogą istnieć metody set/get, które nie opisują właściwości ziarna. Bardziej uniwersalny mechanizm, to klasa implementująca Bean. Info – nazwa tej kasy powinna kończyć się przyrostkiem Bean. Info oraz należeć do tego samego pakietu co ziarno. Prostym rozwiązaniem na utworzenie klasy informacyjnej dla ziarna jest dziedziczenie po Simple. Bean. Info.

Klasa informacyjna ziarna n n Dla każdej udostępnionej właściwości ziarna tworzymy obiekt Property. Descriptor:

Klasa informacyjna ziarna n n Dla każdej udostępnionej właściwości ziarna tworzymy obiekt Property. Descriptor: new Property. Descriptor (”właściwość”, Ziarno. class); Następnie implementujemy metodę get. Property. Descriptors() interfejsu Bean. Info: class Ziarno. Bean. Info extends Simple. Bean. Info { public Property. Descriptor[] get. Property. Descriptors () { return new Property. Descriptor[] { new Property. Descriptor (”właściwość1”, Ziarno. class); new Property. Descriptor (”właściwość2”, Ziarno. class); … }; } }

Edytory właściwości n n n Jeśli właściwość ziarna jest liczbą lub napisem, to zostanie

Edytory właściwości n n n Jeśli właściwość ziarna jest liczbą lub napisem, to zostanie automatycznie umieszczona w oknie inspektora właściwości. Jeśli właściwość ziarna nie może być edytowana w polu tekstowym (daty, kolory itp. ), należy dostarczyć własny edytor właściwości. Do określenia własnego edytora właściwości służy metoda set. Property. Editor. Class(): Property. Descriptor desc = new Property. Descriptor( ”właściwość”, Ziarno. class); desc. set. Property. Editor. Class( Edytor. class);

Edytory właściwości n n Edytor właściwości musi posiadać konstruktor domyślny oraz implementować interfejs Property.

Edytory właściwości n n Edytor właściwości musi posiadać konstruktor domyślny oraz implementować interfejs Property. Editor. Support. Dla każdego edytora właściwości wybieramy jeden z trzech sposobów wyświetlania i edycji właściwości: n n n jako łańcuch znaków (metody get. As. Text i set. As. Text); jako pole wyboru (metody get. As. Text, set. As. Text i gett. Tags); graficznie poprzez rysunek (metody is. Paintable, paint. Value, supports. Custom. Editor i get. Custom. Editor).

Literatura (Java. Beans) n K. Barteczko: Java – od podstaw do n Wydawnictwo MIKOM,

Literatura (Java. Beans) n K. Barteczko: Java – od podstaw do n Wydawnictwo MIKOM, Warszawa 2004. C. S. Horstmann, G. Cornell: Core Java – n technologii. Tom 2, część B, rozdział 2: programowanie komponentowe z Java. Beans. techniki zaawansowane. Wydanie 8. Rozdział 8: Java. Beans. Wydawnictwo HELION, Gliwice 2009. Java. Beans(TM) Tutorial: http: //download. oracle. com/ javase/tutorial/javabeans/