Applety Java

advertisement
Applety Java
●
●
●
Są to komponenty stron WWW o ukrytym kodzie
Applety są pisane w zwykłej Javie i dlatego kompilowane
do pliku(ów) *.class, a nie interpretowane jak skrypty w
JavaScript
Aby przeglądarka odtwarzała applety, musi mieć JVM
–
●
dlatego w starszych wersjach MSIE przy uruchomieniu pierwszego
appletu konieczna była instalacja JVM
Applety są przykładem kodu Java wykonywanego
po stronie klienta, ale bez ujawnionej (jak w przypadku
skryptu) wersji źródłowej
Applety cd.
●
●
Zaletą appletu jest niedostępność jego źródeł,
wadą – skomplikowany proces przebudowy,
dłuższy od skryptu czas wykonywania
Applet można „zdisassemblować”
[JavaHome]\bin\javap
–
-c
plik_class
Odczytamy w ten sposób
–
–
–
ilość i nazwy klas
ilość i nazwy metod w tych klasach
ilość i miejsca wywołań tych metod
przykład
Klasy tworzące applet
ImageObserver,
MenuContainer,
Serializable
java.lang.Object
| +--java.awt.Component
| +--java.awt.Container
| +--java.awt.Panel
| +--java.applet.Applet
public class MyApplet
JApplet – ew. na bazie pakietu javax.swing
Jak działa applet ???
paint(Graphics)
repaint()
Funkcje klasy Applet
●
Sterujące wyglądem appletu
–
●
Współpraca ze stroną WWW
–
–
●
isActive();showStatus(String);getDocumentBase()
getParameter(); getImage(URL)
Multimedialne
–
●
resize(int,int); resize(Dim); paint(Graphics)
newAudioClip(URL); getAudioClip(URL); play(URL)
Zarządzające komponentami i zdarzeniami (dziedziczone z
Container)
– add(komponent); addItemListener(pojemnik)
Funkcje specjalne
●
●
●
Funkcje specjalne – zarządzające cyklem życia appletu;
„called by the browser” (wg dokumentacji)
void init( ) – przydział pamięci
dla zmiennych, przypisanie wartości pocz.
void paint(Graphics g) (maluj ) – rysowanie zawartości okna
apletu, obowiązkowa redef.
–
●
repaint() – odświeżenie okna appletu
Inne start(),stop(),destroy(), run()-zarządzanie wątkami
Tyloch, rozdział 2.6
Przykłady: Holzner, Clickers, Checkers, Dauber, Sandwich, itd.
–
Aplikacje interaktywne
Pojęcia podstawowe , Tyloch rozdz. 2.6.3
●
Zdarzenie – dowolne działanie użytkownika
w systemie/aplikacji; kliknięcie, ruch myszą, użycie
klawisza itp.
●
Komunikat – sygnał przekazujący do aplikacji parametry
zdarzenia, np. który „button” kliknięto,
jakie są nowe współrzędne położenia kursora myszy, kod
użytego klawisza itp.
●
Handler (ang. handle, obsługiwać) – fragment kodu
wykonywany w przypadku pojawienia się komunikatu,
odpowiedź na zdarzenie
Przykłady handlerów
●
C/C++:
OnButton1Click(....) //MFC 4.2
OnMouseMove(.....)
{
// funkcja jest składową jednej z
klas interfejsu, np. klasy okna aplikacji,
klasy widoku itp.
}
●
JavaactionPerformed(ActionEvent e)
if (e.getSource() == button1)
{...}
}
Zasada akcja-reakcja
{
Pętla obsługi zdarzeń
N
Czy zaszło
zdarzenie ?
N
Czy w aplikacji
jest handler?
Nasłuchuj dalej...
T
T
Odczytaj parametry zdarzenia
handler()
Wygeneruj komunikat
T
handler()
Czy w sys.op.
jest handler?
N
Ctrl+Esc
Corel
Pętla obsługi zdarzeń cd.
●
Wyjście z pętli na poziomie aplikacji następuje
po wywołaniu handlera „exitApplication” (w aplikacji
aktywnej)
–
●
Alt+F4, kliknięcie krzyżyka, menu „Zakończ” itp.
Wyjście z pętli obsługi zdarzeń na poziomie systemu
następuje w przypadku zamknięcia systemu
Relacja zdarzenie-handler
●
Jeden handler może być wywołany dla kilku różnych
zdarzeń
–
Ctrl+S, Menu File-Save, kliknięcie „dyskietki” na toolbarze
<Ctrl+S>
OnFileSave()
Jedno
zdarzenie może mieć przypisany tylko jeden handler
 Wiele do jednego
Klasyczny i delegacyjny model
obsługi zdarzeń Tyloch, rozdz. 2.6.3
Model klasyczny (tradycyjny)
Handler jest składową obiektu przyjmującego zdarzenie (najczęściej
odziedziczoną po klasie nadrzędnej)
Handler jest osobną funkcją wyspecjalizowaną w obsłudze konkretnego
zdarzenia (1 funkcja – 1 zdarzenie )*
public class MouseOperations extends Applet
{
public boolean mouseUp(Event event, int x ,int y)
public boolean mouseDown(Event event, int x ,int y)
public boolean mouseDrag(Event event, int x ,int y)
.................................
}
{......}
{......}
{...... }
Wady modelu tradycyjnego
●
W modelu tradycyjnym klasa gotowa przyjąć zdarzenie musi mieć
handler „na każdą okazję”
– duży rozmiar kodu źródłowego – zob. w dokumentacji
– konieczność dziedziczenia wszystkich potencjalnych handlerów
do klas, które nie zamierzają z nich korzystać;
zmniejsza to przestrzeń nazw metod
● java.applet.Applet
dziedziczy te wszystkie funkcje
po java.awt.Component
dokumentacja
– brak realizacji zasady enkapsulacji – obsługę zdarzeń
można by przenieść do klasy wyspecjalizowanej tylko
w odpowiadaniu na zdarzenia
● przykład z Tylocha rozdz. 2.6.3
Model semi-delegacyjny MFC 4.2
●
Microsoft Foundation Class
–
●
Analogicznie – JFC
MFC 4.2 – (model semi-delegacyjny) zdarzenie
trafia do kolejnych klas aplikacji (lub ich
przodków) wg ustalonego porządku: widokdokument-ramka-aplikacja
Model delegacyjny w Javie (1)
• Od kwietnia 1997, JDK 1.1
•
• Handler jest funkcją lub fragmentem funkcji
zadeklarowanej w implementowanym interfejsie
• Obiekt obłsugujący zdarzenie nie musi mieć
• Zdarzenie można obsłużyć w dowolnej innej
klasie, czyli „oddelegować” je.
Przykład: Tyloch, rozdz. 2.6.3
Model delegacyjny w Javie (2)
Java – zdarzenie trafia do klasy aplikacji, stamtąd delegowane jest do metody
zarejestrowanego interfejsu w tej lub w innej klasie
●
Zasady obsługi zdarzeń w modelu delegacyjnym.
1. Deklaracja klasy (przeznaczonej do obsługi)
implementującej odpowiedni interfejs nasłuchujący
2. Rejestracja dla danego komponentu obiektu klasy
nasłuchującej
czyli ''kto odpowiada za obsługę kliknięcia przycisku?''
– Przykład z tą samą klasą: Holzner/clickers
● kontrolka.addCośtamListener(this)
– Przykład z klasą wyspecjalizowaną: Tyloch
● kontrolka.addCośtamListener(ob_z_handlerami)
3. Implementacja metod z interfejsu nasłuchującego.
●
Warianty obsługi zdarzeń
w modelu delegacyjnym
Dotyczy punktu 2. z poprzedniego slajdu
Klasa wyspecjalizowana w obłsudze zdarzeń może być
●
Tą samą klasą której komponent przyjmuje zdarzenie
●
Klasą zewnętrzną względem przyjmującej zdarzenie
●
Klasą wewnętrzną względem przyjmującej zdarzenie
●
Klasą anonimową (!!!) (JCreator, v. 3.1 i nowsze)
●
Klasą adaptacyjną skojarzoną z danym interfejsem
– wewnętrzną lub zewnętrzną
Download