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

Slides:



Advertisements
Podobne prezentacje
Wstęp do strumieni danych
Advertisements

Mgr inż.Marcin Borkowski Podstawy Java Krótkie wprowadzenie dla studentów Wyższej Szkoły Ekologii i Zarządzania
Programowanie obiektowe
Standardowa biblioteka języka C++
Wzorce.
Generics w .NET 2.0 Łukasz Rzeszot.
PROGRAMOWANIE STRUKTURALNE
Elementarne struktury danych Piotr Prokopowicz
Nguyen Hung Son Uniwersytet Warszawski
Inżynieria oprogramowania Lecture XXX JavaTM – część IV: IO
Podstawy informatyki Wirtotechnologia – Wskaźniki i referencje
Programowanie sieciowe w Javie
Tablice.
Gniazda komunikacji sieciowej w języku Java
Język ANSI C Operacje we/wy
Czytanie, pisanie i rysowanie (czyli klasa I szkoły podstawowej)
Tworzenie stron w języku WML jest zbliżone do tworzenia stron w HTML. W obydwu przypadkach używa się do tego celu znaczników (tagów). Zadaniem znaczników.
Obsługa systemu wejścia-wyjścia
Semafory według normy POSIX
Techniki i języki programowania
PROJEKTOWANIE TABEL W PROGRAMIE: ACCESS
Podstawy programowania
Pakiety w Javie Łukasz Smyczyński (132834). Czym są pakiety? Klasy w Javie są grupowane w pewne zbiory zwane pakietami. Pakiety są więc pewnym podzbiorem.
Podstawy programowania II
Podstawy programowania II Wykład 2: Biblioteka stdio.h Zachodniopomorska Szkoła Biznesu.
Podstawy programowania II
Java 3 MPDI Programowanie obiektowe W7. import java.io.*; public class X { // kontrukcja throws – określenie jakie wyjątki może dana metoda // sygnalizować
W większości języków programowania biblioteki wejścia/wyjścia ukrywają szczegóły obsługi poszczególnych mediów pod abstrakcją strumienia (ang. stream).
Pliki Pojęcie i rodzaje plików Definicja typu plikowego Operacje wykonywane na plikach elementowych.
Prezentacja i szkolenie
Obsługa systemu wejścia-wyjścia
Programowanie obiektowe – zastosowanie języka Java SE
JAVA c.d.. Instrukcji wyboru SWITCH używamy, jeśli chcemy w zależności od wartości pewnego wyrażenia wykonać jeden z kilku fragmentów kodu. Jest to w.
Andrzej Repak Nr albumu
Inicjalizacja i sprzątanie
Systemy wejścia i wyjścia Michał Wrona. Co to jest system wejścia i wyjścia? Pobierania informacji ze źródeł danych, zdolnych przesyłać sekwencje bajtów,
Buforowanie D e f i n i c j a.
Podstawy informatyki 2013/2014
Programowanie obiektowe 2013/2014
ZWIĄZKI MIĘDZY KLASAMI KLASY ABSTRAKCYJNE OGRANICZENIA INTERFEJSY SZABLONY safa Michał Telus.
1 Strumienie Hierarchie klas strumieniowych, strumienie bajtowe - klasy InputStream i OutputStream i ich metody, klasa File, strumienie plikowe, strumienie.
Projektowanie stron WWW
BJUG_1: Typy Generyczne, Kolekcje
System plików.
Iga Lewandowska I EMII MU
Klasy kolekcji Tomasz Wilczyński. Kolekcja Schemat kolekcji Javy zawiera sześć interfejsów oraz kilka innych implementacji tych interfejsów do celów ogólnych.
Wykład 2 Programowanie obiektowe. Programowanie obiektowe wymaga dobrego zrozumienia działania funkcji definiowanych przez użytkownika, w ten sposób będziemy.
Seminarium Dyplomowe: Metodyka i Techniki Programowania Autor: Bartłomiej Fornal.
ASP.NET Dostęp do bazy danych z poziomu kodu Elżbieta Mrówka-Matejewska.
Zarządzanie stanem w aplikacjach ASP.NET Elżbieta Mrówka-Matejewska
Strumienie w języku Java Bartosz Walter InMoST Wielkopolska sieć współpracy w zakresie innowacyjnych metod wytwarzania oprogramowania Termin realizacji:
Wprowadzenie do języka Java Kolekcje w języku Java Bartosz Walter.
ST | 9/16/2015 | © Robert Bosch GmbH All rights reserved, also regarding any disposal, exploitation, reproduction, editing, distribution, as well.
Programowanie Obiektowe – Wykład 6
Strumienie, Wczytywanie, Zapisywanie, Operacje na plikach
Typy wyliczeniowe, kolekcje
Listy.
Wątki, programowanie współbieżne
(według:
Programowanie obiektowe II
Delegaty Delegat to obiekt „wiedzący”, jak wywołać metodę.
Programowanie Obiektowe – Wykład 2
Klasy wewnętrzne. Praktyka użycia interfejsów i klas wewnętrznych
Programowanie obiektowe – zastosowanie języka Java SE
PGO Interfejsy Michail Mokkas.
Programowanie w Javie 1 Dr Robert Kowalczyk
PGO Porównywanie obiektów
Excel Informacje różne.
Zapis prezentacji:

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

Wydział Matematyki i Informatyki UŁ, Katedra Analizy Nieliniowej © 2007 Plan wykładu Obsługa wejścia/wyjścia (I/O API) Kolekcje Aplety

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…

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:

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. InXannInXa Strumień wejściowy Strumień wyjściowy a int c = in.read() in out out.write(c)

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

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

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!

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$ f Znak początku formatowania Specyfikator formatu Indeks argumentu Flaga Liczba znaków Precyzja Rodzaj konwersji Przykład: System.out.format("%f, %1$ f %n", Math.PI); ,

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);

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)

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

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.

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.

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

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.

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.

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... 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 SetListQueue SortedSet Map SortedMap

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.

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 list = new ArrayList (c) public interface Collection extends Iterable { // podstawowe operacje int size(); boolean isEmpty(); boolean contains(Object element); boolean add(E element); //optional boolean remove(Object element); Iterator iterator(); // masowe operacje boolean containsAll(Collection c); boolean addAll(Collection c); boolean removeAll(Collection c); boolean retainAll(Collection c); void clear(); // operacje na tablicach Object[] toArray(); T[] toArray(T[] a); }

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 { boolean hasNext(); E next(); void remove(); } static void filter(Collection c) { for (Iterator it = c.iterator(); it.hasNext(); ) if (!cond(it.next())) it.remove(); } Interfejs Przykład Polimorficzność kodu!!!

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 noDups = new HashSet (c); public interface Set extends Collection { // podstawowe operacje int size(); boolean isEmpty(); boolean contains(Object element); boolean add(E element); boolean remove(Object element); Iterator iterator(); // operacje zbiorcze boolean containsAll(Collection c); boolean addAll(Collection c); boolean removeAll(Collection c); boolean retainAll(Collection c); void clear(); Object[] toArray(); T[] toArray(T[] a); }

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 s = new HashSet (); for (String a : args) if (!s.add(a)) System.out.println("Duplicate detected: " + a); System.out.println(s.size() + " distinct words: " + s); } Przykład Uwagi! 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

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 extends Collection { // 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 c); int indexOf(Object o); int lastIndexOf(Object o); ListIterator listIterator(); ListIterator listIterator(int index); List subList(int from, int to); }

Wydział Matematyki i Informatyki UŁ, Katedra Analizy Nieliniowej © 2007 Podstawowe operacje na List public static void swap(List a, int i, int j) { E tmp = a.get(i); a.set(i, a.get(j)); a.set(j, tmp); } Przykład 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 void swap(List a, int i, int j) { E tmp = a.get(i); a.set(i, a.get(j)); a.set(j, tmp); } Przykład Uwagi! Powyższy przykład pokazuje sposób wykonania iteracji wstecz.

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 extends Collection { E element(); boolean offer(E e); E peek(); E poll(); E remove(); }

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 queue = new LinkedList (); for (int i = time; i >= 0; i--) queue.add(i); while (!queue.isEmpty()) { System.out.println(queue.remove()); Thread.sleep(1000); } Przykład Przykład pokazujący sposób implementacji licznika odliczającego w dół. Źródło: Java Sun Tutorial

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 m = new HashMap (); 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 e : m.entrySet()) System.out.println(e.getKey() + ": " + e.getValue()); public interface Map { // 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 m); void clear(); // konwersja public Set keySet(); public Collection values(); public Set > entrySet(); // interfejs dla elemtów entrySet public interface Entry { K getKey(); V getValue(); V setValue(V value); }

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  Możliwość wykonania apletu poza przeglądarką:  appletviewer AppletWorld.html Aplet standardowo uruchamiany i zarządzany jest przez plug-in do przeglądarki.

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.

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

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

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.toStr ing(), 5, 15); }

Wydział Matematyki i Informatyki UŁ, Katedra Analizy Nieliniowej © 2007 Przechwytywanie zdarzeń Aplet dziedziczy metody do obsługi zdarzeń z klasy Container  processKeyEvent  processMouseEvent  processEvent – przechwytuje każdy rodzaj zdarzeń Przykład

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

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

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…

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

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:

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