Programowanie zdarzeniowe W1 Wprowadzenie

background image

Mariusz Chmielewski - ISI WAT

1

kpt. mgr inż. Mariusz Chmielewski

Instytut Systemów Informatycznych

Wydział Cybernetyki

Wojskowa Akademia Techniczna

Programowanie zdarzeniowe

Wstęp

background image

Plan wykładu

Plan wykładu

• Wprowadzenie do modelu programowania

zdarzeniowego

• Charakterystyka filozofia budowa GUI w technologii

JAVA

– Wprowadzenie do technologii Applet’ów Java
– Charakterystyka AWT
– Charakterystyka JFC - Swing
– Przegląd komponentów graficznych biblioteki
– Model obsługi zdarzeń – specyfika modelu

delegacji zdarzeń

– Zarządzanie komponentami
– Modyfikacje komponentów

• Przykłady kodów programowych

Mariusz Chmielewski - ISI WAT

2

background image

Sterowanie wykonaniem programu

Sterowanie wykonaniem programu

• W jednoprocesowych architekturach w jednej

chwili obsługiwany był tylko jeden program;

• Sterowanie wykonaniem programu odbywa się

przez:

– jawne deklarowanie kolejności wykonania instrukcji

(działania) – program wsadowy lub jednoprzebiegowy;

– interaktywną pętlę obsługi menu (wybór opcji);

• Architektury wieloprocesowe pozwalają na:

– systemową pętlę obsługi zdarzeń i delegację modelu

obsługi zdarzeń – specyficzną dla wybranej technologii
wytwarzania oprogramowania:

• Java – AWT – SWING – SWT
• C++ (VC++ - Borland C++)
• C#
• Visual Basic;

Mariusz Chmielewski - ISI WAT

3

background image

Pętla obsługi wyboru opcji –

Pętla obsługi wyboru opcji –

program

program

wykorzystujący konsolę

wykorzystujący konsolę

Mariusz Chmielewski - ISI WAT

4

PoczątekProgramu
WyświetlMenu(
"1.Faktura",
"2.Dodaj klienta",
"3.Indeksacja bazy",
"4.Koniec pracy")
AktywnaOpcja=1
PowtarzajPętlę:
PodświetlMenu(AktywnaOpcja)
PobierzDaneZKlawiatury(Znak)

Jeżeli (Znak=Enter)
wtedy WybierzAkcję(AktywnaOpcja):
1:

WystawFakturę

2:

DodajNowegoKlienta

3:

IndeksujBazęDanych

4:

PrzerwijPętlę

KoniecWyboruAkcji
Jeżeli (Znak=(Strzałka,Home,End,PgUp,PgDn))
wtedy ZmieńAktywnąOpcję(AktywnaOpcja,Znak)

KoniecPętli
KoniecProgramu

background image

Pętla obsługi wyboru opcji – model

Pętla obsługi wyboru opcji – model

zdarzeniowy

zdarzeniowy

Mariusz Chmielewski - ISI WAT

5

PoczątekProgramu
ZaładujProceduryObsługiZdarzeńDoPamięci(

WystawFakturę,

DodajNowegoKlienta,
IndeksujBazęDanych

)

DodajDoSystemuMenu(
"1.Faktura",
"2.Dodaj klienta",
"3.Indeksacja bazy",
"4.Koniec pracy")

ZdefiniujPrzypisanieZdarzeńDoProcedur(
NaZdarzenie

WybranoOpcjęFaktura

reaguj:

WystawFakturę

NaZdarzenie

WybranoOpcjęDodajKlienta

reaguj:

DodajNowegoKlienta

NaZdarzenie

WybranoOpcjęReindeksacja

reaguj:

IndeksujBazęDanych

NaZdarzenie

WybranoOpcjęKoniecPracy

reaguj:

(

UsuńZPamięciProceduryObsługiZdarzeń,

UsuńDefinicjePrzypisaniaObsługiZdarzeńTegoProgramu,
PrzekażSterowanieSystemowiOperacyjnemu

)

)
PrzekażSterowanieSystemowiOperacyjnemu

KoniecProgramu

background image

Model programowania zdarzeniowego

Model programowania zdarzeniowego

• Podstawowe cechy modelu delegacji obsługi zdarzeń:

