Cyfroteka.pl

klikaj i czytaj online

Cyfro
Czytomierz
00728 010421 11035401 na godz. na dobę w sumie
Java. Sztuka programowania - książka
Java. Sztuka programowania - książka
Autor: , Liczba stron: 336
Wydawca: Helion Język publikacji: polski
ISBN: 83-7361-422-2 Data wydania:
Lektor:
Kategoria: ebooki >> komputery i informatyka >> programowanie >> java - programowanie
Porównaj ceny (książka, ebook, audiobook).

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:

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.

Znajdź podobne książki Ostatnio czytane w tej kategorii

Darmowy fragment publikacji:

IDZ DO IDZ DO PRZYK£ADOWY ROZDZIA£ PRZYK£ADOWY ROZDZIA£ SPIS TREĎCI SPIS TREĎCI KATALOG KSI¥¯EK KATALOG KSI¥¯EK KATALOG ONLINE KATALOG ONLINE ZAMÓW DRUKOWANY KATALOG ZAMÓW DRUKOWANY KATALOG TWÓJ KOSZYK TWÓJ KOSZYK DODAJ DO KOSZYKA DODAJ DO KOSZYKA CENNIK I INFORMACJE CENNIK I INFORMACJE ZAMÓW INFORMACJE ZAMÓW INFORMACJE O NOWOĎCIACH O NOWOĎCIACH ZAMÓW CENNIK ZAMÓW CENNIK CZYTELNIA CZYTELNIA FRAGMENTY KSI¥¯EK ONLINE FRAGMENTY KSI¥¯EK ONLINE Wydawnictwo Helion ul. Chopina 6 44-100 Gliwice tel. (32)230-98-63 e-mail: helion@helion.pl Java. Sztuka programowania Autorzy: Herbert Schildt, James Holmes T³umaczenie: Rafa³ Joñca ISBN: 83-7361-422-2 Tytu³ orygina³u: The Art of Java Format: B5, stron: 324 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 jednym z najpopularniejszych autorów ksi¹¿ek o programowaniu. Jest autorytetem w sprawach jêzyków C, C++, Java i C#, a tak¿e doskona³ym programist¹ systemu Windows. Jego ksi¹¿ki sprzeda³y siê na ca³ym ġwiecie w ponad 3 milionach egzemplarzy i zosta³y przet³umaczone na wiêkszoġæ jêzyków. 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 ...................................................h..................................... 7 Przedmowa...................................................h..................................... 9 Rozdział 1. Geniusz Javy ...................................................h................................. 13 Typy proste i obiekty — odpowiednia równowaga ...................................................i.......14 Zarządzanie pamięcią przez usuwanie niepotrzebnych obiektów.....................................15 Elegancki i prosty model wielowątkowy ...................................................i.......................16 W pełni zintegrowane wyjątki...................................................i........................................16 Zaakcentowanie znaczenia polimorfizmu...................................................i......................17 Przenośność i bezpieczeństwo dzięki kodowi bajtowemu................................................18 Bogactwo interfejsów programistycznych Javy...................................................i.............18 Aplet ...................................................i...................................................i............................19 Ciągła rewolucja...................................................i...................................................i..........20 Rozdział 2. Rekurencyjny analizator wyrażeń ...................................................h... 21 Rozdział 3. Wyrażenia...................................................i...................................................i....................22 Analiza wyrażeń — problem...................................................i..........................................22 Przetwarzanie wyrażenia...................................................i................................................23 Rozbijanie wyrażenia ...................................................i...................................................i..25 Prosty analizator wyrażeń ...................................................i..............................................28 Opis działania analizatora ...................................................i........................................34 Dodawanie zmiennych do analizatora...................................................i............................35 Sprawdzanie składni w analizatorze rekurencyjnym ...................................................i.....43 Aplet kalkulatora ...................................................i...................................................i.........44 Możliwe modyfikacje...................................................i...................................................i..46 Implementacja interpreterów języków w Javie................................... 47 Jaki język programowana interpretować? ...................................................i......................48 Wstęp do interpretera ...................................................i...................................................i..49 Interpreter języka SBASIC...................................................i.............................................50 Analizator wyrażeń języka SBASIC ...................................................i..............................67 Wyrażenia w SBASIC ...................................................i.............................................67 Tokeny SBASIC ...................................................i...................................................i...68 Interpreter ...................................................i...................................................i....................72 Klasa InterpreterException ...................................................i......................................72 Konstruktor klasy SBasic...................................................i.........................................72 Słowa kluczowe ...................................................i...................................................i....74 Metoda run() ...................................................i...................................................i.........75 Metoda sbInterp()...................................................i...................................................i..76 Przypisanie...................................................i...................................................i............77 4 Java. Sztuka programowania Instrukcja PRINT ...................................................i...................................................i..78 Instrukcja INPUT...................................................i...................................................i..79 Instrukcja GOTO ...................................................i...................................................i..80 Instrukcja IF ...................................................i...................................................i..........83 Pętla FOR...................................................i...................................................i..............83 Instrukcja GOSUB ...................................................i...................................................i86 Instrukcja END ...................................................i...................................................i.....87 Wykorzystanie języka SBASIC ...................................................i.....................................87 Inne przykładowe programy języka SBASIC...................................................i..........88 Rozszerzanie interpretera ...................................................i...............................................90 Tworzenie własnego języka programowania ...................................................i.................90 Rozdział 4. Wykonanie menedżera pobierania plików w Javie .............................. 91 Sposoby pobierania plików z internetu ...................................................i..........................92 Omówienie programu...................................................i...................................................i..92 Klasa Download ...................................................i...................................................i..........93 Zmienne pobierania ...................................................i.................................................97 Konstruktor klasy...................................................i...................................................i..97 Metoda download()...................................................i..................................................97 Metoda run() ...................................................i...................................................i.........97 Metoda stateChanged() ...................................................i..........................................101 Metody akcesorowe i działań...................................................i.................................101 Klasa ProgressRenderer ...................................................i...............................................101 Klasa DownloadsTableModel ...................................................i......................................102 Metoda addDownload() ...................................................i.........................................104 Metoda clearDownload() ...................................................i.......................................105 Metoda getColumnClass() ...................................................i.....................................105 Metoda getValueAt() ...................................................i.............................................105 Metoda update() ...................................................i...................................................i..106 Klasa DownloadManager...................................................i.............................................106 Zmienne klasy DownloadManager ...................................................i........................111 Konstruktor klasy...................................................i...................................................i112 Metoda verifyUrl()...................................................i.................................................112 Metoda tableSelectionChanged()...................................................i...........................113 Metoda updateButtons()...................................................i.........................................113 Obsługa zdarzeń akcji ...................................................i............................................114 Kompilacja i uruchamianie programu...................................................i..........................115 Rozszerzanie możliwości programu...................................................i.............................115 Rozdział 5. Implementacja klienta e-mail w Javie ............................................. 117 Poczta elektroniczna od podszewki...................................................i..............................118 POP3 ...................................................i...................................................i...................118 IMAP...................................................i...................................................i...................118 SMTP ...................................................i...................................................i..................118 Ogólna procedura wysyłania lub odbierania wiadomości e-mail .............................119 Interfejs programistyczny JavaMail ...................................................i.............................119 Ogólny opis wykorzystania biblioteki ...................................................i...................120 Prosty klient poczty elektronicznej ...................................................i..............................121 Klasa ConnectDialog ...................................................i.............................................122 Klasa DownloadingDialog...................................................i.....................................127 Klasa MessageDialog...................................................i.............................................128 Klasa MessageTableModel...................................................i....................................134 Klasa EmailClient ...................................................i..................................................138 Kompilacja i uruchamianie klienta poczty...................................................i...................153 Rozszerzanie możliwości klienta ...................................................i.................................154 Spis treści 5 Rozdział 6. Przeszukiwanie sieci za pomocą Javy.............................................. 155 Podstawy funkcjonowania agenta internetowego ...................................................i........156 Omówienie protokołu robot ...................................................i.........................................157 Wprowadzenie do agenta wyszukiwania ...................................................i.....................158 Klasa SearchCrawler ...................................................i...................................................i.158 Zmienne klasy...................................................i...................................................i.....173 Konstruktor klasy SearchCrawler ...................................................i..........................173 Metoda actionSearch() ...................................................i...........................................174 Metoda search() ...................................................i...................................................i..176 Metoda showError()...................................................i...............................................179 Metoda updateStats() ...................................................i.............................................179 Metoda addMatch()...................................................i................................................180 Metoda verifyUrl()...................................................i.................................................180 Metoda isRobotAllowed() ...................................................i.....................................181 Metoda downloadPage() ...................................................i........................................183 Metoda removeWwwFromUrl() ...................................................i............................184 Metoda retrieveLinks() ...................................................i..........................................185 Metoda searchStringMatches() ...................................................i..............................191 Metoda crawl()...................................................i...................................................i....192 Kompilacja i uruchomienie programu...................................................i..........................194 Możliwe zastosowania agentów internetowych...................................................i...........196 Rozdział 7. Rendering HTML w Javie ...................................................h............. 197 Rendering HTML w edytorze JEditorPane...................................................i..................197 Obsługa zdarzeń łączy...................................................i..................................................198 Tworzenie prostej przeglądarki internetowej...................................................i...............199 Klasa MiniBrowser ...................................................i................................................199 Zmienne klasy MiniBrowser...................................................i..................................204 Konstruktor klasy...................................................i...................................................i205 Metoda actionBack()...................................................i..............................................205 Metoda actionForward() ...................................................i........................................206 Metoda actionGo() ...................................................i.................................................206 Metoda showError()...................................................i...............................................207 Metoda verifyUrl()...................................................i.................................................207 Metoda showPage() ...................................................i...............................................207 Metoda updateButtons()...................................................i.........................................209 Metoda hyperlinkUpdate()...................................................i.....................................210 Kompilacja i uruchomienie przeglądarki ...................................................i.....................210 Zastosowania renderingu HTML ...................................................i.................................211 Rozdział 8. Statystyka i wykresy ...................................................h.................. 213 Próbki, zbiory, rozkład i zmienne ...................................................i................................214 Podstawy statystyki ...................................................i...................................................i...215 Średnia ...................................................i...................................................i................215 Mediana...................................................i...................................................i...............216 Moda (dominanta)...................................................i..................................................216 Wariancje i odchylenie standardowe...................................................i............................218 Równanie regresji...................................................i...................................................i......219 Współczynnik korelacji ...................................................i.........................................221 Cała klasa Stats......................................i...................................................i.......................223 Tworzenie wykresów ...................................................i...................................................i226 Skalowanie danych ...................................................i................................................226 Klasa Graphs...................................................i...................................................i.......227 Zmienne klasy Graphs ...................................................i...........................................231 Konstruktor klasy Graphs ...................................................i......................................232 Metoda paint()...................................................i...................................................i.....234 6 Java. Sztuka programowania Metoda bargraph() ...................................................i.................................................237 Metoda scatter() ...................................................i...................................................i..237 Metoda regplot() ...................................................i...................................................i.237 Aplikacja tworzenia statystyk ...................................................i......................................238 Konstruktor klasy StatsWin ...................................................i...................................242 Procedura obsługi itemStateChanged()...................................................i..................243 Metoda actionPerformed() ...................................................i.....................................244 Metoda shutdown() ...................................................i................................................244 Metoda createMenu()...................................................i.............................................244 Klasa DataWin ...................................................i...................................................i....244 Łączymy wszystko razem ...................................................i......................................245 Prosty aplet ze statystykami ...................................................i.........................................247 Możliwe udoskonalenia...................................................i................................................249 Rozdział 9. Aplety i serwlety finansowe...................................................h......... 251 Znajdowanie raty kredytu...................................................i.............................................252 Pola apletu...................................................i...................................................i...........255 Metoda init() ...................................................i...................................................i.......256 Metoda actionPerformed() ...................................................i.....................................258 Metoda paint()...................................................i...................................................i.....258 Metoda compute()...................................................i..................................................259 Znajdowanie przyszłej wartości inwestycji...................................................i..................260 Znajdowanie wkładu początkowego wymaganego do uzyskania przyszłej wartości inwestycji...................................................i...............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...................................................i............275 Tworzenie serwletów finansowych...................................................i..............................278 Serwer Tomcat ...................................................i...................................................i....278 Konwersja apletu RegPay do serwletu ...................................................i..................280 Serwlet RegPayS...................................................i...................................................i.280 Możliwe rozszerzenia...................................................i...................................................i283 Rozdział 10. Rozwiązywanie problemów za pomocą sztucznej inteligencji ............ 285 Reprezentacja i terminologia...................................................i........................................286 Rosnąca liczba kombinacji...................................................i...........................................287 Techniki wyszukiwania...................................................i................................................288 Obliczanie wyszukiwania ...................................................i......................................289 Problem ...................................................i...................................................i.....................289 Reprezentacja graficzna ...................................................i.........................................290 Klasa FlightInfo.......................................i...................................................i.....................291 Wyszukiwanie w głąb ...................................................i..................................................291 Analiza wyszukiwania w głąb ...................................................i...............................300 Wyszukiwanie wszerz ...................................................i..................................................300 Analiza wyszukiwania wszerz ...................................................i...............................302 Dodanie heurystyki ...................................................i...................................................i...303 Wyszukiwanie wspinaczkowe ...................................................i...............................304 Analiza wyszukiwania wspinaczkowego...................................................i...............308 Wyszukiwanie najmniejszego kosztu ...................................................i....................309 Analiza wyszukiwania najmniejszego kosztu...................................................i........310 Znajdowanie wielu rozwiązań...................................................i......................................311 Usuwanie ścieżek...................................................i...................................................i311 Usuwanie węzłów ...................................................i..................................................312 Znalezienie „optymalnego” rozwiązania ...................................................i.....................317 Powrót do zagubionych kluczy ...................................................i....................................321 Skorowidz...................................................h................................... 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ęzykiach. 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. ♦ 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 obiektiu 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 suimą 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ą jeist 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[EJYCTVQħEK RWDNKEUVCVKEFQWDNGOGCP FQWDNG=?XCNU ] FQWDNGCXI HQT KPVKKXCNUNGPIVJK CXI XCNU=K? CXIXCNUNGPIVJ TGVWTPCXI _ 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. 216 Mediana Java. Sztuka programowania 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 iprzykł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 śirednią 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 imetody OGFKCP .  YTCECOGFKCPúRQFCP[EJYCTVQħEK RWDNKEUVCVKEFQWDNGOGFKCP FQWDNG=?XCNU ] FQWDNGVGOR=?PGYFQWDNG=XCNUNGPIVJ? 5[UVGOCTTC[EQR[ XCNUVGORXCNUNGPIVJ  #TTC[UUQTV VGOR UQTVQYCPKGFCP[EJ  YTÎEGPKGYCTVQħEKħTQFMQYGL KH XCNUNGPIVJ  ] ,GħNKPKGRCT[UVCNKEDCYCTVQħEKPCLFļħTGFPKæF TGVWTP VGOR=VGORNGPIVJ? VGOR= VGORNGPIVJ ?  _GNUGTGVWTP VGOR=VGORNGPIVJ? _ Aby użyć metody OGFKCP , wystarczy tylko przekazać referencję do tablicy zawie- rającej zbiór wartości. Jako wynik wykonania metody oitrzymuje 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 tworzeniai wykresu. Moda (dominanta) Moda próbki jest wartością najczęściej występującą w zbiiorze. 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. ♦ 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, piróbka nie posiada mody. Poniższa metoda OQFG znajduje modę zbioru.   YTCECOQFú FQOKPCPVú FNCRQFCP[EJYCTVQħEK 9[LæVGM0Q/QFG ZEGRVKQPLGUVIđCUCP[YVGF[IF[ ľCFPCNKEDPKGY[UVúRWLGEúħEKGLQFRQQUVCđ[EJ )F[FYKGNWDYKúEGLYCTVQħEKRQLCYKCUKúTÎYPKGEúUVQF YTCECPCLGUVV[NMQRKGTYUCPKEJ  RWDNKEUVCVKEFQWDNGOQFG FQWDNG=?XCNU VJTQYU0Q/QFG ZEGRVKQP ] FQWDNGOOQFG8CN KPVEQWPVQNFEQWPV HQT KPVKKXCNUNGPIVJK ] OXCNU=K? EQWPV  NKECPKGY[UVúRQYCPKCRQUEGIÎNP[EJYCTVQħEKF HQT KPVLK LXCNUNGPIVJL KH OXCNU=L? EQWPV   ,GħNKVCYCTVQħèY[UVúRWLGEúħEKGLPKľRQRTGFPKG CRCOKúVCLLæ  KH EQWPV QNFEQWPV ] OQFG8CNO QNFEQWPVEQWPV _ _ KH QNFEQWPV VJTQYPGY0Q/QFG ZEGRVKQP  GNUG TGVWTPOQFG8CN _ 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æVGMIđCUCP[RTG/QFG ENCUU0Q/QFG ZEGRVKQPGZVGPFU ZEGRVKQP] RWDNKE5VTKPIVQ5VTKPI ] TGVWTP DKÎTPKGCYKGTCOQF[ _ _ 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łiad 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 zinterpretowiać ś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 zerio. Odchylenie standardowe znajduje się obliczając pierwiastek kwadratowy wariancji. Z tego powodu wzór na odchylenie standardowe ma nasitę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 tiabelę 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. Rozdział 8. ♦ Statystyka i wykresy 219 Di 11 20 40 30 99 30 50 Di–M –29 –20 0 –10 59 –10 10 Suma: Średnia sumy: (Di–M)2 841 400 0 100 3481 100 100 5022 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 odchyleiniu standardowym. Przedstawiona poniżej metoda UVF GX oblicza odchylenie standardowe dla tablicy wartości.  YTCECQFEJ[NGPKGUVCPFCTFQYGDKQTWYCTVQħEK RWDNKEUVCVKEFQWDNGUVF GX FQWDNG=?XCNU ] FQWDNGUVF FQWDNGCXIOGCP XCNU  HQT KPVKKXCNUNGPIVJK UVF  XCNU=K?CXI   XCNU=K?CXI  UVFXCNUNGPIVJ UVF/CVJUSTV UVF  TGVWTPUVF _ 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 iskł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 odnaleźć wartoiś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 0 1 2 3 4 5 6 7 8 9 Cena 68 75 74 80 81 85 82 87 91 94 Równanie regresji dla tych danych jest następujące. Y = 70,22 + 2,55 X 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 jeist 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 TGITGUU przedstawiona poniżej oblicza równanie regresji oraz współczyn- nik korelacji.  1DNKECPKGTGITGULKKYURÎđE[PPKMMQTGNCELK FNCRQFCPGIQDKQTWYCTVQħEK9CTVQħEKTGRTGGPVWLæF YURÎđTúFPæ;9URÎđTúFPæ:LGUVECU  KPMTGOGPVCELCQLGFGPYMCľF[OMTQMW   RWDNKEUVCVKE4GI CVCTGITGUU FQWDNG=?XCNU ] FQWDNGCD[#XIZ#XIVGORVGOREQT FQWDNGXCNU=?PGYFQWDNG=XCNUNGPIVJ? 7VYQTGPKGHQTOCVWNKEDQYGIQFYQOCE[HTCOKRQRFTGEKPMW 0WODGT(QTOCVPH0WODGT(QTOCVIGV+PUVCPEG  PHUGV/CZKOWO(TCEVKQP KIKVU    PCNGKGPKGħTGFPKGLYCTVQħEK; [#XIOGCP XCNU   PCNGKGPKGħTGFPKGLMQORQPGPVW: Z#XI HQT KPVKKXCNUNGPIVJK Z#XI K Z#XIXCNUNGPIVJ  PCNGKGPKGD VGORVGOR HQT KPVKKXCNUNGPIVJK ] VGOR  XCNU=K?[#XI   KZ#XI  VGOR  KZ#XI   KZ#XI  _ DVGORVGOR  PCNGKGPKGC C[#XI D Z#XI  1DNKEGPKGYURÎđE[PPKMÎYMQTGNCELK HQT KPVKKXCNUNGPIVJK XCNU=K?K  EQTVGORXCNUNGPIVJ EQTUVF GX XCNU  UVF GX XCNU  TGVWTPPGY4GI CVC CDEQT; PHHQTOCV C    PHHQTOCV D   :  _ 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. ♦ Statystyka i wykresy 223  PCNGKGPKGħTGFPKGLMQORQPGPVW: Z#XI HQT KPVKKXCNUNGPIVJK Z#XI K Z#XIXCNUNGPIVJ 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 poiwstaje ś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 rozpatrywaniy 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 4GI CVC. Klasę tego obiektu przedstawiono poniżej. 6CMNCUCRTGEJQYWLGFCPGCPCNK[TGITGU[LPGL ENCUU4GI CVC] RWDNKEFQWDNGCD RWDNKEFQWDNGEQT RWDNKE5VTKPIGSWCVKQP RWDNKE4GI CVC FQWDNGKFQWDNGLFQWDNGM5VTKPIUVFT ] CK DL EQTM GSWCVKQPUVT _ _ 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 4GI CVC i 0Q/QFG ZEGRVKQP. KORQTVLCXCWVKN  KORQTVLCXCVGZV  6CMNCUCRTGEJQYWLGFCPGCPCNK[TGITGU[LPGL ENCUU4GI CVC] RWDNKEFQWDNGCD RWDNKEFQWDNGEQT RWDNKE5VTKPIGSWCVKQP RWDNKE4GI CVC FQWDNGKFQWDNGLFQWDNGM5VTKPIUVFT ] CK DL EQTM GSWCVKQPUVT _ _ 224 Java. Sztuka programowania 9[LæVGMIđCUCP[RTG/QFG ENCUU0Q/QFG ZEGRVKQPGZVGPFU ZEGRVKQP] RWDNKE5VTKPIVQ5VTKPI ] TGVWTP DKÎTPKGCYKGTCOQF[ _ _ 1IÎNPCMNCUCUVCV[UV[M RWDNKEENCUU5VCVU]  YTCECħTGFPKæRQFCP[EJYCTVQħEK RWDNKEUVCVKEFQWDNGOGCP FQWDNG=?XCNU ] FQWDNGCXI HQT KPVKKXCNUNGPIVJK CXI XCNU=K? CXIXCNUNGPIVJ TGVWTPCXI _  YTCECOGFKCPúRQFCP[EJYCTVQħEK RWDNKEUVCVKEFQWDNGOGFKCP FQWDNG=?XCNU ] FQWDNGVGOR=?PGYFQWDNG=XCNUNGPIVJ? 5[UVGOCTTC[EQR[ XCNUVGORXCNUNGPIVJ  #TTC[UUQTV VGOR UQTVQYCPKGFCP[EJ  YTÎEGPKGYCTVQħEKħTQFMQYGL KH XCNUNGPIVJ  ] ,GħNKPKGRCT[UVCNKEDCYCTVQħEKPCLFļħTGFPFKæ TGVWTP VGOR=VGORNGPIVJ? VGOR= VGORNGPIVJ ?  _GNUGTGVWTP VGOR=VGORNGPIVJ? _   YTCECOQFú FQOKPCPVú FNCRQFCP[EJYCTVQħEK 9[LæVGM0Q/QFG ZEGRVKQPLGUVIđCUCP[YVGF[IF[ ľCFPCNKEDPKGY[UVúRWLGEúħEKGLQFRQQUVCđ[EJ )F[FYKGNWDYKúEGLYCTVQħEKRQLCYKCUKúTÎYPKGEúUVQ YTCECPCLGUVV[NMQRKGTYUCPKEJ  RWDNKEUVCVKEFQWDNGOQFG FQWDNG=?XCNU VJTQYU0Q/QFG ZEGRVKQP ] FQWDNGOOQFG8CN KPVEQWPVQNFEQWPV HQT KPVKKXCNUNGPIVJK ] OXCNU=K? EQWPV  NKECPKGY[UVúRQYCēRQUEGIÎNP[EJYCTVQħEK HQT KPVLK LXCNUNGPIVJL KH OXCNU=L? EQWPV  Rozdział 8. ♦ Statystyka i wykresy 225  ,GħNKVCYCTVQħèY[UVúRWLGEúħEKGLPKľRQRTGFPKFG CRCOKúVCLLæ  KH EQWPV QNFEQWPV ] OQFG8CNO QNFEQWPVEQWPV _ _ KH QNFEQWPV VJTQYPGY0Q/QFG ZEGRVKQP  GNUG TGVWTPOQFG8CN _  YTCECQFEJ[NGPKGUVCPFCTFQYGDKQTWYCTVQħEKF RWDNKEUVCVKEFQWDNGUVF GX FQWDNG=?XCNU ] FQWDNGUVF FQWDNGCXIOGCP XCNU  HQT KPVKKXCNUNGPIVJK UVF  XCNU=K?CXI   XCNU=K?CXI  UVFXCNUNGPIVJ UVF/CVJUSTV UVF  TGVWTPUVF _  1DNKECPKGTGITGULKKYURÎđE[PPKMCMQTGNCELK FNCRQFCPGIQDKQTWYCTVQħEK9CTVQħEKTGRTGGPVFWLæ YURÎđTúFPæ;9URÎđTúFPæ:LGUVECU  KPMTGOGPVCELCQLGFGPYMCľF[OMTQMW   RWDNKEUVCVKE4GI CVCTGITGUU FQWDNG=?XCNU ] FQWDNGCD[#XIZ#XIVGORVGOREQT FQWDNGXCNU=?PGYFQWDNG=XCNUNGPIVJ? 7VYQTGPKGHQTOCVWNKEDQYGIQFYQOCE[HTCOKRQFRTGEKPMW 0WODGT(QTOCVPH0WODGT(QTOCVIGV+PUVCPEG  PHUGV/CZKOWO(TCEVKQP KIKVU    PCNGKGPKGħTGFPKGLYCTVQħEK; [#XIOGCP XCNU   PCNGKGPKGħTGFPKGLMQORQPGPVW: Z#XI HQT KPVKKXCNUNGPIVJK Z#XI K Z#XIXCNUNGPIVJ  PCNGKGPKGD VGORVGOR HQT KPVKKXCNUNGPIVJK ] VGOR  XCNU=K?[#XI   KZ#XI  VGOR  KZ#XI   KZ#XI  _ DVGORVGOR 226 Java. Sztuka programowania  PCNGKGPKGC C[#XI D Z#XI  1DNKEGPKGYURÎđE[PPKMÎYMQTGNCELK HQT KPVKKXCNUNGPIVJK XCNU=K?K  EQTVGORXCNUNGPIVJ EQTUVF GX XCNU  UVF GX XCNU  TGVWTPPGY4GI CVC CDEQT; PHHQTOCV C    PHHQTOCV D   :  _ _ 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 oikna. 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 dlai 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.i 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. ♦ 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 dlai osi Y. Y = Y * (szerokość_okna / (max – min)) gdzie Y jest skalowaną wartością, opisująca położeniei 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żione. 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. KORQTVLCXCCYV  KORQTVLCXCCYVGXGPV  KORQTVLCXCCRRNGV  KORQTVLCXCWVKN  1IÎNPCMNCUCT[UQYCPKCY[MTGUÎY RWDNKEENCUU)TCRJUGZVGPFU(TCOG] 5VCđGTQFCLÎYY[MTGUÎY RWDNKEHKPCNUVCVKEKPV$#4 RWDNKEHKPCNUVCVKEKPV5 #66 4 RWDNKEHKPCNUVCVKEKPV4 )2.16 RTKXCVGKPVITCRJ5V[NG  1MTGħNCKNQħèOKGLUECFQRQQUVCYKGPKC OKúF[QDUCTGOFCP[EJCMTCYúFKæ  RTKXCVGHKPCNKPVNGHV)CR RTKXCVGHKPCNKPVVQR)CR RTKXCVGHKPCNKPVDQVVQO)CR RTKXCVGKPVTKIJV)CRQDNKECPKGVGLYCTVQħEK 2TGEJQYWLGYCTVQħèOKPKOCNPæKOCMU[OCNPæFCP[EJF RTKXCVGFQWDNGOKPOCZ 1FPKGUKGPKGUKúFQFCP[EJ RTKXCVGFQWDNG=?FCVC -QNQT[Y[MTGUW  QNQTITKF QNQTPGY QNQT    QNQTFCVC QNQTPGY QNQT   228 Java. Sztuka programowania 4ÎľPGYCTVQħEKWľ[YCPGFQUMCNQYCPKCKY[ħYKGVNCPFKCFCP[EJ RTKXCVGKPVJ)CRQFUVúROKúF[RWPMVCOKFCP[EJ RTKXCVGKPVURTGCFQFUVúROKúF[YCTVQħEKCOKOKPFKOCZ RTKXCVGFQWDNGUECNGYURÎđE[PPKMUMCNQYCPKC RTKXCVGKPVDCUGNKPGRKQPQY[YURÎđE[PPKMRQFUVCY[ .QMCNKCELCQDUCTWFCP[EJYQMPKG RTKXCVGKPVVQRDQVVQONGHVTKIJV RWDNKE)TCRJU FQWDNG=?XCNUKPVUV[NG ] 1DUđWICFCTGēCOMPKúEKCQMPC CFF9KPFQY.KUVGPGT PGY9KPFQY#FCRVGT ] RWDNKEXQKFYKPFQY NQUKPI 9KPFQY XGPVYG ] UGV8KUKDNG HCNUG  FKURQUG  _ _  1DUđWICOKCP[TQOKCTW CFF QORQPGPV.KUVGPGT PGY QORQPGPV#FCRVGT ] RWDNKEXQKFEQORQPGPV4GUKGF QORQPGPV XGPVEG F] TGRCKPV  _ _  ITCRJ5V[NGUV[NG FCVCXCNU 5QTVQYCPKGFCP[EJYEGNWPCNGKGPKCYCTVQħEKFOKPKOCZ FQWDNGV=?PGYFQWDNG=XCNUNGPIVJ? 5[UVGOCTTC[EQR[ XCNUVXCNUNGPIVJ  #TTC[UUQTV V  OKPV=? OCZV=VNGPIVJ? UGV5KG PGY KOGPUKQP   UYKVEJ ITCRJ5V[NG ] ECUG$#4 UGV6KVNG 9[MTGUUđWRMQY[  UGV.QECVKQP   DTGCM ECUG5 #66 4 UGV6KVNG 9[MTGURWPMVQY[  UGV.QECVKQP   DTGCM ECUG4 )2.16 UGV6KVNG 9[MTGUTGITGULK  UGV.QECVKQP   DTGCM _ UGV8KUKDNG VTWG  _ Rozdział 8. ♦ Statystyka i wykresy 229 RWDNKEXQKFRCKPV )TCRJKEUI ]  KOGPUKQPYKP5KGIGV5KG TQOKCTQMPC +PUGVUKPUIGV+PUGVU TQOKCTITCPKE 4QOKCTCMVWCNPKGUVQUQYCPGLEEKQPMK (QPV/GVTKEUHOIIGV(QPV/GVTKEU  1DNKEGPKGQFRQYKGFPKGIQQFUVúRW TKIJV)CRHOUVTKPI9KFVJ  FCVCNGPIVJ  1DNKEGPKGYU[UVMKEJRTGTYFNCFCPGIQTGIKQPWF NGHVKPUNGHV NGHV)CR HOEJCT9KFVJ   VQRKPUVQR VQR)CR HOIGV#UEGPV  DQVVQOKPUDQVVQO DQVVQO)CR HOIGV#UEGPV  TKIJVKPUTKIJV TKIJV)CR  ,GħNKYCTVQħèOKPKOCNPCLGUVFQFCVPKCWľ[L LCMQOKGLUECRQEæVMQYGIQ LGħNKYCTVQħèOCMU[OCNPCLGUVWLGOPCWľ[L  KH OKP  OKP KH OCZ OCZ  1DNKEQFNGIđQħèOKúF[OKPKOWOKOCMUKOWO  URTGCF KPV  OCZOKP  1DNKEYURÎđE[PPKMUMCNQYCPKC UECNG FQWDNG  YKP5KGJGKIJVDQVVQOVQR URTGCF 2QPCLRQđQľGPKGRQFUVCY[ DCUGNKPG KPV  YKP5KGJGKIJVDQVVQO OKP UECNG  1DNKEQFNGIđQħèOKúF[FCP[OK J)CR YKP5KGYKFVJNGHVTKIJV  FCVCNGPIVJ  7UVCYMQNQTUKCVMK IUGV QNQT ITKF QNQT  0CT[UWLYURÎđTúFPG IFTCY.KPG NGHVDCUGNKPG NGHV  FCVCNGPIVJ  J)CRDCUGNKPG  0CT[UWLQħ; KH ITCRJ5V[NG$#4 IFTCY.KPG NGHVYKP5KGJGKIJVDQVVQONGHVVQR  9[ħYKGVNYCTVQħEKOKPOCZK IFTCY5VTKPI KPUNGHVDCUGNKPG HOIGV#UEGPV  F KH OCZ IFTCY5VTKPI  OCZKPUNGHVDCUGNKPG  KPV  OCZ UECNG   KH OKP IFTCY5VTKPI  OKPKPUNGHVDCUGNKPG  KPV  OKP UECNG HOIGV#UEGPV  230 Java. Sztuka programowania 9[ħYKGVNYCTVQħEK IFTCY5VTKPI  FCVCNGPIVJ  FCVCNGPIVJ   J)CR  NGHV DCUGNKPG HOIGV#UEGPV  7UVCYMQNQTFCP[EJ IUGV QNQT FCVC QNQT  9[ħYKGVNFCPG UYKVEJ ITCRJ5V[NG ] ECUG$#4 DCTITCRJ I  DTGCM ECUG5 #66 4 UECVVGT I  DTGCM ECUG4 )2.16 TGIRNQV I  DTGCM _ _ 9[ħYKGVNCPKGY[MTGUWUđWRMQYGIQ RTKXCVGXQKFDCTITCRJ )TCRJKEUI ] KPVX HQT KPVKKFCVCNGPIVJK ] X KPV  FCVC=K? UECNG  IFTCY.KPG K J)CR NGHVDCUGNKPG K J)CR NGHVDCUGNKPGX  _ _ 9[ħYKGVNCPKGY[MTGUWRWPMVQYGIQ RTKXCVGXQKFUECVVGT )TCRJKEUI ] KPVX HQT KPVKKFCVCNGPIVJK ] X KPV  FCVC=K? UECNG  IFTCY4GEV K J)CR NGHVDCUGNKPGX  _ _ 9[MTGURWPMVQY[NKPKæTGITGULK RTKXCVGXQKFTGIRNQV )TCRJKEUI ] KPVX 4GI CVCTF5VCVUTGITGUU FCVC  HQT KPVKKFCVCNGPIVJK ] X KPV  FCVC=K? UECNG  IFTCY4GEV K J)CR NGHVDCUGNKPGX  _ Rozdział 8. ♦ Statystyka i wykresy 231 4[UQYCPKGNKPKKTGITGULK IFTCY.KPG NGHVDCUGNKPG KPV  TFC UECNG  J)CR FCVCNGPIVJ NGHV  DCUGNKPG KPV  TFC TFD FCVCNGPIVJ UECNG  _ _ Zmienne klasy Graphs Klasa )TCRJU zaczyna się od zdefiniowania następujących zmiennycih. 5VCđGTQFCLÎYY[MTGUÎY RWDNKEHKPCNUVCVKEKPV$#4 RWDNKEHKPCNUVCVKEKPV5 #66 4 RWDNKEHKPCNUVCVKEKPV4 )2.16 RTKXCVGKPVITCRJ5V[NG Pierwsze trzy zmienne typu HKPCNUVCVKE 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 wyikresie.  1MTGħNCKNQħèOKGLUECFQRQQUVCYKGPKC OKúF[QDUCTGOFCP[EJCMTCYúFKæ  RTKXCVGHKPCNKPVNGHV)CR RTKXCVGHKPCNKPVVQR)CR RTKXCVGHKPCNKPVDQVVQO)CR RTKXCVGKPVTKIJV)CRQDNKECPKGVGLYCTVQħ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. 2TGEJQYWLGYCTVQħèOKPKOCNPæKOCMU[OCNPæFCP[EJ RTKXCVGFQWDNGOKPOCZ 1FPKGUKGPKGUKúFQFCP[EJ RTKXCVGFQWDNG=?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 iITKF QNQT i FCVC QNQT. -QNQT[Y[MTGUW QNQTITKF QNQTPGY QNQT   QNQTFCVC QNQTPGY QNQT   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 skialowaniem. 4ÎľPGYCTVQħEKWľ[YCPGFQUMCNQYCPKCKY[ħYKGVNCPKCFFCP[EJ RTKXCVGKPVJ)CRQFUVúROKúF[RWPMVCOKFCP[EJ RTKXCVGKPVURTGCFQFUVúROKúF[YCTVQħEKCOKOKPKFOCZ RTKXCVGFQWDNGUECNGYURÎđE[PPKMUMCNQYCPKC RTKXCVGKPVDCUGNKPGRKQPQY[YURÎđE[PPKMRQFUVCY[F 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. .QMCNKCELCQDUCTWFCP[EJYQMPKG RTKXCVGKPVVQRDQVVQONGHVTKIJV 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łuchiwaniie zdarzenia zamykania okna. 1DUđWICFCTGēCOMPKúEKCQMPC CFF9KPFQY.KUVGPGT PGY9KPFQY#FCRVGT ] RWDNKEXQKFYKPFQY NQUKPI 9KPFQY XGPVYG ] 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
Pobierz darmowy fragment (pdf)

Gdzie kupić całą publikację:

Java. Sztuka programowania
Autor:
,

Opinie na temat publikacji:


Inne popularne pozycje z tej kategorii:


Czytaj również:


Prowadzisz stronę lub blog? Wstaw link do fragmentu tej książki i współpracuj z Cyfroteką: