Java Sztuka programowania jaszpr


IDZ DO
IDZ DO
PRZYKŁADOWY ROZDZIAŁ
PRZYKŁADOWY ROZDZIAŁ
Java. Sztuka
SPIS TRE CI
SPIS TRE CI
programowania
KATALOG KSIĄŻEK
KATALOG KSIĄŻEK
Autorzy: Herbert Schildt, James Holmes
KATALOG ONLINE
KATALOG ONLINE Tłumaczenie: Rafał Jońca
ISBN: 83-7361-422-2
Tytuł oryginału: The Art of Java
ZAMÓW DRUKOWANY KATALOG
ZAMÓW DRUKOWANY KATALOG
Format: B5, stron: 324
TWÓJ KOSZYK
TWÓJ KOSZYK
Przejd na wyższy poziom programowania dzięki dwóm  guru Javy: Herbowi
DODAJ DO KOSZYKA
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
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
ZAMÓW INFORMACJE
skończywszy na analizatorach wyrażeń, narzędziach statystycznych i apletach
O NOWO CIACH
O NOWO CIACH
finansowych  wszystkie aplikacje są gotowe do użycia. Można je też dowolnie
modyfikować i rozszerzać.
ZAMÓW CENNIK
ZAMÓW CENNIK
W książce znajdziesz:
" Omówienie zalet języka Java,
" Tworzenie analizatora wyrażeń numerycznych,
CZYTELNIA
CZYTELNIA
" Tworzenie agenta przeszukującego internet,
FRAGMENTY KSIĄŻEK ONLINE " Projektowanie i implementacja interpretera języka programowania,
FRAGMENTY KSIĄŻEK ONLINE
" 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 jednym z najpopularniejszych autorów książek o programowaniu.
Wydawnictwo Helion
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.
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
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
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
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
Aą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
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.
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ń.
Rozdział 8. f& 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 .
Wszystkie metody statystyczne są metodami typu przechowywanymi w klasie
. Klasą tą w całości przedstawimy w dalszej cząści rozdziału. Prezentowane metody
są typu , zatem można je wywołać bez potrzeby tworzenia obiektu .
Ś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 oblicza średnią dla wartości przekazanych w tablicy
jako parametr. Metoda zwraca średnią arytmetyczną.








Aby użyć metody , 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.
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
1 2 3 4 5 6 7 8 9
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 .













Aby użyć metody , 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 . 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
1 2 3 3 4 5 6 7 7 7 8 9
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
Rozdział 8. f& 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 znajduje modą zbioru.




























Metoda zlicza najpierw liczbą wystąpień poszczególnych wartości w tablicy
. Jeżeli znajdzie wartość wystąpującą wiącej razy niż poprzednia, zapamiątuje
nową wartość w . Po zakończeniu procesu najcząściej wystąpująca wartość
znajduje sią w zmiennej 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 . Oto postać klasy .






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 znalezć 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 znalezć teraz odchylenie standardowe,
wystarczy znalezć 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.
Rozdział 8. f& 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 oblicza odchylenie standardowe dla tablicy
wartości.










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.
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 odnalezć wartości współczynników a i b.
Aby znalezć równanie regresji, można skorzystać z metody najmniejszych kwadratów.
Ogólnie pomysł polega na tym, by odnalezć 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
068
175
274
380
481
585
682
787
891
994
Równanie regresji dla tych danych jest nastąpujące.
Y = 70,22 + 2,55 X
Rozdział 8. f& 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 wskaz-
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.
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 przedstawiona poniżej oblicza równanie regresji oraz współczyn-
nik korelacji.

































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.
Rozdział 8. f& Statystyka i wykresy 223




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 zwraca wartości a i b, tekstową reprezentacją równania regresji
i współczynnik korelacji, wszystkie dane zostają umieszczone w obiekcie .
Klasą tego obiektu przedstawiono poniżej.












Cała klasa Stats
Wszystkie metody statystyczne znajdują sią w jednej klasie , której kod przed-
stawiono poniżej. W tym samym pliku zródłowym umieszczono także klasy
i .














224 Java. Sztuka programowania













































Rozdział 8. f& Statystyka i wykresy 225













































226 Java. Sztuka programowania











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
Rozdział 8. f& 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 . Klasa ta rozszerza klasą
. 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 . Klasą tą dokładniej opisano w dalszej
cząści rozdziału.
























228 Java. Sztuka programowania














































Rozdział 8. f& Statystyka i wykresy 229









































230 Java. Sztuka programowania












































