40
Uniwersytet Łódzki Wydział Matematyki i Informatyki, Katedra Analizy Nieliniowej Pakiety Javy, Java Wykład 6 mgr inż. Michał Misiak

Pakiety Javy, Java

  • Upload
    andie

  • View
    48

  • Download
    0

Embed Size (px)

DESCRIPTION

Pakiety Javy, Java. Wykład 6. mgr inż. Michał Misiak. Plan wykładu. Obsługa wejścia/wyjścia (I/O API) Kolekcje Aplety. Podstawy obsługi wejścia/wyjścia. Mechanizm ten bazuje na standardowym mechanizmie obsługi strumieni (stream) - PowerPoint PPT Presentation

Citation preview

Page 1: Pakiety Javy,  Java

Uniwersytet ŁódzkiWydział Matematyki i Informatyki, Katedra Analizy Nieliniowej

Pakiety Javy, Java

Wykład 6

mgr inż. Michał Misiak

Page 2: Pakiety Javy,  Java

Wydział Matematyki i Informatyki UŁ, Katedra Analizy Nieliniowej © 2007

Plan wykładu

Obsługa wejścia/wyjścia (I/O API) Kolekcje Aplety

Page 3: Pakiety Javy,  Java

Wydział Matematyki i Informatyki UŁ, Katedra Analizy Nieliniowej © 2007

Podstawy obsługi wejścia/wyjścia

Mechanizm ten bazuje na standardowym mechanizmie obsługi strumieni (stream)

Strumień I/O określony jest przez źródło (input source) oraz ujście (output destination)

Strumień może reprezentować różne rodzaje źródeł oraz ujść np. pliki, urządzenia, pamięć, inne programy, etc…

Strumienie mogą wspierać różne typy danych: bajt, obiekty, prymitywne typy danych, etc…

Page 4: Pakiety Javy,  Java

Wydział Matematyki i Informatyki UŁ, Katedra Analizy Nieliniowej © 2007

Strumienie wejściowe/wyjściowe Strumień wejściowy

służy do czytania porcji danych, przychodzących z innego źródła

Strumień wyjściowy służy do zapisu porcji danych, które zostaną przesłane do ujścia

źródło: http://java.sun.com/docs/books/tutorial/essential/io/streams.html

Page 5: Pakiety Javy,  Java

Wydział Matematyki i Informatyki UŁ, Katedra Analizy Nieliniowej © 2007

Strumienie Bajtowe (byte streams)

Strumienie bajtowe wykorzystywane są do przesyłania danych w postaci paczek 8 bitów

Wszystkie strumienie pochodzą od klas: OutputStream i InputStream

Przykład strumienia do pliku: FileInputStream i FileOutputStream

Przykład 1(P1) „KopowianieBajtow” Funkcja read() zwraca wartość int

zamiast Byte, ponieważ umożliwa to wykrycie sytuacji końca strumienia. Read() zwraca wówczas -1.

Każdy strumień musi zostać zamknięty close(). Zamknięcie strumienia powinno odbywać się w klauzuli finaly. Pozwala to uchronić przed niepotrzebnymi wyciekami.

Pozostałe typy strumieni bazują na typie bajtowym

Przykład 1. Czytanie i zapisywanie strumieni.

I n X a n n

I n X a

Strumień wejściowy

Strumień wyjściowy

aint c =

in.read()

in

out

out.write(c)

Page 6: Pakiety Javy,  Java

Wydział Matematyki i Informatyki UŁ, Katedra Analizy Nieliniowej © 2007

Strumienie znaków (character streams) Przechowywanie znaków w konwencji Unicode przez JVM. Automatyczna konwersja

lokalnych formatów do Unicode, nie jest wymagane dodatkowe sprawdzanie wyjściowego formatu przez programistę

Nie jest bardziej złożony niż strumień bajtów Wszystkie strumienie znakowe wyprowadzane są z klas: Reader & Writer. Np. dla

plików: FileReader & FileWriter P2. CopyCharacters. Warto zauważyć, że zmienna służąca do kopiowania jest

podobnie jak w P1 typu int. Różnica: w P1 int bierze 8 bitów, w P2 int bierze 16 bitów Strumienie znakowe wykorzystują sekwencje:

znak powrotu oraz znak końca linii (\r\n) tzw. carriage-return i line-feed lub jedno znakowy: znak końca linii (\n) oraz powrót (\r)

