Professional Documents
Culture Documents
programowania
Metody i narzdzia
programowania
Pawe Lula, Jan Madej, Janusz Stal,
Ryszard Tadeusiewicz, Janusz Tuchowski
Komitet redakcyjny:
prof. dr hab. Tadeusz Grabiski, dr Lesaw Piecuch
Recenzent:
dr hab. in. Krzysztof Boryczko, prof. AGH
Redakcja naukowa:
Jan Madej
Zesp autorw:
Pawe Lula, Jan Madej, Janusz Stal,
Ryszard Tadeusiewicz, Janusz Tuchowski
Lider projektu:
Uniwersytet Ekonomiczny wKrakowie
ul. Rakowicka 27, 31-510 Krakw
tel.: +48 12 293 57 00 lub +48 12 293 52 00
faks: +48 12 293 50 10
www.uek.krakow.pl
Partner projektu:
Stowarzyszenie Edukacja dla Przedsibiorczoci
ul. Basztowa 23/5, 31-156 Krakw
tel.: +48 12 430 03 10
faks: +48 12 423 01 56
www.edp.org.pl
Copyright by Uniwersytet Ekonomiczny wKrakowie
Krakw 2012 r.
ISBN 978-83-63498-01-6
Publikacja bezpatna
Opracowanie wydawnicze, skad, amanie i projekt okadki
na zlecenie Uniwersytetu Ekonomicznego w Krakowie
Studio R.C.
Wydawnictwo przygotowane wramach projektu Uruchomienie
unikatowego kierunku studiw Informatyka Stosowana odpowiedzi
na zapotrzebowanie rynku pracy jest wspfinansowane ze rodkw
Unii Europejskiej wramach Europejskiego Funduszu Spoecznego.
Spis treci
Wstp. .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
11
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . .
27
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
29
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
30
. . . . . . . . . . . . . .
32
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
35
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
39
. . . . . . . . .
41
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
43
17
. . . . . . . . . . . .
44
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
48
Praktyka programowania
imperatywno-strukturalnego J. Stal, J. Tuchowski
2.1. Paradygmaty programowania. .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
51
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
51
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
53
. . . . . . . . . . . . . . . . . . . . . . . .
53
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
56
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
57
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
58
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
58
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
58
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
59
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
60
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
62
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
63
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
65
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
67
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . .
70
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
70
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
71
. . . . . . . . . . . . . . . . . . . . . . . . . . . .
74
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
77
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
79
. . . . . . . . . . . . . . . . . . .
82
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
82
. . . . . . . . . . . . . . . . . . . . . . . . .
83
. . . . . . . . . . . . . . . . . . . . . . . . . . . . .
84
. . . . . . . . . . . . . . . . . . . . . . . . . . . .
86
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
92
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
94
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
95
69
J. Stal, J. Tuchowski
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
101
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
101
3.1.2.Tworzenie obiektw..
3.1.3. Skadowe klasy..
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
104
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
106
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
114
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
114
3.2.2. Dziedziczenie. .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
117
Spis treci 7
3.2.3. Polimorfizm.
3.2.4. Pakiety. .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
120
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
122
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
125
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
125
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
131
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
132
. . . . . . . . . . . . . . . . . . . . . . . . . . . . .
134
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
134
. . . . . . . . . . . . . . . . . . . . . . . . . . . . .
137
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
140
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
144
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
146
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
146
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
148
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
153
124
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
159
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
162
3.7. Pytania. .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.8. Literatura. .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
166
168
. . . . . . . . . . . . . . . . . . . . . . . . . . . .
173
. . . . . . . . . . . . . . . . . . . . . . . . . . . . .
175
. . . . . . . . . . . . . . . . . . . . . . . . . .
178
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
179
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
179
. . . . . . . . . . . . . . . .
180
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
185
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
185
. . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . .
200
. . . . . . . . . . . . . . . . . . . . . . . . . . . . .
204
. . . . . . . . . . . . . . . . . . . . . . . .
205
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
206
. . . . . . . . . . . . . . . . . . . . . . . . . . .
210
. . . . . . . . . . . . .
212
. . . . . . . . . . . . . . . . . . . . . . . . . . .
214
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
217
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
207
. . . .
194
218
. . . . . . . . . . . . . . . . . .
221
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
224
4.7. Literatura. .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
225
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
229
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
229
. . . . . . . . . . . . . .
232
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
234
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
243
. . . . . . . . . . . . . . . . . . . . . . . . . . .
243
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
245
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
247
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
247
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
248
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
249
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
252
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
254
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
254
Spis treci 9
5.4.2. Permutacje bez powtrze. .
5.5. Struktury dynamiczne.
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
256
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
257
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
258
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
267
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
275
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
280
5.5.5. Grafy..
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
288
5.6. Literatura. .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
291
.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
292
5.5.4. Drzewa.
SPIS TABEL
SPIS RYSUNKW
.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
292
Wstp
Od pocztku powstania komputerw (czy szerzej maszyn liczcych) ich twrcom przywieca cel rozwizania lub przypieszenia procesw, ktrych tradycyjna realizacja trwaaby owiele duej lub wymagaa zaangaowania znacznych
zasobw. Jednak aby byo to moliwe, najpierw musiaa pojawi si myl, e da
si to zrobi. Od tej myli naleao przej do pomysu jak to zrobi (algorytm).
Pomys trzeba byo zapisa wpostaci moliwej do przetworzenia na rozkazy dla
komputera (kod rdowy wjzyku programowania), anastpnie przetumaczy
go na zestaw instrukcji maszynowych, ktre komputer potrafi wykona (posta
wykonywalna programu). Niestety proces ten chocia powyej zosta przedstawiony wtrzech zdaniach nie jest prosty. Kady zetapw wymaga odpowiedniej
wiedzy iumiejtnoci.
Podrcznik Metody inarzdzia programowania, ktry oddajemy do rk Czytelnikw jest prb zbiorczego spojrzenia na proces tworzenia programw komputerowych. Na rynku dostpnych jest wiele publikacji opisujcych algorytmy,
struktury danych ijzyki programowania, ale zamierzeniem autorw byo przedstawienie wjednym podrczniku pewnej caoci: od historii algorytmw, poprzez
ich omwienie, do programowania obiektowego ioprogramowywania urzdze
mobilnych. Takie podejcie do problemu nie byo jednak proste. Spord bogactwa zagadnie dotyczcych tworzenia algorytmw, budowania iwykorzystywania
struktur danych oraz pisania programw, autorzy musieli wybra te, ktrych znajomo jest niezbdna do zrozumienia caoci, azarazem pozwala zdoby wiedz
wystarczajc do skutecznego programowania.
Podrcznik skada si zpiciu rozdziaw. Pierwszy rozdzia pt. Teoretyczne
podstawy programowania zawiera podstawowe informacje dotyczce algorytmiki.
Zamieszczone s wnim najwaniejsze definicje, krtka historia algorytmw oraz
ich wasnoci imetody notacji. Nastpnie przedstawiona jest koncepcja maszyny
Turinga maszyny, ktra jest abstrakcyjnym modelem procesu obliczeniowego.
Wrozdziale omwione s take zagadnienia zwizane zjzykami igramatykami
formalnymi. Na zakoczenie zaprezentowana jest budowa idziaanie przykadowej maszyny Turinga.
Poniewa jako narzdzie do ilustracji zagadnie prezentowanych wdalszej
czci podrcznika posuy jzyk programowania Java Standard Edition, dlatego
pocztek drugiego rozdziau pt. Praktyka programowania imperatywno-strukturalnego powicony jest omwieniu rodowiska pracy oraz zasad przygotowywania aplikacji wtym jzyku. Czytelnik ma moliwo zapoznania si zpodStowarzyszenie Edukacja dla Przedsibiorczoci
12 Wstp
stawowymi pojciami, zestawem narzdzi oraz wytycznymi odnonie tworzenia
programu (jego pisania, kompilacji iuruchamiania) zwykorzystaniem rodowiska IDEiwiersza polece. Wdalszej czci rozdziau omwione s zagadnienia
zwizane zdefinicj typw danych, deklaracj zmiennych istaych oraz wykonywaniem operacji przy uyciu dostpnego zbioru operatorw. Wpodrozdziale
powiconym sterowaniu przebiegiem programu, zostay pokazane moliwoci
wielokrotnego wykonania instrukcji programu oraz omwione kwestie dotyczce
warunkowego wykonania iprzerywania bloku instrukcji zawartego wprogramie.
Rozdzia trzeci pt. Paradygmat programowania obiektowego porusza zagadnienia stanowice podstaw programowania wkadym jzyku obiektowym. Zawiera
definicje klasy, omwienie obiektw imetod oraz prezentuje zasady ich tworzenia. Jako narzdzie wspomagajce ilustracj prezentowanych zagadniew dalszym cigu wykorzystany jest jzyk Java SE. Na jego przykadzie omwione
s m.in. zmienne typu prostego, zmienne typu klasowego, tworzenie iusuwanie
obiektw, tworzenie iwywoywanie metod, modyfikatory dostpu iprzecianie
metod, uywanie klas bibliotecznych. Wdalszej czci rozdziau przedstawione
s te cechy jzyka, ktre charakteryzuj programowanie obiektowe omwione jest wszczeglnoci dziedziczenie, polimorfizm ienkapsulacja. Wkolejnych
podrozdziaach poruszone s zagadnienia dotyczce tworzenia klas abstrakcyjnych iwykorzystania interfejsw oraz komunikacji aplikacji zotoczeniem (operacje wejcia-wyjcia iobsuga bdw). Na koniec rozdziau przedstawione s
zagadnienia odnoszce si do tworzenia graficznego interfejsu uytkownika.
Rozdzia czwarty pt. Programowanie urzdze mobilnych zosta zainspirowany obserwacj zjawisk, ktre zachodz wnaszym yciu codziennym. Na przestrzeni ostatnich lat jestemy wiadkami byskawicznego rozwoju technologii
bezprzewodowego dostpu do Internetu. Stwarza to nowe moliwoci zarwno
wsferze rozrywki, jakiwprowadzeniu dziaalnoci biznesowej. Naley jednak
pamita, i wraz zrozwojem infrastruktury mobilnej konieczne jest opracowanie
iwykonanie odpowiednich aplikacji czsto rnicych si od normalnych programw komputerowych. Rozdzia zawiera informacje dotyczce zasad tworzenia
aplikacji wrodowisku Java Micro Edition. Jest wnim scharakteryzowany nisko
iwysoko poziomowy interfejs uytkownika majcy zasadniczy wpyw na ksztat
tworzonych aplikacji.
Na pocztku rozdziau pitego pt. Algorytmy istruktury danych omwiona
jest zoono obliczeniowa algorytmw. Nastpnie zaprezentowana jest rekurencja jeden zwaniejszych mechanizmw stosowanych wprogramowaniu,
azarazem stwarzajcy due problemy pocztkujcym programistom. Po przedstawieniu definicji iomwieniu jej stosowania, zaprezentowane s wybrane algorytmy rekurencyjne (wyznaczanie liczb Fibonacciego, wyznaczanie silni, wiee
Hanoi).Wdalszej czci rozdziau przedstawione s tablice jedno- iwielowymiaUniwersytet Ekonomiczny wKrakowie
Wstp 13
rowe oraz scharakteryzowane najwaniejsze grupy algorytmw operujcych na
tego typu strukturach (m.in. algorytmy sortowania ialgorytmy wyznaczanie kombinacjii permutacji). Na zakoczenie rozdziau zaprezentowane s dynamiczne
struktury danych, takie jak stosy, kolejki, zbiory, listy, tablice asocjacyjne, drzewa
igrafy.
Majc wiadomo braku wielu zagadnie, ktre ze wzgldu na ograniczon
objto podrcznika musiay zosta pominite, mamy nadziej, e publikacja
ta okae si pomocna przy nauce programowania oraz pozwoli zrozumie zasady
tworzenia algorytmw przydatnych do rozwizania wielu problemw.
1
Teoretyczne
podstawy
programowania
Ryszard Tadeusiewicz
Stowarzyszenie Edukacja dla Przedsibiorczoci
Biorc pod uwag zastosowania wtechnice obliczeniowej2, wtym samym podrczniku (wydanymw1974 roku!) sprecyzowano ten zapis (str. 234), piszc:
() algorytm jest cisym przepisem okrelajcym proces obliczeniowy iprowadzcym od wykazujcych zmienno danych wejciowych do poszukiwanego
wyniku.
Jednak biorc pod uwag przytoczon dalej (wtej samej ksice) oglniejsz definicj, okrelajc algorytm jako:
() zbir regu, instrukcji, opisw kolejnych czynnoci lub ogranicze, ktre
okrelaj porzdek wykonywania poszczeglnych operacji wcelu otrzymania
pewnego wyniku.
stwierdzono tame, i:
() mona traktowa jako algorytm zarwno wzr matematyczny, recept produkcyjn lub instrukcj obsugi jakiego sprztu, jak ina przykad program rozwoju organizmu zawarty wkodzie genetycznym3.
Jak wynika zprzywoanych wyej definicji iokrele do dawno sformuowanych, ale wci aktualnych algorytm jest przepisem postpowania, ktre
powinno doprowadzi do uzyskania jakiego okrelonego celu. Jednak nie kady
przepis moemy nazwa algorytmem. Aby mona byo mwi oalgorytmie, przepis musi spenia cztery wymagania (Tadeusiewicz, 1998).
Pierwszym jest wymaganie jednoznacznoci. Wymaganie to wynika zfaktu,
e moemy uywa rnych sposobw definiowania algorytmw irnych metod
Okrelenie Informatyka jeszcze wtamtych czasach nie istniao, wic mwio siotechnice
obliczeniowej.
Byo to pisane dokadnie trzydzieci lat przed odczytaniem kodu genetycznego rnych organizmw, wtym czowieka.
Drugie wymaganie wie si zdyskretnym charakterem algorytmu. Wieloznaczne sowo dyskretny naley wtym kontekcie traktowa jako przeciwiestwo okrelenia cigy, anie jako przeciwiestwo sowa jawny. Przepis dziaania moe pretendowa do tego, by by algorytmem, jeli opisuje wymagane
dziaania wformie sekwencji kolejno wykonywanych elementarnych krokw.
Przez elementarny krok rozumiemy tu czynno tak prost, e jej wykonanie
nie wymaga adnych dodatkowych objanie. Tworzc algorytm, musimy wic
wybra, ktre zelementarnych czynnoci maj by wykonane, wjakiej kolejnoci, przy jakich warunkach naley wybra te, anie inne czynnoci, ale samych
czynnoci jako takich objania nie trzeba. Jak si niektre znich wskae iwybierze, to dokadnie wiadomo, co naley zrobi.
Dyskretny charakter algorytmu wniektrych przypadkach moe pozostawawsprzecznoci zcig natur wiata, wktrym yjemy. Rozwamy bardzo
prosty przykad. Wyobramy sobie naczynie zdziurk przy dnie napenione wod
(lub innym pynem) Rys. 3.
Uniwersytet Ekonomiczny w Krakowie
Pocztkowo dziurka jest zatkana ipoziom wody wnaczyniu wynosi H0. Gdy
dziurka zostanie odetkana, woda zacznie wypywa ijej poziom wnaczyniu bdzie opada. Poniewa woda wypywa pod wpywem cinienia wywieranego przez
sup wody wnaczyniu, szybko jej wypywania jest proporcjonalna do tego cinienia, acinienie jest proporcjonalne do poziomu wody H.
Wypywanie wody powoduje, e poziom H maleje. Szybko z jak obnia
si, wyraana pochodn dH/dt, jest proporcjonalna do H. Mona wic napisa
rwnanie:
(1)
(2)
Jest to funkcja ciga, ktrej wykres zosta przedstawiony na rysunku 4. Przebieg tej funkcji przedstawia wiernie sytuacj znan zcodziennego dowiadczenia:
poziomwnaczyniu opada, przy czym spadek ten jest pocztkowo szybki, apotem
wmiar ubywania wody, coraz mniejszy.
Stowarzyszenie Edukacja dla Przedsibiorczoci
Przebieg rzeczywistego procesu jest zsamej swojej natury cigy, to znaczywkadej chwili czasowej t moliwe jest podanie konkretnej wartoci poziomu
wody H(t).
Gdybymy jednak chcieli opisa ten proces wformie algorytmu (na przykad
po to, eby komputer symulowa wypyw wody), to nie wolno by nam byo odwoa si do jakiegokolwiek procesu cigego wszystko musiaoby si odbywa wsposb dyskretny. Konieczne wic byoby wprowadzenie dyskretnej skali
czasu. Zamiast zmiennej cigej t, reprezentujcej ten parametr wfizyce, musimy
wprowadzi dyskretne numery chwil czasowych n, odlegych od siebie opewien
skoczony krok czasowy (odstp czasu) , idyskretne wartoci interesujcej nas
zmiennej (poziomu wody) H(n)wtych wanie branych pod uwag chwilach czasowych. Ustalamy, e rozwaa bdziemy chwile czasowe zpewnego ustalonego
przedziau: n = 1, 2, , N. Dodatkowo umawiamy si, e znak = wzapisie
algorytmu nie oznacza rwnoci wsensie matematycznym, tylko nakazuje obliczenie wartoci wystpujcej po prawej stronie tego znaku inadanie tej wartoci
zmiennej znajdujcej si po lewej jego stronie. Schemat takiej czynnoci (oglnie
znanej winformatyce jako tzw. instrukcja podstawienia) jest nastpujcy:
zmienna_ktrej_bdzie_nadana_ warto = formua_obliczajca_warto
Uniwersytet Ekonomiczny w Krakowie
(3)
(4)
Dyskretny charakter algorytmu nie musi by istotn przeszkod przy uzyskiwaniu uytecznych praktycznie wynikw. Interpolujc dyskretne punkty uzyskane przy pomocy algorytmicznej symulacji, moemy uzyska przebieg (pokazany
lini przerywan na rysunku 6), ktry cakiem dobrze aproksymuje cig rzeczywisto. Niemniej to fundamentalne rozrnienie pomidzy cigym (Rys.
4)idyskretnym (Rys. 5) obrazem tych samych zjawisk iprocesw musi towarzyszy kadej prbie odwoania si do algorytmu.
Warto przy tym zda sobie spraw zjednej wanej okolicznoci. Ot cel, ktry postawiono przed algorytmem, moe by niekiedy nieosigalny. Twrca algoStowarzyszenie Edukacja dla Przedsibiorczoci
(5)
(6)
wiadomo, e nie istniej rozwizania tego rwnania wdziedzinie liczb rzeczywistych. (Rozwizaniem s pierwiastki zespolone sprzone, ale nie zawsze takie
rozwizanie akceptujemy). Zatem sprawdzenie znaku wyrnika pozwala przerwa dziaanie algorytmu zsygnaem niepowodzenia ialgorytm nadal jest finistyczny, chocia nie dostarcza podanych rozwiza.
Czciej jednak niepowodzenie przejawia si tym, e wykonawca algorytmu
(powiedzmy, e jest to komputer) ponawia iponawia prby znalezienia rozwizania,askutek jest wci negatywny. Na tak okoliczno wstrukturze algorytmu
musi by wbudowany hamulec bezpieczestwa, ktry zadziaa gdy zawiod
wszystkie inne metody zakoczenia pracy. Algorytm wtedy zatrzyma si awaryjnie, sygnalizujc niepowodzenie, nie popadnie jednakwfatalne zaptlenie.
Ostatnim wymaganiem, jakie stawiamy, gdy chcemy sprawi, eby pewien
przepis dziaania mona byo uzna za algorytm to wymaganie oglnoci. Algorytm powinien pozwala rozwiza pewn klas problemw albo osign pewn
grup celw, anie jeden problem czy jeden cel. Najatwiej bdzie to wytumaczy
na przykadzie. Podany niej wzr matematyczny spenia trzy zczterech warunkw, jakie wi si zpojciem algorytmu:
X = 2 + 3
(7)
Wzr ten jest jednoznaczny (niezalenie od tego, kto si nim posuy, zawsze
dostanie taki sam wynik), nastpnie jest dyskretny (konieczne jest wykonanie
dwch elementarnych krokw: dodanie dwch liczb iprzypisanie wyniku jako
wartoci zmiennej X), atake jest finistyczny (zpewnoci wynik uzyskamy po
upywie skoczonego czasu).
Jednak ten wzr nie moe by zaakceptowany jako algorytm, bo rozwizuje on
tylko jeden, zgry zadany problem. Cokolwiek bymy nie robili, skutek zawsze
bdzie taki sam: zmienna X bdzie miaa nadan warto 5.
Uniwersytet Ekonomiczny w Krakowie
(8)
jest ju algorytmem wcaym tego sowa znaczeniu, poniewa przy jego pomocy
mona rozwiza ca KLAS zada odpowiednio podstawiajc rne wartoci
za zmienneAiB.
Wokresie redniowiecza cay dorobek intelektualny staroytnoci (wszczeglnoci staroytnych grekw) poszed wzapomnienie. Wzwizku ztym koncepcja
algorytmu jako takiego,awszczeglnoci koncepcja algorytmu Euklidesa (bdcego zreszt jedynie przykadem), byaby nieznana gdyby nie Arabowie, ktrzy
przejli dziedzictwo hellenistyczne iprzez wiele wiekw je rozwijaliwizolacji
od prdw naukowych wystpujcych wEuropie.
Jeli idzie oalgorytmy, to szczegln zasug wich zachowaniu irozwoju
mia perski matematyk Muhammad ibn Musa al-Chuwarizmi. y wIX wieUniwersytet Ekonomiczny w Krakowie
= < s1 , s2 , ., sn >
(9)
Ze wzgldu na podobiestwo do funkcjonowania elementw cyfrowych wchodzcychwskad typowego komputera rozwaane s czasem binarne maszyny Turinga, wktrych zbir moliwych symboli skada si wycznie zzera ijedynki
= <0, 1>. Taka maszyna Turinga dyskutowana jest midzy innymi wznanej ksice Rogera Penroseazatytuowanej Nowy umys cesarza. Jednak przy rozwaaniu
binarnych maszyn Turinga trzeba bra pod uwag dosy dugie acuchy symboli,
eby uzyska jakie sensowne dziaanie maszyny, wic wtym rozdziale bdziemy
si posugiwali bogatszymi zbiorami symboli rozwaajc dziaanie przykadowych maszyn Turinga na krtszych acuchach bardziej znaczcych symboli.
Symbol wyjciowy
Poniedziaek
Wtorek
roda
Czwartek
Pitek
Sobota
Niedziela
Symbol wewntrzny
B, 2
A,3
C,1
C,1
B,3
A,2
A,3
C,2
B,1
Stan
Wchwili pocztkowej sytuacja przedstawia si tak, jak to pokazano na rysunku 10, po lewej stronie. Automat znajduje si wstanie 1 iotrzymuje jako
sygna wejciowyA. Jak wynika zelementw zaznaczonych wtabelce wrodkowej czci rysunku, na wyjciu automatu pojawi si symbol B jako pierwszy element sekwencji wyjciowej, astan automatu zmieni si (zgodnie ztabel na numer 2). T sytuacj przedstawia schemat automatu po prawej stronie
rysunku.
(10)
wktrej:
oznacza zbir symboli wejciowych (zwanych te symbolami terminalnymi).
Nie bez kozery uyto tu takiego samego oznaczenia jak we wzorze (9). Napisy,
ktre mog by rozwaane jako elementy rozwaanego jzyka, musz si skada wycznie zsymboli terminalnych, przy czym jest to warunek konieczny,
ale nie wystarczajcy, bowiem nie kade zestawienie symboli terminalnych
jest poprawnym elementem rozwaanego jzyka. Zatem gramatyka musi zawiera dodatkowe reguy pozwalajce rozrnia napisy poprawne iniepoprawne zgodnie ztymi reguami.
N jest zbiorem symboli nieterminalnych, zwanych te pomocniczymi lub wprost
nieterminalami. Nieterminale uywane s pomocniczo wtrakcie generowania sowa, ale s zniego eliminowane, zanim generowanie dobiegnie koca.
S N jest specjalnym nieterminalem pocztkowym lub aksjomatem. Od niego
rozpoczyna si kade generowanie sowa.
P jest skoczonym zbiorem tak zwanych produkcji gramatyki.
Kluczowym pojciem wrd podanych wyej jest pojcie produkcji, ktrego
nazwa jest nieco mylca iktremu wzwizku ztym musimy si przyjrze zdu
uwag. Produkcje s to reguy, ktre pozwalaj zastpowa nieterminale okrelonymi napisami zawierajcymi (zalenie od potrzeb) nieterminale oraz ewentualnie take symbole terminalne. Stosujc produkcje, mamy gwarancj, e nie wyjdziemy poza obrb definiowanego przez gramatyk jzyka. Jeli wic zaczniemy
od napisu nalecego do jzyka (na przykad od aksjomatu) ipotem zastosujemy
dowoln liczb razy dowolne produkcje ze zbioru P, to napisy, ktre bdziemy
tworzyli, stale bd naleay do jzyka.
Rozwamy elementarny przykad.
Niech zbir skada si zdwch tyko liter:aib ( = {a,b}). Oznacza to,
e rozwaany jzyk skada si bdzie wycznie znapisw zawierajcych literyaib wrnych kombinacjach, apojawienie si napisu zawierajcego chocia
jedn inn liter od razu bdzie wskazywao, e ten napis do jzyka definiowanego
zpomoc tej gramatyki po prostu nie naley.
(11)
S = ab
(12)
(13)
Cig przeksztace podany wformule (13) zaczyna si od elementu nalecego do jzyka (od aksjomatu tego jzyka), prowadzony jest wycznie woparciu
oprodukcje zawarte wgramatyce jzyka ikoczy si badanym napisem aaabbb,
co dowodzi, e napis ten naley do jzyka generowanego przez rozwaan tu
gramatyk.
Podobnej serii przeksztace nie da si zbudowa, gdy napis (zoony zprawidowych symboli terminalnych) ma nieprawidow struktur. Niepodobna na
przykad zbudowa cigu przeksztace zaczynajcych si od aksjomatu jzyka
ikoczcych si na napisie aab, co dowodzi, e ten napis jest wrozwaanej tu gramatyce niepoprawny. Niepoprawne s te napisy abab atake bbbaaa. Czytelnik,
zatwoci sam odkryje zasad decydujc otym, ktre napisy wtej gramatyce
bd traktowane jako poprawne, aktre bd niepoprawne. Uwane przyjrzenie
si strukturze produkcji (11) ijej dziaaniu podczas budowy wywodu (13) pozwoli
t regu uoglni na dowolnie dugie napisy, ktre dany jzyk moe generowa.
Metoda generacyjna, pokazana wyej wformie przykadu, nadaje si do zastosowania, gdy dowodzenie poprawnoci gramatycznej przeprowadzane jest
przez czowieka. Czowiek ma zdolno wyboru najwaciwszych produkcji na
podstawie inteligentnego ogldu tego napisu, do ktrego dy oraz tego napisu,
jaki aktualnie ma do dyspozycji (na kadym kroku budowania wywodu) wnastpstwie rozpoczcia procesu dowodzenia od aksjomatu jzyka izastosowania kilUniwersytet Ekonomiczny w Krakowie
(14)
N = {S}
(15)
S = S
(16)
P = {S = aaS, S = aa}
(17)
?, 2
AKCEPTACJA, STOP
?,1
ODRZUCENIE, STOP
KONIEC, STOP
KONIEC, STOP
Stan
STOP
Rozwaana gramatyka jest regularna, co oznacza, e moliwe jest zbudowanie automatu, ktry bdzie bada poprawno dowolnych napisw wtym jzyku.
Automat taki musi odczytywa kolejne znaki wchodzce wskad badanego napisu, przechodzc ze stanu do stanu zgodnie zodpowiedni tabel przej, a do
napotkania symbolu pustego , ktry zatrzyma jego dziaanie (stan automatu stanie si wyrnionym stanem STOP, zktrego aden sygna automatu wyrwa nie
potrafi). Stanem startowym automatu jest stan numer 1. Podczas przechodzenia
od stanu do stanu automat moe, ale nie musi, wysya sygnay wyjciowe (wtym
przypadku s one ignorowane, wic zostay oznaczone symbolem ?), natomiast
po dojciu do stanu STOP podaje na wyjciu sygna AKCEPTACJA lub ODRZUCENIE wzalenoci od tego, czy rozwaany napis by poprawnym zdaniem
wrozwaanym jzyku, czy te nie.
Jak ju wyej wspomniano, nie dla kadej gramatyki uda si zbudowa taki automat. Jeli jest to moliwe, gramatyk nazywamy gramatyk regularn. Jeli si
nie uda, gramatyka jest nieregularna. Na przykad gramatyka rozwaana wpodrozdziale 1.8 generujca sowa typu anbn, czyli takie, wktrych najpierw n-krotnie
Uniwersytet Ekonomiczny w Krakowie
(18)
(19)
S = a| b | c
(20)
mona zapisa:
gdzie symbol | (pionowej kreski) czyta si jako albo.
Stowarzyszenie Edukacja dla Przedsibiorczoci
(21)
(22)
(23)
(24)
(25)
czynnik = x | y | z| (wyraenie)}
(26)
Innymi sowy mona dziki tej tezie zrwna zbir wszystkich problemw
algorytmizowanych ze zbiorem wszystkich problemw rozwizywalnych, co ma
daleko idce konsekwencje praktyczne iteoretyczne. Zwizkami hipotezy Churcha-Turingazogln teori umysu zajmuj si filozofowie, wywodzc ztej hipotezy rne wnioski na temat tego, co jest rozumowo poznawalne, aco mieci si
ju poza obszarem moliwoci racjonalnego poznania. Rwnie fizycy korzystaj
zhipotezy Churcha-Turinga, prbujc orzeka, czy Wszechwiat jest poznawalny,
czy te zawsze bd istniay takie aspekty tego Wszechwiata, ktrych nie zdoamy pozna mimo setek lat bada iustawicznego rozwoju wiedzy owiecie.
Wtym skrypcie ukierunkowanym na dostarczenie Czytelnikom wiedzy przydatnej zpunktu widzenia praktycznych zastosowa informatyki ito gwnie zastosowa zwizanych ze sfer gospodarki moemy hipotez Churcha-Turinga
traktowa jako swoist ciekawostk, natomiast dla kadego, kto obserwujc szybki rozwj informatyki i zastanawia si nad tym, do czego ten rozwj doprowadzi,
istnienie tej hipotezy jest istotnym skadnikiem prowadzonych rozwaa iwyciganych wnioskw.
Nie zagbiajc si zbyt daleko wdywagacje teoretyczne, moemy jednak odnotowa jeszcze kilka interesujcych faktw. Ot po pierwsze hipoteza Churcha-Turinga nie zostaa nigdy formalnie cile dowiedziona. Jej funkcjonowanie
oparte jest wic na fakcie, e od zgr p wieku nikomu nie udao si jej sfalsyfikowa, to znaczy pokaza takiego problemu, dla ktrego mona zbudowa
algorytm, ajednoczenie nie da si zbudowa maszyny Turinga realizujcej ten
algorytm. Jednak formalnego dowodu jej poprawnoci take nie ma.
Drugie interesujce spostrzeenie jest takie, e maszyna Turinga jest bardziej
uniwersalnym systemem rozwizujcym problemy obliczeniowe, ni jakikolwiek
realnie istniejcy komputer. Rnica polega na dostpnoci wmaszynie Turinga
pamici (tamy) onieograniczonej pojemnoci, czego mimo staego postpu technologii nie mona zaimplementowa wpraktycznie istniejcych komputerach.
Chocia adna maszyna Turinga nie wykorzystaa nigdy nieskoczonej dugoci
posiadanej tamy (bo wszystkie algorytmy s finistyczne, to znaczy kocz si po
wykonaniu skoczonej liczby krokw,awczasie wykonywania skoczonej liczStowarzyszenie Edukacja dla Przedsibiorczoci
aP0
bP0
L1
aNB
L2
L1
aL3
bL2
NB
aL3
bNB
P4
P5
bNB
NB
aP5
bP6
L7
aNB
bP6
L1
aNB
bNB
PA
A(akceptacja)
aNA
bNA
NA
B (bd)
aNB
bNB
NB
Stan
Wtabeli tej podane s stany automatu. Jest ich 10, przy czym jeden ztych
stanw okrelony jest jako A(akceptacja), co odpowiada przerwaniu pracy przez
maszyn Turinga istwierdzeniu, e napisane sowo jest poprawne wrozwaanej
gramatyce, ainny okrelony jest jako B (bd), co take przerywa prac, bo wtym
momencie wiadomo ju, e napisane sowo jest zpewnoci niepoprawne. Owyborze pola wtabeli decydujtake symbole wejciowe (a, b lub , co odpowiada
pustej komrce na tamie). Wposzczeglnych polach tabelki wpisane s wartoci funkcji wyjcia, ktre maj form pary: symbolu, ktry za pomoc gowicy
bdzie wpisany do aktualnej komrki na tamie, oraz kierunku przemieszczenia
gowicy (L = ojedno pole wlewo, P = ojedno pole wprawo, N = pozostawienie
gowicy wtej samej komrce). Oczywicie automat po kadym odczytaniu izapisaniu symbolu na tamie oraz po przemieszczeniu gowicy zmienia swj stan,
przy czym stan, do jakiego przechodzi automat, jest take zapisanywodpowiednich polach tabeli jako trzeci symbol kadego zapisu.
Przeledmy, jak to funkcjonuje. Maszyna rozpoczyna prac wsytuacji, gdy
automat znajduje si wstanie startowym (stan ten okrelony jest jako 0), na tamie
znajduje si podlegajcy badaniu napis, agowica ustawiona jest gdzie po prawej
stronie wstosunku do pierwszego symbolu badanego napisu (Rys. 13).
Pierwszy krok pracy maszyny suy sprawdzeniu, czy jej praca zostaa prawidowo zainicjowana. Jeli wmomencie startu pod gowic znajduje si jaki symbol (nie pusta komrka), to oznacza, e gowica jest nieprawidowo ulokowana
(wewntrz napisu, anie po jego prawej stronie). Maszyna wtedy utrzymuje stan 0
iprzesuwa gowic wprawo tak dugo, a znajdzie pierwsze puste pole.
Gdy pod gowic znajdzie si puste pole, maszyna przechodzi wstan 1 iprzesuwa siwlewo a do znalezienia pierwszego (skrajnie prawego) znaku napisu
(Rys. 14).
1.11. Literatura
AhoA.V., Hopcroft J.E., Ullman J.D. [2003], Projektowanie ianaliza algorytmw, Helion, Gliwice.
Alagi S., Arbib M.A. [1982], Projektowanie programw poprawnych idobrze
zbudowanych, WNT, Warszawa.
Ben-Ari M. [2005], Logika matematyczna winformatyce, WNT, Warszawa.
Cormen T.H., Leiserson C. E., Rivest R. L. [2001], Wprowadzenie do algorytmw, WNT, Warszawa.
Dembiski P., Mauszyski J. [1981], Matematyczne metody definiowania jzykw programowania, WNT, Warszawa.
Harel D. [1992], Rzecz oistocie informatyki Agorytmika, WNT, Warszawa
Hopcroft J.E., Motwani R., Ullman J.D.[2005], Wprowadzenie do teorii automatw, jzykw ioblicze, PWN, Warszawa.
Kulik C., Tadeusiewicz R. [1974], Elementy cybernetyki ekonomicznej, Wydawnictwo Akademii Ekonomicznej, Krakw.
Tadeusiewicz R., Moszner P., SzydekoA. [1998], Teoretyczne podstawy informatyki, Wydawnictwo Naukowe WSP, Krakw.
2
Praktyka
programowania
imperatywno-strukturalnego
Janusz Stal, Janusz Tuchowski
Gosling J., Joy B., Steele G., Bracha G. [2005], The Java Language Specification. Third Edition, Addison-Wesley, Boston, http://java.sun.com/docs/books/jls/download/langspec-3.0.pdf
(dostp 2011-04-14).
Wzalenoci od rodowiska, wktrym uruchamiane bd aplikacje utworzone wJavie, zdefiniowanych zostao szereg specyfikacji jzyka: SE (ang. Standard Edition), ME (ang. Micro
Edition), EE (ang. Enterprise Edition).
10
11
12
13
Metoda od ktrej rozpoczyna si dziaanie programu zawiera nagwek public static void
main(String[] args).
14
Wsystemie operacyjnym Windows (2000, XP, Vista) zmenu Start naley wybra opcj
Uruchom, nastpnie wprowadzi komend cmd inacisn klawisz Enter.
15
Brak dostpu do kompilatora ztrybu wiersza polece moe by zwizany zbrakiem lub nieprawidowym zdefiniowaniem odpowiedniej cieki wzmiennej rodowiskowej PATH.
16
17
Naley zwrci uwag, i skadnia jzyka Java rozrnia wielko stosowanych znakw (wielko liter).
18
Zobacz: Code Conventions for the Java Programming Language, http://www.oracle.com/technetwork/java/codeconv-138413.html (dostp 2011-04-14).
Stowarzyszenie Edukacja dla Przedsibiorczoci
19
2.3.2. Literay
Litera jest to cig znakw reprezentujcy warto zapisan bezporednio
wkodzie programu. Naley zwrci uwag na stosowanie dodatkowej symboliki
wcelu precyzyjnego okrelenia typu literau (293L, 293F). Poniej wymienione
zostay przykadowe wartoci:
"bordowy"
'K'
'\u0041'
293
49.6
0251
0x25
400L
2.45F
3.06D
9.72E4
true
//
//
//
//
//
//
//
//
//
//
//
//
acuch znakw
warto typu "char"
warto typu "char" wstandardzie "unicode" (przedrostek \u)
warto dziesitna typu "integer"
warto rzeczywista typu "double"
warto semkowa (przedrostek 0) typu "integer"
warto szestnastkowa (przedrostek 0x) typu "integer"
warto typu "long" (przyrostek L)
warto typu "float" (przyrostek F lub f)
warto typu "double" (przyrostek D lub d domylny)
zapis wykadniczy (symbol E lub e)
warto logiczna
Jzyk Java zawiera rwnie zbir znakw specjalnych (ang. escape characters): \b, \t, \f, \r, \n, \", \', \\, moliwych do zastosowania bezporednio
wkodzie programu:
int liczbaPojazdow;
double rataKredytu;
liczbaPojazdow = 4;
rataKredytu = 330.58;
double stopaProcentowa = 0.04;
//
//
//
//
//
Java wyrnia 4 kategorie zmiennych: obiektowe (ang. instance variables) unikalne dla
kadej instancji klasy, klasowe (ang. class variables) jednakowe dla wszystkich instancji
klasy, lokalne (ang. local variables) suce do tymczasowego przechowywania wartoci
oraz parametry, zadaniem ktrych jest przekazywanie wartoci do metody.
20
21
Osoby preferujce styl formatowania dostpny wjzykach C oraz C++ (funkcja printf), mog
skorzysta znarzdzi zawartych wklasie java.util.Formatter.
Stowarzyszenie Edukacja dla Przedsibiorczoci
2.3.4. Operatory
Operatory22 wjzyku programowania to zestaw symboli okrelajcych rodzaj
wykonywanej operacji na argumencie lub argumentach wyraenia. Dokonujc
klasyfikacji ich podziau, wyrni mona operatory:
przypisania: = += -= *= /= %= &= ^= |= <<= >>= >>>=
arytmetyczne23: + - * / %
jednoargumentowe: + - ++ -- !
relacji: == != > >= < <= instanceof
warunkowe: && || ?:
bitowe: ~ << >> >>> & ^ |
Naley zwrci uwag, i sposb uycia operatorw zaleny jest od typu
argumentu (argumentw), natomiast kolejno wykonywania operacji wynika
zpriorytetu, jaki posiadaj operatory. Zmiana kolejnoci wykonywania operacji
realizowana jest przez zastosowanie nawiasw. Ponisze wyraenia przedstawiaj
przykadowe wykorzystanie operatorw:
komputerPrzenosny = true;
komputerStacjonarny = !komputerPrzenosny;
dystans -= 24;
i++;
iloczynSumy = (1+2)*(3+4);
delta = b*b 4*a*c;
poleKola = 3.14 * r * r;
sredniaOcen = (ocenaBiologia + ocenaFizyka + ocenaHistoria) / 3;
22
Operator dzielenia daje wwyniku warto cakowit (bez reszty), jeli obydwa argumenty s
liczbami cakowitymi. Wpozostaych przypadkach wartoci jest liczba rzeczywista.
23
byte x = 17;
int y = x;
//niezgodno typw (konwersja niejawna)
double a= 15.4;
int b = (int)a;
//niezgodno typw (moliwa utrata informacji,
//wymagane rzutowanie)
Okrelenie liczby znakw zmiennej lub literau typu String moliwe jest dziki metodzie length():
String nazwaProduktu = "Telefon komrkowy Sony-Ericsson K800i";
System.out.println("Liczba znakw: " + nazwaProduktu.length());
System.out.println("Liczba znakw: " + "Programowanie rozproszone".length());
Klasa java.lang.String zawiera metody umoliwiajce manipulowanie znakami wacuchu, porwnywanie acuchw25, przeszukiwanie, wyodrbnianie podcigu, tworzenie kopii znakw, zamian znakw na wielkie/mae litery
woparciu ostandard Unicode26 czy konwersj wartoci numerycznych do postaci
cigu znakw.
String rezultat;
String adres = "ul.Szeroka";
rezultat = "ul.Kwiatowa".equals("ul.Kwiatowa") ? "adres zgodny" : "adres inny";
System.out.println(rezultat);
rezultat = "ul.Kwiatowa".equals(adres) ? "adres zgodny" : "adres inny";
System.out.println(rezultat);
24
Moliwe jest rwnie utworzenie obiektu String przy uyciu operatora new (zobacz dostpne
konstruktory klasy String).
25
Ze wzgldu na sposb reprezentacji danych zaleca si uycie metody equals() do porwnywania acuchw znakwwmiejsce operatora porwnania ==.
26
Komputerowy standard przemysowy przeznaczony do kodowania znakw wykorzystywanych wwikszoci uywanych wwiecie jzykw pisanych.
Stowarzyszenie Edukacja dla Przedsibiorczoci
27
2.3.7. Tablice
Tablice reprezentuj kontener sucy do przechowywania dowolnej liczby
wartoci pojedynczego typu. Liczba elementw tablicy jest okrelona wmomencie jej tworzenia inie moe zosta zmieniona wtrakcie dalszego dziaania
programu. Kady element posiada kolejny numer (indeks28) umoliwiajcy zapis
iodczyt danych:
//# tablice jednowymiarowe
// deklaracja zmiennej tablicowej
double[] cenaArtykulu;
// deklaracja zmiennej tablicowej (nazwa ityp elementw)
String[] cechaCharakteru; // deklaracja zmiennej tablicowej
int[] rzutKostka;
// utworzenie tablicy (okrelenie liczby jej elementw)
cenaArtykulu = new double[50];
cechaCharakteru = new String[3];
rzutKostka = new int[8];
// jednoczesna deklaracja zmiennej tablicowej oraz utworzenie tablicy
String[] srodekTransportu = new String[2];
// jednoczesna deklaracja zmiennej, utworzenie tablicy 3-elem. oraz nadanie wartoci
String[] sygnalizator = {"czerwony", "ty", "zielony"};
// dostp do elementw tablicy (przypisanie iodczytwartoci)
cenaArtykulu[17] = 328.50;
cenaArtykulu[25] = 29.0;
double razem = cenaArtykulu[17] + cenaArtykulu[25];
rzutKostka[7] = 3;
cechaCharakteru[0] = "komunikatywno";
cechaCharakteru[2] = "asertywno";
srodekTransportu[1] = "rower";
System.out.println(sygnalizator[2]);
//# tablice wielowymiarowe
// deklaracja oraz inicjalizacja tablicy dwuwymiarowej
int[][] tabliczkaMnozenia = {{1,2,3},{2,4,6},{3,6,9}};
System.out.println(tabliczkaMnozenia[2][0]);
28
Kopiowanie danych pomidzy tablicami moliwe jest dziki dostpnej metodzie java.lang.System.arraycopy(). Istnieje pokana liczba metod umoliwiajcych manipulowanie na tablicach, realizujcych operacje sortowania czy przeszukiwania elementw. Metody te zostay zgrupowane wklasie java.util.Arrays.
Program 7. Parametry wiersza polece
Jak ju zostao wspomniane wczeniej, wartoci parametrw wiersza polece
podane wmomencie wywoania programu dostpne s wtablicy args, przekazanej jako argument metody main(). Poniszy przykad demonstruje wyprowadzenie
na konsol danych (nazwiska, imienia oraz adresu zamieszkania) wprowadzonych
do programu przy jego uruchomieniu poprzez wiersz polece.
/*
* Przykadowe wywoanie programu:
* java ParametryWierszaPolecen Kowalewski Eugeniusz "ul. Szeroka 15 m.3"
*/
public class ParametryWierszaPolecen {
public static void main(String[] args){
System.out.println("nazwisko: " + args[0]);
System.out.println("imi " + args[1]);
System.out.println("adres: " + args[2]);
}
}
Algorytm to, wuproszczeniu, skoczony, uporzdkowany cig czynnoci niezbdnych do realizacji zadania.
29
Dostpna jest rwnie wersja instrukcji warunkowej if uwzgldniajca sytuacj alternatywn. Dodatkowy blok instrukcji umieszczony po klauzuli else zostanie wykonany jedynie wtedy, gdy wyraenie logiczne przyjmie warto false.
if (wyraenie_logiczne) {
instrukcje1;
} else {
instrukcje2;
}
Gdy instrukcja warunkowa if zawiera wycznie jedn instrukcj programu, wtedy stosowanie bloku instrukcji (uycie pary nawiasw klamrowych {}) nie jest wymagane.
Stowarzyszenie Edukacja dla Przedsibiorczoci
int x = 0;
if (x > 0) {
x = 2*x+4;
} else {
x = x 5;
y = 2*x;
}
Poniszy przykad ilustruje uycie instrukcji wielokrotnego wyboru. Wzalenoci od wartoci, jak przyjmuje zmienna poraRoku, na konsol zostanie wyprowadzony stosowny napis.
import java.util.Scanner;
public class OcenaSlownie {
public static void main(String[] args) {
// odczytanie danych zkonsoli
Scanner sc = new Scanner(System.in);
System.out.print("ocena (1..6): ");
int n = sc.nextInt();
// wywietlenie oceny
System.out.print("ocena " + n + " ");
switch(n) {
case 1:
System.out.println("niedostateczny");
break;
case 2:
System.out.println("mierny");
break;
case 3:
System.out.println("dostateczny");
break;
case 4:
System.out.println("dobry");
break;
case 5:
System.out.println("bardzo dobry");
break;
case 6:
System.out.println("celujcy");
break;
default:
System.out.println("nieprawidowa!");
}
}
}
31
// uporzdkowanie liczb
Arrays.sort(zbiorLiczb);
// wywietlenie uporzdkowanych liczb
System.out.printf("liczby uporzdkowane (%d..%d): ",a, b);
for (long x : zbiorLiczb) {
System.out.print(x + " ");
}
System.out.println();
}
}
32
00000101
byte b;
rezerwacja
rezerwacjaobszary
obszarupamici
pamici(deklaracja
(deklaracjazmiennej)
zmiennej)
b = 5;
przypisaniewartoci
wartocido
dozarezerwowanego
zarezerwowanegoobszaru
obszaru(inicjalizacja
(inicjalizacjazmiennej)
zmiennej)
przypisanie
byte b = 5;
s = new String("Uniwersytet");
33
34
// porwnanie referencji
Obiekty utworzone wczasie trwania programu istniej tak dugo, jak dugo
istniej do nich odwoania. Java okresowo sprawdza referencje do obiektw te,
ktre nie s ju wykorzystywane s usuwane36. Usuwanie obiektw odbywa si
automatycznie. Programista nie musi dba ozwalnianie obszaru pamici zajmowanego przez obiekt. Zajmuje si tym specjalny proces (ang. garbage collection).
35
Obiekty klasy String mona tworzy na dwa sposoby: przy wykorzystaniu konstruktora
Stringnapis=newString("Ala") lub stosujc uproszczon dla klasy String form zapisu
Stringnapis="Ala"; dodatkowo kady acuch tekstowy jest traktowany przez Jav jako
obiekt klasy String.
36
Moliwe jest rczne usunicie referencji do obiektu poprzez przypisanie do zmiennej typu
klasowego referencji pustej np. andrzej=null.
Stowarzyszenie Edukacja dla Przedsibiorczoci
37
38
39
Lista parametrw moe by pusta. Moliwe jest rwnie stworzenie zmiennej liczby parametrw.
40
41
Wjzyku programowania Java wyrni mona dwa rodzaje metod: zwizane zdan instancj44 klasy (metody instancyjne) oraz klasowe45. Metody instancyjne nie posiadaj modyfikatora static iwywoanie ich jest moliwe tylko na
rzecz utworzonych obiektw danej klasy (bd te zpoziomu innych metod instancyjnych wystpujcych wtej klasie). Mwic inaczej, aby wywoa metod
instancyjn, naley posuy si zmienn zawierajc referencj do utworzonego
wczeniej obiektu.
Student marek = new Student(); // utworzenie obiektu
int wiek = marek.pobierzWiek(); // wywoanie metody instancyjnej na rzecz obiektu
42
43
Instrukcja return nie musi by ostatni wmetodzie. Czsto wykorzystywana jest winstrukcjach warunkowych, decydujc owykonaniu kolejnych instrukcji metody.
44
Podczas tworzenia nowych obiektw przy pomocy sowa kluczowego new powstaje nowa instancja (obiekt danej klasy).
45
Inna nazwa metod klasowych to metody statyczne (posiadaj wnagwku modyfikator static).
Stowarzyszenie Edukacja dla Przedsibiorczoci
Metoda main() jest przykadem metody klasowej, ktra jest wywoywana bez koniecznoci
tworzenia obiektu.
46
// tworzymy metod
Wszystkie parametry wJavie przekazywane s poprzez warto. Wprzypadku parametrw typu prymitywnego tworzona jest kopia wartoci wewntrz ciaa metody. Instrukcje metody mog modyfikowa jedynie kopi, nie za warto
oryginaln, ktra pozostaje niezmienna. Gdy parametrem metody jest zmienna
obiektowa, tworzona jest kopia referencji do obiektu, jednake jej uycie winstrukcjach metody powoduje wykonanie operacji bezporednio na obiekcie (nie
jest tworzona kopia obiektu wewntrz metody).
Klasa
Pakiet
Podklasa
Wszyscy
brak modyfikatora
private
public
protected
47
modyfikatora47
Deklaracja wielu metod (wobrbie tej samej klasy), ktre posiadaj identyczn nazw, ale inny zestaw parametrw, nazywana jest przecianiem metod (ang.
method overloading). Metody przecione rozrniane s przez kompilator na
podstawie liczby oraz typu parametrw48. Takie podejcie do tworzenia metod
pozwala na wiksz elastyczno wprogramowaniu zorientowanym obiektowo.
47
48
Metody nie mog by przeciane wycznie poprzez okrelenie rnych typw zwracanych
wartoci.
Stowarzyszenie Edukacja dla Przedsibiorczoci
49
Bez dyrektywy import konieczne staje si poprzedzenie nazwy klasy nazw pakietu, wktrym
si ona znajduje, np. java.util.Scanner wejscie = new java.util.Scanner(System.in);. Zapis
taki jest wykorzystywany tylko wprzypadku korzystania zklas oidentycznych nazwach, ale
znajdujcych si wrnych pakietach.
50
Drugi rodzaj umoliwia okrelenie pakietu, wktrym znajduj si wykorzystywane przez programist klasy51. Wczasie kompilacji wanie wnim kompilator bdzie szuka uytych klas.
import java.util.*; // wykorzystanie dowolnej liczby klas zpakietu java.util
Pierwsza forma zapisu stosowana jest wprzypadku uycia jednej klasy zwybranego pakietu. Drugi ze sposobw jest preferowany wsytuacji wykorzystania
wikszej liczby klas. Najczciej wykorzystywane pakiety wjzyku programowania Java to:
java.lang podstawowe klasy wykorzystywane podczas tworzenia programw,
java.util zbir klas pomocniczych (np. klasy do obsugi daty, czasu, kolekcji),
java.io obsuga strumieni wejcia iwyjcia, obsuga systemu plikw.
Oto wybrane klasy biblioteczne, powszechnie uywane podczas tworzenia
programw:
System metody zwizane zwaciwociami systemu, wktrym uruchamiany
jest program,
Scanner odczyt wartoci prymitywnych iacuchw tekstowych, czsto ze
standardowego wejcia,
Math zbir metod realizujcych podstawowe operacje arytmetyczne,
String reprezentacja acuchw tekstowych, zawierajca wiele przydatnych
metod pozwalajcych na operacje na cigach znakw,
Arrays zbir metod umoliwiajcych operacj na tablicach (sortowanie, wyszukiwanie itp.),
Calendar podstawowe operacje zwizane zdatami.
51
Kompilator wykorzysta tylko informacj oklasach, ktre rzeczywicie zostan uyte wkodzie
programu, anie owszystkich klasach znajdujcych si wkonkretnym pakiecie.
Stowarzyszenie Edukacja dla Przedsibiorczoci
2.6. Pytania
1. Czym jest ijak funkcj peni Wirtualna Maszyna Javy?
2. Ktre zwymienionych zmiennych nie s zgodne zprzyjt konwencj tworzenia nazw: KolorOczu, wzrost, wiekOsoby, umyjTwarz, Gimnastykaporanna,
CechaCharakteruKobiety, Licznik?
3. Zjakich elementw skada si kod rdowy?
4. Zmienne, stae oraz literay to skadowe kodu rdowego programu. Jakie
wystpuj pomidzy nimi rnice?
5. Jakie funkcje wprogramie peni deklaracja zmiennej?
6. Kolejno wykonywania operacji zalena jest od priorytetu uytego operatora. Ktry zoperatorw: + % -- < posiada najwyszy, aktry najniszy
priorytet?
7. Jak funkcjonalno realizuj operatory: ++ ?: /= % ?
8. Ktre zwymienionych instrukcji nie spowoduj powstania bdu
kompilacji: float f = 1.01; int i= 1/3; double d = 777d;?
9. Jakie oznaczenie (indeks) posiada pierwszy element tablicy?
10. Jak informacj zwrci wyraenie tablica.length wprzypadku tablicy
wielowymiarowej?
11. Algorytm to uporzdkowany cig czynnoci umoliwiajcy wskoczonej
liczbie krokw rozwizanie zadania okrelonej klasy. Jakie istniej metody
jego zapisu?
12. Czym jest blok instrukcji ijaki jest sposb jego notacji wjzyku programowania Java?
13. Jaki jest zasig widocznoci zmiennych zadeklarowanych wewntrz bloku
instrukcji?
14. Winstrukcji warunkowej if moliwe jest uycie klauzuli else. Jak peni
ona rol?
15. Jaki bdzie rezultat dziaania poniszego kodu programu?
int i= 0;
if (i++ > 0) {
System.out.println(i);
}
19. Jakie skadowe wchodz wskad instrukcji iteracyjnej for? Jakie realizuj
czynnoci?
20. Poniszy kod programu zawiera instrukcj iteracyjn. Jaki bdzie rezultat
jego dziaania?
int x = 5;
for (inti=1;i<8;i+=4) {
x +=i;
}
System.out.println(x);
3
Paradygmat
programowania
obiektowego
Janusz Stal, Janusz Tuchowski
Stowarzyszenie Edukacja dla Przedsibiorczoci
Kada tworzona klasa moe zawiera zbir pl oraz metod stanowicych skadowe klasy.
Pola to zmienne deklarowane wewntrz klasy. Wprzypadku braku jawnej inicjalizacji zmiennej otrzymuje ona warto domyln53. Zwyczajowo deklaracja
pl klasy wystpuje przed deklaracj metod. Poniszy kod programu zawiera definicj klasy Telefon wraz zwchodzcymi wjej skad polami.
class Telefon {
// deklaracja pl klasy
private String numerTelefonu;
private int lacznyCzasRozmow;
private static double cenaRozmowy = 0.48; // z/min.
}
52
Wprzypadku braku jawnej inicjalizacji pl klasy, przyjmuj one wartoci domylne (pola
numeryczne wartoci zerowe, pola logiczne warto false, natomiast pola klasowe warto
null).
53
// z/min.
54
3.1.2.Tworzenie obiektw
Definicja klasy udostpnia wzorzec, na podstawie ktrego tworzone s obiekty. Ich interakcja realizowana poprzez wywoywanie metod stanowi otreci tworzonej aplikacji. Poniszy rysunek przedstawia schemat tworzenia obiektw na
podstawie klasy Telefon.
Skadnia tworzenia obiektu zawiera operator new oraz nazw konstruktora, ktry ma zosta
wywoany.
55
Przed nazw konstruktora nie moe pojawi si rwnie sowo kluczowe void.
56
Konstruktor domylny posiada pust liczb parametrw ijest wywoywany wycznie wtedy,
gdy klasa nie posiada adnego jawnie zadeklarowanego konstruktora.
57
Telefon
- nrTelefonu : String
- lacznyCzasRozmow : int
- cenaRozmowy : double
Telefon Jasia
nrTelefonu: "601342754"
lacznyCzasRozmow: 4769
Telefon Kasi
nrTelefonu: "126410991"
lacznyCzasRozmow: 8102
Telefon Ani
nrTelefonu: "503286333"
lacznyCzasRozmow: 1981
Tworzenie nowych obiektw polega na uyciu operatora new, po ktrym wystpuje nazwa odpowiedniego konstruktora. Poniszy kod zawiera przykad utworzenia obiektu klasy Telefon:
Telefon telefonKasi = new Telefon("126410991");
Operator new tworzy na podstawie wzorca (klasy) nowy obiekt oraz umieszcza go wpamici operacyjnej. Wartoci zwracan podczas tworzenia obiektu jest
referencja do miejsca, wktrym obiekt zosta utworzony. Warto ta przypisana
zostaje do zmiennej typu obiektowego, co pozwala na odwoywanie si do skadowych obiektu:
58
59
Wywoanie konstruktora przy uyciu sowa kluczowego this musi wystpi na pocztku bloku instrukcji.
Stowarzyszenie Edukacja dla Przedsibiorczoci
// konstruktor
public Osoba(String imie, String nazwisko, double pensja) {
this.imie = imie;
this.nazwisko = nazwisko;
this.pensja = pensja;
}
// publiczna metoda umoliwiajca zmian pensji danej osoby
public void ustawPensje(double nowaPensja) {
pensja = nowaPensja;
}
}
60
class Telefon {
// deklaracja pl klasy
private String numerTelefonu;
private int lacznyCzasRozmow;
private static double cenaRozmowy = 0.48;
// z/min.
// konstruktor klasy
public Telefon (String numer) {
numerTelefonu = numer;
}
// deklaracja metod klasy
public double obliczKwoteDoZaplaty() {
return cenaRozmowy * (lacznyCzasRozmow / 60 + 1);
}
public static void ustawCeneRozmowy(double nowaCena){
cenaRozmowy = nowaCena;
}
public void zadzwon(String nrTelefonu) {
System.out.println ("Dzwoni do: " + nrTelefonu);
System.out.println ("Dry, dry...");
System.out.println ("Rozmowa wtoku...");
int czasRozmowy = (int) (Math.random()*3600);
lacznyCzasRozmow += czasRozmowy;
System.out.println ("Rozmowa zakoczona. ");
System.out.printf ("Czas rozmowy: %d min. %d sek. \n",
czasRozmowy/60, czasRozmowy%60);
}
}
public class TelefonyKowalskich {
public static void main(String[] args){
Telefon telefonAni = new Telefon("783982331");
Telefon telefonJarka = new Telefon("608234982");
telefonAni.zadzwon("124239832");
telefonJarka.zadzwon("112");
double kwota = telefonAni.obliczKwoteDoZaplaty();
System.out.printf("Ania ma do zapaty %f z.", kwota);
}
}
class Ulamek {
// deklaracja pl klasy
private int licznik;
private int mianownik;
// konstruktory klasy
public Ulamek() {
this.licznik = 0;
this.mianownik = 1;
}
public Ulamek(int licznik) {
this.licznik = licznik;
this.mianownik = 1;
}
public Ulamek(int licznik, int mianownik) {
this.licznik = licznik;
this.mianownik = mianownik;
uproscUlamek(this);
}
// metody klasy
private static int obliczNWD(Ulamek a) {
int l,m;
l = a.licznik;
m = a.mianownik;
if (l < 0)
l = - l;
if (m < 0)
m = - m;
while ( l != m) {
if (l > m) l = l - m;
else m = m - l;
}
return l;
}
private static void uproscUlamek(Ulamek a) {
int nwd;
nwd = obliczNWD(a);
a.licznik /= nwd;
a.mianownik /= nwd;
}
public Ulamek dodaj(Ulamek a) {
Ulamek wynik = new Ulamek((this.licznik * a.mianownik)+(a.licznik *
this.mianownik), (this.mianownik * a.mianownik));
return wynik;
}
3.2.1. Kompozycja
Kompozycja61 wyraa relacj skada si z lub posiada. Wskad tworzonej
klasy moe wchodzi dowolna liczba obiektw tworzonych na podstawie istniejcych ju klas. Ilustracj takich zalenoci jest najczciej diagram klas UML.
Kompozycja jest szczeglnym przypadkiem agregacji ioznacza, i obiekty skadowe nie mog
istnie bez obiektu gwnego.
61
class Osoba {
// deklaracja pl klasy
private String imie;
private String nazwisko;
private Telefon telefon;
private int wiek;
Program 5. Pojazd
Pojazd jest rodkiem transportu uatwiajcym przemieszczanie si. Aby byo
to moliwe, musi posiada napd (silnik). Aplikacja przedstawia uproszczony model pojazdu wraz zsilnikiem. Wykorzystane zostay dwie klasy reprezentujce
samochd oraz silnik pojazdu.
3.2.2. Dziedziczenie
Aby okreli, e jedno pojcie jest uszczegowieniem (lub uoglnieniem) innego, stosowane jest dziedziczenie. Wyraa ono relacj jest ijest wykorzystywane
wszdzie tam, gdzie naley wskaza, e 2 pojcia s do siebie podobne. Realizacja
dziedziczenia polega na tym, i nowo tworzona klasa przejmuje wszelkie cechy izachowania zklas ju istniejcych, dodajc bd te modyfikujc je, tak aby byy one
bardziej wyspecjalizowane. Dziki temu powstaje nowa klasa okrelana terminem
podklasa (ang. subclass) lub klasa pochodna, natomiast klasa, zktrej dokonano dziedziczenia, to nadklasa (ang. superclass)62 lub klasa bazowa.
62
Uywane s rwnie pojcia dziecka (ang. child) irodzica (ang. parent) dla okrelania nazwy
podklasy oraz klasy bazowej.
63
Dziedziczenie wJavie jest jednokrotne (kada klasa dziedziczy tylko zjednej klasy). Klasy,
ktre jawnie nie posiadaj zadeklarowanego dziedziczenia (brak sowa kluczowego extends
wnagwku), domylnie dziedzicz zklasy Object.
Stowarzyszenie Edukacja dla Przedsibiorczoci
64
Tworzenie wklasie pochodnej pl otakiej samej nazwie jak wklasie bazowej nie jest zalecane.
65
Tworzenie wklasie pochodnej metod otakiej samej sygnaturze jak metody wklasie bazowej
nazywane jest przesanianiem metod (ang. override).
66
Taki sposb tworzenia obiektw nazywany jest rzutowaniem wgr (ang. upcasting).
67
Telefon
Telefon
Telefon
Telefon
3.2.3. Polimorfizm
Zarwno kompozycja, jak idziedziczenie, ktre pozwala kojarzy klasy obiektw whierarchie klas, nale do fundamentalnych wasnoci podejcia obiektowego. Umoliwiaj realizacj idei programowania przyrostowego oraz pniejsz
szybk modyfikacj kodu programu.
Tworzc obiekty na podstawie klas dziedziczcych zinnych klas, mona jako
zmienn referencyjn poda typ klasy bazowej68. Wywoujc nastpnie odpowiednie metody, kompilator decyduje, ktra znich ma zosta wykonana (na podstawie
typu obiektu, na rzecz ktrego s one wywoane). Taki sposb wywoania metod
nazywany jest polimorfizmem.
Poniszy przykad przedstawia tablic elementw klasy Telefon. Poszczeglne
elementy tablicy zawieraj referencje zarwno do obiektw klasy Telefon, jak
rwnie do obiektw utworzonych na podstawie klas pochodnych (TelefonKomorkowy, TelefonStacjonarny).
Telefon[] tablicaTelefonow = new Telefon[4];
tablicaTelefonow[0]
tablicaTelefonow[1]
tablicaTelefonow[2]
tablicaTelefonow[3]
=
=
=
=
new
new
new
new
Telefon("634295432");
TelefonKomorkowy("504295432", "Orange");
TelefonStacjonarny("126493042", "1033");
TelefonInternetowy("325649344", "lech23");
68
3.2.4. Pakiety
Powizane ze sob klasy iinterfejsy69 umieszczane s wjednostkach bibliotecznych zwanych pakietami (ang. package). Takie grupowanie pozwala na szybsze odnalezienie waciwych klas iinterfejsw, jak rwnie wpywa korzystnie na
przejrzysto tworzonych aplikacji. Dodatkowe zalety pakietw to m.in.:
jasne okrelenie zwizkw (powiza) midzy klasami,
unikanie konfliktu nazw70,
moliwo skorzystania zdodatkowych modyfikatorw dostpu71.
Pakiety tworzy si poprzez uycie wkodzie rdowym programu sowa kluczowego package72, po ktrym wystpuje nazwa pakietu73. Okrela to lokalizacj
pliku skompilowanego (.class), ktry musi zosta umieszczony wpodanym pakiecie (folderze)74:
package telefonia;
package uczelnia.podstawy.narzedzia;
69
Pakiety umoliwiaj korzystanie zklas lub interfejsw otakiej samej nazwie, ale innej strukturze (np. identyczna nazwa klas wodrbnych pakietach).
70
71
72
Nazwy pakietw zawieraj tylko mae litery is tworzone na kilka sposobw (np. wykorzystujc odwrotny zapis domeny internetowej firmy).
73
Naley pamita, i spoza pakietu moliwy jest dostp tylko do elementw publicznych danego pakietu (klasy, interfejsy). Klasy, ktre nie okrelaj przynalenoci do konkretnego pakietu
s grupowane wtak zwany pakiet domylny, nieposiadajcy adnej nazwy.
74
Kompilator Javy poszukuje klas, wykorzystujc ciek zbudowan ze zmiennej rodowiskowej CLASSPATH oraz nazwy konkretnego pakietu (kropki wpakiecie zostaj zastpione znakiem /).
75
Nazwa pakietw dostarczanych wraz zjzykiem programowania Java rozpoczyna si od sowa java (pakiety zwizane ze specyfikacj jzyka) bd te javax
(rozszerzenie specyfikacji).
Program 8. Wykorzystanie pakietu
Grupowanie klas realizujcych zblion funkcjonalno uatwia tworzenie
aplikacji. Zadaniem pakietu telefonia jest pogrupowanie wszystkich klas dotyczcych telefonw. Przykadowe wykorzystanie pakietu to import zniego klasy
potrzebnej do utworzenia telefonu komrkowego Kasi (onumerze 503984532
wsieci Plus) oraz wysanie zniego SMSaotreci Zadanie zpakietem wykonane na numer 602875295. Klasy wchodzce wskad pakietu telefonia powinny by klasami publicznymi76. Niezbdne jest uycie sowa kluczowego package
wraz znazw pakietu jako pierwszej instrukcji zawartej wpliku rdowym.
Nazwa klasy publicznej musi by zgodna znazw pliku rdowego. Wprzykadowym rozwizaniu kada zklas publicznych musi znajdowa si woddzielnym pliku rdowym.
Stowarzyszenie Edukacja dla Przedsibiorczoci
import telefonia.*;
public class TelefonKasi {
TelefonKomorkowy telefonKasi = new TelefonKomorkowy ("503984532", "Plus");
telefonKasi.wyslijSMS("602875295", "Zadanie zpakietem wykonane");
}
Dostp do skadowych klasy bazowej zklasy dziedziczcej moliwy jest za pomoc sowa kluczowego super. Wten sposb mona rwnie odwoywa si do
konstruktorw klasy nadrzdnej79 (nie s one dziedziczone). Wywoanie konstruktora
klasy bazowej musi by pierwsz instrukcj wciele konstruktora podklasy.
Klasa Object jest jedyn klas nie posiadajc klasy bazowej. Znajduje si ona na szczycie
hierarchii klas.
77
78
Warto pamita osytuacji, gdy konstruktor podklasy nie wywouje jawnie konstruktora zklasy bazowej. Wtakich sytuacjach Java automatycznie wywoa konstruktor domylny (bezparametrowy) klasy bazowej.
79
3.3.1. Interfejsy
Interfejsy wprogramowaniu obiektowym stanowi zbir wymaga dotyczcych
klas, ktre bd go stosowa. Wyraaj sposb opisu funkcjonalnoci klasy bez okrelania, wjaki sposb bdzie to uzyskane. Wskad interfejsw wchodz metody oraz
pola. Deklaracja metod skada si znagwkw (brak jest ciaa metody), natomiast
pola interfejsu to wycznie stae statyczne zjawnie okrelon wartoci. Wdeklaracjach wszystkich skadowych niezbdne jest uycie modyfikatora public.
Implementacja interfejsu polega na umieszczeniu sowa kluczowego implements wnagwku deklaracji klasy, anastpnie wymienieniu nazwy interfejsu,
ktry klasa implementuje81. Skadowymi klasy staj si wszelkie pola imetody
wystpujce wdefinicji klasy oraz pola imetody okrelone wdeklaracji interfejsu. Poniszy kod programu ilustruje implementacj interfejsu Dzwoni.
// z/min.
// konstruktor klasy
public Telefon (String numer) {
numerTelefonu = numer;
}
// deklaracja metod klasy
public double obliczKwoteDoZaplaty() {
return cenaRozmowy * (lacznyCzasRozmow / 60);
}
public static void ustawCeneRozmowy(double nowaCena){
cenaRozmowy = nowaCena;
}
80
Moliwa jest implementacja dowolnej liczby interfejsw przez pojedyncz klas, co pozwala
na realizacj tzw. dziedziczenia wielobazowego.
81
Interfejsy, podobnie jak klasy, mog by stosowane jako typ danych przy deklaracji zmiennej82. Jej warto stanowi odwoanie do obiektu dowolnej klasy,
ktra implementuje interfejs83.
Program 9. rodki transportu
Do zamodelowania istniejcych rodkw transportu uywanych do przemieszczania si zarwno na ldzie, wodzie, jak iwpowietrzu aplikacja tworzy interfejs
Plywa oraz Lata zawierajcy metody plyn() ilec(). Poniej przedstawione zostay
klasy implementujce kady zinterfejsw (np. Statek, Samolot) oraz klasa tworzca przykadowe obiekty wraz zwywoaniem zaimplementowanych metod.
82
83
interface Plywa {
public void plyn();
}
interface Lata {
public void lec();
}
class Statek implements Plywa {
public void plyn(){
System.out.println ("Statek pynie");
}
}
class Samolot implements Lata {
public void lec(){
System.out.println ("Samolot leci");
}
}
public class SrodkiTransportu {
public static void main (String[] args) {
Lata samolot = new Samolot();
samolot.lec();
Plywa statek = new Statek();
statek.plyn();
}
}
=
=
=
=
new
new
new
new
Ania Nowak
Adam Nowak
Jan Kowalski
Joanna Wyszek
nr
nr
nr
nr
albumu:
albumu:
albumu:
albumu:
321419
332132
432187
632165
import java.util.*;
class Student implements Comparable {
private String imie;
private String nazwisko;
private int nrAlbumu;
public Student(String imie, String nazwisko, int nrAlbumu) {
this.imie = imie;
this.nazwisko = nazwisko;
this.nrAlbumu = nrAlbumu;
}
public int compareTo(Object s){
return (nrAlbumu - ((Student)s).nrAlbumu);
}
public String toString() {
return "Student " + imie + " " + nazwisko + " nr albumu: " + nrAlbumu;
}
}
public class PorzadkowanieListyStudentow {
public static void main (String[] args) {
Student[] lista = new Student[4];
lista[0]
lista[1]
lista[2]
lista[3]
=
=
=
=
new
new
new
new
Arrays.sort(lista);
for(Student student: lista){
System.out.println(student);
}
}
}
84
Wprzypadku gdy klasa skada si wycznie zmetod abstrakcyjnych, preferowane jest stosowanie interfejsw.
85
Klasa posiadajca jakkolwiek metod abstrakcyjn staje si automatycznie klas abstrakcyjn (jej nazwa musi zosta poprzedzona identyfikatorem abstract).
Stowarzyszenie Edukacja dla Przedsibiorczoci
Wprzypadku metod uycie sowa kluczowego final powoduje, e nie jest moliwe jej przesonicie wklasach dziedziczcych.
Wprzypadku ograniczonego uycia tworzonej klasy preferowane jest zdefiniowanie jej jako klasy wewntrznej (moliwe jest ukrycie jej implementacji).
Definicja klasy wewntrznej musi znale si wciele innej klasy87.
class Testowa {
// ciao klasy gwnej (skadowe klasy)
class KlasaWewnetrzna {
// ciao klasy wewntrznej (skadowe klasy)
}
}
86
Klasy wewntrzne mog by rwnie definiowane wewntrz metod. Tak utworzone klasy nosz nazw lokalnych klas wewntrznych.
87
88
89
Klasa Exception oraz jej klasy pochodne opisuj te wyjtki, ktre odnosz si
do wykonywanego programu. Gdy pojawia si sytuacja wyjtkowa (bd wprogramie), tworzony jest obiekt90 klasy Exception (lub klasy pochodnej) iprzekazywany
do JVM. Klasa Error wraz zjej klasami pochodnymi opisuje te wyjtki, ktre odnosz si do JVM. Tworzone na podstawie tych klas obiekty reprezentuj powane
bdy systemowe wystpujce wtrakcie wykonywania programu.
Jzyk programowania wprowadza podzia wszystkich wyjtkw na niekontrolowane oraz kontrolowane. Te ostatnie musz zosta obsuone bezporednio
wkodzie programu. Brak obsugi wyjtku kontrolowanego spowoduje powstanie
bdu kompilacji.
90
Obiekt moe zosta utworzony bezporednio wprogramie (instrukcja throw) lub te wygenerowany przez JVM.
Stowarzyszenie Edukacja dla Przedsibiorczoci
Wyjtki wywodzce si zklasy Error oznaczaj najczciej powane problemy systemowe. Std ich obsuga nie zawsze jest moliwa.
Brak nazwy wyjtku kontrolowanego wnagwku metody, wktrej moe on wystpi, powoduje bd kompilacji.
91
Wywietlany komunikat zawiera nazw wyjtku oraz miejsce, wktrym zosta zgoszony.
93
Blok programu try dopuszcza wystpowanie dowolnej liczby blokw catch(). Kolejno ich
wystpowania jest istotna icile zalena od struktury klas (zobacz schemat struktury wyjtkw).
Stowarzyszenie Edukacja dla Przedsibiorczoci
Oprcz wyjtkw zgaszanych przez JVM, moliwe jest programowe zgaszanie wyjtkw bezporednio wkodzie programu. Poniszy fragment zawiera
instrukcj zgaszajc wyjtek (throw), wprzypadku gdy nastpi prba odwoania
do nieistniejcego elementu tablicy:
Po utworzeniu nowej klasy wyjtku moliwe jest zgaszanie wyjtkw utworzonego typu.
if (liczba < 1) {
throw new WyjatekLiczbaNaturalna();
}
Istnieje pokana grupa klas bibliotecznych do obsugi strumieni danych. Poniewa Java dzieli strumienie danych na strumienie wejcia oraz wyjcia, std te
zbir klas bibliotecznych rwnie zosta podzielony wedug tych dwch kategorii.
Tabela 7 przedstawia klasy bazowe.
znakowy
binarny
Wejciowy (input)
java.io.Reader
java.io.InputStream
Wyjciowy (output)
java.io.Writer
java.io.OutputStream
Wzalenoci od charakteru rda lub miejsca przeznaczenia danych wykorzystywane s dedykowane klasy pochodne.
Sekwencyjny dostp do plikw94 realizowany jest poprzez klasy FileInputStream, FileOutputStream oraz FileReader, FileWriter. Dwie pierwsze umoliwiaj dostp (odczyt oraz zapis) do danych binarnych (pliki graficzne, dwikowe, ), atake do danych tekstowych wformacie ASCII, natomiast dwie ostatnie
realizuj dostp do plikw tekstowych wformacie Unicode. Poniszy program ilustruje odczyt zawartoci pliku tekstowego. Naley zwrci uwag na konieczno
uycia obsugi bdw.
94
Wyrni mona sekwencyjny dostp do plikw (ang. sequencial access) oraz dostp swobodny (ang. random access).
Stowarzyszenie Edukacja dla Przedsibiorczoci
import java.io.*;
public class OdczytPlikuTekstowego {
public static void main(String[] args) {
FileReader plik = null;
int znak;
try {
// obiekt reprezentujcy wskazany plik tekstowy
plik = new FileReader("dane.txt");
// odczyt kolejnych znakw zpliku
while ( (znak = plik.read()) != -1 ) {
// wywietlenie odczytanego znaku na konsoli
System.out.print((char)znak);
}
}
catch (FileNotFoundException e) {
System.out.println("Brak pliku opodanej nazwie!");
}
catch (IOException e) {
System.out.println("Problem zodczytem pliku!");
}
finally {
if (plik != null)
try {
plik.close();
}
catch (IOException e){
System.out.println("Problem zzamkniciem pliku!");
}
}
}
}
Dla zwikszenia wydajnoci operacji wejcia-wyjcia odczyt oraz zapis danych moe by buforowany, co realizowane jest poprzez uycie klas
BufferedInputStream, BufferedOutputStream, BufferedReader, BufferedWriter.
FileReader plik = new FileReader("dane.txt");
BufferedReader plikBuforowany = new BufferedReader(plik);
...
String liniaTekstu;
liniaTekstu = plikBuforowany.readLine();
...
Swing wystpuje rwnie do czsto pod nazw JFC (ang. Java Foundation Classes).
95
Kontenery gwne (okna) nazywane s inaczej komponentami cikimi (odwouj si do natywnych komponentw danej platformy systemowej).
96
97
import javax.swing.*;
public class ModelRGB {
public static void main(String[] args) {
// utworzenie okna wraz zokreleniem tytuu
JFrame okno = new JFrame("Model RGB przestrzeni barw");
// ustalenie rozmiarw
okno.setSize(400, 200);
// okrelenie operacji realizowanej podczas zamknicia okna
okno.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
// wywietlenie okna
okno.setVisible(true);
}
}
import javax.swing.*;
import java.awt.*;
class Kontener extends JPanel {
private JButton przyciskR, przyciskG, przyciskB;
public Kontener() {
// utworzenie przyciskw
przyciskR = new JButton("R-czerwony");
przyciskG = new JButton("G-zielony");
przyciskB = new JButton("B-niebieski");
// umieszczenie przyciskw wkontenerze
add(przyciskR);
add(przyciskG);
add(przyciskB);
// ustalenie koloru ta kontenera
setBackground(Color.green);
}
}
class Okno extends JFrame {
public Okno(){
super("Model RGB przestrzeni barw");
setSize(400, 200);
setDefaultCloseOperation(EXIT_ON_CLOSE);
}
}
public class ModelRGBKontener {
public static void main(String[] args) {
// utworzenie okna oraz kontenera zprzyciskami
Okno okno = new Okno();
Kontener kontener = new Kontener();
// umieszczenie kontenera woknie
okno.add(kontener);
// wywietlenie okna
okno.setVisible(true);
}
}
PozaklasJPanelistniejeszeregkontenerwumoliwiajcychgrupowanie
komponentw98.Tabela8przedstawianajczciejwykorzystywane.
Realizowana funkcja
grupowanie komponentw
JScrollPane
JSplitPane
JTabbedPane
tworzenie zakadek
JToolBar
GUIudostpniaszeregkomponentwrealizujcychfunkcjinterakcjizuytkownikiem.Dzikiichwykorzystaniuuytkownikprogramumoewprowadza
informacjetekstowe,dokonywawyborupoprzezwskazaniewywietlonychopcji
lubtezatwierdzawprowadzonedane.BibliotekaSwingdysponujeklasamirealizujcymiwymienioneczynnoci.Wykaznajczciejwykorzystywanychkomponentw99zawartyzostawponiszejtabeli(Tabela9).
Szczegowa charakterystyka kontenerw oraz komponentw dostpna jest na stronie
http://download.oracle.com/javase/tutorial/ui/features/components.html
98
Komponentytenazywanesdoczstokomponentamilekkimi.
99
Realizowana funkcja
Przycisk
Lista rozwijana
Lista
Pole wyboru
Menu
Pole opcji
Suwak
Pole tekstowe
JLabel
Etykieta tekstowa
JProgressBar
Wskanik postpu
JToolTip
JColorChooser
Podpowied
Panel wyboru koloru
JTable
Tabela danych
JTree
Rozmieszczenie poszczeglnych elementw (kontenerw czy te komponentw) woknie aplikacji zalene jest od zastosowania tzw. menadera rozkadu.
Wpywa on zarwno na pozycj elementw wzgldem siebie, jak rwnie na ich
rozmiar isposb wyrwnywania. Kady kontener stosuje domylny rozkad elementw. Jego zmiana moliwa jest poprzez uycie metody setLayout().Tabela
10 przedstawia typowe ukady elementw zalene od zastosowanego menadera
rozkadu.
Ukad elementw
wg kierunkw geograficznych (pnoc, poudnie,
wschd, zachd, rodek)
BoxLayout
FlowLayout
ssiadujcy wpoziomie
GridLayout, GridBagLayout
tabelaryczny
GroupLayout
wgrupach
CardLayout
wkartach
Utworzenie okienka korzystajcego zrozkadu BorderLayout oraz umieszczenie przykadowych komponentw moe wyglda wnastpujcy sposb:
import javax.swing.*;
import java.awt.*;
public class ModelRGBMenadzerRozkladu extends JFrame {
public ModelRGBMenadzerRozkladu() {
super("Model RGB przestrzeni barw");
setSize(400, 200);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setLayout(new BorderLayout());
JPanel kontener = new JPanel();
kontener.add(new JButton("R-czerwony"));
kontener.add(new JButton("G-zielony"));
kontener.add(new JButton("B-niebieski"));
add(kontener, BorderLayout.SOUTH);
add(new JTextArea(), BorderLayout.CENTER);
}
public static void main(String[] args) {
ModelRGBMenadzerRozkladu okno = new ModelRGBMenadzerRozkladu();
okno.setVisible(true);
}
}
Szczegowa charakterystyka menaderw rozkadu umoliwiajcych rozmieszczenie poszczeglnych elementw dostpna jest na stronie http://download.oracle.com/javase/tutorial/
uiswing/layout/index.html
100
Rodzaj zdarzenia
ActionListener
WindowListener
MouseListener
MouseMotionListener
ComponentListener
FocusListener
ListSelectionListener
Penyopisobsugizdarzewrazzprzykadowymikodamirdowymidostpnyjestnastroniehttp://download.oracle.com/javase/tutorial/uiswing/events/index.html
101
Wszystkie interfejsy iklasy zwizane zobsug zdarze dostpne s wpakiecie java.awt.event. Poniszy kod programu zawiera przykadow aplikacj, wktrej zaimplementowana zostaa obsuga zdarzenia, polegajcego na naciniciu
przycisku umieszczonego woknie aplikacji. Rezultatem tej czynnoci jest zmiana
koloru wywietlanego okna.
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
public class ModelRGBObslugaZdarzen extends JFrame {
private JButton przyciskR, przyciskG, przyciskB;
private JPanel panel1, panel2;
public ModelRGBObslugaZdarzen() {
super("Model RGB przestrzeni barw");
setSize(400, 200);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setLayout(new BorderLayout());
102
add(panel);
javax.swing.*;
java.awt.*;
java.awt.event.*;
java.io.*;
if(akcja.equals("Otwrz")) {
status = otworzPlik();
if(!status)
JOptionPane.showMessageDialog(null, "Bd otwarcia pliku!", "Bd",
JOptionPane.ERROR_MESSAGE);
}
// wybrana opcja "Zamknij"
else if(akcja.equals("Zamknij")){
System.exit(0);
}
}
// odczyt pliku tekstowego iumieszczenie jego zawartoci woknie programu
private boolean otworzPlik() {
// wywietlenie okna dialogowego zmoliwoci wyboru pliku tekstowego
JFileChooser dialog = new JFileChooser();
dialog.setDialogTitle("Otwrz plik");
dialog.setFileSelectionMode(JFileChooser.FILES_ONLY);
dialog.setCurrentDirectory(new File("."));
// otworzenie wskazanego pliku iodczytanie jego zawartoci
int wynik = dialog.showOpenDialog(this);
if (wynik == JFileChooser.CANCEL_OPTION) {
return true;
} else if (wynik == JFileChooser.APPROVE_OPTION) {
plik = dialog.getSelectedFile();
String zawartosc = odczytajPlik(plik);
if (zawartosc != null)
poleTekstowe.setText(zawartosc);
else
return false;
} else {
return false;
}
return true;
}
// odczyt zawartoci pliku tekstowego
private String odczytajPlik(File file) {
StringBuffer bufor;
String linia;
try {
FileReader in = new FileReader(file);
BufferedReader bin = new BufferedReader(in);
bufor = new StringBuffer();
while ((linia = bin.readLine()) != null) {
Uniwersytet Ekonomiczny w Krakowie
bufor.append(linia + "\n");
}
in.close();
}
catch(IOException e) {
return null;
}
return bufor.toString();
}
// uruchomienie aplikacji
public static void main(String[] args) {
PrzegladarkaPlikowTekstowych przegladarka = new PrzegladarkaPlikowTekstowych();
przegladarka.setVisible(true);
}
}
103
import javax.swing.*;
import java.awt.*;
import java.awt.geom.*;
class MojPanel extends JPanel {
private
private
private
private
private
int x, y;
int wysokoscCzcionki, szerokoscNapisu;
String czerwony = "R - czerwony";
String zielony = "G - zielony";
String niebieski = "B - niebieski";
x = getSize().width;
y = getSize().height;
g2.setPaint(Color.red);
g2.fillRect(0, 0, x, y/3);
g2.setPaint(Color.green);
g2.fillRect(0, y/3, x, y/3);
g2.setPaint(Color.blue);
g2.fillRect(0, y/3*2, x, y/3);
g2.setPaint(Color.white);
wysokoscCzcionki = getFontMetrics(czcionka).getHeight();
// wywietlenie napisu
szerokoscNapisu = getFontMetrics(czcionka).stringWidth(czerwony);
g2.drawString(czerwony, x/2-szerokoscNapisu/2, (y/3)/2+(wysokoscCzcionki/2));
// wywietlenie napisu
szerokoscNapisu = getFontMetrics(czcionka).stringWidth(zielony);
g2.drawString(zielony, x/2-szerokoscNapisu/2, (y/2)+(wysokoscCzcionki/2));
// wywietlenie napisu
szerokoscNapisu = getFontMetrics(czcionka).stringWidth(niebieski);
g2.drawString(niebieski, x/2-szerokoscNapisu/2,
(y-((y/3)/2)+(wysokoscCzcionki/2)));
}
}
public class ModelRGBFigury {
public static void main(String[] args) {
ramka.add(panel);
ramka.setSize(400, 200);
ramka.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
ramka.setVisible(true);
}
3.6. Aplety
Aplet stanowi aplikacj graficzn utworzon wjzyku programowania Java,
uruchamian wrodowisku przegldarki internetowej. Strona WWW tworzona jest
zwykle przy uyciu jzyka HTML (XHTML) iposiada nastpujc struktur:
<html>
<head>
<title>tytu dokumentu</title>
</head>
<body>
tre dokumentu ...
<applet
codebase = codebaseURL (lokalizacja plikw klas)
archive = archiveList (archiwum plikw JAR)
code
= appletFile (nazwa pliku kasy)
alt
= alternateText (tekst alternatywny)
name
= appletInstanceName (nazwa instancji apletu)
width
= pixels (wysoko apletu wpikselach)
height = pixels (szeroko apletu wpikselach)
align
= alignment (wyrwnanie apletu)
vspace = pixels HSPACE = pixels (dodatkowy margines wok apletu)
>
<param name = appletAttribute1 VALUE = value>
<param name = appletAttribute2 VALUE = value>
...
alternatywny HTML
</applet>
tre dokumentu ...
</body>
</html>
Wymagane jest uycie jedynie atrybutw CODE, WIDTH oraz HEIGHT. Zastosowanie pozostaych
atrybutw jest opcjonalne.
104
105
106
Zobacz: http://java.sun.com/docs/books/tutorial/deployment/applet/appletMethods.html
107
import java.applet.*;
import java.awt.*;
Tworzc kod apletu, naley zwrci uwag na to, i nie wszystkie operacje
mog zosta wykonane108. Wszczeglnoci mocno ograniczony jest dostp do zasobw komputera (pami masowa, urzdzenia peryferyjne). Podyktowane jest to
wzgldami bezpieczestwa systemu komputerowego uytkownika.
Zobacz: http://java.sun.com/docs/books/tutorial/deployment/applet/security_practical.html
108
3.7. Pytania
1. .Czym jest klasa oraz jakie posiada waciwoci?
2. .Czym jest obiekt oraz wjaki sposb jest tworzony?
3. .Jaka rol wprogramowaniu obiektowym spenia operator new?
4. .Jakie s rnice pomidzy metod, akonstruktorem.
5. .Jak funkcj peni sowo kluczowe this?
6. .Jakie jest gwne zastosowanie enkapsulacji?
7. .Czym rni si statyczne (klasowe) iniestatyczne (instancyjne) pola klasy?
8. .Czym jest kompozycja wprogramowaniu obiektowym?
9. .Jakie skadowe klasy bazowej dziedziczy podklasa?
10. C
. zy kada klasa wJavie dziedziczy zinnej klasy? Czy moliwe jest dziedziczenie zwielu klas?
11. .Jaka jest gwna idea polimorfizmu?
12. .Jakie zadania spenia klasa Object? Jakimi metodami dysponuje?
13. .Czym s pakiety ijakie jest ich zastosowanie?
14. .Wjakim celu stosuje si interfejsy.
15. C
. zy specyfikacja jzyka Java narzuca ograniczenia na liczb interfejsw,
ktre moe implementowa tworzona klasa?
16. .Czy moliwe jest utworzenie obiektw na bazie klasy abstrakcyjnej?
17. C
. zy nazwa klasy, ktra dziedziczy zklasy abstrakcyjnej inie dostarcza implementacji metod zawartych wnadklasie, musi zosta poprzedzona identyfikatorem abstract?
18. .Jakie wasnoci posiadaj metody finalne?
19. .Czym s klasy anonimowe?
20. C
. o oznaczaj nastpujce wyjtki: ArrayIndexOutOfBoundsException, NumberFormatException, NullPointerException?
21. .Czym charakteryzuj si wyjtki kontrolowane? Zjakich klas si wywodz?
22. .Do jakiej kategorii naley wyjtek FileNotFoundException?
23. .Jak funkcj peni klauzula throws wnagwku metody?
24. .Zjakich klas mog dziedziczy nowo tworzone wyjtki.
25. J. zyk Java zawiera par klas: InputStreamReader oraz Output
StreamWriter. Jaki jest cel stosowania tych klas?
26. .Co oznacza skrt URL? Podaj skadni jego zapisu.
Uniwersytet Ekonomiczny w Krakowie
3.8. Literatura
Arnold K., Gosling J., Holmes D. [2005], Java Programming Language, Prentice Hall, New Jersey.
Arnold K., Gosling J., Holmes D. [2005], Java(TM) Language Specification,
The (4th Edition), Prentice Hall, New Jersey.
Barteczko K., Drabik W., Starosta B. [2003], wiczenia zprogramowania wjzyku Java, Mikom, Warszawa.
Darwin I. [2004], Java Cookbook (Second Edition), OReilly Media, Inc.
Eck D. [2006], Introduction to Programming Using Java, Fifth Edition, New
York, URL:http://math.hws.edu/javanotes/index.html (dostp 2011-04-04).
Eckel B. [2002], Thinking In Java, 3rd Edition, URL: http://www.mindviewinc.
com/Books/ (dostp 2011-04-04).
Eckel B. [2006], Thinking In Java,Wydanie IV, Helion, Gliwice.
Horstmann C., Cornell G. [2003], Core Java 2. Podstawy, Helion, Gliwice.
Horstmann C., Cornell G. [2005], Core Java 2. Techniki zaawansowane, Helion,
Gliwice.
Lis M. [2006], Java. wiczenia praktyczne, Helion, Gliwice.
MacVittie D.W., MacVittie L.A. [1996], Programowanie zorientowane obiektowo. Nowy sposb mylenia, Mikom, Warszawa.
Meshplex, The Tutorial Database, Introduction to Java, URL: http://www.meshplex.org/wiki/Java_Tutorial1 (dostp 2011-04-04).
Roy P. V., Haridi S. [2005], Programowanie. Koncepcje, techniki imodele, Helion, Gliwice.
Sedgewick R., Wayne K. [2007], Introduction to Programming in Java: An Interdisciplinary Approach, Addison Wesley.
Sun Microsystem, Java Platform Standard Edition 6. API Specification, URL:
http://download.oracle.com/javase/6/docs/api/ (dostp 2011-04-04).
Sun Microsystem, Java tutorial, URL: ftp://ftp.javasoft.com/docs/tutorial.zip,
(dostp2009-01-24).
Sun Microsystem, The Java Tutorials, URL: http://download.oracle.com/javase/
tutorial/ (dostp 2011-04-04).
Swartz F., Java Basics, URL: http://www.leepoint.net/JavaBasics/ (dostp 201104-04).
Uniwersytet Ekonomiczny w Krakowie
4
Programowanie
urzdze
mobilnych
Jausz Stal, Janusz Tuchowski
109
Rozszerzalny jzyk znacznikw (XML) to formalny, niezaleny od platformy jzyk pozwalajcy na opisywanie danych wstrukturalizowany sposb.
110
111
Szczegowy opis jzyka XHTML MP dostpny jest pod adresem http://www.developershome.com/wap/xhtmlmp/ (dostp 2011-05-17).
112
Jzyk XHTML MP stanowi podzbir jzyka XHTML, std struktura dokumentu dedykowanego dla urzdze mobilnych jest praktycznie identyczna rnice wystpuj wodwoaniu do schematu dokumentu DTD (ang. Document Type
Definition).
<?xml version="1.0"?>
<!DOCTYPE html PUBLIC
"-//WAPFORUM//DTD XHTML Mobile 1.0//EN"
"http://www.wapforum.org/DTD/xhtml-mobile10.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Dane personalne</title>
</head>
<body>
<p>Jestem studentem UEK Krakw</p>
</body>
</html>
Podczas jego tworzenia obowizuj reguy skadni jzyka XML. Wszczeglnoci naley zwrci uwag na:
konieczno zamknicia wszystkich wystpujcych wdokumencie znacznikw elementw, np. <p></p>,
Uniwersytet Ekonomiczny w Krakowie
wartoci
atrybutw
wznakach
cudzysowia
(""),
np.
poprawne stosowanie wielkich imaych liter wnazwach elementw iatrybutw (mae iwielkie litery s rozrnialne), np. nazwisko iNazwisko to dwie
rne nazwy elementw,
prawidowy sposb
<b><i>UEK</i></b>.
zagniedania
znacznikw
elementw,
np.
Tworzc poszczeglne strony witryny internetowej, niezbdne jest sprawdzenie poprawnoci skadniowej tworzonych plikw. Mona to zrealizowa wykorzystujc dostpne narzdzia on-line113.
113
Zasady tworzenia treci dla urzdze mobilnych zostay ujte wpracy Mobile Web Best
Practices, http://www.w3.org/TR/mobile-bp/ (dostp 2011-05-08).
114
115
gdzie wartoci atrybutu content jest jeden zponiszych identyfikatorw formatw plikw (zwykle stosuje si pierwsz lub drug posta zwymienionych):
application/vnd.wap.xhtml+xml,
application/xhtml+xml,
text/html.
Witryny mobilne powinny zapewni prawidow prezentacj znakw narodowych na urzdzeniach mobilnych. Dla spenienia tego warunku konieczne jest
stosowanie kodowania znakw wstandardzie UTF-8117. Naley pamita, i deklaracja kodowania powinna wystpi zarwno wnagwku dokumentu XML
(XHTML MP), jak iwdeklaracji META Content-Type.
Pomimo dynamicznego rozwoju urzdze mobilnych istosowania nowatorskich rozwiza, jedn zpodstawowych funkcjonalnoci pozostaje wci moliwo komunikacji gosowej. Jeeli wtreci witryny wystpuj numery telefoniczne, warto zastosowa specjaln skadni, ktra umoliwi dodanie numeru
telefonicznego do spisu numerw wurzdzeniu mobilnym:
<ahref="tel:125552323">125552323</a>
Takie rozwizanie zdecydowanie zwiksza efektywno korzystania zurzdzenia mobilnego, czc dostpne wsieci Internet informacje zpodstawow
funkcjonalnoci urzdzenia.
MIME (ang. Multipurpose Internet Mail Extensions) standard stosowany przy przesyaniu
poczty elektronicznej.
116
UTF-8 jest zalecanym systemem kodowania znakw midzynarodowych przy opisywaniu informacji publikowanych wsieci Internet.
117
Jeli do formatowania strony wykorzystany zosta mobilny kaskadowy arkusz stylw WCSS (ang. Wireless Cascading Style Sheets), wtedy skadnia zapisu
przyjmuje posta:
a.dane {-wap-accesskey: 1}
http://www.developershome.com/wap/wcss/
Podczas przydzielania nazw poszczeglnym zasobom naley dy, aby identyfikatory zasobw URL (ang. Uniform Resource Locator) skaday si zjak najmniejszej liczby znakw. Uatwi to uytkownikowi pniejsze wprowadzanie
adresu zasobu przy uyciu ograniczonych moliwoci klawiatury urzdzenia mobilnego.
118
119
120
Kadej specyfikacji nadawany jest unikalny numer. Peny wykaz dla technologii Java ME:
http://jcp.org/en/jsr/platform?listBy=1&listByType=platform (dostp 2011-05-23).
121
122
123
124
125
Rezultat dziaania aplikacji (MIDletu uruchomionego wemulatorze urzdzenia mobilnego) przedstawia poniszy rysunek (Rys. 34).
126
Praktycznie kady tworzony program powinien reagowa na dziaania podejmowane przez uytkownika. Przykadowo, wskazanie przez uytkownika pozycji
menu powinno skutkowa wywietleniem nowego zbioru informacji, wykonaniem operacji obliczeniowej, zapisaniem danych do pamici masowej czy zakoczeniem dziaania programu. Konieczne jest zatem okrelenie zestawu czynnoci
(zbioru komend), ktre uytkownik moe wykona waplikacji. Ponadto aplikacja
powinna czuwa (nasuchiwa), czy uytkownik nie wybra jednej zdostpnych
komend do wykonania. Klasa Command umoliwia okrelenie zbioru komend, przy
czym okrelenie nowej komendy wymaga zdefiniowania:
skrtowej nazwy komendy (tzw. krtkiej etykiety),
penej nazwy komendy (tzw. dugiej etykiety),
typu komendy (np. BACK, CANCEL, EXIT, HELP, OK, STOP),
okrelenia priorytetu komendy.
Naley zaznaczy, i to wycznie urzdzenie decyduje, ktra etykieta (tytu)
iwjaki sposb zostanie wywietlona. Programista nie ma wpywu na sposb prezentacji komendy. Zwykle duga etykieta komendy wywietlana jest wtworzonym dynamicznie menu, natomiast etykieta krtka prezentowana jest powyej
tzw. klawiszy programowych.
Command mKoniec = new Command("Zakocz program", "Zakocz", Command.EXIT, 0);
Command mPodatek = new Command("Oblicz VAT", "VAT", Command.SCREEN, 1);
Aby aplikacja moga zareagowa na wywoan przez uytkownika komend, musi zosta powiadomiona, gdy komenda zostanie wywoana. Std tworzona klasa powinna implementowa interfejs CommandListener zawierajcy metod
commandAction. Metoda ta zostaje wywoana za kadym razem, gdy uytkownik
Stowarzyszenie Edukacja dla Przedsibiorczoci
Lista (klasa List) jest kolejnym rodzajem ekranu, ktry zawiera zbir elementw. Kada pozycja listy skada si zetykiety tekstowej. Moliwe jest rwnie
przypisanie ikony graficznej. Dostpne s trzy rodzaje list (zobacz Rys. 36):
lista opcji (EXCLUSIVE), wktrej moliwe jest wskazanie jednej pozycji zlisty,
lista wyboru (MULTIPLE), wktrej moliwe jest wskazanie dowolnej liczby pozycji zlisty,
lista menu (IMPLICIT), funkcjonalnie zbliona do dziaania typowego menu
aplikacji.
127
import javax.microedition.lcdui.*;
class RysowanieDemoCanvas extends Canvas {
public void paint (Graphics g) {
g.setColor(128,0,0);
g.fillRect (0, 0, getWidth(), getHeight());
g.setColor(255,255,0);
g.drawLine (0, 0, 100, 200);
g.fillRect (20, 30, 30, 20);
}
}
import javax.microedition.midlet.*;
import javax.microedition.lcdui.*;
public class RysowanieDemo extends MIDlet {
public void startApp () {
Display d = Display.getDisplay(this);
RysowanieDemoCanvas ekran = new RysowanieDemoCanvas();
d.setCurrent(ekran);
}
public void pauseApp () {}
public void destroyApp (boolean u) {}
}
Dla uzyskania informacji omaksymalnych wymiarach ekranu urzdzenia mobilnego mona wywoa metody getWidth() oraz getHeight(). Metoda
setFullScreenMode(true) umoliwia przeczenie urzdzenia do trybu penoekranowego.
Klasa Graphics zawiera zestaw metod umoliwiajcych rysowanie na ekranie linii (drawLine) oraz figur geometrycznych (drawRect, drawRound, drawArc).
Wprzypadku koniecznoci wypenienia figur zadanym kolorem naley wykorzysta metody fillRect, fillRoundRect, fillArc. Moliwe jest zastosowanie 24-bitowej
palety kolorw (zobacz tabela 12). Zmiana koloru odbywa si przy uyciu metody
setColor().
kOLOR
Czerwony
Zielony
Niebieski
Szary
KOLOR
Czerwony
Zielony
Niebieski
Ciemnoczerwony
ty
Czarny
Biay
50% szary
// przykady uycia
g.setColor(0x0000ff00); // zielony
g.setColor(0,255,0); // zielony
Wprzypadku umieszczania na ekranie tekstu bardziej zasadne wydaje si uycie terminu rysowanie tekstu. Stosowana jest wtej sytuacji metoda
drawString(string, x, y, anchor), pozwalajca na okrelenie pooenia tekstu na
ekranie urzdzenia oraz sposobu jego wyrwnywania (poziome oraz pionowe, do
lewej lub prawej strony oraz rodkowanie). Poniszy przykad ilustruje sposb
wyrwnania rysowanego tekstu.
Wcelu ustalenia wygldu rysowanego tekstu naley przed jego umieszczeniem na ekranie ustali parametry fontu. Niestety, ze wzgldu na ograniczone zasoby systemowe, do dyspozycji programisty przekazano niewielki zbir rozmiarw oraz stylw (tabela 13).
Staa
Rozmiar
Styl
Krj
import javax.microedition.midlet.MIDlet;
import javax.microedition.lcdui.*;
class Ekran extends Canvas {
public void paint(Graphics g) {
int szer = getWidth(); // ustalenie rozmiarw ekranu
int wys = getHeight();
g.setColor(0x00ffffff); // zmiana koloru ekranu (biay)
g.fillRect(0, 0, szer - 1 , wys - 1);
g.setColor(0x00ff0000); // narysowanie czerwonego prostokta
g.drawRect(szer / 10, wys / 10, szer / 5, wys / 5);
g.setColor(0x0000ff00); // narysowanie zielonej linii
g.drawLine(10, 10, 70, 70);
g.setColor(0x000000ff); // dodanie niebieskiego tekstu
g.drawString("Piszemy po ekranie...", 10, 90, Graphics.TOP | Graphics.LEFT);
}
}
ekr.addCommand(exitCommand);
ekr.setCommandListener(this);
}
public void startApp() {
dp = Display.getDisplay(this);
dp.setCurrent(ekr);
}
public void pauseApp() {}
public void destroyApp(boolean unconditional) {}
public void commandAction(Command c, Displayable d) {
// obsluga exitCommand (koniec dziaania aplikacji)
if (c == exitCommand) {
destroyApp(true);
notifyDestroyed();
}
}
}
128
129
130
Wprowadzenie do programowania (tutorial) zwykorzystaniem LWUIT dostpne jest na stronie http://lwuit.java.net/tutorial/index.html (dostp 2011-05-16).
131
import javax.microedition.midlet.*;
import com.sun.lwuit.*;
import com.sun.lwuit.events.*;
public class LWUITMidlet extends MIDlet
implements ActionListener {
public void startApp() {
// inicjalizacja biblioteki
Display.init(this);
// utworzenie okna
Form f = new Form("Mj MIDlet LWUIT");
// wywietlenie okna
f.show();
// dodanie tekstu (komponentu) woknie
Label label = new Label("UEK Krakw");
f.addComponent(label);
// utworzenie idodanie komendy do okna
Command exitCommand = new Command("Zamknij");
f.addCommand(exitCommand);
// uaktywnienie obsugi zdarze
f.setCommandListener(this);
}
public void pauseApp() {}
public void destroyApp(boolean unconditional) {}
public void actionPerformed(ActionEvent ae) {
notifyDestroyed();
}
}
Wskad tworzonej aplikacji mog wchodzi dodatkowe zasoby, ktre wzasadniczy sposb wzbogacaj funkcjonowanie aplikacji (obrazy jpg ipng, animacje,
fonty, lokalizacje, tematy). Wymienione zasoby przechowywane s pocztkowo
woddzielnym folderze (.res), ktry jest nastpnie doczany do archiwum wynikowego (.jar).
Biblioteka LWUIT zawiera zbir klas132 realizujcych funkcjonalno pl edycyjnych, list wyboru, list opcji czy okien modalnych. Poniszy, uproszczony schemat, przedstawia hierarchi klas wchodzcych wskad biblioteki LWUIT.
Wykaz dostpnych klas (LWUIT API) dostpny jest pod adresem http://lwuit.java.net/nonav/
javadocs/index.html (dostp 2011-05-16).
132
Funkcjonowanie menaderw rozkadu jest praktycznie identyczne jak wprzypadku rozwiza stosowanych podczas tworzenia aplikacji dla komputerw stacjonarnych (Java Standard
Edition, biblioteka Swing). Szczegowe informacje dostpne s pod adresem http://download.oracle.com/javase/tutorial/uiswing/layout/index.html (dostp 2011-05-16).
133
GCF jest zbiorem hierarchicznie uoonych interfejsw oraz klas do tworzenia pocze oraz
wykonywania operacji wejcia iwyjcia.
134
135
136
137
138
139
140
Powyszy kod programu musi dodatkowo uwzgldnia przechwycenie wyjtkw (wtym przypadku IOException).
4.4.2. Wielowtkowo
Funkcjonowanie aplikacji wykorzystujcych poczenia sieciowe uzalenione
jest od wielu czynnikw, na przykad szybkoci cza czy te poprawnoci transmisji. Wymusza to na programicie stosowanie oddzielnych wtkw dla kadego
poczenia. Uytkownik moe wkadej chwili przerwa takie poczenie, zakoczy dziaanie aplikacji lub te pracowa zjej inn czci. Tworzenie nowego
wtku polega na utworzeniu obiektu klasy Thread iprzekazaniu do jej konstruktora obiektu implementujcego interfejs Runnable. Uruchomienie wtku odbywa si
za pomoc metody start(). Waplikacjach mobilnych, wwikszoci przypadkw,
gwna klasa MIDletu implementuje interfejs Runnable142.
// tworzenie nowego wtku
Thread t = new Thread(this);
// uruchomienie wtku
t.start();
141
Interfejs Runnable posiada metod run(), ktra jest uruchamiana podczas startu wtku.
142
143
public PobieranieDanych () {
// utworzenie obiektu klasy TextBox
tb = new TextBox("Kursy NBP", "Pobieram dane....", 100, TextField.ANY);
// utworzenie nowego polecenia
exitCommand = new Command("Zakocz", Command.EXIT, 0);
// dodanie polecenia do pola tekstowego
tb.addCommand(exitCommand);
// wskazanie obiektu obsugujcego zdarzenia
tb.setCommandListener(this);
// utworzenie nowego wtku
Thread t = new Thread(this);
// uruchomienie wtku
t.start();
}
Jedyn obsugiwan przez aplikacj komend jest polecenie Zakocz. Po wybraniu tej opcji program zostanie zamknity.
public void commandAction(Command c, Displayable d) {
// obsuga polecenia exitCommand (zakoczenie aplikacji)
if (c == exitCommand) {
destroyApp(true);
notifyDestroyed();
}
}
144
String cs = "sms://+48639457325";
// utworzenie poczenia
MessageConnection mc = (MessageConnection) Connector.open(cs);
// utworzenie nowej wiadomoci binarnej (inny typ)
BinaryMessage bm = (BinaryMessage) mc.newMessage(MessageConnection.BINARY_MESSAGE);
// ustawienie treci wiadomoci (tablica bajtowa)
byte[] dane ...
bm.setPayloadData(dane);
// wysanie wiadomoci
mc.send(bm);
MessagePart mp;
int licznik = 1;
// cz tekstowa
// typ MIME (czysty tekst)
String mimeType = "text/plain";
// kodowanie
String encoding = "UTF-8";
// tekst wiadomoci
Cz binarna wiadomoci multimedialnej zawiera bdzie obrazek wformacie PNG (zostanie on umieszczony wkatalogu res projektu). Jego doczenie do
wiadomoci przeprowadzane jest zgodnie zponiszym kodem programu:
licznik++;
// cz binarna
// typ MIME (plik graficzny PNG)
mimeType = "image/png";
// lokalizacja (katalog res)
String image = "/uek.png";
// utworzenie strumienia danych ipowizanie go zzasobem
InputStream is = getClass().getResourceAsStream(image);
// utworzenie tablicy bajtowej orozmiarze zasobu
contents = new byte[is.available()];
// odczyt danych ze strumienia do tablicy
is.read(contents);
// utworzenie czci
mp = new MessagePart(contents, mimeType, "id" + licznik, null, null);
// dodanie do wiadomoci
mm.addMessagePart(mp);
Zmienna licznik wykorzystywana jest do generowania numeru identyfikacyjnego kadej czci. Ostatni czynnoci jest wysanie poprawnie utworzonej
wiadomoci:
145
Ustawienie nasuchu zwizane jest zwywoaniem metody setMessageListener() iprzekazaniem jej jako parametru obiektu implementujcego interfejs
MessageListener. Wprzykadzie ten interfejs zosta zaimplementowany wklasie
MIDletu:
public class OdbieranieSMS extends MIDlet implements CommandListener, Runnable,
MessageListener {
}
Metoda open() otwiera poczenie (podany jest tylko typ wiadomoci oraz
numer portu), natomiast metoda setMessageListener() wskazuje klas zwizan
znasuchem.
String cs = "sms://:5000";
// ustawienie nasuchiwacza (obiekt klasy implementujcej interfejs MessageListener)
try {
mc = (MessageConnection) Connector.open(cs);
mc.setMessageListener(this);
} catch (IOException ioe) {
System.out.println("Bd wejcia/wyjcia");
}
Uniwersytet Ekonomiczny w Krakowie
Wmetodzie run() odebrana zostanie wiadomo, ktrej tre wywietlona zostanie na ekranie zwykorzystaniem klasy Alert.
146
147
try {
// otwarcie zbioru zrekordami (jeli nie istnieje zostanie on utworzony)
rs = RecordStore.openRecordStore("Notatki", true);
} catch (RecordStoreException e) {
System.out.println ("Problem zRMS");
}
Po wybraniu opcji Lista notatek pobierane s zbazy wszystkie przechowywane rekordy iwywietlane uytkownikowi wformie listy (notatki dusze ni
40 znakw wywietlane s na licie wformie skrconej). Dodatkowo podczas
pobierania wszystkich rekordw zapisywane s one wtablicy acuchw tekstowych (zmienna notki[]), tak aby nie odczytywa ich ponownie przy penym wywietlaniu notatki.
4.6. Pytania
1. Ktry zjzykw znacznikowych posiada rekomendacj dla opisu zasobw
dedykowanych dla urzdze mobilnych?
2. Jakie reguy skadni charakteryzuj metajzyk XML?
3. Ze wzgldu na ograniczone fizyczne moliwoci urzdzenia mobilnego
utrudniona jest interakcja zuytkownikiem. Jakie dziaania umoliwiaj
popraw efektywnoci wprowadzania danych?
4. Ktre zwymienionych urzdze uytych do weryfikacji poprawnoci utworzonej witryny mobilnej moe generowa dodatkowe koszty finansowe:
urzdzenie mobilne, emulator urzdzenia mobilnego, komputer stacjonarny?
5. Ktry ze sposobw kodowania polskich znakw narodowych zalecany jest
wprzypadku tworzenia witryn przeznaczonych dla urzdze mobilnych?
6. Jaka jest zalecana maksymalna wielko pojedynczego pliku wchodzcego
wskad witryny mobilnej? Jaka jest zalecana maksymalna wielko witryny?
7. Liczba pozycji menu, wprzypadku tworzenia witryny przeznaczonej dla
urzdze mobilnych, nie powinna przekracza liczby dostpnych klawiszy
klawiatury numerycznej. Jakie inne dziaania zaleca si podczas konstruowania menu?
8. Ze wzgldu na niewielkie gabaryty urzdzenia mobilnego oraz zwykle brak
klawiatury alfanumerycznej zalecane jest unikanie wprowadzania wikszej
iloci tekstu. Ktre ze sposobw pozwalaj na alternatywne wprowadzanie
danych?
9. Czym charakteryzuje si interfejs wysokopoziomowy? Jakie waciwoci
odrniaj go od interfejsu niskopoziomowego?
10. Jakie cztery podstawowe rodzaje ekranw dostarcza LCDUI? Ktry znich
umoliwia wywietlanie komunikatw?
11. Co odrnia metod drawString() od drawRect()? Ktra znich umoliwia
narysowanie na ekranie figury geometrycznej?
12. Wktrej czci ekranu interfejsu niskopoziomowego zlokalizowany jest
punkt owsprzdnych 0,0?
13. Jak funkcjonalno dostarcza metoda setColor()?
14. Dlaczego zmiana ustawie fontu wpywa na faktyczn dugo wywietlanego tekstu?
15. Czym charakteryzuje si pakiet narzdziowy LWUIT? Wjakim celu si go
stosuje?
16. Co oznaczaj pojecia CLDC, MIDP, JSR?
Uniwersytet Ekonomiczny w Krakowie
4.7. Literatura
Bielecki J. [1999], Programowanie wspbiene, obiektowe izdarzeniowe, Helion, Gliwice.
Cremin R., Rabin J., Fling B., Robinson D.K. [2007], Mobile Web Developers
Guide. Part I: Creating Simple Mobile Sites for Common Handsets, mobile
Top Level Domain, Dublin, http://pc.dev.mobi/files/dotMobi Mobile Web
Developers Guide.pdf (dostp 2011-05-23).
Goetz B., Peielrs T., Bloch J., Nowbeer J., Holmes D., Lea D. [2007], Java.
Wspbieno dla praktykw, Helion, Gliwice.
Goyal V. [2006], Pro Java ME MMAPI: Mobile Media API for Java Micro Edition, Apress.
Keogh J. [2003], J2ME: The Complete Reference, McGraw-Hill.
Stowarzyszenie Edukacja dla Przedsibiorczoci
5
Algorytmy
istruktury danych
Pawe Lula
148
n = 20
n = 30
n = 40
n = 50
n = 60
0,00001 sek. 0,00002 sek. 0,00003 sek. 0,00004 sek. 0,00005 sek. 0,00006 sek.
n2
0,0001 sek.
0,0004 sek.
0,0009 sek.
0,0016 sek.
0,0025 sek.
0,0036 sek.
2n
0,001 sek.
1 sek.
17,9 min.
12,7 dni
35,7 lat
366 wiekw
768 wiekw
8,4 * 10
wiekw
2,6 * 10
wiekw
9,6 * 10
wiekw
2,6 * 1066
wiekw
n!
3,6 sek.
16
32
48
Zanalizy danych przedstawionych wtabeli 14 pynie bardzo wany wniosek: zoono czasowa jest bardzo wan cech kadego algorytmu. Algorytmy
ozoonoci liniowej lub kwadratowej moemy wykonywa praktycznie dla dowolnych wartoci n. Wprzypadku algorytmw oczasie wykonania opisanym za
pomoc funkcji wykadniczej lub funkcji silnia moliwe jest wycznie wykonywanie algorytmw dla niewielkich wartoci n. Izakup nowego, dwukrotnie szybszego komputera nic tu nie zmieni, bo czy ma dla nas znaczenie to, czy uruchomiony przez nas program bdzie si liczy tysic wiekw, czy tylko piset?
lub:
czas realizacji algorytmu jest rzdu co najwyej g(n)
lub:
algorytm jest klasy O(g(n))
Spenia on podan powyej definicj rekurencji: zpodprogramu f() wywoywany jest ten sam podprogram f().
Poczatek
Poczatek
Poczatek
....
Poczatek
Exception in thread "main" java.lang.StackOverflowError
Opisane powyej dowiadczenie programistyczne dowodzi, e rekurencja realizowana jako bezwarunkowe wywoanie podprogramu zwntrza tego samego
podprogramu prowadzi do bdu przepenienia stosu wystpujcego na etapie wykonania programu, atym samym rozwizanie to nie jest przydatne przy tworzeniu
oprogramowania. Kluczem do rozwizania tego problemu jest uyte wpoprzednim zdaniu sformuowanie bezwarunkowe wywoanie podprogramu czyli takie,
wktrym podprogram zawsze bdzie chcia wywoa siebie po raz kolejny. Aby
mechanizm rekurencji by przydatny, wywoanie podprogramu zwntrza jego samego musi mie charakter warunkowy, to znaczy musi zachodzi tylko wwczas,
gdy speniony jest pewien warunek logiczny. Inaczej mwic, seria kolejnych wywoa musi si zakoczy. Ten warunek logiczny, nazywany jest warunkiem zatrzymania lub warunkiem stopu.
Biorc pod uwag powysze fakty, mechanizm rekurencji wprogramowaniu
naleaoby zdefiniowa jako wywoanie podprogramu zwntrza tego samego
podprogramu realizowane a do momentu, wktrym wyraenie logiczne penice
funkcj warunku zatrzymania przyjmie warto wskazujc na potrzeb zatrzymania acucha kolejnych wywoa.
Spjrzmy na nastpujcy program:
Wydruk 2. Program Rekurencja02
public class Rekurencja02 {
static int licznik = 0;
static void f() {
licznik++;
System.out.println("Poczatek");
if (licznik <=5) f();
System.out.println("Koniec");
}
public static void main(String [] args)
f();
}
}
Analizujc kod programu i schemat jego realizacji przedstawiony na powyszym rysunku widzimy, e z poziomu funkcji main() wywoywana jest metoda f(),
ktra z kolei wywouje swoje kolejne kopie, a do momentu, w ktrym warto
pola licznik przekroczy warto 5. Wwczas (a wic, gdy licznik > 5) kolejne wywoanie ju nie nastpi i wykona si dalsza cz metody. Po zakoczeniu jej realizacji nastpi powrt do tej kopii metody f(), z poziomu ktrej by wywoana ta,
ktra jest aktualnie realizowana. Po kolejnych powrotach powrcimy do metody
main() i po jej zrealizowaniu program zakoczy swoje dziaanie.
Program przedstawiony na wydruku 2 mia charakter czysto ilustracyjny i nie
realizowa adnych przydatnych zada. Kolejny przykad pokazuje, e rekurencja
jest przydatna w praktyce. Program przedstawiony na wydruku nr 3 pozwala obliczy warto silni.
Wydruk 3. Program Rekurencja03
Wmetodzie main() znajdujemy wywoanie funkcji silnia zparametrem n rwnym 4. Wtrakcie jej realizacji zmiennej pomoc nadawana jest warto rwna iloczynowi aktualnej wartoci n (czyli 4) iwartoci zwracanej przez kolejn kopi
funkcji silnia tym razem wywoan zparametrem rwnym 3. acuch kolejnych wywoa zostanie zakoczony, gdy nastpi wywoanie silnia(1). Wwczas
zwrcona zostanie warto 1! wynoszca 1 irozpocznie si seria powrotw do
wczeniejszych kopii funkcji iwkadej znich obliczana bdzie warto zmiennej
pomoc. Wkocu warto 4! zostanie przesana do funkcji main().
Bazujc na ostatnim przykadzie naley podkreli, e kada kolejna kopia
rekurencyjnie wywoywanego podprogramu posiada niezalene od pozostaych
zmienne lokalne.
Warto wtej chwili odpowiedzie sobie na pytanie: kiedy stosowa rekurencj? Chyba najprostsza odpowied jest nastpujca: rekurencj wprogramowaniu
warto stosowa wwczas, gdy opis sposobu postpowania rozwaanego problemu
ma charakter rekurencyjny. Dokadnie tak sytuacja wyglda wprzypadku wyznaStowarzyszenie Edukacja dla Przedsibiorczoci
Przygldajc si rysunkowi 4 bez trudu zauwaymy, e wdrzewie ilustrujcym kolejne wywoania, pewne fragmenty si powtarzaj. Wdwch miejscach
pojawia si identyczny fragment, sucy obliczeniu trzeciej liczby Fibonacciego,
za obliczenia prowadzce do obliczenia drugiej liczby Fibonacciego wystpuj a trzy razy. Widzimy, e przy obliczaniu pitej liczby Fibonacciego funkcja
fib() zostaa wywoana a 15 razy. Program nie jest efektywny, gdy wsposb
daleki od doskonaoci wykorzystuje gwne zasoby systemu komputerowego:
czas pracy procesora oraz pami operacyjn. Jeli bymy starali si zwikszy
efektywno kodu, to ucierpiaaby na tym jego czytelno, gdy efektywna wersja nie odzwierciedlaaby ju bezporednio matematycznej definicji cigu liczb
Fibonacciego. Niestety, programy rekurencyjne do czsto nie s efektywne pod
wzgldem czasu oblicze izapotrzebowania na pami!
Zadanie polega na przeoeniu krkw zwiey Ana wie C, przy czym naley pamita odwch istotnych zasadach:
wjednym ruchu mona przenie tylko jeden krek,
nigdy nie mona pooy wikszego krka na mniejszym.
To zpozoru skomplikowane zadanie ma bardzo proste rozwizanie rekurencyjne.
Sposb dziaania algorytmu jest niezwykle prosty: zamieniamy wartoci znajdujce si na pocztkowej ikocowej pozycji wwektorze, anastpnie za pomoc wywoywanej rekurencyjnie tej samej metody dokonujemy zamiany elementu drugiego iprzedostatniego. Wten sposb przestawiamy kolejne elementy, a
do momentu dotarcia do poowy wektora. Wwczas proces przestawiania naley
zakoczy, gdy jeli tego nie zrobimy to ponownie przestawia bdziemy
kolejne pary elementw iponownie uzyskamy pierwotne ustawienie wartoci
wwektorze. Przy okazji zwrmy uwag na jeden szczeg implementacyjny:
wjzyku Java parametry tablicowe zawsze s przekazywane przez referencj.
Oznacza to, e nie jest tworzona kopia parametru aktualnego imodyfikacja wartoci parametru formalnego wewntrz metody zawsze skutkuje zmian wartoci
parametru aktualnego. Jeli parametr byby przekazywany przez warto, to przy
kadym kolejnym wywoaniu metody inwersji byaby tworzona imodyfikowana
inna kopia przetwarzanego wektora, co zca pewnoci nie daoby poprawnego
wyniku!
Uniwersytet Ekonomiczny w Krakowie
Idea postpowania jest tu taka sama jak wwersji rekurencyjnej. Podobna jest
chyba rwnie prostota zapisu. Majc algorytm zapisany rekurencyjnie iiteracyjnie zwykle bdziemy si decydowa na wersj iteracyjn, poniewa to ona
najprawdopodobniej bdzie realizowana szybciej ibdzie wymaga mniejszego
obszaru pamici.
pierwsza liczba na licie jest liczb pierwsz (jest to liczba 2 zostaa ona ujta
wramk):
2 , 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20
Stowarzyszenie Edukacja dla Przedsibiorczoci
}
liczby[j+1] = pomoc;
}
gdzie tab jest wektorem przeznaczonym do sortowania, za first ilast s indeksami wskazujcymi na pocztkowy ikocowy element wpewnym fragmencie
wektora tab.
Stowarzyszenie Edukacja dla Przedsibiorczoci
gdzie wjest sortowanym wektorem, za poczatek ikoniec wskazuj na pocztkowy ikocowy element wpewnym fragmencie tego wektora. Przy pierwszym
wywoaniu poczatek ikoniec wskazuj na pierwszy iostatni element wprzetwarzanym wektorze.
Dziaanie algorytmu mona opisa nastpujco:
podziel fragment wektora znajdujcy si pomidzy elementami wskazywanymi przez poczatek ikoniec na dwie poowy (oczywicie przy pierwszym wywoaniu dzielony jest na p cay wektor w),
oile dugoci uzyskanych powek s wiksze od jednoci, to dla kadej znich
wywoaj metod sort (tu wanie stosowana jest rekurencja oczywicie przy
realizacji metody sort dla kadej zpowek nastpi wywoanie tej samej metody dla kadej wiartki wektora; te wywoania bd powtarzane a do chwili,
gdy uzyskiwane fragmenty wektora bd miay dugo jeden lub zero co jak
wiemy, pozwala je uzna za posortowane),
pocz posortowane powki wcao proces czenia naley jednak przeprowadzi wtaki sposb, aby wwyniku czenia posortowanych powek
uzyska rwnie posortowan cao.
Zauwamy, e proces sortowania odbywa si tu tak naprawd na etapie czenia powek wcao. Operacje te bd realizowane, gdy kolejne rekurencyjne
wywoania metody sort bd koczy swoje dziaanie (wzamieszczonym poniej
kodzie realizuje to metoda scal). Wic najpierw bdziemy scala dwa fragmenty
wektora ojednostkowej lub zerowej dugoci, co pozwoli uzyska posortowany
fragment odugoci co najwyej dwa. Potem bdziemy scala takie dwuelementowe fragmenty, a potem czteroelementowe itak dalej, a wostatnim etapie
poczymy ze sob dwie posortowane powki wektora w.
Kod zamieszczony na wydruku 14 pokazuje wszystkie szczegy metody sortowania przez czenie.
Wydruk 14. Sortowanie przez czenie
Uniwersytet Ekonomiczny w Krakowie
n
n!
=
k k !(n - k )!
Wyposaeni wt wiedz sprbujmy zaprojektowa algorytm, ktry pozwoli na
rozwizanie nastpujcego zadania:
Napisa program wywietlajcy wszystkie k-elementowe kombinacje bez powtrze elementw zbioru obejmujcego liczby naturalne od 1 do n (przyjmij, e
wartoci n oraz k podawane bd przez uytkownika wtrakcie dziaania programu).
1,
1,
1,
2,
2,
2,
3,
3,
3
4
4
4
2,
3,
1,
3,
1,
2,
3
2
3
1
2
1
import java.util.*;
public class PrzykladZbioru {
public static void main(String args[]) {
Set<String> set = new HashSet<String>();
set.add("Wiosna");
set.add("Lato");
set.add("Jesien");
set.add("Zima");
set.add("Zima");
//oczywicie dodanie identycznego
//elementu do zbioru nie zostanie
//zrealizowane!
set.add("Zima");
set.add("Zima");
System.out.println(set);
set.remove("Lato");
System.out.println(set);
}
}
Jej podstawowym elementem jest wektor wskanikw na listy elementw. Wektor ten posiada n elementw (warto n jest oczywicie ustalona dla konkretnej tablicy). Elementy skadowe tablicy przechowywane s jako elementy skadowe list.
Wchwili dodawania nowego elementu do tablicy realizowane s nastpujce
operacje:
dla dodawanego elementu wyznaczana jest warto klucza haszujcego (poprzez wywoanie funkcji hashCode),
wyznaczany jest numer listy, do ktrej doczony zostanie obiekt; zadanie to
jest realizowane poprzez wyznaczenie reszty zdzielenia wartoci klucza haszujcego dla obiektu iliczby elementw wwektorze (czyli: hashCode % n)
warto tu zauway, e listy (atym samym elementy wwektorze) powinny
by numerowane od zera,
obiekt zostaje doczony na koniec wyznaczonej listy.
Natomiast wcelu sprawdzenia, czy dany element znajduje si wzbiorze, wykonywane s nastpujce czynnoci:
dla rozpatrywanego elementu wyznaczana jest warto klucza haszujcego,
wyznaczany jest numer listy, na ktrej powinien znajdowa si element (wtaki
sam sposb jak przy dodawaniu elementu),
Stowarzyszenie Edukacja dla Przedsibiorczoci
Jest to oczywicie wynik bdny, gdy wzbiorze nie mog dwa razy wystpi
identyczne elementy. To bdne dziaanie wynika zdwch powodw:
Uniwersytet Ekonomiczny w Krakowie
Jej implementacja zawarta wklasie Object sprawdza, czy referencja do biecego obiektu jest rwna referencji do obiektu reprezentowanego przez parametr
(czyli, czy te dwa obiektu zajmuj to samo miejsce wpamici). Wic tak naprawd funkcja ta nie sprawdza, czy dwa obiekty s identyczne, lecz tylko, czy znajduj si wtym samym miejscu wpamici operacyjnej.
Aby obiekt utworzony na podstawie zdefiniowanej klasy mg by przechowywany wzbiorze HashSet, musi mie we waciwy sposb zredefiniowan funkcj hashCode oraz funkcj equals. Program po odpowiednich modyfikacjach zamieszczony zosta na wydruku 18.
Wydruk 18. Modyfikacja funkcji hashCode iequals
class Lancuch {
String s;
Lancuch(String s) {
this.s = s;
}
public String toString() {
return s;
}
public boolean equals(Object obj) {
if (!(obj instanceof Lancuch))
return false;
if (((Lancuch) obj).s.equals(s))
return true;
else
return false;
}
public int hashCode() {
return s.hashCode();
}
}
Interesujc odmian zbiorw s zbiory posortowane. Tego typu struktury posiadaj wszystkie cechy zbiorw, ale dodatkowo elementy wchodzce wich skad s
uporzdkowane wokrelony sposb. Zbiory posortowane s reprezentowane wjzyku Java za pomoc interfejsu SortedSet. Przegldajc zdefiniowane wnim funkcje, moliwe jest wyznaczenie pierwszego lub ostatniego elementu zbioru, mona
zdefiniowa elementy poprzedni inastpny oraz moliwe jest okrelenie podzbioru
elementw poprzez wyspecyfikowanie pierwszego iostatniego jego elementu.
Sposb porzdkowania elementw wchodzcych wskad tego typu zbioru jest
okrelony za pomoc nastpujcych dwch regu:
jeli wzbiorze umieszczone s elementy opisane za pomoc klasy, ktra implementuje interfejs Comparable, to domylny sposb uszeregowania elementw zdefiniowany jest za pomoc funkcji compareTo pochodzcej ze wspomnianego interfejsu,
jeli domylny sposb porzdkowania nie jest dla nas dogodny lub klasa definiujca elementy zbioru nie implementuje interfejsu Comparable, to sposb
porzdkowania okrelany jest za pomoc obiektu dostarczonej przez programist klasy implementujcej interfejs Comparator.
Interfejs SortedSet implementowany jest przez klas TreeSet. Przykadowy
program wykorzystujcy zbiory uporzdkowane pokazano na wydruku 19.
Wydruk 19. Wykorzystanie zbioru uporzdkowanego
public class PrzykladZbioru
{
public static void main(String args[])
{
Set<String> set = new TreeSet<String>();
set.add("Wiosna");
set.add("Lato");
set.add("Jesien");
set.add("Zima");
System.out.println(set);
}
}
Widzimy, e elementy zbioru (ktrymi s acuchy znakw typu String) zostay uporzdkowane alfabetycznie. Taki sposb dziaania jest zgodny zsytuacj
opisan wpierwszej regule: klasa String implementuje interfejs Comparable iposiada zdefiniowan wtym interfejsie metod:
public int compareTo(element: Object)
ktra porwnuje biecy obiekt zobiektem reprezentowanym za pomoc parametru element izwraca:
warto ujemn, jeli biecy obiekt jest mniejszy,
zero, jeli s rwne,
warto dodatni, jeli biecy obiekt jest wikszy.
Wklasie String przy porwnywaniu bierze si pod uwag uporzdkowanie alfabetyczne. Ztego powodu elementy wzbiorze zostay uporzdkowane zgodnie
zalfabetem.
Jeli elementami zbioru maj by obiekty, ktre nie implementuj interfejsu
Comparable, to sposb ich porwnania dokonywany jest za pomoc metody compare interfejsu Comparator.
public int compare(element1: Object, element2: Object)
Metoda ta powinna zwraca warto ujemn, zero lub warto dodatni, jeli
odpowiednio obiekt element1 jest mniejszy, rwny lub wikszy od obiektu element2.
Odpowiedni przykad zamieszczony zosta na wydruku 20. Celem zdefiniowanego komparatora jest uszeregowanie elementw wchodzcych wskad zbioru
wedug ich dugoci.
Zbiory typu TreeSet przechowywane s wpostaci drzewa poszukiwa binarnych. Elementy zbioru przechowywane s jako wzy drzewa. Drzewo poszukiwa binarnych posiada bardzo wane cechy:
jego wzy maj co najwyej dwa elementy potomne, zktrych jeden znajduje
si po lewej, adrugi po prawej stronie elementu nadrzdnego rodzicielskiego
(jest to cecha wszystkich drzew binarnych),
warto znajdujca si wlewym elemencie potomnym nigdy nie jest wiksza
od wartoci przechowywanej welemencie rodzicielskim,
warto znajdujca si wprawym elemencie potomnym nigdy nie jest mniejsza od wartoci przechowywanej welemencie rodzicielskim.
Przykadowe drzewo poszukiwa binarnych znajduje si na poniszym rysunku.
Uniwersytet Ekonomiczny w Krakowie
Elementy zbioru typu TreeSet s przechowywane jako elementy drzewa poszukiwa binarnych. Dziki czemu wbardzo szybki iwygodny sposb mona wskaza elementy najmniejsze oraz najwiksze wzbiorze, sprawdzi czy poszukiwany
element wchodzi wskad zbioru lub wywietli elementy wsposb uporzdkowany. Dokadny sposb realizacji tych zada omwiony zostanie wpunkcie powiconym drzewom.
Wykonanie opisanej powyej operacji powikszenia listy wymaga zaangaowania dodatkowego czasu ipamici.
Analizujc charakterystyk klasy ArrayList, mona sformuowa zalecenie
mwice, e tego typu rozwizanie jest szczeglnie przydatne wwczas, gdy
wnaszym programie zachodzi potrzeba czstego odwoywania si do elementw
listy za pomoc ich indeksw, natomiast stosunkowo rzadko wykonywane s operacje zmieniajce wielko listy.
Zamieszczony poniej program (wydruk 21) pokazuje wjaki sposb korzysta
si zlisty typu ArrayList. Wystpujcy wtym programie ListIterator jest mechanizmem pozwalajcym na sprawdzenie, czy istnieje kolejny lub poprzedni element
listy iewentualne przejcie do ktrego znich. Dokadny opis iteratora listowego
dostpny jest oczywicie wdokumentacji jzyka Java.
import java.util.*;
public class Wektor {
public static void main(String[] args) {
ArrayList<Integer> w= new ArrayList<Integer>(5);
for (int i= 1; i<= 10; i++)
w.add(new Integer(i));
//wyswietlenie wektora
System.out.println("Wektor: " + w);
//korzystanie zListIteratora
ListIterator iter = w.listIterator(0);
while (iter.hasNext())
if (((Integer) iter.next()).intValue() % 2 != 0)
iter.remove();
//wyswietlenie wektora
System.out.println("Wektor: " + w);
}
}
Stos jest list, do ktrej mamy dostp tylko wjednym punkcie zwanym
wierzchokiem stosu. Tylko wtym miejscu moemy doda element (jest to operacja umieszczania na stosie). Rwnie chcc usun element ze stosu, mamy do
ograniczone moliwoci wyboru, gdy mona usun tylko ten element, ktry jest
na stosie. Przegldajc elementy znajdujce si na stosie, rwnie rozpoczynamy
od wierzchoka iprzechodzimy do kolejnych poruszajc si wkierunku podstawy stosu.
Program zamieszczony na wydruku 23 pokazuje, wjaki sposb wykonuje si
podstawowe operacje na stosie.
pocztek
koniec
kolejki
kolejki
Rys. 57. Struktura kolejki
import java.util.*;
public class TreeMapTest1 {
public static void main(String [] args) {
Map kraje = new TreeMap();
kraje.put("Niemcy","Berlin");
kraje.put("Polska","Warszawa");
kraje.put("Czechy","Praga");
kraje.put("Hiszpnia","Madryt");
kraje.put("Grecja","Ateny");
kraje.put("Wlochy","Rzym");
System.out.println(kraje);
}
}
Uniwersytet Ekonomiczny w Krakowie
5.5.4. Drzewa
Drzewo to kolekcja elementw pozostajcych wzalenoci hierarchicznej,
posiadajca jeden element wyrniony zwany korzeniem drzewa. Przykadowe
drzewo pokazane zostao na poniszym rysunku (Rys. 58).
Studiujc literatur dotyczc drzew, przydatna bdzie znajomo podstawowych poj, ktre s znimi zwizane:
wze element skadowy drzewa,
krawd poczenie wystpujce wdrzewie,
korze drzewa pocztkowy element drzewa,
rodzic, przodek element nadrzdny,
dziecko, potomek element podrzdny,
li wze nieposiadajcy potomkw,
wze wewntrzny wze posiadajcy elementy potomne,
poddrzewo rozpatrywany element wraz ze wszystkimi jego potomkami (bezporednimi iporednimi),
wysoko drzewa dugo najduszej cieki prowadzcej od korzenia do
licia,
poziom wza (gboko wza) dugo cieki od korzenia do danego wza,
stopie wza liczba posiadanych przez wze potomkw,
Uniwersytet Ekonomiczny w Krakowie
283
W tym rozwizaniu dane dotyczce drzewa przechowywane s w tablicy. Kady wiersz tablicy opisuje jeden element drzewa. Niezalenie musimy przechowywa informacj wskazujc, ktry wiersz opisuje wierzchoek (na powyszym rysunku jest to wiersz sidmy). Tablica opisujca drzewo ma zawsze trzy kolumny.
Pierwsza z nich przechowuje etykiety wzw. Druga zawiera numer wiersza bdcego pierwszym od lewej strony elementem potomnym rozpatrywanego wza.
Trzecia kolumna zawiera informacj na temat numeru wiersza reprezentujcego
Uniwersytet Ekonomiczny w Krakowie
285
Metoda postorder wpierwszej kolejnoci odwiedzane s wszystkie poddrzewa wkolejnoci od lewej do prawej strony, anastpnie odwiedzany jest korze
drzewa. Wprzypadku drzewa zpowyszego rysunku metoda ta spowoduje, e
wzy odwiedzane bd wkolejnoci: 2 8 9 5 10 6 3 7 4 1.
Metoda inorder odwiedzane jest lewe skrajne poddrzewo, nastpnie korze
drzewa, po czym nastpuje przejcie i wdrujemy przez pozostae poddrzewa
wkolejnoci od lewej do prawej strony. Dla drzewa zpowyszego rysunku kolejno odwiedzin wzw bdzie nastpujca: 2 1 8 5 9 3 10 6 7 4.
Uniwersytet Ekonomiczny w Krakowie
287
jeeli wze jest liciem, to jego etykieta jest wypisywana przy pierwszym odwiedzeniu,
jeeli wze jest wzem wewntrznym, to jego etykieta jest wypisywana przy drugim odwiedzeniu, co daje w rozpatrywanym przykadzie: 2, 1, 8, 5, 9, 3, 10, 6, 7, 4.
Stowarzyszenie Edukacja dla Przedsibiorczoci
5.5.5. Grafy
Graf to zbir wierzchokw poczonych za pomoc krawdzi. W zalenoci
od charakteru krawdzi rozrniamy:
Uniwersytet Ekonomiczny w Krakowie
Podobnie jak dla drzew, rwnie dla grafw wyrnia si rne metody przeszukiwania grafu (wdrwki po grafie). Dwie najwaniejsze to:
DFS ang. depth-firstsearch przeszukiwanie wgb grafu,
BFS ang. breadth-firstsearch przeszukiwanie wszerz grafu.
Algorytm przeszukiwania wgb grafu jest nastpujcy:
1. Jeli jest to moliwe, to naley przej do przylegego nieodwiedzonego wierzchoka; wierzchoek ten staje si wierzchokiem biecym; wierzchoek ten
umieszczany jest na stosie.
Uniwersytet Ekonomiczny w Krakowie
5.6. Literatura
Cormen T., Leiserson C., Rivest R., Stein C. [2004], Wprowadzenie do algorytmw, Wydawnictwo Naukowo-Techniczne, Warszawa.
Koffman E., Wolfgang P. [2006], Struktury danych itechniki obiektowe na przykadzie Javy 5.0, Wydawnictwo Helion, Gliwice.
Lafore R. [2004], Java. Algorytmy istruktury danych, Wydawnictwo Helion,
Gliwice.
Syso M. [1997], Algorytmy, Wydawnictwo Szkolne iPedagogiczne, Warszawa
Wirth N. [2004], Algorytmy + struktury danych = programy, Wydawnictwo Naukowo-Techniczne, Warszawa.
Wrblewski P. [2003], Algorytmy, struktury danych itechniki programowania,
Wydawnictwo Helion, Gliwice.
Spis tABEL
Tabela 1. Funkcja wyjcia wybranego automatu skoczonego
.. . . . . . . . . .
31
. . . . . . . . . . .
31
.. . .
33
. . . .
40
.. . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . .
.. . . . . . . . . . . . . . .
.. . . . . . . . . . .
91
141
150
151
.. . . . .
152
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
153
.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
197
.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
.. . . . . . . . . . . . . . . . . . . . .
198
232
Spis RySUNKW
Rys. 1. Jednoznaczno kryterium gwarantuje sprawiedliwy przydzia
stypendiw . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Rys. 2. Brak jednoznacznoci kryteriw prowadzi do krzywdzcych
decyzji .. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . .
19
. . . . . . . .
20
. . . . .
21
. . . . . . . .
22
. . . . .
24
. . . . . . . . . . . . .
. . . . . .
25
. . . . . . . . . . . . . . . . . . . . . . .
28
.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
29
24
. . . . . . . . . . . . . . . .
34
.. . . . . . . . . . . . . . . . . . . . .
34
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
44
.. . . . . . . . . . . . . . . . . . . . . .
46
.. . . . . . . . . . . . .
46
.. . . . . . . . . . . . . . . . . . . . . . . . . . . .
46
.. . . . . . . . . . . . . . . . . . . . . .
47
.. . . . . . . . . . . . . . . . . . . . . . . .
54
.. . . . . . . . . . . . . . . . . . . . . . . .
84
.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . .
105
.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
114
.. . . . . . .
117
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
125
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
135
102
. . . . . . . . . . . . . . . . . . . . .
. . .
148
. . . . . . . . . . . . . . . . . . . . . .
150
. . . . . . . . . . . . . . . . . .
141
153
. . . . . . . . . . . . . . . . .
161
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
163
. . . . . . . . . . . . . . . . . . . . . . . . . . . .
174
. . . . . . . . . . . . . . . . . .
176
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
182
. . . . . .
184
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
186
. . . . . . . . . . . . . . . . . . . . . . . . . . . .
190
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
192
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
195
. . . . . . . . . . . . . . . . . . . . . . . .
197
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
203
. . . . . . . . . . . . . . . . . . . . . . . . . . . . .
204
. . . . . . . . . . . . . . . . . .
207
. . . . . . . . . . . . . . . . . . . . . .
211
. . . . . . . . . . . . . . . . . .
214
. . . . . . . . . . . . . . . . . . .
221
. . .
234
. . .
236
. . . . .
237
. . . . .
239
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
241
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . .
261
267
Rys. 54. Powikszanie obszaru zajmowanego przez list wklasie ArrayList. . 269
Rys. 55. Konstrukcja listy typu LinkedList..
Rys. 56. Struktura stosu. .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
270
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
272
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . .
274
280
282
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
283
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
284
. . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . .
286
. . . . . . . .
287
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
288
. . . . . . . . .
289
. . . . . . . . . . .
290
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
290
285