Rozdział 8. f& Statystyka i wykresy 231






Zmienne klasy Graphs
Klasa zaczyna sią od zdefiniowania nastąpujących zmiennych.





Pierwsze trzy zmienne typu noszą nazwy , i . War-
tości te oznaczają różne typy wykresów. Typ wykresu jest przechowywany w zmiennej
.
Nastąpnie definiuje sią zmienne przechowujące wielkość odstąpu miądzy granicą
okna a początkiem obszaru wyświetlania danych na wykresie.






Wszystkie zmienne poza są typu . Zmienna jest obliczana póz-
niej, gdyż zależy ona od aktualnej szerokości znaków oraz liczby wyświetlanych danych.
Nastąpnie deklarowane są nastąpujące zmienne.




Zmienne i przechowują minimalną i maksymalną wartość danych. Tablica
przechowująca dane jest dostąpna przez referencją .
Kolory używane przez wykres znajdują sią w zmiennych i .



Linie siatki są jasnozielone, natomiast dane są zaznaczane na czarno. Oczywiście można
zmienić te kolory na dowolne inne.
232 Java. Sztuka programowania
Nastąpnie deklaruje sią różne zmienne związane ze skalowaniem.





Odległość miądzy punktami danych na osi X zawiera zmienna . Liczbą jednostek
miądzy wartością minimalną a maksymalną przechowuje zmienna . Współczyn-
nik skali znajduje sią w zmiennej . Pionowe położenie linii bazy (czyli osi X)
znajduje sią w zmiennej .
Na końcu zadeklarowano obszary , , i .


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ć
, lub .
W konstruktorze najpierw należy przypisać nasłuchiwanie zdarzenia zamykania okna.







Nasłuchiwanie dodaje sią przez wywołanie metody i przekaza-
nie obiektu , w którym przysłoniąto metodą . Warto
przypomnieć, iż klasa adapterowa zawiera puste implementacje wszystkich metod
wymaganych przez dany interfejs. W tym przypadku adapter imple-
mentuje interfejs . Adapter zapewnia puste implementacje wszystkich
wymaganych metod, zatem trzeba tylko przysłonić odpowiednią metodą, w tym przy-
padku .
W przypadku zamykania okna należy je ukryć wywołując polecenie .
Nastąpnie usuwa sią okno z systemu poleceniem . Metody te są zdefinio-
wane dla okien z AWT.
Nastąpnie należy dodać nasłuchiwanie zdarzeń zmiany rozmiaru okna. Wywołuje sią
metodą i przekazuje obiekt , który przy-
słania metodą .
Rozdział 8. f& Statystyka i wykresy 233






W przypadku zmiany rozmiaru okna metoda wywołuje metodą
, co natomiast powoduje wywołanie metody . Jak za chwilą Czytelnik
zobaczy, metoda 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 i 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.








Konstruktor klasy kończy sią nastąpującym kodem.
















Najpierw ustala sią początkowy rozmiar okna wykresu na 200 pikseli w poziomie
i 120 w pionie, wywołując metodą . Potem na podstawie wartości zmiennej
przypisuje sią odpowiedni tytuł, używając metody . Dodatkowo
należy ustalić także położenie okna poleceniem . Na samym końcu włącza
sią wyświetlanie okna poleceniem . Powoduje to odrysowanie okna
metodą .
234 Java. Sztuka programowania
Metoda paint()
Wiąkszość zadań związanych z wyświetlaniem wykresu jest wykonywana przez metodą
. 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 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.


Okno 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 . Metoda ta zwraca ogólne
wymiary okna w postaci obiektu . Referencja do zwróconego obiektu znajdzie
sią w zmiennej . Obiekt zawiera dwa pola: i . Z tego
powodu ogólne wymiary okna odczytuje sią jako i .
Aby znalezć 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 . Zwraca ona wymiary
granic w postaci obiektu zawierającego pola , , i . Refe-
rencja do tego obiektu jest przechowywana w . 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 i , natomiast prawy dolny narożnik to
i .
Nastąpnie metoda pobiera metryką aktualnie wybranej czcionki.


Informacje znajdujące sią w zmiennej posłużą pózniej do obliczenia wysokości
i szerokości znaków używanych do wyświetlenia zakresu.
Rozdział 8. f& 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 , , i . Trzy pierwsze zmienne zawierają
wartość 2, ale ostatnią zmienną oblicza sią na podstawie szerokości tekstu zawierają-
cego liczbą elementów w zbiorze.


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 . Stosując metodą
uzyskanego obiektu można ustalić odpowiedni odstąp i przypisać go do .
Teraz oblicza sią łączne odstąpy po każdej stronie, używając wszystkich zebranych
wartości. Wyniki zapisujemy w zmiennych , , i .