Zastosowanie powyższych znaków pozwala pisać programy na dowolne systemy operacyjne.

P3. Program CopyCharacters z uwzględnieniem końca linii. Klasy BufferReader & PrintWriter. Metody readLine & println

Page 7: Pakiety Javy,  Java

Wydział Matematyki i Informatyki UŁ, Katedra Analizy Nieliniowej © 2007

Strumienie buforowane (Buffered Streams) Mała efektywność wykorzystania strumieni niebuforowanych – konieczność

każdorazowego wołania metody wirte & read przez system operacyjny (konieczność uzyskania dostępu do dysku, ograniczenia w wydajności sieci, etc…)

Zwiększenie efektywność po przez wykorzystanie tzw. buffered streams na poziomie JVM. Dostęp do zasobów jest jednorazowy dla stosunkowo dużej liczby danych.

Dane zapisywane są w buforze. Jeśli bufor staje się pełny wówczas wołane są funkcje natywne dla SO. Jeśli bufor czytający jest pusty wówczas wołane są funkcje SO i bufor zostaje uzupełniony.

Możliwość konwersji niebuforowanego strumienia do buforowanego: Przykład:

inputStream = new BufferedReader(new FileReader("x.txt"));outputStream = new BufferedWriter(new FileWriter(„y.txt"));

Klasy do tworzenia strumieni buforowanych: BufferedInputStream & BufferedOutputStream – dla typu bajt BufferedReader & BufferedWriters – dla typu character

Czyszczenie strumienia: flushing

Page 8: Pakiety Javy,  Java

Wydział Matematyki i Informatyki UŁ, Katedra Analizy Nieliniowej © 2007

Formatowanie Strumienie implementujące

formatowanie są instancjami PrintWriter i PrintStream (System.out, System.err)

Dwa poziomy formatowania: print i println – formatują dane

wyjściowe w standardowy sposób format – duże możliwości

sparametryzowania sposobu formatowania danych wyjściowych

Metoda format zawiera zbiór parametrów specyfikujących sposób wyświetlenia argumentów znajdujących się w tekście

System.out.format("The square root of %d is %f.%n", i, r);

Parametry konwertujące: Format d – formatuje wartość intger

do wartości dziesiętnej Format f – formatuje wartość typu

float do wartości dziesiętnej n - generuje ciąg znaków zakończony

specyficznym dla danej platformy zakończeniem linii.

Format x – formatuje wartość integer do wartości szesnastkowej

Format s – traktuje każdą wartość jako string

Format tB – formatuje integer jako nazwę miesiąca

Więcej! http://java.sun.com/javase/6/docs/api/java/util/Formatter.html#syntax

Page 9: Pakiety Javy,  Java

Wydział Matematyki i Informatyki UŁ, Katedra Analizy Nieliniowej © 2007

Formatowanie zasady Precyzja – jest to matematyczna

dokładność dla zmiennych typu float. Dla s i pozostałych ogólnych konwersji jest to maksymalna długość. Liczba jest przycinana od prawej strony.

Długość – jest to minimalna długość ciągu znaków. Jeśli potrzeba następuje uzupełnienie do wymaganego minimum od lewej strony.

Flaga – specyfikuje dodatkowe opcje formatowania. Np. + - określa, że liczba zawsze powinna być wyświetlana ze znakiem, a 0, że 0 jest znakiem, który będzie powtarzany w przypadku uzupełniania. . – oznacza format liczby z specyficznym dla danej platformy separatorem.

Indeks argumentu – pozwala na bezpośrednie wskazanie zmiennej, do której tyczy się dany format.

% 1$ +0 20 .10 f

Zna

k p

oczą

tku

form

ato

wan

ia

Specyfikator formatu

Inde

ks a

rgum

entu

Fla

ga

Licz

ba z

nakó

w

Pre

cyzj

a

Rod

zaj k

onw

ers

ji

Przykład: System.out.format("%f, %1$+020.10f %n", Math.PI); 3.141593, +00000003.1415926536

Page 10: Pakiety Javy,  Java

Wydział Matematyki i Informatyki UŁ, Katedra Analizy Nieliniowej © 2007

I/O dla konsoli

Standardowy strumień – charakterystyczne dla wielu systemów operacyjnych. Dane czytają z klawiatury i wyświetlają na konsoli. Wspierają również I/O na plikach pomiędzy programami.

JVM wspiera trzy strumienie: Standard Input: System.in Standard Output: System.out (PrintStream) Standard Error: System.err (PrintStream)

Strumienie zarządzane przez JVM są tworzone automatycznie i nie jest wymagane ich otwieranie

System.out i System.err są strumieniami bajtowymi natomiast mają cechy strumieni znakowych.

System.in, żeby wspierać cechy strumieni znaków musi zostać opakowany. InputStreamReader cin = new InputStreamReader(System.in);

Page 11: Pakiety Javy,  Java

Wydział Matematyki i Informatyki UŁ, Katedra Analizy Nieliniowej © 2007

Konsola

Bardziej zawansowana wersja strumieni. Umożliwia m.in. Wprowadzanie haseł.

Nie zawsze jest dostępna. Jeśli metoda System.console() zwróci null wówczas dany SO nie wspiera konsoli lub program został uruchomiony w nieinteraktywnym otoczeniu.

Wprowadzanie haseł w bezpieczny sposób realizowane przy pomocy metody readPassword. Metoda ta gwarantuje: Przykrycie wprowadzanego hasła * na ekranie Szybkość usunięcia z pamięci, gdyż metoda zwraca tablicę znaków,

która może być od razu nadpisana, a nie String Przykład 3 (P3) – (linux)

Page 12: Pakiety Javy,  Java

Wydział Matematyki i Informatyki UŁ, Katedra Analizy Nieliniowej © 2007

Strumienie danych (data streams)

Wspierają bitową reprezentację podstawowych typów Implementują interfejs DataInput lub DataOutput Przykład:

Utworzenie strumienia do zapisu: out = new DataOutputStream(new BufferedOutputStream(new FileOutputStream(dataFile)));

Zapis do strumienia porcji danych: out.writeDouble(table[i]); out.writeUTF(table2[i]); - zapis z użyciem kodowania UTF-8

Utworzenie strumienia do czytania in = new DataInputStream(new BufferedInputStream(new FileInputStream(dataFile)));

Odczyt porcji danych ze strumienia: int libcza in.readInt(); String znak = in.readUTF();

DataStreams wykrywają koniec pliku i informują o tym fakcie po przez rzucenie wyjątku: EOFException

Do programisty należy odpowiednio sekwencyjne używanie funkcji read i wirte przypisanych wybranym formatom

Page 13: Pakiety Javy,  Java

Wydział Matematyki i Informatyki UŁ, Katedra Analizy Nieliniowej © 2007

Serializacja

Proces konwersji instancji obiektu, który posiada referencje na inne obiekty do postaci liniowego strumienia bitów. Zachowanie stanu obiektu.

Po serializacji obiekt może zostać przesłany przez sieć (gniazda) i odtworzony po drugiej stronie.

Serializacja jest mechanizmem standardowo używanym przez RMI.

Programista, który chce posługiwać się tym mechanizmem musi zaimplementować interfejs Serializable. Większość klas podstawowych posiada zaimplementowany interfejs Serializable.

Page 14: Pakiety Javy,  Java

Wydział Matematyki i Informatyki UŁ, Katedra Analizy Nieliniowej © 2007

Strumienie obiektów

Wspierają przesyłanie obiektów. Klasami implementującymi strumienie obiektów są:

ObjectInputStream i ObjectOutputStream. Obiekty te implementują ObjectInput & ObjectOutput, które dziedziczą po DataInput/Output. Podstawowe metody z DataStream zaimplementowane są w tych klasach.

Istotne metody writeObject & readObject. Metoda readObject musi pozwolić na konstrukcję obiektu, który

mógł zawierać wskazania na inne obiekty, a te obiekty mogą mieć referencje na inne, etc…

Metoda writeObject tworzy drzewo obiektów i zapisuje do strumienia. Czasami wywołanie tej metody może spowodować zapis dużej ilości danych.

Page 15: Pakiety Javy,  Java

Wydział Matematyki i Informatyki UŁ, Katedra Analizy Nieliniowej © 2007

Strumienie plików Ułatwiają niezależną od platformy obsługę

plików (zmiana nazwy, zmiana atrybutów, kasowanie).

Instancja typu File odwołuje się do nazwy plików. Nie warunkuje to istnienia pliku.

Utworzenie zmiennej reprezentującej plik: File a = new File(„plik.txt");

Różne zachowanie metody klasy File w zależności od systemu operacyjnego np. AbsolutePath().

Tworzenie ścieżki charakterystycznej dla danego SO (wykorzystanie File.separtor)

File b = new File(".." + File.separator + „przyklad" + File.separator + „plik.txt");

Przykład 4 (P4). Koncepcja Random Access File

Przykłady metod klasy File Usuwanie:

delete – natychmiastowe usunięcie pliku

deleteOnExit – plik jest usuwany w momencie zakończenia działania JVM

Informacje o pliku Ustawianie atrybutów

setLastModified Zmiana nazwy pliku

renameTo() Praca z katalogami

Mkdir – tworzenie katalogów List i ListFiles – listuje zawartość

katalogów

Page 16: Pakiety Javy,  Java

Wydział Matematyki i Informatyki UŁ, Katedra Analizy Nieliniowej © 2007

Kolekcje (Collection)

Kolekcja jest to obiekt, który gromadzi i przechowuje zbiór innych obiektów porządkując je w określony sposób – tworzy strukturę danych.

Przykładami kolekcji są: Vector, Hashtable, tablica (array) Szkielet kolekcji (Collection Framework - CF) jest to architektura

pozwalająca na manipulowanie oraz reprezentowanie dowolnych zbiorów. Przykładem takiego szkieletu kolekcji jest STL w C++.

Elementami Collection Framework są: Interfejsy. Pozwalają na abstrakcyjne manipulowanie przechowywanymi danymi. Implementacje. Konkretne implementacje interfejsów. Są to gotowe do użycia

struktury danych. Algorytmy. Są to metody, które mogą być wykonywane na obiektach, które

implementują interfejsy collection framework np. szukanie, sortowanie. Kolekcje były uważane jako mało wydajne podejście do reprezentacji

struktur danych.

Page 17: Pakiety Javy,  Java

Wydział Matematyki i Informatyki UŁ, Katedra Analizy Nieliniowej © 2007

Korzyści ze stosowania kolekcji

Redukcja nakładu pracy poświęcanego na tworzenie struktur danych i implementację algorytmów. Wykorzystanie standardowych kolekcji pozwala na łatwiejszą integrację

Zwiększenie szybkość wykonywania programu oraz jego jakości. Collection Framework posiada efektywnie zaimplementowane algorytmy oraz struktury danych. Programista może się skupić na ulepszaniu samego programu.

Zmniejsza wysiłki potrzebne na poznanie nowych API. Brak konieczności projektowania nowych API – zastosowanie

wcześniej stworzony przez specjalistów standardow. Wielokrotne wykorzystanie kodu.

Page 18: Pakiety Javy,  Java

Wydział Matematyki i Informatyki UŁ, Katedra Analizy Nieliniowej © 2007

Interfejsy w CF

Dwa drzewa kolekcji Set jest specjalizowaną kolekcją

Collection, a SortedSet jest specjalizowaną kolekcją Set

Wszystkie kolekcje są generyczne (możliwość użycia dowolnego typu) public interface Collection<E>...

Przy deklarowaniu kolekcji należy wskazać typ. Gwarantuje to możliwość wykrycia błędu na poziomie kompilacji

Zrozumienie stosowania interfejsów kluczem do korzystania z CF

Collection

Set List Queue

SortedSet

Map

SortedMap

Page 19: Pakiety Javy,  Java

Wydział Matematyki i Informatyki UŁ, Katedra Analizy Nieliniowej © 2007

Interfejsy CF

Collection – grupa obiektów nazywanych elementami. Obiekty te mogą się duplikować, mogą, ale nie musza być posortowane.

Set – nie może zawierać takich samych dwóch elementów. Modeluje matematyczną abstrakcję zbioru.

SortedSet – zbiór uwzględniający porządek.

List – uporządkowany zbiór. Może zawierać dwa takie same elementy. Użytkownik może decydować, gdzie dany element zostanie wstawiony (na podstawie indeksu).

Queue – kolejka elementów. Może być FIFO lub LIFO. Elementy mogą być ustawiane z priorytetami.

Map – pozwala przypisywać kluczom określone wartości. Nie może zawierać duplikujących się kluczy.

SrotedMap – Map uwzględniający kolejność elementów zgodnie z malejącymi/rosnącymi wartościami klucza.

Page 20: Pakiety Javy,  Java

Wydział Matematyki i Informatyki UŁ, Katedra Analizy Nieliniowej © 2007

Collection

Ma zastosowanie w przypadku, gdy jest wymagana duża ogólność dotycząca sposobu uporządkowania oraz unikatowości elementów

Posiada konstruktor pozwalający na konwersje to szczególnej kolekcji. List<String> list = new

ArrayList<String>(c)

public interface Collection<E> extends Iterable<E> {

// podstawowe operacje int size(); boolean isEmpty(); boolean contains(Object element); boolean add(E element); //optional boolean remove(Object element); Iterator<E> iterator(); // masowe operacje boolean containsAll(Collection<?> c); boolean addAll(Collection<? extends E>

c); boolean removeAll(Collection<?> c); boolean retainAll(Collection<?> c); void clear(); // operacje na tablicach Object[] toArray(); <T> T[] toArray(T[]

a); }

Page 21: Pakiety Javy,  Java

Wydział Matematyki i Informatyki UŁ, Katedra Analizy Nieliniowej © 2007

Przechodzenie przez Collection

For-each Proste przejście przez całą

kolekcję for (Object o : collection)

System.out.println(o);

Iterators Możliwość przechodzenia przez

kolekcję i usuwania pożądanych elementów

Iterator zostaje pobrany po przez wywołanie metody kolekcji iterator

Umożliwia usunięcie aktualnego elementu w przeciwieństwie do for-each

public interface Iterator<E> { boolean hasNext(); E next(); void remove(); }

static void filter(Collection<?> c) { for (Iterator<?> it = c.iterator(); it.hasNext(); ) if (!cond(it.next())) it.remove(); }

Inte

rfej

sP

rzyk

ład

Polimorficzność kodu!!!

Page 22: Pakiety Javy,  Java

Wydział Matematyki i Informatyki UŁ, Katedra Analizy Nieliniowej © 2007

Set Zawiera metody odziedziczone z

Collection i dodaje, te które uniemożliwiają istnienie dwóch takich samych elementów.

Specyficzne zachowanie metod equals and hashCode

Przykładowe implementacje: HashSet – przechowuje elementy w

tablicy. Bardzo wydajne jednak nie gwarantuje kolejności iteracji.

TreeSet – przechowuje elementy w drzewie czerwono-czarnym. Kolejność na podstawie wartości. Wolniejsze niż HashSet.

LinkedHashSet – zaimplementowany jako tablica z listą.

Przykład: Collection<Type> noDups = new

HashSet<Type>(c);

public interface Set<E> extends Collection<E> {

// podstawowe operacje int size(); boolean isEmpty(); boolean contains(Object element); boolean add(E element); boolean remove(Object element); Iterator<E> iterator(); // operacje zbiorcze boolean containsAll(Collection<?> c); boolean addAll(Collection<? extends E>

c); boolean removeAll(Collection<?> c);

boolean retainAll(Collection<?> c);

void clear(); Object[] toArray(); <T> T[] toArray(T[] a);}