– Brak jawnej pętli obsługi zdarzeń (ODSTĘPSTWO SWT !);
– Rozdział zdarzeń realizowany przez system operacyjny;
– Konwersja zdarzeń sprzętowych (od urządzeń

zewnętrznych, np. klawiatura, mysz) na zdarzenia typu
znaczeniowego (np. "wybrano opcję menu” itd.);

– Obsługa menu (zmiana wyglądu i przejście między jego

opcjami) jest realizowane niejawnie przez system
operacyjny;

• Programowanie obiektowe wspiera model sterowania

zdarzeniami:

– po zdarzeniu system deleguje obsługę do wskazanego

obiektu;

– dotyczy to obecnie wszystkich języków programowania a w

nich także programowania GUI;

Mariusz Chmielewski - ISI WAT

6

background image

Model MVC – Model View Controller

Model MVC – Model View Controller

Mariusz Chmielewski - ISI WAT

7

Aplikacja

• Składowe logiczne trójwarstwowej

architektury MVC:

Warstwa

prezentacji

Warstwa

logiki aplikacji (usługi)

Serwer

web’owy

Serwer

aplikacji

View

Model

Controller

Warstwa

danych

Controller

÷ przetwarzanie żądań klienta;
÷ wiązanie ‘Model’ z „View’;

Model

÷ logika usług;
÷ przygotowanie danych (dostęp do bazy);

View

÷ prezentacja sformatowanych danych po stronie

użytkownika (także applety Java, HTML, JSP);

background image

Kompozyt (Composite) – Wzorce

Kompozyt (Composite) – Wzorce

projektowe

projektowe

• System złożony z podsystemów o

strukturze drzewiastej ( reprezentacja

związku „całość-część”);

• Wspólny interfejs dla klas węzłów i liści –

ujednolicone widzenie kontenerów i

obiektów składowanych;

• Łatwo rozszerzalny o nowe podsystemy

implementujące (określony interfejs);

Kompozyt -> buduje hierarchię z

obiektów prostych i złożonych

• Przykłady:

– Przykład w bibliotekach Javy: kontenery (JPanel,

JComponent, JFrame, JDesktopPane …, );

Mariusz Chmielewski - ISI WAT

8

background image

Kompozyt (Composite) – Wzorce

Kompozyt (Composite) – Wzorce

projektowe

projektowe

Adapter Definicja

Przeznaczenie
Wzorzec przekształca interfejs klasy w taki, jakiego klienci oczekują.
Dzięki Adapterowi klasy mogą współpracować, co bez niego nie byłoby
możliwe, ponieważ mają niezgodne interfejsy.

Przykład

Dołączenie istniejącej rejestracji do grup do nowego modelu jej obsługi.

Stosowalność

• chcemy wykorzystać istniejącą klasę, a jej interfejs nie odpowiada
temu, którego potrzebujemy;
• chcemy utworzyć klasę wielokrotnego użytku, która współpracuje z
niepowiązanymi ze sobą lub nieprzewidzianymi klasami, to znaczy
takimi, które niekoniecznie mają zgodne interfejsy;
• (tylko adapter obiektów) potrzebujemy użyć kilku istniejących
podklas, ale zaadaptowanie ich interfejsów przez tworzenie ich podklas
jest niepraktyczne; adapter obiektów może adaptować interfejs swojej
nadklasy.

Mariusz Chmielewski - ISI WAT

9

background image

Kompozyt (Composite)

Kompozyt (Composite)

• Uczestnicy wzorca

– Component

• Definiuje interfejsy: dla klasy Client oraz dla węzłów i

liści składowych;

• Implementuje domyślne zachowanie;

– Leaf

• Definiuje zachowanie „prymitywów”;
• Nie ma potomków;

– Composite

• Implementuje zachowanie złożonych obiektów;
• Posiada potomków;

– Client

• współpracuje z obiektami kompozycji poprzez interfejs

Component;

Mariusz Chmielewski - ISI WAT

10

background image

Kompozyt (Composite)

Kompozyt (Composite)

Mariusz Chmielewski - ISI WAT

11

background image

Kompozyt (Composite) - warianty

Kompozyt (Composite) - warianty

Mariusz Chmielewski - ISI WAT

12

background image

Kompozyt (Composite) - warianty

Kompozyt (Composite) - warianty

Konsekwencje adaptera klas

• adaptuje Adaptowanego do Celu, ale nie będzie
działał na podklasy Adaptowanego;
• umożliwia Adapterowi przedefiniowanie części
zachowania Adaptowanego;
• wprowadza tylko jeden obiekt, aby dostać się do
Adaptowanego.

Konsekwencje adaptera obiektów

• umożliwia jednemu Adapterowi działanie z
wieloma Adaptowanymi, w tym z wszystkimi
podklasami Adaptowanego;
• utrudnia przedefiniowywanie zachowania
Adaptowanego.

Mariusz Chmielewski - ISI WAT

13

background image

Java 2 SE - Architektura

Java 2 SE - Architektura

Mariusz Chmielewski - ISI WAT

14

background image

Abstarct Widget Toolkit

Abstarct Widget Toolkit

• Pierwsza, prymitywna biblioteka graficzna środowiska Java

dedykowana technologii apletów;

• AWT to komponenty

heavyweight

– Obiekty GUI w AWT wykorzystują komponenty systemu operacyjny;
– System operacyjny przejmuje na siebie mechanzimy renderowania

komponentów graficznych;

– np. w Windows przycisk w Java AWT jest implementowany przez

przycisk Windows‘a;

– Wygląd komponentów zależy od platformy i w odróżnieniu od

SWING nie udostępnia PLAF;

• W starych programach Java stosowano komponenty AWT;

– Swing jest sukcesorem AWT;

NIGDY nie mieszamy

Swing i AWT w jednym programie;

• Składowe AWT są wciąż stosowane, np.

layout managers +

iterfejsy obsługi zdarzeń

Mariusz Chmielewski - ISI WAT

15

background image

Java Foundation Classes - Swing

Java Foundation Classes - Swing

─ Swing jest częścią

Java Foundation Classes

(JFC)

– 18 publicznych pakietów, ponad 300 klas;

─ Od wersji 1.3 standardowy komponent środowiska

uruchomieniowego - udostępniane z JRE (javax.swing.*)

─ Wygląd niezależny od platformy operacyjnej – ujednolicony

Metal PLAF;

─ Swing wspiera komponenty

lightweight

– Rysowanie w obszarze zarządzanym przez Java;
– Funkcjonalność GUI zaimplementowana w Java – Mechanizmy

JVM są odpowiedzialne za renderowanie komponentów
graficznych;

─ Poprzednio mało wydajny (polepszone od Java 1.4)
─ Biblioteka jest bogatym zbiorem wzorców projektowych

szczególnie wartościowym z punktu widzenia inżynierii
oprogramowania;

Mariusz Chmielewski - ISI WAT

16

javax.accessibility

javax.swing.plaf

javax.swing.text

javax.swing

javax.swing.plaf.basic

javax.swing.text.html

javax.swing.border

javax.swing.plaf.metal

javax.swing.text.html.par
ser

javax.swing.colorchooser

javax.swing.plaf.multi

javax.swing.text.rtf

javax.swing.event

javax.swing.plaf.synth

javax.swing.tree

javax.swing.filechooser

javax.swing.table

javax.swing.undo

background image

Zasady SWING – AWT ?

Zasady SWING – AWT ?

• Komponenty Swinga nie mogą być łączone w ramach

budowanych aplikacji z komponentami AWT.

• Komponenty AWT są komponentami, które

bezpośrednio wykorzystują właściwości platformy dla
której zostały zaimplementowane.

• Swing w odróżnieniu od innych technologii nie

wykorzystuje wsparcia systemu operacyjnego i sam
od podstaw implementuje mechanizmy wyświetlania
stąd uniezależnia się od platformy jednak również tym
samym nie korzysta z jej akceleracji graficznej.

• Jest to w głównej mierze powód dla którego

komponenty JFC w trakcie uruchamiania aplikacji
powodują zauważalne opóźnienie jak również są mniej
wydajniejsze niż komponenty platformy systemowej.

Mariusz Chmielewski - ISI WAT

17

background image

Zasady SWING – AWT ?

Zasady SWING – AWT ?

• Mieszanie komponentów Swing i AWT jest

możliwe jednak wymaga odpowiedniego
budowania aplikacji.

• W takim przypadku należy zapewnić by aplikacja

graficzna w żadnym momencie nie dopuszczała
egzystowania komponentów Swing na tle
komponentów AWT.

• Taka sytuacja nie spowoduje błędu aplikacji

jednak uzyskamy efekt nakładania komponentu

– Komponent AWT
– Komponent Swing – JInternalFrame
– Obszar komponentu błędnie odrysowany
– AWT na część komponentu Swing.

Mariusz Chmielewski - ISI WAT

18

background image

Zasady SWING – AWT ?

Zasady SWING – AWT ?

Mariusz Chmielewski - ISI WAT

19

Kompone
nt AWT

Komponent
Swing –
JInternalFrame

Obszar
komponentu
błędnie
odrysowany

background image

SWT (Standard Widget Toolkit)

SWT (Standard Widget Toolkit)

SWT jest biblioteką graficzną dla środowiska

Java, stanowiącą alternatywę dla

standardowych bibliotek Javy: AWT i Swing;

Jest rozwijana na zasadach open source przez

Fundację Eclipse;

Zależna od platformy (są implementacje dla

większości platform);

Używa natywnych kontrolek systemowych (JNI) -

Widgets;

Tylko komponenty, które nie są wspierane przez

dany system operacyjny zaimplementowane;

Biblioteka wyższego poziomu – JFace (edytory w

oknie Eclipse);

Mariusz Chmielewski - ISI WAT

20

background image

Swing

Swing

Mariusz Chmielewski - ISI WAT

21

background image

Struktura SWING - Główne Komponenty

Struktura SWING - Główne Komponenty

Mariusz Chmielewski - ISI WAT

22

background image

SWT

SWT

Mariusz Chmielewski - ISI WAT

23

background image

• Etapy tworzenia GUI w Java:

– 1. Deklaracja kontrolek GUI (

controls

);

– 2. Implementacja obsługi zdarzeń (

event

handlers

) – interakcje przekazywanie

zdarzeń między komponentami;

– 3. Ułożenie kontrolek na ekranie przez

obiekty:

layout managers

i/lub

containers

– wykorzystanie gotowych komponentów,
konfiguracja LM, budowa własnego LM
.

– 4? Modyfikacja PLAF

Mariusz Chmielewski - ISI WAT

24

background image

Kontenery najwyższego poziomu

Kontenery najwyższego poziomu

• Kontrolka (

Control

):

kontrolka to komponent GUI:, np. przycisk, suwak;

nazywane widgets (window gadget), np. w systemie
UNIX

• Kontener (

Container

):

grupuje kontrolki i inne kontenery;

umożliwia grupowe zarządzanie (np. przesunięcie,
ukrywanie)

każdy program napisany ze Swing musi posiadać
przynajmniej jeden kontener najwyższego poziomu:

• JFrame ( pojedyncze okno aplikacji)
• JDialog (okienko dialogowe)
• JApplet (dla apletów)

Mariusz Chmielewski - ISI WAT

25

background image

• Swing wyróżnia 6 kategorii kontrolek:

– podstawowe (basic controls)
– nieedytowalne (uneditable displays)
– edytowalne (editable displays)
– obszarowe (space-saving containers)
– kontenery najwyższego poziomu (top-

level containers)

– pozostałe (other containers)

Mariusz Chmielewski - ISI WAT

26

background image

Podstawowe kontrolki - komponenty

Podstawowe kontrolki - komponenty

• Control

Swing Class Name

– button

JButton

,

JCheckBox

,

JRadioButton

– combo box

JComboBox

– list

JList

– menu

JMenu, JMenuBar, JMenuItem

– slider

JSlider

– toolbar

JToolbar

– text field

JTextField

, JPasswordField

Mariusz Chmielewski - ISI WAT

27

background image

Podstawowe kontrolki - komponenty

Podstawowe kontrolki - komponenty

Mariusz Chmielewski - ISI WAT

28

• Control

Swing Class Name

– button

JButton

,

JCheckBox

,

JRadioButton

– combo box

JComboBox

– list

JList

– menu

JMenu, JMenuBar,

JMenuItem

– slider

JSlider

– toolbar

JToolbar

– text field

JTextField

,

JPasswordField

background image

Obsługa zdarzeń (akcji)

Obsługa zdarzeń (akcji)

• Obsługa zdarzeń oparta jest na wzorcu

Observer/Listener

;

• Każdy komponent może być obserwowany

przez wielu obserwatorów;

• Każdy komponent może obsługiwać wiele

typów słuchaczy (np. zdarzenia obsługi
myszy, klawiatury, zmiany struktury itd.);

• Metody obsługi zdarzeń są wywoływane

automatycznie po zajściu zdarzenia;

• Komponent musi rejestrować obiekt

odpowiedzialny za obsługę zdarzeń;

Mariusz Chmielewski - ISI WAT

29

background image

Obserwator (Observer - Listener)

Obserwator (Observer - Listener)

• Ciągłe odpytywanie o stan obiektu prowadzi

do znacznego spadku wydajności aplikacji;

• Obserwator (Observer) przechowuje

informację o stanie lub reaguje na zmianę

stanu innych obiektów;

• Luźne powiązanie z określonym obiektem;
• Może być kilku obserwatorów jednego

obiektu: relacja obiektów 1:N;

• Wybrany obiekt powiadamia

zainteresowanych o zmianie swojego stanu;

• Przykłady użycia:

– obsługa zdarzeń w okienkach,
– synchronizacja modelu z widokiem;

Mariusz Chmielewski - ISI WAT

30

background image

Obserwator (Observer - Listener)

Obserwator (Observer - Listener)

• Uczestnicy

– Subject

• Posiada referencje do obiektów Observer;
• Interfejs operacji dołączania i odłączania obiektów

Observer;

– Observer

• Definiuje interfejs metody aktualizującej;

– Concrete Subject

• Przechowuje stan interesujący konkretny obiekt Observator;
• wysyła powiadomienia obiektom Observer;

– Concrete Observer

• przechowuje referencję do Concrete Subject;
• aktualizuje swój stan razem ze stanem obiektu Concrete

Subject;

Mariusz Chmielewski - ISI WAT

31

background image

Obserwator (Observer - Listener)

Obserwator (Observer - Listener)

Mariusz Chmielewski - ISI WAT

32

interface Observer {

public void update( Oservable obs, Object

arg );

}

interface Observer {

public void update( Oservable obs, Object

arg );

}

background image

Mariusz Chmielewski - ISI WAT

33

Program z GUI

Klasa implementująca
klasę listener’a

Zdarzenie (event)

Metoda

obsługi zdarzenia

Typowa akcja
to „update” danych

• Deklaracja zakresu nasłuchiwania – interfejs słuchacza
(listener);

• Klasy zdarzeń (komunikatów):

XXXEvent

• Klasy (interfejsy) nasłuchiwaczy:

XXXListener

• Powiązanie komponentu GUI z obiektem słuchacza -
rejestracja;

addXXXListener, removeXXXListener

• Implementacja metod obsługi zdarzeń zgodnie z
deklaracją;

•JRE automatycznie wywołuje metody obsługi zdarzeń;

background image

Obsługa zdarzeń (akcji)

Obsługa zdarzeń (akcji)

• 10 podstawowych klas słuchaczy

(Listener):

– ActionListener
– ItemListener
– MouseListener

,

MouseMotionListener

– WindowListener
– KeyListener
– TextListener
– ComponentListener
– ContainerListener
– FocusListener

Mariusz Chmielewski - ISI WAT

34

background image

Przykłady słuchaczy AWT

Przykłady słuchaczy AWT

Event listener interfaces in

java.awt.events

• ActionListener

• AdjustmentListener

• AWTEventListener

• ComponentListener

• ContainerListener

• FocusListener Focus

• HierarchyBoundsListener Hierarchy

• HierarchyListener Hierarchy

• InputMethodListener

• ItemListener

• KeyListener

• MouseListener

• MouseMotionListener

• MouseWheelListener

• TextListener

• WindowFocusListener

• WindowListener

• WindowStateListener

Mariusz Chmielewski - ISI WAT

35

background image

Przykłady słuchaczy Swing

Przykłady słuchaczy Swing

Event listener interfaces in javax.swing.event

• AncestorListener

• CaretListener

• CellEditorListener

• ChangeListener

• DocumentListener

• HyperlinkListener

• InternalFrameListener

• ListDataListener

• ListSelectionListener

• MenuDragMouseListener

• MenuKeyListener

• MenuListener

• MouseInputListener

• PopupMenuListener

• TableColumnModelListener

• TableModelListener

• TreeExpansionListener

• TreeModelListener

• TreeSelectionListener

• TreeWillExpandListener

• UndoableEditListener

Mariusz Chmielewski - ISI WAT

36


Document Outline


Wyszukiwarka

Podobne podstrony:
Programowania zdarzeniowe W1 Technologia Applet AWT
PD W1 Wprowadzenie do PD(2010 10 02) 1 1
FP W1 Wprowadzenie do FP 25 09 13
W1 1 Wprowadzenie do Ekonomiki Budownictwa UZUPELNIENIE
Programowanie liniowe informacje wprowadzające
Pakiet programów?ukacyjnych z zakresu przedmiotu wprowadzenie do informatyki
2 Programowanie w jezyku logiki wprowadzenie
C++ programowanie zdarzeniowe
W1 wprowadzenie
ZBI W1 Wprowadzenie ESGH
Programowanie obiektowe, w1, 1
Teksty programow Zdarzenie1
FP W1 Wprowadzenie do FP 25.09.13
PR MSZ Wrocław blok W1 (wprowadzenie )
Programowanie zdarzeniowe kontakt, zaliczenie
W1 Wprowadzenie

więcej podobnych podstron