Warto zauważyć, iż pozostawiono miejsce na wyświetlenie zakresu danych.
Nastąpnych kilka wierszy oblicza współczynnik skali.









Proces zaczyna sią od normalizacji wartości w i . 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ć na 0. Jeżeli wartość maksymalna jest mniejsza od 0, należy ustawić
na 0. Nastąpnie oblicza sią odstąp miądzy i . Uzyskaną wartość używa sią do
obliczenia współczynnika skalowania przechowywanego w zmiennej .
Po obliczeniu współczynnika skalowania położenie linii bazy znajduje sią skalując
wartość w sposób przedstawiony poniżej.


Jeżeli 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.
236 Java. Sztuka programowania
Odstąp miądzy danymi jest określany za pomocą dzielenia szerokości obszaru danych
przez liczbą elementów.


W nastąpnym kroku ustawia sią aktualny kolor na . Rysuje sią osie i zakresy.
Oto kod wykonujący to zadanie.

















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 i wywołać odpowiednią metodą
rysowania wykresu.














Rozdział 8. f& Statystyka i wykresy 237
Metoda bargraph()
Metoda 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.









Skoro tak wiele zadań zostało już wykonanych w metodzie , metoda
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 . 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
należy odjąć wartość . Odstąp miądzy słupkami wynosi . 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 ).
Metoda scatter()
Metoda działa bardzo podobnie jak metoda ale rysuje punkty
zamiast linii. Oto kod metody.








Metoda 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 , metoda rysuje punkty na wykresie. Różnica
polega na tym, iż dodatkowo rysuje także linią regresji, używając funkcji .
238 Java. Sztuka programowania













Warto zwrócić uwagą na sposób rysowania linii regresji. W wywołaniu
punkt końcowy linii regresji jest obliczany na podstawie wartości i , czyli
miejsca przeciącia osi Y i linii regresji.
Aplikacja tworzenia statystyk
Dziąki klasom i można wykonać prostą, ale użyteczną aplikacją. Główne
okno aplikacji powstaje dziąki klasie , której kod przedstawiono poniżej.



















Rozdział 8. f& Statystyka i wykresy 239













































240 Java. Sztuka programowania



















































Rozdział 8. f& Statystyka i wykresy 241





















































242 Java. Sztuka programowania
Klasa rozszerza klasą w celu utworzenia okna głównego, w którym bądą
wyświetlane informacje statystyczne. Zawiera także opcje umożliwiające użytkowni-
kowi wybór sposobu prezentacji danych. Klasa implementuje interfejsy
i .
Klasa zaczyna sią od pobrania obiektu . Klasa jest pomocna
w formatowaniu danych numerycznych. Klasa używa tej klasy do określenia
liczby miejsc po przecinku, jaka ma być wyświetlana.
W dalszej cząści klasa deklaruje kilka zmiennych przechowujących referencje do ele-
mentów graficznych interfejsu. Dotyczy to pola tekstowego, czterech opcji i trzech
obiektów . Referencja do obiektu jest przechowywana w zmiennej .
Klasa jest oknem wyświetlającym analizowane dane numeryczne. Referencja
do danych znajduje sią w zmiennej a referencja do danych regresji w zmiennej .
Konstruktor klasy StatsWin
Do konstruktora przekazuje sią referencją do analizowanych danych. Konstruktor prze-
prowadza analizą statystyczną dla wprowadzonych danych. Wiąkszość kodu konstruktora
jest prosta, wiąc zostanie omówiony tylko w ogólny sposób.
Na początku zapamiątuje sią referencją do danych. Nastąpnie dodaje sią nasłuch dla
zdarzenia zamkniącia okna. W przypadku wystąpienia takiego zdarzenia, nastąpuje
wywołanie metody , która zamyka wszystkie okna otwarte przez .
Nastąpnie konstruktor tworzy menu, używając do tego metody . Menu
zawiera tylko jedno polecenie: Zamknij. Wybranie go powoduje wyłączenie aplikacji.
W kolejnym kroku ustalamy w menedżerze układu okna układ z centrowaniem. Jest
to konieczne, gdyż klasa domyślnie stosuje układ graniczny.
W nastąpnym kroku ustawia sią tytuł okna, jego rozmiary oraz pobiera sią dane regresji.
Należy także ustawić format liczbowy na dwa miejsca po przecinku, używając poniż-
szego kodu.

Jak wspomniano wcześniej, odnosi sią do obiektu . Jest to obiekt wy-
korzystywany miądzy innymi do opisu wyświetlania wartości numerycznych. Metoda
pozwala na ustalenie maksymalnej liczby cyfr wyświe-
tlanej po przecinku. Klasa wykorzystuje ten obiekt do ustawienia całego
wyświetlania danych. Aby zobaczyć wiącej miejsc po przecinku, należy przekazać
wiąkszą wartość do metody .
Kilka nastąpnych wierszy tworzy wynikowy tekst z wynikami różnych analiz staty-
stycznych.


Rozdział 8. f& Statystyka i wykresy 243
















Interesujący jest sposób pobierania informacji o modzie. Należy pamiątać, iż metoda
zwraca wyjątek, gdy próbka nie zawiera wartości mody. Zmienna zawiera
albo informacją o modzie, albo wyjaśnienie, iż moda dla danej próbki nie istnieje.
Po wykonaniu całego tekstu jest on umieszczany w obiekcie dostąpnym
dziąki zmiennej . Obiekt ten nastąpnie ustawia sią na tryb tylko do odczytu za po-
mocą polecenia . W ten sposób możliwy jest tylko odczyt informacji.
Nastąpnie należy dodać do okna poszczególne elementy interfejsu oraz elementy
nasłuchujące. Obszar tekstowy jest obszarem tylko do odczytu, zatem nie wymaga
ustawienia nasłuchu. Na końcu należy wyświetlić okno.
Procedura obsługi itemStateChanged()
Wiele działań klasy zachodzi w metodzie . Metoda ta
obsługuje zmiany zaznaczenia czterech opcji. Gdy użytkownik włączy daną opcją,
wyświetlane jest związane z nią okno. Gdy wyłączy opcją, dane okno jest zamykane.
Aby zrozumieć sposób działania tego procesu, można prześledzić kod służący do
obsługi zmian opcji wykresu słupkowego. Oto kod.

















244 Java. Sztuka programowania
Najpierw pobiera sią stan obiektu za pomocą zmiennej i metody . Jeżeli
zostanie zwrócona wartość , opcja jest włączona. W przeciwnym razie jest wyłą-
czona. Jeżeli opcja jest włączona a zmienna zawiera wartość , okno wykresu
słupkowego jest włączane po raz pierwszy. W tym przypadku do przypisuje sią
nowy obiekt wyświetlający wykres słupkowy. Gdy jest różne od , po
prostu nic nie trzeba robić, gdyż okno istnieje.
W trakcie tworzenia nowego okna należy dodać nasłuch monitorujący okno. Intere-
sująca jest informacja o zdarzeniu zamykania okna. W ten sposób obiekt
otrzymuje informacją o zamykaniu okna wykresu. W momencie otrzymania powia-
domienia o zamykaniu okna należy wyłączyć opcją i ustawić na .
Jeżeli użytkownik wyłączył opcją a okno było otwarte, należy zamknąć okno metodą
i ustawić na . Ten sam mechanizm stosuje sią dla wszystkich czte-
rech opcji.
Metoda actionPerformed()
Metoda obsługuje zamykanie programu za pomocą polecenia Zamknij
z menu. Metoda po prostu wywołuje inną metodą o nazwie .
Metoda shutdown()
W momencie zamykania okna jest wywoływana metoda . Zamyka
ona wszystkie okna otwarte przez obiekt , dotyczy to zarówno głównego okna,
jak i okien wykresów i danych. Z tego powodu z ekranu znikają wszystkie wykresy,
choć są one wyświetlane w niezależnych oknach.
Metoda createMenu()
Metoda tworzy menu aplikacji. Najpierw tworzy sią obiekt
i umieszcza sią go w zmiennej . Nastąpnie powstaje obiekt o nazwie ,
w którym umieszcza sią obiekt o nazwie . Nastąpnie obiekt
staje sią odbiorcą akcji z menu. W ten sposób zdarzenia akcji wygenerowane przez
menu bądą trafiały do opisanej wcześniej metody .
Klasa DataWin
Klasa wykorzystuje obiekt do wyświetlenia wejściowych danych
liczbowych poddawanych analizie. Oto postać klasy .





Rozdział 8. f& Statystyka i wykresy 245



