Page 23: Pakiety Javy,  Java

Wydział Matematyki i Informatyki UŁ, Katedra Analizy Nieliniowej © 2007

Podstawowe operacje na Set

import java.util.*;

public class FindDups { public static void main(String[] args) { Set<String> s = new HashSet<String>(); for (String a : args) if (!s.add(a)) System.out.println("Duplicate detected: " + a);

System.out.println(s.size() + " distinct words: " + s); }}

Prz

ykła

dUwagi!• używaj typu Set zamiast konkretnego typu jak np. HashSet. Pozwoli to na elastyczniejsze programowanie po przez wykorzystanie polimorfizmu•

Źródło: Java Sun Tutorial

Page 24: Pakiety Javy,  Java

Wydział Matematyki i Informatyki UŁ, Katedra Analizy Nieliniowej © 2007

List List uwzględnia następujące rodzaje

operacji na kolekcji: dostęp do wskazanego elementu (positional

access) Szukanie Iteracje Widok zakresu

Java dostarcza dwa rodzaje implementacji List:

ArrayList – stosunkowo wydajna LinkedList – lepsza wydajność przy

określonych warunkach. Porównanie do wektora:

Długość nazw metod umieszczających elementy w kolekcji: setElement(), a w List set()

Ta sama metoda set dla wstawiania elementów na określonej pozycji

Iteracja w List może odbywać się w dwóch kierunkach

public interface List<E> extends Collection<E> {

// dostęp do danej pozycji E get(int index); E set(int index, E element); boolean add(E element); void add(int index, E element); E remove(int index); boolean addAll(int index, Collection<? extends E> c); int indexOf(Object o); int lastIndexOf(Object o); ListIterator<E> listIterator(); ListIterator<E> listIterator(int

index); List<E> subList(int from, int

to);}

Page 25: Pakiety Javy,  Java

Wydział Matematyki i Informatyki UŁ, Katedra Analizy Nieliniowej © 2007

Podstawowe operacje na List

public static <E> void swap(List<E> a, int i, int j) { E tmp = a.get(i); a.set(i, a.get(j)); a.set(j, tmp);}

Prz

ykła

d

Uwagi! Powyższy przykład implementuje metodę zamiany miejscami dwóch wybranych elementów.

Zaimplementowane algorytmy:• sort – sortuje listę z wykorzystaniem algorytmu sortowania przez scalanie.• shuffle – losowa permutacja elementów• reverse – odwórcenie kolejności elementów w liście• rotate – rotacja elementów z określoną odległością• swap – zamiana dwóch elementów miejscami• replaceAll – zamiana wszystkich wystąpień określonej wartości przez inna wartość• fill - nadpisanie każdego elementu posiadającego określoną wartość• copy – utworzenie kopi listy• binarySearch – przeszukiwanie z algorytmem drzewa binarnego• indexOfSubList – indeks pierwszej pod listy, która jest równa danej liście• lastIndexOfSubList – zawraca indeks ostatniej podlisty, która jest równa danej liście

public static <E> void swap(List<E> a, int i, int j) { E tmp = a.get(i); a.set(i, a.get(j)); a.set(j, tmp);}

Prz

ykła

d

Uwagi! Powyższy przykład pokazuje sposób wykonania iteracji wstecz.

Page 26: Pakiety Javy,  Java

Wydział Matematyki i Informatyki UŁ, Katedra Analizy Nieliniowej © 2007

Queue Kolejka przechowuje elementy w kolejności

do przetwarzania. Dwa rodzaje kolejek:

zwraca określaną wartość, gdy operacja się nie powiedzie

rzuca wyjątkiem, gdy operacja się nie powiedzie

Element na początku będzie elementem usuwanym jako pierwszy (LIFO) lub jako ostatni (FIFO)

Kolejki mogą mieć określą liczbę elementów (bounded)

Pobieranie i usuwanie elementów poll Remove

Pobieranie elementu bez usuwania peek element

public interface Queue<E> extends Collection<E> {

E element(); boolean offer(E e); E peek(); E poll(); E remove();}

Page 27: Pakiety Javy,  Java

Wydział Matematyki i Informatyki UŁ, Katedra Analizy Nieliniowej © 2007

Queue - przykład

import java.util.*;

public class Countdown { public static void main(String[] args) throws InterruptedException { int time = Integer.parseInt(args[0]); Queue<Integer> queue = new LinkedList<Integer>(); for (int i = time; i >= 0; i--) queue.add(i); while (!queue.isEmpty()) { System.out.println(queue.remove()); Thread.sleep(1000); } }}

