Przejdź na wyższy poziom programowania dzięki dwóm "guru" Javy: Herbowi Schildtowi i Jamesowi Holmesowi. Połączenie ich wiedzy pozwoli Ci poznać wiele sekretów i sztuczek wykorzystywanych przez profesjonalistów. W książce autorzy przedstawiają przykłady użytecznych aplikacji oraz towarzyszące im opisy użytych technologii. Prezentowane przykłady możesz wykorzystać w swojej codziennej pracy. Począwszy od interpreterów języka, agentów internetowych i podsystemów e-mail, skończywszy na analizatorach wyrażeń, narzędziach statystycznych i apletach finansowych -- wszystkie aplikacje są gotowe do użycia. Można je też dowolnie modyfikować i rozszerzać.
W książce znajdziesz:
* Omówienie zalet języka Java,
* Tworzenie analizatora wyrażeń numerycznych,
* Tworzenie agenta przeszukującego internet,
* Projektowanie i implementacja interpretera języka programowania,
* Wykonanie funkcjonalnego systemu pocztowego,
* Konstruowanie programu do pobierania danych z internetu z możliwością pobierania fragmentów stron,
* Wykonanie narzędzi statystycznych obliczających średnia, medianę, modalną, odchylenie standardowe, itp.
* Wykonanie apletów i serwletów finansowych obliczających równe raty pożyczki, przyszłą wartość inwestycji, kwotę emerytury, itp.
* Prześledzenie różnych technik wyszukiwania bazujących na sztucznej inteligencji,
* Zapoznanie się z możliwością przeglądania stron HTML-a w Javie.
O autorach:
Herb Schildt jest autorytetem w sprawach języków C, C++, Java i C#, a także doskonałym programistą systemu Windows.
[więcej...]
James Holmes jest konsultantem do spraw tworzenia programowania oraz aplikacji serwerowych w środowiskach biznesowych.
[więcej...]
Jeżeli poznałeś już podstawy Javy, to czas na następny krok.
* Uwolnij siłę drzemiącą w Javie i w jej bibliotekach.
* Niezwykle różnorodne przykłady praktycznych aplikacji.
* Cenny kod źródłowy do wykorzystania we własnych projektach.
1. IDZ DO
PRZYK£ADOWY ROZDZIA£
SPIS TRE CI Java. Sztuka
programowania
KATALOG KSI¥¯EK
Autorzy: Herbert Schildt, James Holmes
KATALOG ONLINE T³umaczenie: Rafa³ Joñca
ISBN: 83-7361-422-2
ZAMÓW DRUKOWANY KATALOG Tytu³ orygina³u: The Art of Java
Format: B5, stron: 324
TWÓJ KOSZYK
Przejd na wy¿szy poziom programowania dziêki dwóm „guru” Javy: Herbowi
DODAJ DO KOSZYKA
Schildtowi i Jamesowi Holmesowi. Po³¹czenie ich wiedzy pozwoli Ci poznaæ wiele
sekretów i sztuczek wykorzystywanych przez profesjonalistów. W ksi¹¿ce autorzy
przedstawiaj¹ przyk³ady u¿ytecznych aplikacji oraz towarzysz¹ce im opisy u¿ytych
CENNIK I INFORMACJE technologii. Prezentowane przyk³ady mo¿esz wykorzystaæ w swojej codziennej pracy.
Pocz¹wszy od interpreterów jêzyka, agentów internetowych i podsystemów e-mail,
ZAMÓW INFORMACJE skoñczywszy na analizatorach wyra¿eñ, narzêdziach statystycznych i apletach
O NOWO CIACH finansowych — wszystkie aplikacje s¹ gotowe do u¿ycia. Mo¿na je te¿ dowolnie
modyfikowaæ i rozszerzaæ.
ZAMÓW CENNIK
W ksi¹¿ce znajdziesz:
• Omówienie zalet jêzyka Java,
CZYTELNIA • Tworzenie analizatora wyra¿eñ numerycznych,
• Tworzenie agenta przeszukuj¹cego internet,
FRAGMENTY KSI¥¯EK ONLINE • Projektowanie i implementacja interpretera jêzyka programowania,
• Wykonanie funkcjonalnego systemu pocztowego,
• Konstruowanie programu do pobierania danych z internetu z mo¿liwo ci¹
pobierania fragmentów stron,
• Wykonanie narzêdzi statystycznych obliczaj¹cych rednia, medianê, modaln¹,
odchylenie standardowe, itp.
• Wykonanie apletów i serwletów finansowych obliczaj¹cych równe raty po¿yczki,
przysz³¹ warto æ inwestycji, kwotê emerytury, itp.
• Prze ledzenie ró¿nych technik wyszukiwania bazuj¹cych na sztucznej inteligencji,
• Zapoznanie siê z mo¿liwo ci¹ przegl¹dania stron HTML-a w Javie.
O autorach:
Wydawnictwo Helion Herb Schildt jest jednym z najpopularniejszych autorów ksi¹¿ek o programowaniu.
ul. Chopina 6 Jest autorytetem w sprawach jêzyków C, C++, Java i C#, a tak¿e doskona³ym
44-100 Gliwice programist¹ systemu Windows. Jego ksi¹¿ki sprzeda³y siê na ca³ym wiecie
tel. (32)230-98-63 w ponad 3 milionach egzemplarzy i zosta³y przet³umaczone na wiêkszo æ jêzyków.
e-mail: helion@helion.pl
James Holmes jest konsultantem do spraw tworzenia programowania oraz aplikacji
serwerowych w rodowiskach biznesowych. Zdoby³ wiele nagród, miêdzy innymi
Summer Olympic Games oraz nagrodê Java Developer w roku 2002, przyznawan¹
przez Oracle Magazine.
2. Spis treści
O Autorach ........................................................................................ 7
Przedmowa........................................................................................ 9
Rozdział 1. Geniusz Javy .................................................................................... 13
Typy proste i obiekty — odpowiednia równowaga ..........................................................14
Zarządzanie pamięcią przez usuwanie niepotrzebnych obiektów.....................................15
Elegancki i prosty model wielowątkowy ..........................................................................16
W pełni zintegrowane wyjątki...........................................................................................16
Zaakcentowanie znaczenia polimorfizmu.........................................................................17
Przenośność i bezpieczeństwo dzięki kodowi bajtowemu................................................18
Bogactwo interfejsów programistycznych Javy................................................................18
Aplet ..................................................................................................................................19
Ciągła rewolucja................................................................................................................20
Rozdział 2. Rekurencyjny analizator wyrażeń ...................................................... 21
Wyra enia..........................................................................................................................22
Analiza wyra eń — problem.............................................................................................22
Przetwarzanie wyra enia...................................................................................................23
Rozbijanie wyra enia ........................................................................................................25
Prosty analizator wyra eń .................................................................................................28
Opis działania analizatora ...........................................................................................34
Dodawanie zmiennych do analizatora...............................................................................35
Sprawdzanie składni w analizatorze rekurencyjnym ........................................................43
Aplet kalkulatora ...............................................................................................................44
Mo liwe modyfikacje........................................................................................................46
Rozdział 3. Implementacja interpreterów języków w Javie................................... 47
Jaki język programowana interpretować? .........................................................................48
Wstęp do interpretera ........................................................................................................49
Interpreter języka SBASIC................................................................................................50
Analizator wyra eń języka SBASIC .................................................................................67
Wyra enia w SBASIC ................................................................................................67
Tokeny SBASIC .........................................................................................................68
Interpreter ..........................................................................................................................72
Klasa InterpreterException .........................................................................................72
Konstruktor klasy SBasic............................................................................................72
Słowa kluczowe ..........................................................................................................74
Metoda run() ...............................................................................................................75
Metoda sbInterp()........................................................................................................76
Przypisanie..................................................................................................................77
3. 4 Java. Sztuka programowania
Instrukcja PRINT ........................................................................................................78
Instrukcja INPUT........................................................................................................79
Instrukcja GOTO ........................................................................................................80
Instrukcja IF ................................................................................................................83
Pętla FOR....................................................................................................................83
Instrukcja GOSUB ......................................................................................................86
Instrukcja END ...........................................................................................................87
Wykorzystanie języka SBASIC ........................................................................................87
Inne przykładowe programy języka SBASIC.............................................................88
Rozszerzanie interpretera ..................................................................................................90
Tworzenie własnego języka programowania ....................................................................90
Rozdział 4. Wykonanie menedżera pobierania plików w Javie .............................. 91
Sposoby pobierania plików z internetu .............................................................................92
Omówienie programu........................................................................................................92
Klasa Download ................................................................................................................93
Zmienne pobierania ....................................................................................................97
Konstruktor klasy........................................................................................................97
Metoda download().....................................................................................................97
Metoda run() ...............................................................................................................97
Metoda stateChanged() .............................................................................................101
Metody akcesorowe i działań....................................................................................101
Klasa ProgressRenderer ..................................................................................................101
Klasa DownloadsTableModel .........................................................................................102
Metoda addDownload() ............................................................................................104
Metoda clearDownload() ..........................................................................................105
Metoda getColumnClass() ........................................................................................105
Metoda getValueAt() ................................................................................................105
Metoda update() ........................................................................................................106
Klasa DownloadManager................................................................................................106
Zmienne klasy DownloadManager ...........................................................................111
Konstruktor klasy......................................................................................................112
Metoda verifyUrl()....................................................................................................112
Metoda tableSelectionChanged()..............................................................................113
Metoda updateButtons()............................................................................................113
Obsługa zdarzeń akcji ...............................................................................................114
Kompilacja i uruchamianie programu.............................................................................115
Rozszerzanie mo liwości programu................................................................................115
Rozdział 5. Implementacja klienta e-mail w Javie ............................................. 117
Poczta elektroniczna od podszewki.................................................................................118
POP3 .........................................................................................................................118
IMAP.........................................................................................................................118
SMTP ........................................................................................................................118
Ogólna procedura wysyłania lub odbierania wiadomości e-mail .............................119
Interfejs programistyczny JavaMail ................................................................................119
Ogólny opis wykorzystania biblioteki ......................................................................120
Prosty klient poczty elektronicznej .................................................................................121
Klasa ConnectDialog ................................................................................................122
Klasa DownloadingDialog........................................................................................127
Klasa MessageDialog................................................................................................128
Klasa MessageTableModel.......................................................................................134
Klasa EmailClient .....................................................................................................138
Kompilacja i uruchamianie klienta poczty......................................................................153
Rozszerzanie mo liwości klienta ....................................................................................154
4. Spis treści 5
Rozdział 6. Przeszukiwanie sieci za pomocą Javy.............................................. 155
Podstawy funkcjonowania agenta internetowego ...........................................................156
Omówienie protokołu robot ............................................................................................157
Wprowadzenie do agenta wyszukiwania ........................................................................158
Klasa SearchCrawler .......................................................................................................158
Zmienne klasy...........................................................................................................173
Konstruktor klasy SearchCrawler .............................................................................173
Metoda actionSearch() ..............................................................................................174
Metoda search() ........................................................................................................176
Metoda showError()..................................................................................................179
Metoda updateStats() ................................................................................................179
Metoda addMatch()...................................................................................................180
Metoda verifyUrl()....................................................................................................180
Metoda isRobotAllowed() ........................................................................................181
Metoda downloadPage() ...........................................................................................183
Metoda removeWwwFromUrl() ...............................................................................184
Metoda retrieveLinks() .............................................................................................185
Metoda searchStringMatches() .................................................................................191
Metoda crawl()..........................................................................................................192
Kompilacja i uruchomienie programu.............................................................................194
Mo liwe zastosowania agentów internetowych..............................................................196
Rozdział 7. Rendering HTML w Javie ................................................................ 197
Rendering HTML w edytorze JEditorPane.....................................................................197
Obsługa zdarzeń łączy.....................................................................................................198
Tworzenie prostej przeglądarki internetowej..................................................................199
Klasa MiniBrowser ...................................................................................................199
Zmienne klasy MiniBrowser.....................................................................................204
Konstruktor klasy......................................................................................................205
Metoda actionBack().................................................................................................205
Metoda actionForward() ...........................................................................................206
Metoda actionGo() ....................................................................................................206
Metoda showError()..................................................................................................207
Metoda verifyUrl()....................................................................................................207
Metoda showPage() ..................................................................................................207
Metoda updateButtons()............................................................................................209
Metoda hyperlinkUpdate()........................................................................................210
Kompilacja i uruchomienie przeglądarki ........................................................................210
Zastosowania renderingu HTML ....................................................................................211
Rozdział 8. Statystyka i wykresy ..................................................................... 213
Próbki, zbiory, rozkład i zmienne ...................................................................................214
Podstawy statystyki .........................................................................................................215
Średnia ......................................................................................................................215
Mediana.....................................................................................................................216
Moda (dominanta).....................................................................................................216
Wariancje i odchylenie standardowe...............................................................................218
Równanie regresji............................................................................................................219
Współczynnik korelacji ............................................................................................221
Cała klasa Stats................................................................................................................223
Tworzenie wykresów ......................................................................................................226
Skalowanie danych ...................................................................................................226
Klasa Graphs.............................................................................................................227
Zmienne klasy Graphs ..............................................................................................231
Konstruktor klasy Graphs .........................................................................................232
Metoda paint()...........................................................................................................234
5. 6 Java. Sztuka programowania
Metoda bargraph() ....................................................................................................237
Metoda scatter() ........................................................................................................237
Metoda regplot() .......................................................................................................237
Aplikacja tworzenia statystyk .........................................................................................238
Konstruktor klasy StatsWin ......................................................................................242
Procedura obsługi itemStateChanged().....................................................................243
Metoda actionPerformed() ........................................................................................244
Metoda shutdown() ...................................................................................................244
Metoda createMenu()................................................................................................244
Klasa DataWin ..........................................................................................................244
Łączymy wszystko razem .........................................................................................245
Prosty aplet ze statystykami ............................................................................................247
Mo liwe udoskonalenia...................................................................................................249
Rozdział 9. Aplety i serwlety finansowe............................................................ 251
Znajdowanie raty kredytu................................................................................................252
Pola apletu.................................................................................................................255
Metoda init() .............................................................................................................256
Metoda actionPerformed() ........................................................................................258
Metoda paint()...........................................................................................................258
Metoda compute().....................................................................................................259
Znajdowanie przyszłej wartości inwestycji.....................................................................260
Znajdowanie wkładu początkowego wymaganego
do uzyskania przyszłej wartości inwestycji ..................................................................263
Znalezienie inwestycji początkowej wymaganej do uzyskania odpowiedniej emerytury ......267
Znajdowanie maksymalnej emerytury dla danej inwestycji ...........................................271
Obliczenie pozostałej kwoty do spłaty kredytu...............................................................275
Tworzenie serwletów finansowych.................................................................................278
Serwer Tomcat ..........................................................................................................278
Konwersja apletu RegPay do serwletu .....................................................................280
Serwlet RegPayS.......................................................................................................280
Mo liwe rozszerzenia......................................................................................................283
Rozdział 10. Rozwiązywanie problemów za pomocą sztucznej inteligencji............ 285
Reprezentacja i terminologia...........................................................................................286
Rosnąca liczba kombinacji..............................................................................................287
Techniki wyszukiwania...................................................................................................288
Obliczanie wyszukiwania .........................................................................................289
Problem ...........................................................................................................................289
Reprezentacja graficzna ............................................................................................290
Klasa FlightInfo...............................................................................................................291
Wyszukiwanie w głąb .....................................................................................................291
Analiza wyszukiwania w głąb ..................................................................................300
Wyszukiwanie wszerz .....................................................................................................300
Analiza wyszukiwania wszerz ..................................................................................302
Dodanie heurystyki .........................................................................................................303
Wyszukiwanie wspinaczkowe ..................................................................................304
Analiza wyszukiwania wspinaczkowego..................................................................308
Wyszukiwanie najmniejszego kosztu .......................................................................309
Analiza wyszukiwania najmniejszego kosztu...........................................................310
Znajdowanie wielu rozwiązań.........................................................................................311
Usuwanie ście ek......................................................................................................311
Usuwanie węzłów .....................................................................................................312
Znalezienie „optymalnego” rozwiązania ........................................................................317
Powrót do zagubionych kluczy .......................................................................................321
Skorowidz...................................................................................... 325
6. Rozdział 8.
Statystyka i wykresy
Autor: Herb Schildt
Javy u ywa się przede wszystkim do tworzenia małych programów, na przykład apletów
i serwletów, słu ących do przetwarzania i wyświetlania danych. Dane często są licz-
bami, na przykład reprezentują ceny akcji, temperatury dzienne, ruch klientów itp.
Bardzo często trzeba przetworzyć te dane lub te narysować wykres na ich podstawie.
Na przykład aplet mo e wyświetlać średnią cenę akcji w przeciągu ostatnich kilku
miesięcy i rysować wykres prezentujący zmiany ceny. Statystyka i wykresy bardzo
często pojawiają się w trakcie pisania programów w Javie, zatem zajmiemy się nimi
w tym rozdziale.
W tym rozdziale zostanie pokazane wykonanie metody słu ącej do obliczania nastę-
pujących statystyk:
średniej;
mediany;
dominanty (mody, wartości modalnej);
odchylenia standardowego;
równania regresji (linia najlepszego dopasowania);
współczynnika korelacji.
W tym rozdziale poka emy tak e sposób rysowania wykresów. Przykłady tutaj przed-
stawione ka dy mo e dostosować do własnych potrzeb.
W niniejszym rozdziale szczególny nacisk zostanie poło ony na dwa aspekty: obli-
czenia matematyczne i wyświetlanie uzyskanych wyników w sposób graficzny. Java
nie jest zoptymalizowana pod kątem obliczeń matematycznych ale wspiera ró ne
metody obliczeń. Choć obliczenia pokazane w tym rozdziale nie wymagają du ej
mocy procesora ani nie są wysoce zło one, stanowią dobrą ilustrację mo liwych spo-
sobów radzenia sobie z danymi.
7. 214 Java. Sztuka programowania
Java od samego początku była zaprojektowana jako język zapewniający interfejs gra-
ficzny. Z tego powodu istnieje wiele klas zajmujących się interfejsami graficznymi. Java
posiada aktualnie dwa systemy graficznych interfejsów u ytkownika: AWT i Swing.
System Swing był dosyć intensywnie opisywany w poprzednich rozdziałach, zatem
teraz warto zapoznać się z systemem AWT. Czytelnik dowie się, w jaki sposób mo na
tworzyć okna AWT, jak zapewnia się obsługę zmiany ich rozmiaru, ponowne ryso-
wanie okna i inne elementy. Java posiada unikalne cechy, takie jak klasy wewnętrzne
i adaptory, zatem kod interfejsu graficznego w tym języku jest bardziej elegancki i krót-
szy od tego samego kodu uzyskiwanego w innych językach.
Próbki, zbiory, rozkład i zmienne
Przed rozpoczęciem omawiania właściwego programu nale y zdefiniować kilka pod-
stawowych terminów i koncepcji związanych ze statystyką. Ogólnie informacje staty-
styczne otrzymuje się w postaci próbek. Następnie dokonuje się uogólnienia wyników.
Ka da z próbek pochodzi z określonego zbioru wartości przewidzianych dla danej
sytuacji. Stosuje tu się po prostu nazwę zbiór. Na przykład mo na szacować wielkość
produkcji fabryki zapałek w przeciągu całego roku, uogólniając dane zebrane tylko
w jednym dniu. W ten sposób mo na dokonać ekstrapolacji dotyczącej całego roku na
podstawie znacznie skromniejszej informacji.
Je eli próbka jest wyczerpująca, jest równa całemu zbiorowi. W przypadku omawia-
nej, przykładowej fabryki, jeśli próbka zawiera wielkość produkcji fabryki dla całego
roku, wtedy jest ona równa całemu zbiorowi. Jeśli próbka jest mniejsza od całego zbioru,
jest mo liwe wystąpienie błędu. Wtedy nale y znać współczynnik określający wielkość
błędu. Na potrzeby niniejszego rozdziału zakłada się, i próbka jest równa zbiorowi,
więc nie występują błędy statystyczne.
Informacje statystyczne zale ą od rozkładu zmiennych losowych w zbiorze. Mo liwych
jest kilka ró nych rodzajów rozkładów prawdopodobieństwa przyjmowania wartości
przez zmienne losowe. Najbardziej znanym jest rozkład normalny, czyli rozkład Gaussa,
którego reprezentacją jest tzw. krzywa dzwonowa. Rozkład analizowanych wartości
przyjmuje kształt symetrycznego dzwonu. Oznacza to, e zmienne losowe o wartości
zbli onej do przeciętnej występują najczęściej.
W trakcie badania statystycznego określa się zmienne zale ne (badane) i zmienne
niezale ne (ich wartość pozwala wyliczyć zmienną zale ną). W tym rozdziale zmienną
niezale ną jest czas. Zmienna ta jest zwiększana w ka dym roku o wartość jednost-
kową. Zastosowanie czasu jako zmiennej niezale nej jest powszechnym zjawi-
skiem. Na przykład przy badaniu kursów stosuje się zmienną niezale ną z odstę-
pem jeden dzień.
8. Rozdział 8. ♦ Statystyka i wykresy 215
Podstawy statystyki
U podstawy większości analiz statystycznych występują trzy parametry badanych prób:
średnia, mediana i moda (dominanta). Ka dy z wymienionych współczynników jest
u yteczny ale dopiero ich połączenie pozwala na dokładne przeanalizowanie charak-
terystyki próbki.
Metody statystyczne opisywane w niniejszym rozdziale opierają się na zało eniu, i
zmienne losowe, składające się na próbkę znajdują się w tablicy zmiennych typu FQWDNG.
Wszystkie metody statystyczne są metodami typu UVCVKE przechowywanymi w klasie
5VCVU. Klasę tą w całości przedstawimy w dalszej części rozdziału. Prezentowane metody
są typu UVCVKE, zatem mo na je wywołać bez potrzeby tworzenia obiektu 5VCVU.
Średnia
Średnia jest najczęściej wykorzystywaną funkcją w statystyce. Zapewnia obliczanie
wartości średniej arytmetycznej podanego zbioru zmiennych losowych. W ten sposób
znajduje się niejako „środek cię kości” zestawu danych. Aby obliczyć średnią aryt-
metyczną danego zbioru liczb, nale y zsumować wszystkie jego elementy i otrzymaną
sumę podzielić przez liczbę elementów. Na przykład sumą dla wartości
1 2 3 4 5 6 7 8 9 10
jest 55. Podzielenie tej wartości przez liczbę elementów w próbce (10), prowadzi do
uzyskania wyniku 5.5. Wzór na średnią arytmetyczną jest następujący.
W tym wzorze Di reprezentuje element danych, natomiast N jest liczbą elementów
(zmiennych losowych) w próbce.
Poni sza metoda o nazwie OGCP
oblicza średnią dla wartości przekazanych w tablicy
jako parametr. Metoda zwraca średnią arytmetyczną.
YTCEC TGFPKæ RQFCP[EJ YCTVQ EK
RWDNKE UVCVKE FQWDNG OGCP
FQWDNG=? XCNU ]
FQWDNG CXI
HQT
KPV K K XCNUNGPIVJ K
CXI
XCNU=K?
CXI XCNUNGPIVJ
TGVWTP CXI
_
Aby u yć metody OGCP
, wystarczy tylko przekazać referencję do tablicy zawierającej
zbiór wartości. Jako wynik wykonania metody otrzymuje się wartość średniej arytme-
tycznej elementów przekazanej tablicy.
9. 216 Java. Sztuka programowania
Mediana
Mediana próbki jest określana jako wartość środkowa dla uporządkowanego rosnąco
ciągu wartości. Na przykład dla zbioru
123456789
wartość mediany wynosi 5. W przypadku parzystej liczby elementów medianą jest
średnia arytmetyczna dwóch środkowych wartości. Na przykład dla zbioru
1 2 3 4 5 6 7 8 9 10
wartość mediany wynosi 5.5. W przypadku próbek o rozkładzie normalnym wartości
mediany i średniej są podobne. Im jednak rozkład próbki będzie bardziej odbiegał od
rozkładu normalnego, tym ró nica między medianą a średnią będzie większa.
Najprostszym sposobem otrzymania mediany z próbki jest posortowanie danych a następ-
nie pobranie środkowej wartości. Oto sposób działania metody OGFKCP
.
YTCEC OGFKCPú RQFCP[EJ YCTVQ EK
RWDNKE UVCVKE FQWDNG OGFKCP
FQWDNG=? XCNU ]
FQWDNG VGOR=? PGY FQWDNG=XCNUNGPIVJ?
5[UVGOCTTC[EQR[
XCNU VGOR XCNUNGPIVJ
#TTC[UUQTV
VGOR UQTVQYCPKG FCP[EJ
YTÎEGPKG YCTVQ EK TQFMQYGL
KH
XCNUNGPIVJ ]
,G NK PKGRCT[UVC NKEDC YCTVQ EK PCLF TGFPKæ
TGVWTP
VGOR=VGORNGPIVJ?
VGOR=
VGORNGPIVJ?
_ GNUG TGVWTP
VGOR=VGORNGPIVJ?
_
Aby u yć metody OGFKCP
, wystarczy tylko przekazać referencję do tablicy zawie-
rającej zbiór wartości. Jako wynik wykonania metody otrzymuje się wartość mediany.
Warto zauwa yć, i prezentowana metoda wykonuje kopię przekazanej tablicy za
pomocą polecenia 5[UVGOCTTC[EQR[
. Sortowaniu podlega właśnie kopia. W ten
sposób przekazana tablica nie ulega modyfikacji. Zachowanie oryginalnej kolejności
jest bardzo wa ne, na przykład w przypadku tworzenia wykresu.
Moda (dominanta)
Moda próbki jest wartością najczęściej występującą w zbiorze. Na przykład dla próbki
123345677789
modą jest wartość 7, poniewa występuje najczęściej. Moda nie musi być unikalna.
Na przykład w sytuacji
10 20 30 30 40 50 60 60 70
10. Rozdział 8. ♦ Statystyka i wykresy 217
zarówno wartość 30, jak i 60 występuje po dwa razy. Ka da z tych wartości jest modą.
Taki zbiór nazywany jest bimodalnym. Zbiór zawierający tylko jedną modą jest zbiorem
unimodalnym. W prezentowanych przykładach zostanie zastosowane podejście, w któ-
rym w przypadku wielu wartości mody zostanie zwrócona tylko pierwsza z nich. Je eli
adna z wartości nie występuje częściej od innych, próbka nie posiada mody.
Poni sza metoda OQFG
znajduje modę zbioru.
12. RWDNKE UVCVKE FQWDNG OQFG
FQWDNG=? XCNU
VJTQYU 0Q/QFG'ZEGRVKQP
]
FQWDNG O OQFG8CN
KPV EQWPV QNFEQWPV
HQT
KPV K K XCNUNGPIVJ K
]
O XCNU=K?
EQWPV
NKECPKG Y[UVúRQYCPKC RQUEGIÎNP[EJ YCTVQ EK
HQT
KPV LK
L XCNUNGPIVJ L
KH
O XCNU=L? EQWPV
13. ,G NK VC YCTVQ è Y[UVúRWLG Eú EKGL PK RQRTGFPKG
CRCOKúVCL Læ
14. KH
EQWPV QNFEQWPV ]
OQFG8CN O
QNFEQWPV EQWPV
_
_
KH
QNFEQWPV
VJTQY PGY 0Q/QFG'ZEGRVKQP
GNUG
TGVWTP OQFG8CN
_
Metoda OQFG
zlicza najpierw liczbę wystąpień poszczególnych wartości w tablicy
XCNU. Je eli znajdzie wartość występującą więcej razy ni poprzednia, zapamiętuje
nową wartość w OQFG8CN. Po zakończeniu procesu najczęściej występująca wartość
znajduje się w zmiennej OQFG8CN i jest ona zwracana. W przypadku wstępowania wielu
wartości mody, metoda zwraca tylko pierwszą. Je eli próbka nie zawiera dominanty,
następuje zgłoszenie wyjątku 0Q/QFG'ZEGRVKQP. Oto postać klasy 0Q/QFG'ZEGRVKQP.
9[LæVGM I CUCP[ RTG /QFG
ENCUU 0Q/QFG'ZEGRVKQP GZVGPFU 'ZEGRVKQP ]
RWDNKE 5VTKPI VQ5VTKPI
]
TGVWTP DKÎT PKG CYKGTC OQF[
_
_
15. 218 Java. Sztuka programowania
Wariancje i odchylenie standardowe
Choć podsumowanie zbioru zmiennych losowych jedną wartością, taką jak średnia lub
mediana wydaje się być bardzo przekonujące, takie podejście nie zapewnia mo liwości
wykonania wyczerpującej analizy danych. Czasem nawet takie rozwiązanie mo e być
mylące. Je eli próbka zawiera na przykład wartości skrajne, wtedy średnia i mediana
nie reprezentuje jej w wystarczający sposób. Oto przykład
10 11 9 1 0 2 3 12 11 10
Średnia wynosi 6,9, ale wartość ta raczej jest niedostateczną reprezentacją próbki, po-
niewa adna ze zmiennych losowych nie jest nawet w przybli eniu równa średniej.
Problem polega na tym, i średnia nie przekazuje informacji na temat wariacji lub roz-
kładu danych. Dobrze jest znać odstępy pomiędzy wartościami poszczególnych zmien-
nych losowych. W ten sposób lepiej mo na zinterpretować średnią, medianę i modę.
Aby znaleźć stopień zmienności próbki, trzeba obliczyć odchylenie standardowe. Od-
chylenie standardowe uzyskiwane jest po obliczeniu wariancji. Obie wartości określają
rozkład danych w zbiorze. Z tych dwóch współczynników odchylenie standardowe
jest wa niejsze, gdy wyznacza średnią odległość pomiędzy wartościami zmiennych
losowych a średnią.
Wariancję oblicza się z następującego wzoru.
W powy szym wzorze N jest liczbą elementów, M jest średnią a Di — to wartości
poszczególnych zmiennych losowych w próbie. Konieczne jest podnoszenie wyniku
do kwadratu, aby uzyskiwać tylko wartości dodatnie. Je eli wzór nie uwzględniałby
podnoszenia do kwadratu, wynik często wynosiłby zero.
Odchylenie standardowe znajduje się obliczając pierwiastek kwadratowy wariancji.
Z tego powodu wzór na odchylenie standardowe ma następującą postać.
Jak ju wspomniano wcześniej, odchylenie standardowe jest bardziej przydatne od
wariancji. Warto rozwa yć następujący zbiór:
11 20 40 30 99 30 50
Wariancję określa się jako średnią arytmetyczną kwadratów odchyleń poszczególnych
wartości zmiennych od ich wartości średniej (zobacz tabelę na następnej stronie).
Z powy szej tabeli wynika, i średnia kwadratów ró nic wartości zmiennych losowych
od ich wartości średniej wynosi 717,43. Aby znaleźć teraz odchylenie standardowe,
wystarczy znaleźć pierwiastek kwadratowy wariancji. Wynosi on około 26,78. Od-
chylenie standardowe określa średnią odległość poszczególnych punktów od średniej
wartości wszystkich elementów.
16. Rozdział 8. ♦ Statystyka i wykresy 219
Di Di–M (Di–M)2
11 –29 841
20 –20 400
40 0 0
30 –10 100
99 59 3481
30 –10 100
50 10 100
Suma: 5022
Średnia sumy: 717.43
Odchylenie standardowe informuje o tym, czy wartość średniej dla elementów dobrze
reprezentuje zbiór. Jeśli na przykład kupiono fabrykę batoników a kierownik informuje
o tym, i w poprzednim miesiącu wyprodukowano średnio 2 500 batoników dziennie
ale odchylenie standardowe wyniosło 2 000, nale y się zastanowić nad poprawą linii
produkcyjnej.
Oto bardzo wa na zasada. Przy zało eniu, i dane stosują się do rozkładu normalnego,
około 68% zmiennych losowych znajdzie się w pojedynczym odchyleniu standardowym
od średniej a koło 95% znajdzie się w podwójnym odchyleniu standardowym.
Przedstawiona poni ej metoda UVFGX
oblicza odchylenie standardowe dla tablicy
wartości.
YTCEC QFEJ[NGPKG UVCPFCTFQYG DKQTW YCTVQ EK
RWDNKE UVCVKE FQWDNG UVFGX
FQWDNG=? XCNU ]
FQWDNG UVF
FQWDNG CXI OGCP
XCNU
HQT
KPV K K XCNUNGPIVJ K
UVF
XCNU=K?CXI
17. XCNU=K?CXI
UVF XCNUNGPIVJ
UVF /CVJUSTV
UVF
TGVWTP UVF
_
Równanie regresji
Jednym z najczęstszych zastosowań statystyki jest prognozowanie przyszłości. Choć
dane pochodzące z przeszłości nie zawsze pozwalają na przewidywanie przyszłości,
często korzysta się z tak zwanej analizy trendu. Prawdopodobnie najbardziej rozpo-
wszechnionym narzędziem do tego rodzaju analizy jest równanie regresji. Równanie
to opisuje związek dwóch wartości, które wchodzą w skład dwuwymiarowej zmiennej
losowej. Często linię tę nazywa się linią najmniejszych kwadratów.
18. 220 Java. Sztuka programowania
Przed zaprezentowaniem odpowiedniego wzoru warto przypomnieć, i linia prosta
w dwóch wymiarach jest opisywana następującym równaniem
Y = a + bX
W tym przypadku X jest zmienną niezale ną, Y jest zmienną zale ną, a opisuje wartość
przesunięcia na osi Y a b — stopień nachylenia linii. Aby w pełni określić poło enie
linii w układzie współrzędnych, trzeba odnaleźć wartości współczynników a i b.
Aby znaleźć równanie regresji, mo na skorzystać z metody najmniejszych kwadratów.
Ogólnie pomysł polega na tym, by odnaleźć linię, która zminimalizuje sumę kwadratów
odchyleń między poszczególnymi danymi a linią. Znalezienie tego równania wymaga
dwóch kroków. Najpierw oblicza się wartość b, u ywając wzoru:
W powy szym wzorze Mx jest wartością średnią współrzędnej X, My — średnią współ-
rzędnej Y. Po obliczeniu b wartość a oblicza się z następującego wzoru.
a = My – bMx
Po określeniu równania regresji liniowej mo na u yć dowolnej wartości X i wskazać
dla niej przewidywaną wartość Y.
Aby zrozumieć znaczenie linii regresji, mo na rozwa yć następujący przykład. Załó my,
e mamy dostęp do średnich wartości akcji firmy XYZ w przeciągu ostatnich 10 lat.
Oto zebrane dane:
Rok Cena
0 68
1 75
2 74
3 80
4 81
5 85
6 82
7 87
8 91
9 94
Równanie regresji dla tych danych jest następujące.
Y = 70,22 + 2,55 X
19. Rozdział 8. ♦ Statystyka i wykresy 221
Dane i linię regresji przedstawiono na rysunku 8.1. Jak wynika z rysunku, linia regre-
sji jest nachylona do góry. Oznacza to tendencję wzrostową akcji firmy XYZ. Warto
tak e zauwa yć, i punkty reprezentujące zmienne losowe (dane) są poło one bardzo
blisko linii regresji. Analizując przebieg linii mo na przewidzieć, i w roku 11 cena
akcji wzrośnie do 98,27. Aby uzyskać tę wartość, wystarczy w równaniu regresji za-
miast X wstawić wartość 11. Oczywiście rozwiązanie to ma jedną wadę — to tylko
przewidywanie. Nie ma gwarancji, i rzeczywiście cena akcji za dwa lata będzie do-
kładnie taka.
Rysunek 8.1.
Wykres średnich cen
i linia regresji
Współczynnik korelacji
Choć linia regresji z rysunku 8.1 wydaje się wskazywać tendencję wzrostową, nie wia-
domo, z jakim stopniem dokładności odwzorowuje ona zebrane dane. Je eli dane i linia
regresji są ze sobą słabo powiązane, wykres regresji liniowej nie jest dobrym wskaź-
nikiem. Je eli jednak punkty reprezentujące dane le ą dokładnie na linii wykresu, ma
on du ą wartość.
Aby określić znaczenie otrzymanej linii regresji, najczęściej oblicza się współczynnik
korelacji, który mo e przyjmować wartości od –1 do 1. Współczynnik ten opisuje siłę
liniowego związku między dwiema zmiennymi. Brzmi to być mo e dziwnie, ale jest
to bardzo proste zagadnienie. Graficznie współczynnik korelacji jest związany z odle-
głością poszczególnych punktów reprezentujących dane (zmienne losowe) od linii,
stanowiącej wykres regresji. Je eli współczynnik wynosi 1, dane są doskonale dopa-
sowane do linii (doskonała korelacja dodatnia). Wartość 0 oznacza brak związku
między linią a danymi (w takim przypadku ka da dowolna linia prosta byłaby równie
dobra jak rozwa ana). Znak korelacji jest taki sam jak współczynnik nachylenia linii
(wartość b). Je eli współczynnik ten jest dodatni, oznacza to bezpośredni związek
zmiennej zale nej od zmiennej niezale nej. Dla ujemnego współczynnika występuje
związek odwrotny.
Wzór słu ący do obliczania współczynnika korelacji jest następujący.
20. 222 Java. Sztuka programowania
We wzorze Mx oznacza średnią współrzędnej X, My — średnią współrzędnej Y. Znak
współczynnika zale y od nachylenia linii regresji. Ogólnie wartość wynosząca 0,81
lub więcej jest traktowana jako silny związek. Oznacza to, i około 66% danych jest
dopasowanych do linii regresji. Aby zamienić współczynnik na wartość procentową,
wystarczy podnieść go do kwadratu i pomno yć przez 100. Uzyskana w ten sposób
wartość jest nazywana współczynnikiem determinacji.
Metoda TGITGUU
przedstawiona poni ej oblicza równanie regresji oraz współczyn-
nik korelacji.
21. 1DNKECPKG TGITGULK K YURÎ E[PPKM MQTGNCELK
FNC RQFCPGIQ DKQTW YCTVQ EK 9CTVQ EK TGRTGGPVWLæ
YURÎ TúFPæ ; 9URÎ TúFPæ : LGUV ECU
KPMTGOGPVCELC Q LGFGP Y MC F[O MTQMW
22. RWDNKE UVCVKE 4GICVC TGITGUU
FQWDNG=? XCNU ]
FQWDNG C D [#XI Z#XI VGOR VGOR EQT
FQWDNG XCNU=? PGY FQWDNG=XCNUNGPIVJ?
7VYQTGPKG HQTOCVW NKEDQYGIQ FYQOC E[HTCOK RQ RTGEKPMW
0WODGT(QTOCV PH 0WODGT(QTOCVIGV+PUVCPEG
PHUGV/CZKOWO(TCEVKQPKIKVU
PCNGKGPKG TGFPKGL YCTVQ EK ;
[#XI OGCP
XCNU
PCNGKGPKG TGFPKGL MQORQPGPVW :
Z#XI
HQT
KPV K K XCNUNGPIVJ K
Z#XI
K
Z#XI XCNUNGPIVJ
PCNGKGPKG D
VGOR VGOR
HQT
KPV K K XCNUNGPIVJ K
]
VGOR
XCNU=K?[#XI
25. Z#XI
1DNKEGPKG YURÎ E[PPKMÎY MQTGNCELK
HQT
KPV K K XCNUNGPIVJ K
XCNU=K? K
EQT VGORXCNUNGPIVJ
EQT UVFGX
XCNU
26. UVFGX
XCNU
TGVWTP PGY 4GICVC
C D EQT ;
PHHQTOCV
C
PHHQTOCV
D
27. :
_
Nale y podkreślić, i metoda opiera się na zało eniu, e zmienną niezale ną (X) jest
czas. Z tego powodu w ka dym kroku zwiększa wartość tej zmiennej o 1. Średnia
wartości X jest obliczana następującymi poleceniami.
28. Rozdział 8. ♦ Statystyka i wykresy 223
PCNGKGPKG TGFPKGL MQORQPGPVW :
Z#XI
HQT
KPV K K XCNUNGPIVJ K
Z#XI
K
Z#XI XCNUNGPIVJ
Wartości od 0 do liczby elementów są ze sobą sumowane a następnie wynik tej operacji
jest dzielony przez liczbę elementów. W ten sposób powstaje średnia X.
Oś X oznacza czas, zatem często taką analizę nazywa się analizą czasową. Wartością
odniesienia podczas próbkowania jest czas, zatem do metody przekazuje się tylko jedną
tablicę. Mo liwe jest stosowanie dwóch tablic: jednej dla wartości X i jednej dla warto-
ści Y, ale taki sposób działania nie jest rozpatrywany w niniejszym rozdziale.
Metoda TGITGUU
zwraca wartości a i b, tekstową reprezentację równania regresji
i współczynnik korelacji, wszystkie dane zostają umieszczone w obiekcie 4GICVC.
Klasę tego obiektu przedstawiono poni ej.
6C MNCUC RTGEJQYWLG FCPG CPCNK[ TGITGU[LPGL
ENCUU 4GICVC ]
RWDNKE FQWDNG C D
RWDNKE FQWDNG EQT
RWDNKE 5VTKPI GSWCVKQP
RWDNKE 4GICVC
FQWDNG K FQWDNG L FQWDNG M 5VTKPI UVT ]
C K
D L
EQT M
GSWCVKQP UVT
_
_
Cała klasa Stats
Wszystkie metody statystyczne znajdują się w jednej klasie 5VCVU, której kod przed-
stawiono poni ej. W tym samym pliku źródłowym umieszczono tak e klasy 4GICVC
i 0Q/QFG'ZEGRVKQP.
KORQTV LCXCWVKN
30. 6C MNCUC RTGEJQYWLG FCPG CPCNK[ TGITGU[LPGL
ENCUU 4GICVC ]
RWDNKE FQWDNG C D
RWDNKE FQWDNG EQT
RWDNKE 5VTKPI GSWCVKQP
RWDNKE 4GICVC
FQWDNG K FQWDNG L FQWDNG M 5VTKPI UVT ]
C K
D L
EQT M
GSWCVKQP UVT
_
_
33. RWDNKE UVCVKE FQWDNG OQFG
FQWDNG=? XCNU
VJTQYU 0Q/QFG'ZEGRVKQP
]
FQWDNG O OQFG8CN
KPV EQWPV QNFEQWPV
HQT
KPV K K XCNUNGPIVJ K
]
O XCNU=K?
EQWPV
NKECPKG Y[UVúRQYC RQUEGIÎNP[EJ YCTVQ EK
HQT
KPV LK
L XCNUNGPIVJ L
KH
O XCNU=L? EQWPV
42. 226 Java. Sztuka programowania
PCNGKGPKG C
C [#XI
D
43. Z#XI
1DNKEGPKG YURÎ E[PPKMÎY MQTGNCELK
HQT
KPV K K XCNUNGPIVJ K
XCNU=K? K
EQT VGORXCNUNGPIVJ
EQT UVFGX
XCNU
44. UVFGX
XCNU
TGVWTP PGY 4GICVC
C D EQT ;
PHHQTOCV
C
PHHQTOCV
D
45. :
_
_
Tworzenie wykresów
Choć statystyka jest u yteczna sama w sobie, nie zawsze daje pełny obraz sytuacji.
W wielu przypadkach po ądane jest przedstawienie danych w postaci graficznej.
Pokazanie danych na wykresie pozwala od razu zauwa yć związki i anomalie, które
nie zawsze są oczywiste po przeanalizowaniu statystyk. Poza tym wykres dokładnie
obrazuje rozkład i zmienność danych. Z powodu du ego znaczenia wykresów w staty-
styce, w tym podrozdziale zostanie zaprezentowany kod rysujący trzy rodzaje wykresów.
Poza samym wyświetlaniem wykresów, przedstawiony w tym podrozdziale kod obra-
zuje tak e zasady korzystania z systemu AWT i obsługi zdarzeń. AWT stanowi część
podstawowej biblioteki klas Javy. Zapewnia okienkowe, graficzne środowisko inter-
fejsu u ytkownika. Aplikacje z takim interfejsem komunikują się z u ytkownikiem za
pomocą zdarzeń. Zdarzeniem mo e być naciśnięcie przycisku na klawiaturze, wybra-
nie polecenia z menu a tak e zmiana rozmiaru okna. W trakcie omawiania ró nych
metod rysowania wska emy tak e kilka aspektów związanych ze środowiskiem inter-
fejsu graficznego. Na przykład trzeba umo liwić dynamiczne skalowanie wykresu,
poniewa u ytkownik mo e dowolnie zmienić rozmiar okna.
W tym rozdziale zostanie zaprezentowane wykonanie trzech rodzajów wykresów. Pierw-
szym z nich jest wykres słupkowy, drugi to wykres punktowy a trzeci — to wykres
punktowy z linią regresji. Jak będzie się mo na przekonać, większość kodu, na przy-
kład ten zapewniający skalowanie, jest taka sama dla wszystkich wykresów.
Skalowanie danych
Aby metoda rysowania mogła obsługiwać dowolne jednostki wielkości, potrzebne jest
odpowiednie skalowanie danych. Skalowanie musi być powiązane z aktualnym roz-
miarem okna. Co więcej, skalowanie musi się odbywać dynamicznie. Ka da zmiana
rozmiaru okna powinna powodować dostosowanie skali.
Proces skalowania wymaga znalezienia stosunku między zakresem danych a fizycznymi
wymiarami okna. Gdy odnajdzie się ten współczynnik, dane mo na rysować, mno ąc
46. Rozdział 8. ♦ Statystyka i wykresy 227
przez niego poszczególne wartości. W ten sposób uzyskuje się wartości współrzędnych
wewnątrz okna. Oto przykład wzoru na skalowanie dla osi Y.
Y' = Y * (szerokość_okna / (max – min))
gdzie Y' jest skalowaną wartością, opisująca poło enie wewnątrz okna.
Choć przedstawiony wzór jest bardzo prosty, pojawiają się komplikacje związane ze
środowiskiem graficznym. Na przykład szerokość okna trzeba pobierać za ka dym
razem, gdy następuje ponowne rysowanie wykresu, gdy szerokość ta mogła ulec
zmianie. Co więcej, od łącznej szerokości okna trzeba odjąć szerokość obramowania
okna. Trzeba tak e uwzględnić opis wykresu. W ten sposób skalowanie wymaga wyko-
nania kilku kroków, ale nie są one szczególnie zło one.
Klasa Graphs
Metody rysowania wykresów znajdują się w klasie )TCRJU. Klasa ta rozszerza klasę
(TCOG. Z tego powodu wykresy znajdują się wewnątrz głównych okien. Czyni to wykresy
niezale nymi i łatwo skalowalnymi. Mo na na przykład wyświetlić wykres a następ-
nie go zminimalizować bez chowania całej aplikacji.
Poni ej znajduje się pełny kod klasy )TCRJU. Klasę tę dokładniej opisano w dalszej
części rozdziału.
KORQTV LCXCCYV
69. J)CR
NGHV DCUGNKPG X
_
_
9[MTGU RWPMVQY[ NKPKæ TGITGULK
RTKXCVG XQKF TGIRNQV
)TCRJKEU I ]
KPV X
4GICVC TF 5VCVUTGITGUU
FCVC
HQT
KPV K K FCVCNGPIVJ K
]
X
KPV
FCVC=K?
76. UECNG
_
_
Zmienne klasy Graphs
Klasa )TCRJU zaczyna się od zdefiniowania następujących zmiennych.
5VC G TQFCLÎY Y[MTGUÎY
RWDNKE HKPCN UVCVKE KPV $#4
RWDNKE HKPCN UVCVKE KPV 5%#66'4
RWDNKE HKPCN UVCVKE KPV 4')2.16
RTKXCVG KPV ITCRJ5V[NG
Pierwsze trzy zmienne typu HKPCN UVCVKE noszą nazwy $#4, 5%#66'4 i 4')2.16. War-
tości te oznaczają ró ne typy wykresów. Typ wykresu jest przechowywany w zmiennej
ITCRJ5V[NG.
Następnie definiuje się zmienne przechowujące wielkość odstępu między granicą
okna a początkiem obszaru wyświetlania danych na wykresie.
77. 1MTG NC KNQ è OKGLUEC FQ RQQUVCYKGPKC
OKúF[ QDUCTGO FCP[EJ C MTCYúFKæ
78. RTKXCVG HKPCN KPV NGHV)CR
RTKXCVG HKPCN KPV VQR)CR
RTKXCVG HKPCN KPV DQVVQO)CR
RTKXCVG KPV TKIJV)CR QDNKECPKG VGL YCTVQ EK
Wszystkie zmienne poza TKIJV)CR są typu HKPCN. Zmienna TKIJV)CR jest obliczana póź-
niej, gdy zale y ona od aktualnej szerokości znaków oraz liczby wyświetlanych danych.
Następnie deklarowane są następujące zmienne.
2TGEJQYWLG YCTVQ è OKPKOCNPæ K OCMU[OCNPæ FCP[EJ
RTKXCVG FQWDNG OKP OCZ
1FPKGUKGPKG UKú FQ FCP[EJ
RTKXCVG FQWDNG=? FCVC
Zmienne OKP i OCZ przechowują minimalną i maksymalną wartość danych. Tablica
przechowująca dane jest dostępna przez referencję FCVC.
Kolory u ywane przez wykres znajdują się w zmiennych ITKF%QNQT i FCVC%QNQT.
-QNQT[ Y[MTGUW
%QNQT ITKF%QNQT PGY %QNQT
%QNQT FCVC%QNQT PGY %QNQT
Linie siatki są jasnozielone, natomiast dane są zaznaczane na czarno. Oczywiście mo na
zmienić te kolory na dowolne inne.
79. 232 Java. Sztuka programowania
Następnie deklaruje się ró ne zmienne związane ze skalowaniem.
4Î PG YCTVQ EK W [YCPG FQ UMCNQYCPKC K Y[ YKGVNCPKC FCP[EJ
RTKXCVG KPV J)CR QFUVúR OKúF[ RWPMVCOK FCP[EJ
RTKXCVG KPV URTGCF QFUVúR OKúF[ YCTVQ EKCOK OKP K OCZ
RTKXCVG FQWDNG UECNG YURÎ E[PPKM UMCNQYCPKC
RTKXCVG KPV DCUGNKPG RKQPQY[ YURÎ E[PPKM RQFUVCY[
Odległość między punktami danych na osi X zawiera zmienna J)CR. Liczbę jednostek
między wartością minimalną a maksymalną przechowuje zmienna URTGCF. Współczyn-
nik skali znajduje się w zmiennej UECNG. Pionowe poło enie linii bazy (czyli osi X)
znajduje się w zmiennej DCUGNKPG.
Na końcu zadeklarowano obszary VQR, DQVVQO, NGHV i TKIJV.
.QMCNKCELC QDUCTW FCP[EJ Y QMPKG
RTKXCVG KPV VQR DQVVQO NGHV TKIJV
Zmienne te definiują obszar danych wewnątrz okna.
Konstruktor klasy Graphs
Konstruktor przyjmuje dwa argumenty. Pierwszy to referencja do danych, które mają
zostać wyświetlone. Drugim jest rodzaj wykresu. Przekazaną wartością musi być
)TCRJ$#4, )TCRJ5%#66'4 lub )TCRJ4')2.16.
W konstruktorze najpierw nale y przypisać nasłuchiwanie zdarzenia zamykania okna.
1DU WIC FCTG COMPKúEKC QMPC
CFF9KPFQY.KUVGPGT
PGY 9KPFQY#FCRVGT
]
RWDNKE XQKF YKPFQY%NQUKPI
9KPFQY'XGPV YG ]
UGV8KUKDNG
HCNUG
FKURQUG
_
_
Nasłuchiwanie dodaje się przez wywołanie metody CFF9KPFQY.KUVGPGT
i przekaza-
nie obiektu 9KPFQY#FCRVGT, w którym przysłonięto metodę YKPFQY%NQUKPI
. Warto
przypomnieć, i klasa adapterowa zawiera puste implementacje wszystkich metod
wymaganych przez dany interfejs. W tym przypadku adapter 9KPFQY#FCRVGT imple-
mentuje interfejs 9KPFQY.KUVGPGT. Adapter zapewnia puste implementacje wszystkich
wymaganych metod, zatem trzeba tylko przysłonić odpowiednią metodę, w tym przy-
padku YKPFQY%NQUKPI
.
W przypadku zamykania okna nale y je ukryć wywołując polecenie UGV8KUKDNG
HCNUG.
Następnie usuwa się okno z systemu poleceniem FKURQUG
. Metody te są zdefinio-
wane dla okien (TCOG z AWT.
Następnie nale y dodać nasłuchiwanie zdarzeń zmiany rozmiaru okna. Wywołuje się
metodę CFF%QORQPGPV.KUVGPGT
i przekazuje obiekt %QORQPGPV#FCRVGT, który przy-
słania metodę EQORQPGPV4GUKGF
.
80. Rozdział 8. ♦ Statystyka i wykresy 233
1DU WIC OKCP[ TQOKCTW
CFF%QORQPGPV.KUVGPGT
PGY %QORQPGPV#FCRVGT
]
RWDNKE XQKF EQORQPGPV4GUKGF
%QORQPGPV'XGPV EG ]
TGRCKPV
_
_
W przypadku zmiany rozmiaru okna metoda EQORQPGPV4GUKGF
wywołuje metodę
TGRCKPV
, co natomiast powoduje wywołanie metody RCKPV
. Jak za chwilę Czytelnik
zobaczy, metoda RCKPV
dynamicznie zmienia skalę na podstawie aktualnego rozmiaru
okna. Po zmianie rozmiaru cały wykres jest rysowany od nowa z wykorzystaniem
nowych wymiarów.
Następnie do zmiennych ITCRJ5V[NG i FCVC nale y przypisać otrzymane dane i utwo-
rzyć tymczasową kopię danych. Dane są sortowane w kopii tablicy. Z posortowanej
tablicy danych pobiera się wartość minimalną i maksymalną. Kod wykonujący to
zadanie przedstawiono poni ej.
ITCRJ5V[NG UV[NG
FCVC XCNU
5QTVQYCPKG FCP[EJ Y EGNW PCNGKGPKC YCTVQ EK OKP K OCZ
FQWDNG V=? PGY FQWDNG=XCNUNGPIVJ?
5[UVGOCTTC[EQR[
XCNU V XCNUNGPIVJ
#TTC[UUQTV
V
OKP V=?
OCZ V=VNGPIVJ?
Konstruktor klasy kończy się następującym kodem.
UGV5KG
PGY KOGPUKQP
UYKVEJ
ITCRJ5V[NG ]
ECUG $#4
UGV6KVNG
9[MTGU U WRMQY[
UGV.QECVKQP
DTGCM
ECUG 5%#66'4
UGV6KVNG
9[MTGU RWPMVQY[
UGV.QECVKQP
DTGCM
ECUG 4')2.16
UGV6KVNG
9[MTGU TGITGULK
UGV.QECVKQP
DTGCM
_
UGV8KUKDNG
VTWG
Najpierw ustala się początkowy rozmiar okna wykresu na 200 pikseli w poziomie
i 120 w pionie, wywołując metodę UGV5KG
. Potem na podstawie wartości zmiennej
ITCRJ5V[NG przypisuje się odpowiedni tytuł, u ywając metody UGV6KVNG
. Dodatkowo
nale y ustalić tak e poło enie okna poleceniem UGV.QECVKQP
. Na samym końcu włącza
się wyświetlanie okna poleceniem UGV8KUKDNG
VTWG. Powoduje to odrysowanie okna
metodą RCKPV
.
81. 234 Java. Sztuka programowania
Metoda paint()
Większość zadań związanych z wyświetlaniem wykresu jest wykonywana przez metodę
RCKPV
. Wykonuje ona następujące działania.
Odczytuje rozmiar okna oraz rozmiar granicy.
Pobiera rozmiar aktualnie wybranej czcionki.
Oblicza rozmiar obszaru danych wewnątrz okna. Jest to rozmiar okna minus
granice i ewentualne odstępy.
Oblicza współczynnik skali.
Oblicza współrzędną Y podstawy wykresu, czyli oś X.
Rysuje podstawę oraz oś Y.
Wyświetla minimalne i maksymalne wartości X i Y.
Wywołuje odpowiednią metodę rysowania w celu wykonania wykresu.
Komentarze w metodzie RCKPV
wyjaśniają kolejne działania, ale sama metoda jest
bardzo prosta. Jest to jednak najwa niejsza metoda klas, zatem prześledzimy ją wiersz
po wierszu.
Metoda zaczyna się następującymi deklaracjami.
KOGPUKQP YKP5KG IGV5KG
TQOKCT QMPC
+PUGVU KPU IGV+PUGVU
TQOKCT ITCPKE
Okno (TCOG składa się z dwóch głównych części: granicy, w której skład chodzi obra-
mowanie, pasek tytułowy i menu (jeśli istnieje) oraz głównego obszaru wyświetlania
danych. Rozmiar okna pobiera się poleceniem IGV5KG
. Metoda ta zwraca ogólne
wymiary okna w postaci obiektu KOGPUKQP. Referencja do zwróconego obiektu znajdzie
się w zmiennej YKP5KG. Obiekt KOGPUKQP zawiera dwa pola: YKFVJ i JGKIJV. Z tego
powodu ogólne wymiary okna odczytuje się jako YKP5KGYKFVJ i YKP5KGJGKIJV.
Aby znaleźć obszar okna, w którym mo na wyświetlać dane, trzeba od ogólnego roz-
miaru okna odjąć granice. Do tego celu słu y metoda IGV+PUGVU
. Zwraca ona wymiary
granic w postaci obiektu +PUGVU zawierającego pola NGHV, TKIJV, VQR i DQVVQO. Refe-
rencja do tego obiektu jest przechowywana w KPU. Nale y pamiętać, i współrzędnymi
lewego górnego naro nika okna są 0, 0. Z tego powodu lewy górny naro nik obszaru
danych to KPUNGHV i KPUVQR, natomiast prawy dolny naro nik to YKP5KGYKFVJ KPU
TKIJV i YKP5KGJGKIJV KPUDQVVQO.
Następnie metoda RCKPV
pobiera metrykę aktualnie wybranej czcionki.
4QOKCT CMVWCNPKG UVQUQYCPGL EEKQPMK
(QPV/GVTKEU HO IIGV(QPV/GVTKEU
Informacje znajdujące się w zmiennej HO posłu ą później do obliczenia wysokości
i szerokości znaków u ywanych do wyświetlenia zakresu.
82. Rozdział 8. ♦ Statystyka i wykresy 235
Choć granica określa maksymalny u yteczny obszar okna, nie zawsze jest to obszar
najlepszy ze względów estetycznych. Najczęściej warto pozostawić niewielki odstęp
miedzy danymi a granicą. Z tego powodu dostępny obszar dodatkowo redukujemy
wartościami NGHV)CR, VQR)CR, DQVVQO)CR i TKIJV)CR. Trzy pierwsze zmienne zawierają
wartość 2, ale ostatnią zmienną oblicza się na podstawie szerokości tekstu zawierają-
cego liczbę elementów w zbiorze.
1DNKEGPKG QFRQYKGFPKGIQ QFUVúRW
TKIJV)CR HOUVTKPI9KFVJ
FCVCNGPIVJ
Tekst wyświetlający liczbę elementów znajduje się po prawej stronie, zatem nale y
przygotować dla niego odpowiednią ilość miejsca. Właśnie z tego powodu nale ało
pobrać metrykę czcionki poleceniem IGV(QPV/GVTKEU
. Stosując metodę UVTKPI9KFVJ
uzyskanego obiektu mo na ustalić odpowiedni odstęp i przypisać go do TKIJV)CR.
Teraz oblicza się łączne odstępy po ka dej stronie, u ywając wszystkich zebranych
wartości. Wyniki zapisujemy w zmiennych NGHV, TKIJV, VQR i DQVVQO.
1DNKEGPKG YU[UVMKEJ RTGTY FNC FCPGIQ TGIKQPW
NGHV KPUNGHV
NGHV)CR
HOEJCT9KFVJ
VQR KPUVQR
VQR)CR
HOIGV#UEGPV
DQVVQO KPUDQVVQO
DQVVQO)CR
HOIGV#UEGPV
TKIJV KPUTKIJV
TKIJV)CR
Warto zauwa yć, i pozostawiono miejsce na wyświetlenie zakresu danych.
Następnych kilka wierszy oblicza współczynnik skali.
83. ,G NK YCTVQ è OKPKOCNPC LGUV FQFCVPKC W [L
LCMQ OKGLUEC RQEæVMQYGIQ
LG NK YCTVQ è OCMU[OCNPC LGUV WLGOPC W [L
86. URTGCF
KPV
OCZ OKP
1DNKE YURÎ E[PPKM UMCNQYCPKC
UECNG
FQWDNG
YKP5KGJGKIJV DQVVQO VQR URTGCF
Proces zaczyna się od normalizacji wartości w OKP i OCZ. Wszystkie wykresy mają swój
początek w punkcie 0, 0. Je eli więc wartość minimalna jest większa od 0, nale y
ustawić OKP na 0. Je eli wartość maksymalna jest mniejsza od 0, nale y ustawić OCZ
na 0. Następnie oblicza się odstęp między OKP i OCZ. Uzyskaną wartość u ywa się do
obliczenia współczynnika skalowania przechowywanego w zmiennej UECNG.
Po obliczeniu współczynnika skalowania poło enie linii bazy znajduje się skalując
wartość OKP w sposób przedstawiony poni ej.
2QPCL RQ Q GPKG DC[
DCUGNKPG
KPV
YKP5KGJGKIJV DQVVQO
OKP
87. UECNG
Je eli OKP wynosi zero, linia bazy znajdzie się na dole okna. W innym przypadku znaj-
dzie się gdzieś w jego środkowej części. Je eli wszystkie wartości są ujemne, znajdzie
się na górze.
88. 236 Java. Sztuka programowania
Odstęp między danymi jest określany za pomocą dzielenia szerokości obszaru danych
przez liczbę elementów.
1DNKE QFNGI Q è OKúF[ FCP[OK
J)CR
YKP5KGYKFVJ NGHV TKIJV
FCVCNGPIVJ
W następnym kroku ustawia się aktualny kolor na ITKF%QNQT. Rysuje się osie i zakresy.
Oto kod wykonujący to zadanie.
7UVCY MQNQT UKCVMK
IUGV%QNQT
ITKF%QNQT
0CT[UWL YURÎ TúFPG
IFTCY.KPG
NGHV DCUGNKPG NGHV
FCVCNGPIVJ
91. UECNG
HOIGV#UEGPV
9[ YKGVN YCTVQ EK
IFTCY5VTKPI
FCVCNGPIVJ
FCVCNGPIVJ
92. J)CR
NGHV
DCUGNKPG
HOIGV#UEGPV
Wa nym jest, i dla wykresu słupkowego nie wyświetla się osi Y. Poza tym maksy-
malny zakres wyświetla się tylko wtedy, je eli nie jest on zerowy. Podobnie ma się
sprawa z zakresem minimum. Wysokość znaków określa ich poło enie w oknie.
W kolejnym kroku nale y ustawić kolor na FCVC%QNQT i wywołać odpowiednią metodę
rysowania wykresu.
7UVCY MQNQT FCP[EJ
IUGV%QNQT
FCVC%QNQT
9[ YKGVN FCPG
UYKVEJ
ITCRJ5V[NG ]
ECUG $#4
DCTITCRJ
I
DTGCM
ECUG 5%#66'4
UECVVGT
I
DTGCM
ECUG 4')2.16
TGIRNQV
I
DTGCM
_
93. Rozdział 8. ♦ Statystyka i wykresy 237
Metoda bargraph()
Metoda DCTITCRJ
skaluje poszczególne elementy danych a następnie wyświetla linię,
której długość jest proporcjonalna do tych danych. Linia jest rysowana od podstawy.
Oto kod metody.
9[ YKGVNCPKG Y[MTGUW U WRMQYGIQ
RTKXCVG XQKF DCTITCRJ
)TCRJKEU I ]
KPV X
HQT
KPV K K FCVCNGPIVJ K
]
X
KPV
FCVC=K?
96. J)CR
NGHV DCUGNKPG X
_
_
Skoro tak wiele zadań zostało ju wykonanych w metodzie RCKPV
, metoda DCTITCRJ
tylko skaluje poszczególne elementy za pomocą współczynnika skalowania a następnie
rysuje linie. Linie zaczynają się od podstawy, czyli od osi X. Punkt końca oblicza się
przez odejmowanie skalowanej wartości od DCUGNKPG. Nale y pamiętać, i współrzędne
lewego górnego naro nika okna mają wartość 0, 0. Z tego powodu mniejsze wartości
Y znajdują się wy ej w oknie ni większe wartości Y. Z powy szego wynika, e od
DCUGNKPG nale y odjąć wartość X. Odstęp między słupkami wynosi J)CR. Poło enie X
ka dego słupka jest obliczane przez pomno enie indeksu elementu przez wielkość
odstępu i dodanie wartości przesunięcia względem lewej krawędzi (zmienna NGHV).
Metoda scatter()
Metoda UECVVGT
działa bardzo podobnie jak metoda DCTITCRJ
ale rysuje punkty
zamiast linii. Oto kod metody.
9[ YKGVNCPKG Y[MTGUW RWPMVQYGIQ
RTKXCVG XQKF UECVVGT
)TCRJKEU I ]
KPV X
HQT
KPV K K FCVCNGPIVJ K
]
X
KPV
FCVC=K?
98. J)CR
NGHV DCUGNKPG X
_
_
Metoda UECVVGT
skaluje poszczególne elementy danych a następnie wyświetla punkt
na osi Y, którego odległość od początku osi X jest proporcjonalna do tych danych.
Metoda regplot()
Podobnie jak metoda UECVVGT
, metoda TGIRNQV
rysuje punkty na wykresie. Ró nica
polega na tym, i dodatkowo rysuje tak e linię regresji, u ywając funkcji TGITGUU
.
99. 238 Java. Sztuka programowania
9[MTGU RWPMVQY[ NKPKæ TGITGULK
RTKXCVG XQKF TGIRNQV
)TCRJKEU I ]
KPV X
4GICVC TF 5VCVUTGITGUU
FCVC
HQT
KPV K K FCVCNGPIVJ K
]
X
KPV
FCVC=K?
105. UECNG
_
Warto zwrócić uwagę na sposób rysowania linii regresji. W wywołaniu FTCY.KPG
punkt końcowy linii regresji jest obliczany na podstawie wartości TFC i TFD, czyli
miejsca przecięcia osi Y i linii regresji.
Aplikacja tworzenia statystyk
Dzięki klasom 5VCVU i )TCRJU mo na wykonać prostą, ale u yteczną aplikację. Główne
okno aplikacji powstaje dzięki klasie 5VCVU9KP, której kod przedstawiono poni ej.
KORQTV LCXCCYV