Klasa rozszerza klasą i tworzy główne okno. Konstruktor klasy przyjmuje
jako parametr referencją do tablicy danych do wyświetlenia. Nastąpnie tworzy obiekt
wyświetlający dane. Obszar tekstowy jest ustawiany tylko do odczytu bez
możliwości zmiany skali. Okno można zminimalizować.
Aączymy wszystko razem
Poniższy program przedstawia sposób wykorzystania klas i .














Aby skompilować program, należy wydać nastąpujące polecenie:

246 Java. Sztuka programowania
Aby uruchomić program, należy wpisać nastąpujące polecenie.

Warto zauważyć, iż używamy programu (zamiast ), aby uruchomić aplikacją
bez okna konsoli. Zastosowanie zapewnia odpowiednie wyłączenie programu
po zamkniąciu głównego okna. W Java 1.4 można zastosować polecenie , ale we
wcześniejszych wersjach konieczne jest użycie . Rysunki od 8.2 do 8.4 przed-
stawiają działanie klas statystyk.
Rysunek 8.2.
Główne okno
StatsWin
Rysunek 8.3.
Okna wykresów
Jedną z bardziej interesujących funkcji programu jest możliwość dowolnego skalo-
wania wykresów, gdyż znajdują sią one w osobnych oknach. Gdy użytkownik zmieni
rozmiar okna, wykres automatycznie zmieni skalą. Można także zminimalizować okno
wykresu. Zapewnia to usuniącie okna z ekranu, ale nie z systemu.
Rozdział 8. f& Statystyka i wykresy 247
Rysunek 8.4.
Efekt zmiany
rozmiaru jednego
z okien
Prosty aplet ze statystykami
W poprzednim podrozdziale pokazano sposób wykonania samodzielnej aplikacji
korzystającej z klas i . Nie jest to jednak jedyne zastosowanie tych klas.
Równie dobrze klasy te mogą wspomagać aplety lub serwlety. Poniżej przedstawiono
przykład prostego apletu. Powoduje on wyświetlanie informacji statystycznych dla
dowolnych przekazanych do niej danych.


















248 Java. Sztuka programowania































Ważnym jest, iż przekazywanie danych odbywa sią za pomocą parametru HTML
o nazwie . Tekst zawiera wartości oddzielone przecinkami. Klasa
wykorzystuje obiekt do pobierania poszczególnych wartości jako
obiektów . Nastąpnie wartości są zapamiątywane w obiekcie o nazwie
. Klasa umożliwia przechowywanie tablic o dynamicznie zmieniającej
sią długości.
Gdy użytkownik kliknie przycisk Wyświetl statystyki, wykonywana jest metoda
. Obiekt wymaga tablicy obiektów jako parametr, wiąc
należy dokonać konwersji danych tekstowych do tablicy wartości . W ten
sposób powstaje obiekt ze statystykami.
Przykładowy wynik został uzyskany za pomocą programu Applet Viewer. Zaprezen-
towano go na rysunku 8.5. Tego rodzaju aplet jest doskonałym dodatkiem do wielu
stron WWW.
Rozdział 8. f& Statystyka i wykresy 249
Rysunek 8.5.
Przykład działania
apletu StatApplet
Możliwe udoskonalenia
Oto kilka pomysłów na udoskonalenie projektu. Jak już wspomniano, metody rysowania
wykresów i metoda mogą działać tylko na danych dla wartości Y. Warto-
ściami osi X są punkty w czasie. Można jednak zmienić działanie programu na takie,
w którym jako argumenty podaje sią dwie tablice  druga z tablic zawiera wartości X.
Interesujące może okazać sią umożliwienie zamiany osi, na przykład w czasie rzeczy-
wistym. Użytkownik powinien mieć możliwość ustalenia szerokości słupków lub też
kształtu punktów.
Na końcu można poeksperymentować z osadzaniem okna wykresu wewnątrz okna
zamiast tworzenia osobnych okien. Można na przykład określać za pomocą
listy opcji, jaki typ wykresu ma być wyświetlany w oknie wykresu.


Wyszukiwarka

Podobne podstrony:
Java Zadania z programowania z przykładowymi rozwiązaniami
Java?ektywne programowanie Wydanie II javep2
Java Podstawy, Programowanie, Zastosowania
C Sztuka programowania cpszpr
JAVA 02 programowanie w systemie Linux
SQL Sztuka programowania(1)
Asembler Sztuka programowania Wydanie II asesz2
Java Zadania z programowania z przykladowymi rozwiazaniami javaza
Rails Sztuka programowania

więcej podobnych podstron