Prz

ykła

dPrzykład pokazujący sposób implementacji licznika odliczającego w dół.

Źródło: Java Sun Tutorial

Page 28: Pakiety Javy,  Java

Wydział Matematyki i Informatyki UŁ, Katedra Analizy Nieliniowej © 2007

Map Trzy rodzaje implementacji Map:

HashMap TreeMap LinkedHashMap

Dwa słowniki są równe jeśli dla odpowiednich kluczy wartości ich są sobie równe.

Utworzenie obiektu słownika: Map<String, Integer> m = new

HashMap<String, Integer>(); Dostępne widoki: po przez klucz, po przez

wartości i po przez wartości oraz klucz. Iteracja może odbywać się wyłączenie po

przez widoki: for (KeyType key : m.keySet())

System.out.println(key); for (Map.Entry<KeyType, ValType> e

: m.entrySet()) System.out.println(e.getKey() + ": " + e.getValue());

public interface Map<K,V> { // podstawowe operacje V put(K key, V value); V get(Object key); V remove(Object key); boolean containsKey(Object key); boolean containsValue(Object value); int size(); boolean isEmpty(); // operacje zbiorcze void putAll(Map<? extends K, ? extends

V> m); void clear(); // konwersja public Set<K> keySet(); public Collection<V> values(); public Set<Map.Entry<K,V>> entrySet(); // interfejs dla elemtów entrySet public interface Entry { K getKey(); V getValue(); V setValue(V value); }}

Page 29: Pakiety Javy,  Java

Wydział Matematyki i Informatyki UŁ, Katedra Analizy Nieliniowej © 2007

Aplety Aplety są to programy, dla których

środowiskiem wykonawczym jest przeglądarka

Aplet musi być podklasą java.applet.Applet lub wersja java.applet.JApplet, w przypadku używania kontrolek Swing.

Aplet w początkach Javy pozwalał na łatwą dystrybucję programów, bez konieczności przeprowadzenia procesu instalacji.

Aplety wykonywane są w restrykcyjnym bezpiecznym obszarze (sandbox).

W prowadzenie Java Web Start zmniejszyło znaczenie apletów.

Umieszczanie apletów na stronie HTML

<applet code=AppletWorld.class width="200" height="200"></applet>

Możliwość wykonania apletu poza przeglądarką:

appletviewer AppletWorld.html Aplet standardowo uruchamiany i

zarządzany jest przez plug-in do przeglądarki.

Page 30: Pakiety Javy,  Java

Wydział Matematyki i Informatyki UŁ, Katedra Analizy Nieliniowej © 2007

Konwersja aplikacji do apletu

Aplikacja jest programem tzw. stand-alone, gdzie punktem wejścia jest funkcja main.

Aplet nie posiada metody main. Posiada kilka metod, które są wołane na różnych etapach wykonywania apletu

Kroki do przekształcenia aplikacji w aplet Utworzenie podklasy

java.applet.Applet Nadpisanie metody Init,

która inicjalizuje wykonanie apletu, podobnie jak main

Implementacja metody Init powinna uwzględniać fakt, że może być wołana wielokrotnie.

Elementy GUI w Aplecie dodawane są bezpośrednio do niego.

Page 31: Pakiety Javy,  Java

Wydział Matematyki i Informatyki UŁ, Katedra Analizy Nieliniowej © 2007

Cykl życia apletu

Ładowanie apletu Utworzenie instancji podklasy Applet Inicjalizacja apletu Uruchomienie apletu

Zatrzymanie apletu Aplet zostaje zatrzymany w przypadku, gdy użytkownik

opuszcza stronę z apletem. Wówczas wołana jest funkcja stop. Przeładowanie apletu

Jest wyjście z apletu i ponowne załadowanie apletu przez przeglądarkę

Przy wyjściu z apletu wołana jest funkcja stop oraz następuje zwolnienie zasobów

Page 32: Pakiety Javy,  Java

Wydział Matematyki i Informatyki UŁ, Katedra Analizy Nieliniowej © 2007

Cykl życia apletu

Funkcje cyklu życia apletu init – inicjalizacja apletu. Powinien zawierać kod, który

normalnie umieszczany jest w konstruktorze, a umieszczane w nim metody powinny mieć krótki czas wykonywania.

start – jest wołana w celu uruchomienia apletu w przypadku gdy jest ładowany aplet bądź kiedy użytkownik powraca na stronę. W tej metodzie powinny zostać uruchomione wątki.

stop – zatrzymanie wykonywania apletu, w momencie gdy użytkownik opuszcza stronę bądź zamyka przeglądarkę.

destroy – zwolnienie zasobów, przygotowanie do wyłączenia apletu. Nie ma gwarancji, że metoda zostanie wykonana (!).

Nie każdy aplet wymaga nadpisania wszystkich metod

Page 33: Pakiety Javy,  Java

Wydział Matematyki i Informatyki UŁ, Katedra Analizy Nieliniowej © 2007

Rysowanie

Rysowanie realizowane jest przez metodę paint

Applet dziedziczy metodę paint z AWT z klasy Container

public void paint(Graphics g) {g.drawRect(0, 0,

getWidth() - 1, getHeight() -

1);

g.drawString(buffer.toString(), 5, 15);

}

Page 34: Pakiety Javy,  Java

Wydział Matematyki i Informatyki UŁ, Katedra Analizy Nieliniowej © 2007

Przechwytywanie zdarzeń

Aplet dziedziczy metody do obsługi zdarzeń z klasy ContainerprocessKeyEvent processMouseEventprocessEvent – przechwytuje każdy rodzaj

zdarzeń Przykład

Page 35: Pakiety Javy,  Java

Wydział Matematyki i Informatyki UŁ, Katedra Analizy Nieliniowej © 2007

Komponenty UI Przycisk (javax.swing.JButton) Checkboxes (javax.swing.JCheckBox) Pojedyncza linia tekstu

(javax.swing.JTextField) Obszar tekstu (javax.swing.JTextArea) Etykieta (javax.swing.JLabel) Lista (javax.swing.JList) Okno wyskakujące tzw. pop-up

(javax.swing.Popup) Scrollbars (javax.swing.JScrollBar) Sliders (javax.swing.JSlider) Płótno – przestrzeń do rysowania

(java.awt.Canvas) Menu

(javax.swing.JMenu,javax.swing.JMenuBar javax.swing.JMenuItem, javax.swing.JCheckBoxMenuItem)

Kontenery (javax.swing.JPanel, javax.swing.JWindow and its subclasses)

Metody do zarządzania komponentami: add remove setLayout

Page 36: Pakiety Javy,  Java

Wydział Matematyki i Informatyki UŁ, Katedra Analizy Nieliniowej © 2007

Bezpieczeństwo

Poziomy bezpieczeństwa dla danego apletu implementowane są niezależnie przez każdą przeglądarkę

Restrykcje nakładane przez aplety: Aplet nie może być ładować bibliotek, ani definiować natywnych metod Nie może standardowo czytać ani zapisywać plików na dysku

komputera, na którym jest wykonywany Nie może tworzyć połączenia poza komputerem, z które został pobrany Nie może uruchamiać programu, na komputerze, na którym jest

zainstalowany Nie może czytać właściwości systemu operacyjnego Wygląd okna apletu różni się od wyglądu okna aplikacji

Każda przeglądarka implementuje Security Manager, w którym można zmieniać moc ograniczeń. W przypadku, gdy SM uzna, że zostały naruszone ograniczenia, rzuci wyjątkiem SecurityException

Page 37: Pakiety Javy,  Java

Wydział Matematyki i Informatyki UŁ, Katedra Analizy Nieliniowej © 2007

Wyświetlanie informacji w statusie

Możliwość wyświetlania informacji w pasku statusu showStatus("MyApplet: Loading image file " + file);

W pasku stanu nie powinny być wyświetlane krytyczne informacje. Warto natomiast wyświetlić informację na temat statusu ładowanych obrazków, źródeł, etc…

Page 38: Pakiety Javy,  Java

Wydział Matematyki i Informatyki UŁ, Katedra Analizy Nieliniowej © 2007

Wyświetlanie dokumentów

Aplet oferuje możliwość wyświetlania sformatowanych dokumentów HTML

Do wyświetlania dokumentu służą poniższe metody wykonywane na AppletContext: public void showDocument(java.net.URL url) public void showDocument(java.net.URL url, String

targetWindow) Wartości dla parametru targetWindow: blank,

windowName, _self, _parent, _top

Page 39: Pakiety Javy,  Java

Wydział Matematyki i Informatyki UŁ, Katedra Analizy Nieliniowej © 2007

Odtwarzanie dzwięków

JApplet oraz AudoClip znajdujące się w pakiecie java.applet umożliwiają odtwarzanie dźwięków w formacie: 8 bit, µ-law, 8000 Hz, mono, Sun ".au"

Tworzenie muzyki zapisanej w formacie .au umożliwia audiotool

getAudioClip(URL), getAudioClip(URL, String) – zwraca obiekt, który implementuje interfejs AudioClip

play(URL), play(URL, String) – odgrywa zasób umieszony pod wskazanym linkiem.

Interfejs AudioClip definiuje następujące metody: Loop – rozpoczyna ciągłe

odtwarzanie dzwięku. Play – odgrywa dźwięk

jednokrotnie Stop – zatrzymuje odtwarzanie

pliku

Przykład: http://java.sun.com/docs/books/tutorial/deployment/applet/sound.html

Page 40: Pakiety Javy,  Java

Wydział Matematyki i Informatyki UŁ, Katedra Analizy Nieliniowej © 2007

Parametry